{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/react/index.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/jquery/src/core.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/core-js/internals/function-uncurry-this.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./app/javascript/bundles/shared/utils.jsx","webpack:///./node_modules/jquery/src/var/isFunction.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./node_modules/core-js/internals/is-callable.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/jquery/src/var/document.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/jquery/src/selector.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/has-own-property.js","webpack:///./node_modules/reactstrap/es/Col.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/jquery/src/core/init.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/jquery/src/data/var/dataPriv.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/internals/function-call.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/to-string.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/jquery/src/core/nodeName.js","webpack:///./node_modules/jquery/src/var/rnothtmlwhite.js","webpack:///./node_modules/react-chartjs-2/es/index.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks.js","webpack:///./node_modules/reactstrap/es/Row.js","webpack:///./node_modules/jquery/src/var/support.js","webpack:///./node_modules/jquery/src/core/access.js","webpack:///./node_modules/jquery/src/ajax.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/modules/es.reflect.construct.js","webpack:///./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/length-of-array-like.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/reactstrap/es/utils.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/jquery/src/core/toType.js","webpack:///./node_modules/jquery/src/traversing.js","webpack:///./node_modules/jquery/src/deferred.js","webpack:///./node_modules/jquery/src/event.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/interopRequireDefault.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/classnames/index.js","webpack:///./node_modules/core-js/internals/to-integer-or-infinity.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/jquery/src/var/arr.js","webpack:///./node_modules/jquery/src/var/isWindow.js","webpack:///./node_modules/jquery/src/core/camelCase.js","webpack:///./node_modules/jquery/src/css.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_hide.js","webpack:///./app/javascript/bundles/shared/FundPickerHeader.jsx","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/core-js/internals/function-bind-native.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_fails.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-iobject.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./app/javascript/bundles/shared/globals.jsx","webpack:///./node_modules/core-js/internals/a-callable.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/jquery/src/var/slice.js","webpack:///./node_modules/jquery/src/var/class2type.js","webpack:///./node_modules/jquery/src/data/var/acceptData.js","webpack:///./node_modules/jquery/src/core/isAttached.js","webpack:///./node_modules/jquery/src/var/documentElement.js","webpack:///./node_modules/jquery/src/manipulation.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/object-is-prototype-of.js","webpack:///./node_modules/core-js/internals/get-method.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-object.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/jquery/src/jquery.js","webpack:///./node_modules/core-js/internals/function-name.js","webpack:///./node_modules/core-js/modules/es.function.name.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/to-property-key.js","webpack:///./node_modules/core-js/internals/is-symbol.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/jquery/src/var/indexOf.js","webpack:///./node_modules/jquery/src/var/hasOwn.js","webpack:///./node_modules/jquery/src/callbacks.js","webpack:///./node_modules/jquery/src/queue.js","webpack:///./node_modules/jquery/src/effects.js","webpack:///./node_modules/jquery/src/var/rcssNum.js","webpack:///./node_modules/jquery/src/css/var/cssExpand.js","webpack:///./node_modules/jquery/src/var/rcheckableType.js","webpack:///./node_modules/jquery/src/css/var/rnumnonpx.js","webpack:///./node_modules/jquery/src/css/support.js","webpack:///./node_modules/jquery/src/attributes/support.js","webpack:///./node_modules/jquery/src/core/stripAndCollapse.js","webpack:///./node_modules/jquery/src/event/trigger.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/is-constructor.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_meta.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-keys.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iterators.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_for-of.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_validate-collection.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/function-apply.js","webpack:///./node_modules/core-js/internals/try-to-string.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_uid.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_library.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-to-string-tag.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-length.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-pie.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/json/stringify.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./app/javascript/bundles/shared/FundPerformanceBars.jsx","webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./node_modules/react-tooltip/dist/index.es.js","webpack:///./app/javascript/bundles/shared/Portfolio.jsx","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/jquery/src/var/getProto.js","webpack:///./node_modules/jquery/src/var/flat.js","webpack:///./node_modules/jquery/src/var/push.js","webpack:///./node_modules/jquery/src/var/toString.js","webpack:///./node_modules/jquery/src/var/fnToString.js","webpack:///./node_modules/jquery/src/core/DOMEval.js","webpack:///./node_modules/jquery/src/traversing/var/rneedsContext.js","webpack:///./node_modules/jquery/src/core/var/rsingleTag.js","webpack:///./node_modules/jquery/src/traversing/findFilter.js","webpack:///./node_modules/jquery/src/core/ready.js","webpack:///./node_modules/jquery/src/data/Data.js","webpack:///./node_modules/jquery/src/data/var/dataUser.js","webpack:///./node_modules/jquery/src/var/pnum.js","webpack:///./node_modules/jquery/src/css/var/isHiddenWithinTree.js","webpack:///./node_modules/jquery/src/css/adjustCSS.js","webpack:///./node_modules/jquery/src/manipulation/var/rtagName.js","webpack:///./node_modules/jquery/src/manipulation/var/rscriptType.js","webpack:///./node_modules/jquery/src/manipulation/wrapMap.js","webpack:///./node_modules/jquery/src/manipulation/support.js","webpack:///./node_modules/jquery/src/manipulation/getAll.js","webpack:///./node_modules/jquery/src/manipulation/setGlobalEval.js","webpack:///./node_modules/jquery/src/manipulation/buildFragment.js","webpack:///./node_modules/jquery/src/css/var/getStyles.js","webpack:///./node_modules/jquery/src/css/curCSS.js","webpack:///./node_modules/jquery/src/css/addGetHookIf.js","webpack:///./node_modules/jquery/src/css/finalPropName.js","webpack:///./node_modules/jquery/src/attributes/prop.js","webpack:///./node_modules/jquery/src/ajax/var/nonce.js","webpack:///./node_modules/jquery/src/ajax/var/rquery.js","webpack:///./node_modules/jquery/src/core/parseXML.js","webpack:///./node_modules/jquery/src/serialize.js","webpack:///./node_modules/jquery/src/core/parseHTML.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/@emotion/sheet/dist/sheet.browser.esm.js","webpack:///./node_modules/@emotion/stylis/dist/stylis.browser.esm.js","webpack:///./node_modules/@emotion/cache/dist/cache.browser.esm.js","webpack:///./node_modules/@emotion/utils/dist/utils.browser.esm.js","webpack:///./node_modules/@emotion/hash/dist/hash.browser.esm.js","webpack:///./node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack:///./node_modules/@emotion/serialize/dist/serialize.browser.esm.js","webpack:///./node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/emotion-element-04d85134.browser.esm.js","webpack:///./node_modules/@emotion/css/dist/css.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/core.browser.esm.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/react-select/dist/index-75b02bac.browser.esm.js","webpack:///./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","webpack:///./node_modules/react-select/dist/Select-e1cf49ae.browser.esm.js","webpack:///./node_modules/react-select/dist/stateManager-2f2b6f5b.browser.esm.js","webpack:///./node_modules/react-select/dist/react-select.browser.esm.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/is-forced.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/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/array-slice.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_redefine.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_shared.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks-ext.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks-define.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iobject.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_cof.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_defined.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-integer.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_shared-key.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_enum-bug-keys.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gops.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-create.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.string.iterator.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-define.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/web.dom.iterable.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-methods.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_redefine-all.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_an-instance.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/object/keys.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/react-on-rails/node_package/lib/createReactElement.js","webpack:///./node_modules/chart.js/dist/Chart.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/core-js/internals/array-slice-simple.js","webpack:///./node_modules/react-input-autosize/lib/AutosizeInput.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/dom-token-list-prototype.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/core-js/modules/es.array.filter.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/internals/get-iterator-method.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/jquery/src/var/ObjectFunctionString.js","webpack:///./node_modules/jquery/src/selector-sizzle.js","webpack:///./node_modules/jquery/external/sizzle/dist/sizzle.js","webpack:///./node_modules/jquery/src/traversing/var/dir.js","webpack:///./node_modules/jquery/src/traversing/var/siblings.js","webpack:///./node_modules/jquery/src/deferred/exceptionHook.js","webpack:///./node_modules/jquery/src/core/readyException.js","webpack:///./node_modules/jquery/src/data.js","webpack:///./node_modules/jquery/src/queue/delay.js","webpack:///./node_modules/jquery/src/css/showHide.js","webpack:///./node_modules/jquery/src/css/var/swap.js","webpack:///./node_modules/jquery/src/css/var/rboxStyle.js","webpack:///./node_modules/jquery/src/effects/Tween.js","webpack:///./node_modules/jquery/src/attributes.js","webpack:///./node_modules/jquery/src/attributes/attr.js","webpack:///./node_modules/jquery/src/attributes/classes.js","webpack:///./node_modules/jquery/src/attributes/val.js","webpack:///./node_modules/jquery/src/event/focusin.js","webpack:///./node_modules/jquery/src/event/support.js","webpack:///./node_modules/jquery/src/manipulation/_evalUrl.js","webpack:///./node_modules/jquery/src/ajax/var/location.js","webpack:///./node_modules/jquery/src/wrap.js","webpack:///./node_modules/jquery/src/css/hiddenVisibleSelectors.js","webpack:///./node_modules/jquery/src/ajax/xhr.js","webpack:///./node_modules/jquery/src/ajax/script.js","webpack:///./node_modules/jquery/src/ajax/jsonp.js","webpack:///./node_modules/jquery/src/ajax/load.js","webpack:///./node_modules/jquery/src/core/support.js","webpack:///./node_modules/jquery/src/effects/animatedSelector.js","webpack:///./node_modules/jquery/src/offset.js","webpack:///./node_modules/jquery/src/dimensions.js","webpack:///./node_modules/jquery/src/deprecated.js","webpack:///./node_modules/jquery/src/deprecated/ajax-event-alias.js","webpack:///./node_modules/jquery/src/deprecated/event.js","webpack:///./node_modules/jquery/src/exports/amd.js","webpack:///./node_modules/jquery/src/exports/global.js","webpack:///./node_modules/core-js/internals/ordinary-to-primitive.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/internals/array-species-constructor.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-keys-internal.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-array.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopn.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopd.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-step.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-assign.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-call.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-array-iter.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/core.get-iterator-method.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_classof.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-collection-of.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-collection-from.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-sap.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/object/assign.js","webpack:///./node_modules/react-on-rails/node_package/lib/isCreateReactElementResultNonReactComponent.js","webpack:///./node_modules/react-on-rails/node_package/lib/handleError.js","webpack:///./node_modules/react-dom/server.browser.js","webpack:///./node_modules/react-on-rails/node_package/lib/ComponentRegistry.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/array/from.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/map.js","webpack:///./node_modules/react-on-rails/node_package/lib/buildConsoleReplay.js","webpack:///./node_modules/core-js/internals/a-constructor.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/_isStrictComparable.js","webpack:///./node_modules/lodash/_matchesStrictComparable.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.js","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/core-js/modules/es.object.values.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/react-on-rails/node_package/lib/ReactOnRails.js","webpack:///./app/javascript/bundles/Dashboard/components/Dashboard.jsx","webpack:///./node_modules/fast-deep-equal/index.js","webpack:///./node_modules/youtube-player/dist/index.js","webpack:///./app/javascript/bundles/shared/FundComparison.jsx","webpack:///./app/javascript/bundles/DataRoom/components/DataRoom.jsx","webpack:///./node_modules/react-youtube/dist/index.esm.js","webpack:///./app/javascript/bundles/AnnualMeeting/components/AnnualMeeting.jsx","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/core-js/modules/es.string.split.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/modules/es.array.from.js","webpack:///./node_modules/core-js/internals/iterator-close.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/core-js/internals/get-iterator.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/interopRequireWildcard.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/typeof.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/symbol.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/symbol/index.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.symbol.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_enum-keys.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-includes.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-absolute-index.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-dps.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_html.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopn-ext.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.symbol.observable.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/symbol/iterator.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/symbol/iterator.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_string-at.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-create.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gpo.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.array.iterator.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_add-to-unscopables.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/weak-map.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/weak-map.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.weak-map.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-species-create.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-species-constructor.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-weak.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.weak-map.of.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.weak-map.from.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/object/define-property.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/define-property.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.define-property.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptor.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/get-own-property-descriptor.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/assign.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.assign.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/json/stringify.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/keys.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.keys.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/react-on-rails/node_package/lib/clientStartup.js","webpack:///./node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/array/from.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.array.from.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_create-property.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-detect.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/map.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.map.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-strong.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-species.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.to-json.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-to-json.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-from-iterable.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.of.js","webpack:///./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.from.js","webpack:///./node_modules/react-on-rails/node_package/lib/generatorFunction.js","webpack:///./node_modules/react-on-rails/node_package/lib/StoreRegistry.js","webpack:///./node_modules/react-on-rails/node_package/lib/serverRenderReactComponent.js","webpack:///./node_modules/react-on-rails/node_package/lib/RenderUtils.js","webpack:///./node_modules/react-on-rails/node_package/lib/scriptSanitizedVal.js","webpack:///./node_modules/react-on-rails/node_package/lib/Authenticity.js","webpack:///./node_modules/react-on-rails/node_package/lib/context.js","webpack:///./node_modules/core-js/internals/function-bind.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/lodash/isEqual.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///./node_modules/lodash/keyBy.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_createAggregator.js","webpack:///./node_modules/lodash/_arrayAggregator.js","webpack:///./node_modules/lodash/_baseAggregator.js","webpack:///./node_modules/lodash/_baseEach.js","webpack:///./node_modules/lodash/_baseForOwn.js","webpack:///./node_modules/lodash/_baseFor.js","webpack:///./node_modules/lodash/_createBaseFor.js","webpack:///./node_modules/lodash/_createBaseEach.js","webpack:///./node_modules/lodash/_baseIteratee.js","webpack:///./node_modules/lodash/_baseMatches.js","webpack:///./node_modules/lodash/_baseIsMatch.js","webpack:///./node_modules/lodash/_getMatchData.js","webpack:///./node_modules/lodash/_baseMatchesProperty.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/hasIn.js","webpack:///./node_modules/lodash/_baseHasIn.js","webpack:///./node_modules/lodash/_hasPath.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/property.js","webpack:///./node_modules/lodash/_baseProperty.js","webpack:///./node_modules/lodash/_basePropertyDeep.js","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///./node_modules/core-js/internals/array-sort.js","webpack:///./node_modules/core-js/internals/engine-ff-version.js","webpack:///./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack:///./node_modules/core-js/internals/engine-webkit-version.js","webpack:///./node_modules/core-js/internals/regexp-unsupported-dot-all.js","webpack:///./node_modules/core-js/internals/regexp-unsupported-ncg.js","webpack:///./node_modules/core-js/internals/get-substitution.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/internals/path.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/core-js/internals/object-to-array.js","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///./node_modules/core-js/internals/create-html.js","webpack:///./node_modules/core-js/internals/string-html-forced.js","webpack:///./node_modules/tablesorter/dist/js/jquery.tablesorter.min.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/extends.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack:///./node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js","webpack:///./node_modules/sister/src/sister.js","webpack:///./node_modules/youtube-player/dist/loadYouTubeIframeApi.js","webpack:///./node_modules/load-script/index.js","webpack:///./node_modules/youtube-player/dist/YouTubePlayer.js","webpack:///./node_modules/youtube-player/node_modules/debug/src/browser.js","webpack:///./node_modules/youtube-player/node_modules/debug/src/debug.js","webpack:///./node_modules/youtube-player/node_modules/ms/index.js","webpack:///./node_modules/youtube-player/dist/functionNames.js","webpack:///./node_modules/youtube-player/dist/eventNames.js","webpack:///./node_modules/youtube-player/dist/FunctionStateMap.js","webpack:///./node_modules/youtube-player/dist/constants/PlayerStates.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/reactstrap/es/Container.js","webpack:///./node_modules/reactstrap/es/Button.js","webpack:///./node_modules/polylabel/polylabel.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./node_modules/core-js/internals/array-fill.js","webpack:///./node_modules/tinyqueue/index.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./app/javascript/bundles/DataRoom/components/Downloads.jsx","webpack:///./app/javascript/bundles/DataRoom/components/voyager/MeetingsPace.jsx","webpack:///./app/javascript/bundles/DataRoom/components/voyager/Stage.jsx","webpack:///./app/javascript/bundles/DataRoom/components/voyager/IndustryBreakdown.jsx","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Percent.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Type.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Math.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Array.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Disposer.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/AsyncPending.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/EventDispatcher.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Object.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Iterator.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/String.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Dictionary.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Cache.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Registry.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/List.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/SortedList.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Number.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Order.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Adapter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Colors.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Color.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Base.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Utils.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Browser.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Strings.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Ease.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/SpriteState.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/SpriteEvents.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/defs/SVGDefaults.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Options.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Animation.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/DOM.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/AMElement.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/Group.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/InterfaceColorSet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/PopupCSS.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionObjectEvents.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionKeyboardObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Inertia.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Keyboard.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Time.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Interaction.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Popup.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Modal.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Log.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/ResizeSensor.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/SVGContainer.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/Paper.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/Pattern.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/LinearGradient.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/RadialGradient.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Mouse.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/TextFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/lang/en.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Language.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/NumberFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/DateFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/DurationFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/export/ExportCSS.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/export/Export.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Validatable.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/export/ExportMenu.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Net.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Sprite.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Rectangle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Container.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/System.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/data/DataParser.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/data/CSVParser.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/data/JSONParser.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/data/DataLoader.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/data/DataSource.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Responsive.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/DataItem.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/Component.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Label.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/RoundedRectangle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Button.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Circle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Ellipse.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Image.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Line.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/PointedShape.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/PointedRectangle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/Path.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyline.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyarc.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Morpher.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Polygon.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyspline.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Slice.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Preloader.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/ResizeButton.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/CloseButton.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/SwitchButton.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Scrollbar.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Slider.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/TextLink.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/Filter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/DropShadowFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Tooltip.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Trapezoid.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Triangle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/Smoothing.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedCircle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedLine.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedRectangle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/ZoomOutButton.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/PlayButton.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/ColorModifier.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/GradientModifier.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/LinearGradientModifier.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Cone.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/LightenFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Rectangle3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Slice3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/RadialGradientModifier.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/LinePattern.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/CirclePattern.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/fills/RectPattern.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/ColorizeFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/DesaturateFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/BlurFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/rendering/filters/FocusFilter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/ColorSet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/PatternSet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Plugin.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/AmChartsLogo.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/utils/Instance.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/Legend.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/Axis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisLine.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisFill.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/Grid.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisLabel.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Tick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisTick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRenderer.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisBullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererY.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/ValueAxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/ValueAxis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererX.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/HeatLegend.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Grip.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/Chart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Bullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/Series.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/SerialChart.js","webpack:///./node_modules/d3-array/src/fsum.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/area.js","webpack:///./node_modules/d3-geo/src/bounds.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapImage.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapUtils.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapPolygon.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapPolygonSeries.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/equirectangular.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/length.js","webpack:///./node_modules/d3-geo/src/distance.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Projection.js","webpack:///./node_modules/d3-geo/src/interpolate.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/SmallMap.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/Geo.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLineObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapImageSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLine.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapLineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/Graticule.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-geo/src/graticule.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/GraticuleSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/MapChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSpline.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapArc.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapSplineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/MapArcSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/ZoomControl.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Mercator.js","webpack:///./node_modules/d3-geo-projection/src/math.js","webpack:///./node_modules/d3-geo-projection/src/miller.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Miller.js","webpack:///./node_modules/d3-geo-projection/src/eckert6.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Eckert6.js","webpack:///./node_modules/d3-geo/src/projection/azimuthal.js","webpack:///./node_modules/d3-geo/src/projection/orthographic.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Orthographic.js","webpack:///./node_modules/d3-geo/src/projection/stereographic.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Stereographic.js","webpack:///./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/conic.js","webpack:///./node_modules/d3-geo/src/projection/albers.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/Albers.js","webpack:///./node_modules/d3-geo/src/projection/albersUsa.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/AlbersUSA.js","webpack:///./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/NaturalEarth1.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/AzimuthalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/equalEarth.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/map/projections/EqualEarth.js","webpack:///./node_modules/@amcharts/amcharts4-geodata/usaLow.js","webpack:///./app/javascript/bundles/DataRoom/components/voyager/Map.jsx","webpack:///./app/javascript/bundles/DataRoom/components/voyager/Source.jsx","webpack:///./app/javascript/bundles/DataRoom/components/Voyager.jsx","webpack:///./app/javascript/packs/data-room-bundle.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","2","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","factory","_typeof","iterator","obj","constructor","hookCallback","some","hooks","apply","arguments","isArray","input","Array","toString","isObject","hasOwnProp","a","b","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","args","join","stack","keys","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","indexOf","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","x","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","objectTest","propertyTest","properties","isMomentInputObject","isCalendarSpec","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","getProto","_slice","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","DOMEval","toType","jQuery","selector","context","init","isArrayLike","jquery","num","pushStack","elems","merge","prevObject","each","elem","first","eq","last","even","grep","_elem","odd","end","splice","options","copy","copyIsArray","deep","isPlainObject","expando","random","isReady","noop","Ctor","isEmptyObject","globalEval","code","doc","nonce","makeArray","results","inArray","invert","callbackExpect","guid","it","check","globalThis","self","global","_extends","NATIVE_BIND","FunctionPrototype","uncurryThis","formatNumber","amount","digits","_","inFloat","reduceRight","v","padEnd","formatMoney","formatPercent","formatMultiplier","toMillion","numString","Number","millions","hexToRgb","hex","colorGradient","lightest","darkest","steps","idx","color1","color2","colorStepSize","stepR","stepG","stepB","colors","times","step","stepped","colorRGB","padStart","defaultLightest","defaultDarkest","nodeType","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","root","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","props","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","uid","pick","TypeError","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","_Symbol","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","reverse","DataView","Map","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","lt","lte","done","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","multiply","multiplier","multiplicand","minuend","subtrahend","after","castArray","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","position","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","radix","floating","reduce","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","argument","shared","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","getOwnPropertyDescriptor","f","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","_excluded","getColumnSizeClass","isXs","colWidth","colSize","Col","className","cssModule","widths","Tag","attributes","colClasses","columnProp","_classNames","colSizeInterfix","colClass","_colClass","classes","defaultProps","fails","rsingleTag","rootjQuery","rquickExpr","parseHTML","ownerDocument","attr","getElementById","ready","isCallable","DESCRIPTORS","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","O","P","Attributes","configurable","writable","Data","core","__e","requireObjectCoercible","classof","IndexedObject","TO_STRING_TAG_SUPPORT","unsafe","nodeName","_chart","Scatter","Bubble","Polar","Radar","HorizontalBar","Bar","Line","Pie","Doughnut","_react","_interopRequireDefault","_propTypes","_isEqual","_keyBy","default","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","ownKeys","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_classCallCheck","instance","Constructor","_defineProperties","_createClass","protoProps","staticProps","_inherits","subClass","superClass","_setPrototypeOf","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","NODE_ENV","env","ChartComponent","_React$Component","_super","_this","chartInstance","_this$props","getDatasetAtEvent","getElementAtEvent","getElementsAtEvent","onElementsClick","element","renderChart","redraw","destroyChart","updateChart","nextProps","_this$props2","plugins","legend","height","width","nextData","transformDataProp","shadowDataProp","datasets","saveCurrentDatasets","isDev","usingCustomKeyProvider","datasetKeyProvider","getLabelAsKey","multipleDatasets","shouldWarn","dataset","label","_this2","getCurrentDatasets","_this3","memoizeDataProps","helpers","configMerge","currentDatasets","nextDatasets","checkDatasets","currentDatasetsIndexed","point","pid","otherProps","_this$props3","node","destroy","_this$props4","ref","onClick","handleOnClick","Component","oneOfType","isRequired","arrayOf","bool","propName","componentName","controllers","display","_default","_React$Component2","_super2","_this4","_ref","_React$Component3","_super3","_this5","_ref2","_React$Component4","_super4","_this6","_ref3","_React$Component5","_super5","_this7","_ref4","_React$Component6","_super6","_this8","_ref5","_React$Component7","_super7","_this9","_ref6","_React$Component8","_super8","_this10","_ref7","_React$Component9","_super9","_this11","_ref8","_React$Component10","_super10","_this12","_ref9","store","USE_SYMBOL","Row","noGutters","form","access","chainable","emptyGet","raw","bulk","_key","rnothtmlwhite","location","rquery","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","prefilters","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","selected","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","href","active","lastModified","etag","url","protocol","processData","async","contentType","accepts","text","html","xml","json","contents","responseFields","converters","JSON","parse","parseXML","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","completed","fireGlobals","uncached","callbackContext","globalEventContext","deferred","Deferred","completeDeferred","Callbacks","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","readyState","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","always","status","abort","statusText","finalText","crossDomain","host","param","traditional","trigger","hasContent","ifModified","headers","beforeSend","complete","success","fail","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","prev","dataFilter","throws","state","ajaxConvert","resolveWith","rejectWith","fireWith","getJSON","getScript","__g","toPrimitive","dP","inspectSource","InternalStateModule","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","getInternalState","enforceInternalState","enforce","TEMPLATE","simple","$","getBuiltIn","aConstructor","nativeConstruct","ObjectPrototype","NEW_TARGET_BUG","F","ARGS_BUG","FORCED","Target","newTarget","$args","nativeGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","aFunction","namespace","ctx","hide","$export","own","IS_FORCED","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","expProto","C","virtual","R","U","globalCssModule","mapToCssModules","Element","shape","any","$$typeof","render","definePropertyModule","createPropertyDescriptor","_siblings","rneedsContext","rparentsprev","guaranteedUnique","children","sibling","cur","targets","contains","closest","selectors","parentNode","matchesSelector","uniqueSort","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","firstChild","contentDocument","content","childNodes","Identity","Thrower","ex","adoptValue","noValue","then","tuples","_state","_promise","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","handler","special","mightThrow","notifyWith","exceptionHook","stackTrace","getStackHook","list","stateString","disable","lock","fire","when","singleValue","resolveContexts","resolveValues","primary","updateFunc","documentElement","rcheckableType","acceptData","dataPriv","rtypenamespace","returnTrue","returnFalse","expectSync","activeElement","safeActiveElement","_on","one","origFn","off","leverageNative","el","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","needsContext","expr","delegateCount","setup","addEventListener","mappedTypes","origCount","hasData","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","sel","matchedHandlers","matchedSelectors","button","disabled","addProp","hook","originalEvent","load","noBubble","click","beforeunload","returnValue","removeEventListener","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","on","classNames","argType","inner","stringSlice","activeXDocument","definePropertiesModule","enumBugKeys","hiddenKeys","documentCreateElement","sharedKey","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","write","close","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","style","contentWindow","open","Properties","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","rcssNum","rnumnonpx","cssExpand","getStyles","swap","curCSS","adjustCSS","addGetHookIf","finalPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","css","getWidthOrHeight","boxSizingReliable","valueIsBorderBox","offsetProp","reliableTrDimensions","getClientRects","cssHooks","opacity","cssNumber","cssProps","origName","isCustomProp","clearCloneStyle","setProperty","getBoundingClientRect","scrollboxSizeBuggy","scrollboxSize","marginLeft","reliableMarginLeft","left","margin","padding","border","expand","expanded","createDesc","FundPickerHeader","funds","getSelectedState","onSelect","title","multiselect","Boolean","fallback","prevProps","oldSelected","newSelected","setState","fund","onMultiselect","foundAt","fund_name","React","$map","arrayMethodHasSpeciesSupport","callbackfn","bitmap","IObject","defined","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","headerFont","bodyFont","legendFont","chartColors","bar","pie","tryToString","NATIVE_WEAK_MAP","wmget","wmhas","wmset","metadata","facade","STATE","getterFor","TYPE","owner","isAttached","composed","getRootNode","rtagName","rscriptType","wrapMap","getAll","setGlobalEval","buildFragment","dataUser","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","getAttribute","restoreScript","removeAttribute","cloneCopyEvent","dest","udataOld","udataCur","fixInput","checked","domManip","ignored","fragment","scripts","hasScripts","iNoClone","valueIsFunction","checkClone","_evalUrl","noModule","textContent","_remove","keepData","nodes","cleanData","removeChild","htmlPrefilter","dataAndEvents","deepDataAndEvents","srcElements","destElements","cloneNode","inPage","noCloneChecked","isXMLDoc","detach","append","prepend","insertBefore","nextSibling","innerHTML","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","g","isPrototypeOf","aCallable","V","propertyIsEnumerableModule","toIndexedObject","getDescriptor","EXISTS","PROPER","FUNCTION_NAME_EXISTS","functionToString","nameRE","regExpExec","webpackPolyfill","IS_PURE","copyright","license","$Symbol","classofRaw","TO_STRING_TAG","wellKnownSymbol","CORRECT_ARGUMENTS","tryGet","callee","toIntegerOrInfinity","integer","lengthOfArrayLike","arraySpeciesCreate","createMethod","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","$this","specificCreate","boundFunction","filterReject","userAgent","Deno","versions","v8","internalObjectKeys","propertyKey","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","stopOnFalse","unique","locked","fired","dequeue","startLength","_queueHooks","stop","clearQueue","elements","isHiddenWithinTree","showHide","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","fx","interval","tick","createFxNow","genFx","includeWidth","attrs","createTween","animation","tween","Animation","tweeners","stopped","currentTime","startTime","percent","tweens","run","opts","specialEasing","easing","originalProperties","Tween","gotoEnd","propFilter","timer","anim","tweener","toggle","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","old","fadeTo","show","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","pnum","computeStyleTests","div","container","cssText","divStyle","getComputedStyle","pixelPositionVal","top","reliableMarginLeftVal","roundPixelMeasures","right","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","reliableTrDimensionsVal","backgroundClip","pixelBoxStyles","pixelPosition","table","tr","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","checkOn","optSelected","radioValue","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","defaultView","simulate","triggerHandler","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","called","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","meta","KEY","NEED","fastKey","getWeak","onFreeze","$keys","isArrayIter","getIterFn","BREAK","RETURN","ITERATOR","iterFn","_t","V8_VERSION","SPECIES","METHOD_NAME","foo","TAG","postfix","__webpack_amd_options__","arraySpeciesConstructor","originalArray","$propertyIsEnumerable","NASHORN_BUG","1","px","def","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","isKeyable","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","re","str","groups","sticky","charsAdded","strCopy","multiline","FundPerformanceBars","selectedFund","tvpi","top_5","uq","fundIData","fund_tvpi","dpi","fund_dpi","net_irr","fund_net_irr","benchmark_date","fundIIData","iii","fundChartData","chart","sm","backgroundColor","Globals","fund_vintage","getChartData","getFundData","Fragment","user","funds_invested","performanceData","formatter","md","lg","labels","tickLabeler","tooltips","callbacks","yLabel","layout","bottom","datalabels","align","color","font","weight","family","scales","xAxes","categoryPercentage","barPercentage","gridLines","ticks","fontSize","yAxes","beginAtZero","_inheritsLoose","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","emptyFunction_1","invariant_1","condition","argIndex","framesToPop","propIsEnumerable","test1","test2","fromCharCode","test3","shouldUseNative","ReactPropTypesSecret_1","propTypes","createCommonjsModule","shim","propFullName","secret","getShim","ReactPropTypes","instanceOf","objectOf","oneOf","exact","checkPropTypes","PropTypes","factoryWithThrowingShims","CONSTANT","HIDE","REBUILD","SHOW","dispatchGlobalEvent","eventName","CustomEvent","createEvent","initEvent","dispatchEvent","checkStatus","dataEventOff","isCapture","currentItem","hideTooltip","setUntargetItems","getTargetArray","showTooltip","targetArray","customListeners","listener","bodyListener","_options$respectEffec","respectEffect","_options$customEvent","customEvent","tip","forId","isCustomEvent","isTargetBelongsToTooltip","getEffect","proxy","makeProxy","findCustomEvents","dataAttribute","getBody","getElementsByTagName","getPosition","place","desiredPlace","effect","_getDimensions","getDimensions","tipWidth","tipHeight","_getDimensions2","targetWidth","targetHeight","_getCurrentOffset","getCurrentOffset","mouseX","mouseY","defaultOffset","getDefaultPosition","_calculateOffset","extraOffset_X","extraOffset_Y","windowWidth","innerWidth","windowHeight","innerHeight","_getParent","getParent","parentTop","parentLeft","getTipOffsetLeft","offset_X","getTipOffsetTop","offset_Y","outsideRight","getTipOffsetRight","outsideBottom","getTipOffsetBottom","outside","outsideLeft","outsideTop","inside","placesList","insideList","newPlace","isNewState","shouldUpdatePlace","newState","_class","_class2","_temp","_node$getBoundingClie","boundingClientRect","targetTop","targetLeft","_getDimensions3","disToMouse","currentParent","getPropertyValue","parentElement","getTipContent","getContent","parseAria","ariaObj","___$insertStyle","rebuild","globalRebuild","mount","unbindListener","bindListener","globalShow","globalHide","hasTarget","staticMethods","bindWindowEvents","resizeHide","onWindowResize","unbindWindowEvents","windowListener","ele","customBindListener","_this$state","eventOff","dataEvent","customListener","customUnbindListener","_this$state2","isBodyMode","bodyMode","bindBodyListener","possibleCustomEvents","possibleCustomEventsOff","body","customEvents","customEventsOff","unbindBodyListener","listeners","bodyModeListeners","_event","mouseover","mousemove","updateTooltip","mouseout","targetEventOff","_event2","_event3","ReactTooltip","extraClass","delayHide","delayShow","currentEvent","ariaProps","isEmptyTip","originTooltip","isMultiline","delayShowLoop","delayHideLoop","delayReshow","intervalUpdateContent","prevState","newAriaProps","_objectSpread2","methodArray","insecure","clearTimer","removeScrollListener","tooltipRef","msMatchesSelector","mozMatchesSelector","nodeList","escaped","querySelectorAll","globalEventOff","unbindBasicListener","isCaptureMode","bindRemovalTracker","unbindRemovalTracker","isGlobalCall","_this$props5","switchToSolid","FocusEvent","scrollHide","overridePosition","reshowDelay","delayUpdate","updateState","addScrollListener","setInterval","_getContent","updatePosition","afterShow","getTooltipContent","delayTime","eventTarget","mouseOnToolTip","isInvisible","isScroll","afterHide","isMyElement","resetState","isVisible","listenForTooltipExit","removeListenerForTooltipExit","hideTooltipOnScroll","clearInterval","_this$state3","tooltipClass","clickable","Wrapper","supportedWrappers","wrapperClassName","dangerouslySetInnerHTML","__html","watchWindow","MutationObserver","WebKitMutationObserver","MozMutationObserver","observer","mutations","m1","mutation","m2","removedNodes","observe","childList","subtree","removalTracker","disconnect","Portfolio","labelMaker","responsive","tooltipItem","datasetIndex","footerFontStyle","boxWidth","fontFamily","fontColor","dataIndex","investment","link","subtitle","first_comment","second_comment","companies","fund_size","carrying_value","called_capital","invested_capital","allocated_capital","median_check_size","median_ownership","board_presence","seed_entry","growth_seed_entry","series_a_entry","series_bplus_entry","borderWidth","chartOptions","seed_overall","growth_seed_overall","series_a_overall","series_bplus_overall","saas_percentage","consumer_percentage","infrastructure_percentage","investments","case_studies","investmentHighlight","coinvestors","investors","coInvestor","alt","slug","data-tip","currentitem","renderStats","renderBreakdown","renderCaseStudies","renderFollowOns","renderFundData","addToUnscopables","Iterators","defineIterator","setInternalState","iterated","kind","Arguments","UNSCOPABLES","ArrayPrototype","preservedScriptAttributes","winnow","qualifier","not","is","readyList","catch","readyException","readyWait","doScroll","valueParts","adjusted","scale","maxIterations","currentValue","initialInUnit","thead","col","td","tbody","tfoot","colgroup","caption","option","optgroup","createDocumentFragment","lastChild","refElements","rhtml","selection","attached","createTextNode","opener","rboxStyle","minWidth","maxWidth","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","final","capName","vendorPropName","rfocusable","rclickable","removeProp","propFix","nType","propHooks","tabIndex","tabindex","selectedIndex","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","encodeURIComponent","serialize","serializeArray","keepScripts","createHTMLDocument","implementation","parsed","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","BUGGY_SAFARI_ITERATORS","safeIsNaN","areInputsEqual","newInputs","lastInputs","resultFn","lastResult","calledOnce","newArgs","StyleSheet","isSpeedy","speedy","tags","ctr","_proto","rule","_tag","createStyleElement","sheet","styleSheets","ownerNode","sheetForTag","isImportRule","insertRule","cssRules","X","ia","Z","ja","ka","aa","ba","la","ma","na","ea","oa","H","q","A","D","z","K","I","J","N","ca","da","fa","Y","ha","Q","use","T","toSheet","block","Sheet","ruleSheet","line","column","stylisOptions","stylis","inserted","_insert","stylisPlugins","serialized","shouldCache","registered","getRegisteredStyles","registeredStyles","rawClassName","insertStyles","isStringTag","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","lineHeight","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","cursor","handleInterpolation","mergedProps","interpolation","couldBeSelectorInterpolation","__emotion_styles","interpolated","createStringFromObject","previousCursor","cached","labelPattern","stringMode","strings","identifierName","EmotionCacheContext","HTMLElement","ThemeContext","CacheProvider","Provider","Consumer","typePropName","createEmotionProps","newProps","Noop","theme","cssProp","possiblyStyleElement","Emotion","_len","createElementArgArray","classnames","cls","toAdd","ClassNames","cx","_len2","_key2","objectWithoutPropertiesLoose","_arrayLikeToArray","_unsupportedIterableToArray","minLen","_slicedToArray","_s","_e","_arr","_n","_toConsumableArray","iter","applyPrefixToName","isDocumentElement","getScrollTop","pageYOffset","scrollTop","scrollTo","easeOutCubic","animatedScrollTo","change","increment","animateScroll","isTouchCapable","getMenuPlacement","maxHeight","menuEl","minHeight","placement","shouldScroll","isFixedPosition","spacing","scrollParent","excludeStaticParent","overflowRx","docEl","getScrollParent","defaultState","offsetParent","scrollHeight","_menuEl$getBoundingCl","menuBottom","menuHeight","menuTop","containerTop","viewHeight","marginBottom","marginTop","viewSpaceAbove","viewSpaceBelow","scrollSpaceAbove","scrollSpaceBelow","scrollDown","scrollUp","_constrainedHeight","spaceAbove","controlHeight","_constrainedHeight2","coercePlacement","PortalPlacementContext","getPortalPlacement","_Component","MenuPlacer","maxMenuHeight","getPlacement","minMenuHeight","menuPlacement","menuPosition","menuShouldScrollIntoView","getUpdatedProps","placerProps","contextType","noticeCSS","_ref5$theme","baseUnit","neutral40","textAlign","noOptionsMessageCSS","loadingMessageCSS","innerProps","_Component2","MenuPortal","controlElement","isFixed","rect","getBoundingClientObj","scrollDistance","menuWrapper","keyList","hasProp","exportedEqual","equal","arrA","arrB","dateA","dateB","regexpA","regexpB","_templateObject","freeze","viewBox","focusable","baseCSS","isFocused","_ref3$theme","neutral60","neutral20","transition","neutral80","dropdownIndicatorCSS","clearIndicatorCSS","loadingDotAnimations","insertable","borderRadius","verticalAlign","isRtl","indicator","ownKeys$1","_objectSpread$1","ownKeys$2","_objectSpread$2","inputStyle","isHidden","background","outline","ownKeys$3","_objectSpread$3","components","isDisabled","removeProps","selectProps","Container","Label","Remove","emotionCx","cropWithEllipsis","ownKeys$4","_objectSpread$4","ClearIndicator","Control","innerRef","menuIsOpen","control","DropdownIndicator","DownChevron","CrossIcon","Group","Heading","headingProps","GroupHeading","cleanProps","IndicatorsContainer","indicators","IndicatorSeparator","Input","inputRef","LoadingIndicator","Menu","menu","MenuList","isMulti","LoadingMessage","NoOptionsMessage","MultiValue","MultiValueContainer","MultiValueLabel","MultiValueRemove","Option","isSelected","Placeholder","SelectContainer","SingleValue","ValueContainer","hasValue","diacritics","letters","anyDiacritic","diacriticToBase","diacritic","stripDiacritics","trimString","defaultStringify","DummyInput","in","onExited","appear","enter","exit","emotion","NodeResolver","STYLE_KEYS","LOCK_STYLES","boxSizing","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","navigator","maxTouchPoints","_createSuper$1","_isNativeReflectConstruct$1","canUseDOM","activeScrollLocks","ScrollLock","originalStyles","listenerOptions","capture","passive","accountForScrollbars","touchScrollTarget","targetStyle","currentPadding","paddingRight","clientWidth","adjustedPadding","_createSuper$2","_isNativeReflectConstruct$2","_ref$1","_PureComponent","ScrollBlock","getScrollTarget","blurSelectInput","isEnabled","_createSuper$3","_isNativeReflectConstruct$3","ScrollCaptor","isBottom","isTop","scrollTarget","touchStart","cancelScroll","handleEventDelta","onBottomArrive","onBottomLeave","onTopArrive","onTopLeave","_this$scrollTarget","clientHeight","isDeltaPositive","availableScroll","shouldCancelScroll","onWheel","deltaY","onTouchStart","onTouchMove","startListening","stopListening","ScrollCaptorSwitch","_ref$isEnabled","instructionsAriaMessage","isSearchable","tabSelectsValue","valueEventAriaMessage","isOptionDisabled","defaultStyles","clearIndicator","pointerEvents","_ref$theme","alignItems","neutral5","neutral0","borderColor","neutral10","borderStyle","boxShadow","flexWrap","justifyContent","neutral30","dropdownIndicator","paddingBottom","paddingTop","groupHeading","paddingLeft","textTransform","indicatorsContainer","alignSelf","indicatorSeparator","_ref4$theme","loadingIndicator","marginRight","loadingMessage","_ref2$theme","alignToControl","menuGutter","menuList","WebkitOverflowScrolling","menuPortal","multiValue","multiValueLabel","textOverflow","whiteSpace","multiValueRemove","dangerLight","danger","noOptionsMessage","primary25","userSelect","WebkitTapHighlightColor","primary50","neutral50","valueContainer","defaultTheme","primary75","neutral70","neutral90","_createSuper$4","_isNativeReflectConstruct$4","backspaceRemovesValue","blurInputOnSelect","captureMenuScroll","closeMenuOnSelect","closeMenuOnScroll","controlShouldRenderValue","escapeClearsValue","filterOption","rawInput","_ignoreCase$ignoreAcc","ignoreCase","ignoreAccents","stringify","matchFrom","candidate","formatGroupLabel","getOptionLabel","getOptionValue","isLoading","menuShouldBlockScroll","isMobileDevice","openMenuOnFocus","openMenuOnClick","pageSize","screenReaderStatus","instanceId","Select","_props","ariaLiveSelection","ariaLiveContext","focusedOption","focusedValue","inputIsHidden","menuOptions","selectValue","blockOptionHover","isComposing","clearFocusValueOnUpdate","commonProps","hasGroups","initialTouchX","initialTouchY","inputIsHiddenAfterUpdate","instancePrefix","openAfterFocus","scrollToFocusedOptionOnUpdate","userIsDragging","controlRef","getControlRef","focusedOptionRef","getFocusedOptionRef","menuListRef","getMenuListRef","getInputRef","cacheComponents","focusInput","blurInput","onChange","actionMeta","setValue","onInputChange","onMenuClose","selectOption","isOptionSelected","announceAriaLiveSelection","removeValue","removedValue","clearValue","popValue","lastSelectedValue","classNamePrefix","custom","getElementId","getActiveDescendentId","announceAriaLiveContext","onMenuMouseDown","onMenuMouseMove","onControlMouseDown","tagName","openMenu","onDropdownIndicatorMouseDown","onClearIndicatorMouseDown","onScroll","onCompositionStart","onCompositionEnd","touch","deltaX","onTouchEnd","onControlTouchEnd","onClearIndicatorTouchEnd","onDropdownIndicatorTouchEnd","handleInputChange","inputValue","onMenuOpen","onInputFocus","onFocus","onInputBlur","onBlur","onOptionHover","shouldHideSelectedOptions","_this$props6","hideSelectedOptions","onKeyDown","_this$props7","isClearable","focusValue","focusOption","buildMenuOptions","_props$inputValue","toOption","onHover","optionId","onMouseMove","onMouseOver","acc","itemIndex","child","groupId","_value","_selectValue","newSelectValue","lastProps","_menuOptions","startListeningComposition","startListeningToTouch","autoFocus","_this$props8","getNextFocusedValue","getNextFocusedOption","focusedEl","menuRect","focusedRect","overScroll","_this$props9","offsetTop","stopListeningComposition","stopListeningToTouch","_this$props10","_this$props11","openAtIndex","_this$props12","_this$state4","focusedIndex","nextFocus","_this$props13","_this$state5","getTheme","nextSelectValue","_this$state6","lastFocusedIndex","lastFocusedOption","_this$props14","formatOptionLabel","_this$state7","_this$props15","focusedValueMsg","valueFocusAriaMessage","focusedOptionMsg","optionFocusAriaMessage","resultsMsg","screenReaderMessage","resultsAriaMessage","countOptions","_this$props16","inputId","ariaAttributes","readOnly","_this$commonProps","autoCapitalize","autoComplete","autoCorrect","spellCheck","_this$components","_this$props17","_this$state8","isOptionFocused","onMouseDown","_this$props18","_this$props19","_this$components2","_this$components3","_this$state9","_this$props20","menuPortalTarget","onMenuScrollToTop","onMenuScrollToBottom","menuUI","hasOptions","headingId","_message","menuPlacementProps","menuElement","_ref10","_ref10$placerProps","_this$props21","delimiter","_value2","constructAriaLiveMessage","_this$components4","_this$props22","getCommonProps","renderLiveRegion","renderPlaceholderOrValue","renderInput","renderClearIndicator","renderLoadingIndicator","renderIndicatorSeparator","renderDropdownIndicator","renderMenu","renderFormField","defaultInputValue","defaultMenuIsOpen","SelectComponent","StateManager","select","callProp","getProp","replacement","feature","detection","normalize","POLYFILL","NATIVE","FunctionName","createIteratorConstructor","setToStringTag","IteratorsCore","PROPER_FUNCTION_NAME","returnThis","Iterable","NAME","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","aPossiblePrototype","CORRECT_SETTER","arrayMethodIsStrict","un$Join","ES3_STRINGS","STRICT_METHOD","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","pref","exoticToPrim","objectKeys","getOwnPropertyDescriptorModule","exceptions","LIBRARY","wksExt","cof","dPs","Empty","createDict","$at","$iterCreate","BUGGY","Base","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","DOMIterables","Collection","asc","$create","safe","forbiddenField","componentObj","railsContext","domNodeId","trace","shouldHydrate","component","generatorFunction","serverSide","log","moment","colorName","conversions","reverseKeywords","rgb","channels","hsl","hsv","hwb","cmyk","xyz","lab","lch","keyword","ansi16","ansi256","hcg","apple","gray","rdif","gdif","bdif","diffc","reversed","currentClosestKeyword","currentClosestDistance","distance","t1","t2","t3","smin","lmin","hi","sl","vmin","wh","bl","ratio","y2","x2","z2","atan2","PI","sqrt","hr","cos","sin","ansi","mult","rem","colorString","char","hue","chroma","mg","pure","deriveBFS","fromModel","graph","models","buildGraph","adjacents","adjacent","wrapConversion","toModel","conversion","routes","route","wrappedFn","wrapRounded","wrapRaw","colorConvert","colorName$1","getRgba","getHsla","getRgb","rgba","getHsl","hsla","getHwb","getAlpha","vals","hexString","hexDouble","rgbString","alpha","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","reverseNames","hexAlpha","Color","valid","setValues","red","lightness","whiteness","cyan","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","green","blue","saturation","saturationv","blackness","magenta","yellow","black","rgbNumber","luminosity","lum","chan","contrast","lum1","lum2","level","contrastRatio","dark","light","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","w1","w2","spaces","maxes","getValues","space","capped","chans","sname","svalues","chartjsColor","isValidKey","isNullOrUndef","_isFinite","_x","valueOrDefault","valueAtIndexOrDefault","loopable","arrayEquals","a0","a1","ilen","v0","v1","klen","_merger","tval","sval","_mergerIf","mergeIf","merger","dst","inherits","extensions","me","ChartElement","Surrogate","__super__","_deprecated","scope","helpers_core","callCallback","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","clearRect","roundedRect","radius","moveTo","arc","closePath","drawPoint","rotation","xOffset","yOffset","cornerRadius","rad","save","translate","drawImage","restore","beginPath","lineTo","SQRT1_2","stroke","_isPointInArea","area","clipArea","clip","unclipArea","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","helpers_options","toLineHeight","toPadding","_parseFont","globalDefaults","fontStyle","toFontString","inputs","info","cacheable","exports$2","_factorize","log10","exponent","LOG10E","powerOf10","helpers_math","helpers$1","canvas","math","rtl","getRtlAdapter","rectX","_x2","setWidth","xPlus","leftForLtr","itemWidth","_x3","_itemWidth","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","configuration","initialize","_type","pivot","_view","_model","_start","ease","actual","origin","c0","c1","tooltipPosition","core_element","exports$3","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","onComplete","core_animations","animations","addAnimation","lazy","animating","cancelAnimation","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","unlistenArrayEvents","stub","_chartjs","DatasetController","datasetElementType","dataElementType","_datasetElementOptions","_dataElementOptions","linkScales","addElements","getMeta","updateIndex","getDataset","scalesOpts","xAxisID","yAxisID","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","reset","_update","createMetaDataset","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","updateElement","buildOrUpdateElements","resyncElements","_configure","_cachedDataOpts","easingValue","draw","getStyle","_resolveDatasetElementOptions","_resolveDataElementOptions","hover","readKey","datasetOpts","elementOptions","removeHoverStyle","$previousStyle","setHoverStyle","getHoverColor","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","_removeDatasetHoverStyle","_setDatasetHoverStyle","hoverOptions","numMeta","numData","insertElements","onDataPush","onDataPop","onDataShift","onDataSplice","onDataUnshift","core_datasetController","TAU","clipArc","startAngle","endAngle","pixelMargin","angleMargin","outerRadius","innerRadius","drawBorder","vm","borderAlign","lineWidth","lineJoin","fullCircles","drawFullCircleBorders","element_arc","inLabelRange","hoverRadius","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","betweenAngles","withinRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","circumference","fillStyle","strokeStyle","valueOrDefault$1","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","previousItem","lineCap","setLineDash","lineDashOffset","valueOrDefault$2","defaultColor$1","xRange","hitRadius","pointStyle","element_point","inXRange","inYRange","chartArea","defaultColor$2","isVertical","getBarBounds","x1","y1","half","v2","parseBorderWidth","maxW","maxH","edge","borderSkipped","horizontal","parseBorderSkipped","_inRange","skipX","skipY","bounds","rectangle","element_rectangle","rects","boundingRects","fillRect","Arc","Point","Rectangle","deprecated","valueOrDefault$3","computeFitCategoryTraits","ruler","thickness","barThickness","stackCount","curr","pixels","_length","getTicks","getPixelForTick","computeMinSampleSize","offsetGridLines","controller_bar","scaleOpts","minBarLength","maxBarThickness","_ruler","getRuler","_xScale","_yScale","datasetLabel","_updateElementGeometry","vscale","getBasePixel","isHorizontal","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","center","_getStacks","metasets","_getMatchingVisibleMetas","stacks","getStackCount","getStackIndex","getPixelForValue","_startPixel","_endPixel","imeta","ivalue","stackLength","_parseValue","computeFlexCategoryTraits","stackIndex","indexOpts","valueOpts","valueOrDefault$4","resolve$1","dataPoint","xLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","_options","valueOrDefault$5","PI$1","DOUBLE_PI$1","HALF_PI$1","animateRotate","animateScale","legendCallback","listItem","outerHTML","generateLabels","controller","legendItem","cutoutPercentage","dataLabel","controller_doughnut","getRingIndex","ringIndex","isDatasetVisible","ratioX","ratioY","arcs","cutout","chartWeight","_getRingWeight","startX","startY","endX","endY","contains0","contains90","contains270","minX","minY","maxX","maxY","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","axis","horizontalBar","controller_horizontalBar","valueOrDefault$6","resolve$2","isPointInArea","scaleClip","halfBorderWidth","tickOpts","defaultClip","toClip","controller_line","showLine","_showLine","lineTension","_scale","updateBezierControlPoints","lineModel","calculatePointY","lineOptions","ds","dsMeta","stackedRightValue","rightValue","sumPos","sumNeg","getRightValue","_getSortedVisibleDatasetMetas","controlPoints","capControlPoint","pt","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","resolve$3","angleLines","circular","pointLabels","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","minSize","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$7","controller_radar","pointPosition","getPointPositionForValue","scatter","bubble","polarArea","radar","getRelativePosition","native","parseVisibleItems","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","indexMode","items","core_interaction","modes","single","nearest","intersectsItem","filterByPosition","where","sortByWeight","getCombinedMax","maxPadding","updateDims","params","newWidth","newHeight","getPadding","boxPadding","outerWidth","outerHeight","sizes","getMargins","marginForPositions","positions","fitBoxes","boxes","refit","changed","refitBoxes","fullWidth","placeBoxes","userPadding","core_layouts","addBox","_layers","removeBox","layoutItem","configure","layoutOptions","availableWidth","availableHeight","layoutBoxes","wrapBoxes","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","vBoxMaxWidth","hBoxMaxHeight","layouts","setLayoutDims","updatePos","handleMaxPadding","stylesheet","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerdown","pointermove","pointerup","pointerout","readUsedSize","eventListenerOptions","supports","addListener","removeListener","createDiv","addResizeListener","ticking","resizer","CSS_PREFIX","CSS_SIZE_MONITOR","shrink","_reset","scrollLeft","createResizer","maintainAspectRatio","renderProxy","animationName","reflow","classList","watchForRender","removeResizeListener","unwatchForRender","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","rootNode","containsStyles","injectCSS","acquireContext","getContext","renderHeight","renderWidth","displayWidth","aspectRatio","displayHeight","initCanvas","releaseContext","proxies","fromNativeEvent","addEvent","platform","core_plugins","_plugins","_cacheId","register","plugin","unregister","descriptors","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$8","getRtlHelper","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","positioners","average","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","getBaseModel","tooltipOpts","xAlign","yAlign","textDirection","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","legendColorBackground","getAlignedX","getBeforeAfterBodyLines","exports$4","_lastActive","getTitle","lines","getBeforeBody","bodyItems","bodyItem","getAfterBody","getFooter","indexScale","valueScale","existingModel","_active","alignment","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","getLabelForIndex","itemSort","dataPoints","tooltip","combinedBodyLength","titleLineCount","footerLineCount","widthPadding","maxLineWidth","measureText","fontString","getTooltipSize","paddingAndSize","radiusAndPadding","getBackgroundPoint","lf","rf","olf","orf","yf","midX","midY","determineAlignment","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","drawTitle","rtlHelper","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","bodyAlignForCalculation","rtlColorX","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","handleEvent","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$9","mergeScaleConfig","slen","mergeConfig","updateConfig","newOptions","ensureScalesHaveIDs","buildOrUpdateScales","nextAvailableScaleId","axesOpts","hasId","positionIsHorizontal","compare2Level","l1","l2","animationDuration","responsiveAnimationDuration","Chart","initConfig","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","initToolTip","silent","getMaximumWidth","getMaximumHeight","newSize","onResize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","updated","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","hasUpdated","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","_idx","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","layers","drawDatasets","_drawTooltip","_getSortedDatasetMetas","filterVisible","drawDataset","getElementsAtXAxis","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","core_controller","abstract","DateAdapter","Controller","scaleMerge","_create","override","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","tickString","logTick","numExponential","toExponential","numDecimal","logarithmic","remain","valueOrDefault$a","getPixelForGridLine","validIndex","lineValue","computeLabelSizes","tickFonts","tickFont","nestedLabel","widest","highest","heights","offsets","widestLabelSize","highestLabelSize","major","minor","gc","valueAt","gcLen","garbageCollect","getTickMarkLength","drawTicks","tickMarkLength","getScaleLabelHeight","parseFontOptions","nestedOpts","parseTickFontOptions","nonSkipped","ticksToFilter","filtered","majorStart","majorEnd","drawOnChartArea","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","Scale","zeroLineIndex","_ticks","_getLabels","xLabels","yLabels","beforeUpdate","margins","samplingEnabled","_labelSizes","_maxLabelLines","longestLabelWidth","longestTextCache","_gridLineItems","_labelItems","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","_convertTicksToLabels","numItems","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","_ticksToDraw","_autoSkip","afterUpdate","startPixel","endPixel","reversePixels","_reversePixels","beforeTickToLabelConversion","convertTicksToLabels","userCallback","afterTickToLabelConversion","labelSizes","maxLabelWidth","maxLabelHeight","tickWidth","maxLabelDiagonal","numTicks","labelRotation","_isVisible","_getLabelSizes","toDegrees","scaleLabelOpts","gridLineOpts","firstLabelSize","lastLabelSize","lineSpace","tickPadding","isRotated","angleRadians","toRadians","cosRotation","sinRotation","labelHeight","offsetLeft","offsetRight","labelWidth","handleMargins","isFullWidth","rawValue","_getScaleLabel","getValueForPixel","decimal","getDecimalForPixel","pixel","getBaseValue","avgMajorSpacing","axisLength","ticksLimit","maxTicksLimit","_tickSize","majorIndices","getMajorIndices","numMajorIndices","skipMajors","factors","factor","evenMajorSpacing","getEvenSpacing","calculateSpacing","optionTicks","rot","_computeGridLineItems","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","lineColor","ticksLength","tl","axisWidth","axisHalfWidth","alignPixel","_alignPixel","alignBorderValue","_computeLabelItems","lineCount","textOffset","isMirrored","fonts","_drawGrid","firstLineWidth","lastLineWidth","_drawLabels","_drawTitle","scaleLabelX","scaleLabelY","scaleLabelFontColor","scaleLabelFont","scaleLabelPadding","halfLineHeight","isLeft","tz","gz","_draw","core_scale","isNullOrUndef$1","scale_category","ticksOpts","minIndex","maxIndex","_startValue","_valueRange","valueCategory","_defaults","isNullOrUndef$2","scale_linearbase","handleTickRangeOptions","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","maxTicks","stepSize","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","generationOptions","dataRange","niceMin","niceMax","numSpaces","maxNumSpaces","rmin","rmax","niceNum","_decimalPlaces","almostWhole","almostEquals","generateTicks","ticksAsNumbers","_endValue","defaultConfig$1","stackData","neg","getOrCreateStack","relativePoints","updateMinMax","scale_linear","hasStacks","NEGATIVE_INFINITY","stackValues","_defaults$1","valueOrDefault$b","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","IDMatches","minNotZero","valuesPerStack","valuesForType","minVal","maxVal","exp","significand","tickVal","endExp","endSignificand","lastTick","generateTicks$1","tickValues","_getFirstTickValue","_valueOffset","_defaults$2","valueOrDefault$c","valueAtIndexOrDefault$1","resolve$4","defaultConfig$3","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getTickBackdropHeight","determineLimits","getTextAlignForAngle","adjustPointPositionForLabelHeight","textSize","numberOrZero","scale_radialLinear","drawingArea","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","longestText","getIndexAngle","hLimits","vLimits","setReductions","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","pointLabelOpts","tickBackdropHeight","outerDistance","pointLabelPosition","pointLabelFontColor","drawPointLabels","drawRadiusLine","tickFontColor","_defaults$3","deprecated$1","resolve$5","valueOrDefault$d","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","common","UNITS","sorter","getMin","getMax","interpolate$1","skey","tkey","i0","i1","lo","lookup","span","toTimestamp","adapter","_adapter","parser","determineUnitForAutoTicks","minUnit","capacity","ticksFromTimestamps","majorUnit","setMajorTicks","scale_time","adapters","displayFormats","timestamp","labelsAdded","timestamps","dataLabels","hash","arrayUnique","_table","_timestamps","timeOpts","getLabelCapacity","distribution","unitStepSize","generate","_unit","determineUnitForFormatting","_majorUnit","determineMajorUnit","buildLookupTable","_offsets","computeOffsets","tooltipFormat","datetime","tickFormatFunction","minorFormat","majorFormat","nestedTickOpts","getPixelForOffset","_getLabelSize","tickLabelWidth","tickFontSize","getLabelWidth","exampleTime","exampleLabel","_defaults$4","displayFormat","category","radialLinear","FORMATS","_id","_format","filler","propagate","mappers","boundary","decodeFill","computeBoundary","cy","computeCircularBoundary","scaleBottom","scaleTop","scaleZero","computeLinearBoundary","resolveTarget","visited","visible","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","loop","p0","d0","d1","loopOffset","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetsDraw","getRtlHelper$1","noop$1","valueOrDefault$e","getBoxWidth","labelOpts","usePointStyle","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","columnHeights","totalWidth","currentColWidth","currentColHeight","lineDefault","legendHeight","legendWidth","alignmentOffset","blockSize","itemHeight","textWidth","realX","SQRT2","drawLegendBox","halfFontSize","xLeft","yMiddle","_getLegendItemAt","hitBox","lh","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","titleX","titleY","fontOpts","createNewTitleBlockAndAttach","titleOpts","titleBlock","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","_getParentNode","constrainedNode","constrainedContainer","hasCNode","hasCContainer","infinity","filterCallback","findNextWhere","arrayToSearch","startIndex","findPreviousWhere","epsilon","rounded","radians","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","evt","srcElement","boundingRect","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","cw","ch","currentStyle","forceRatio","pixelRatio","pixelSize","arrayOfThings","thing","nestedThing","longest","numberOfLabelLines","numberOfLines","CanvasGradient","colorValue","CanvasPattern","core_helpers","_adapters","animationService","Interaction","scaleService","Ticks","Tooltip","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","toAbsoluteIndex","createProperty","fin","_react2","_propTypes2","sizerStyle","INPUT_PROPS_BLACKLIST","copyStyles","isIE","generateId","AutosizeInput","placeHolderSizerRef","placeHolderSizer","sizerRef","sizer","inputWidth","prevId","mounted","copyInputStyles","updateInputWidth","onAutosize","inputStyles","scrollWidth","newInputWidth","placeholderIsMinWidth","extraWidth","injectStyles","sizerValue","previousValue","wrapperStyle","inputProps","cleanInputProps","inputClassName","renderStyles","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","DOMTokenListPrototype","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","browser","argv","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","IS_INCLUDES","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ArrayIteratorMethods","ArrayValues","handlePrototype","CollectionPrototype","COLLECTION_NAME","isConstructor","un$Slice","HAS_SPECIES_SUPPORT","fixRegExpWellKnownSymbolLogic","advanceStringIndex","getSubstitution","REPLACE","stringIndexOf","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","functionalReplace","fullUnicode","unicode","accumulatedResult","nextSourcePosition","captures","namedCaptures","replacerArgs","regexpExec","RegExpPrototype","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","nativeMethod","arg2","forceStringMethod","uncurriedNativeMethod","$exec","inheritIfRequired","thisNumberValue","NativeNumber","NumberPrototype","arraySlice","toNumeric","primValue","third","maxCode","NumberWrapper","dummy","$filter","$toString","nativeObjectCreate","getOwnPropertyNamesExternal","wrappedWellKnownSymbolModule","defineWellKnownSymbol","$forEach","HIDDEN","SymbolPrototype","QObject","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","$getOwnPropertySymbols","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","$replacer","hint","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","desc","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","spreadable","Sizzle","pseudos","getText","isXML","escapeSelector","Expr","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","booleans","whitespace","identifier","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rsibling","runescape","funescape","nonHex","rcssescape","fcssescape","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","newSelector","newContext","getElementsByClassName","qsa","testContext","toSelector","qsaError","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","createPositionalPseudo","matchIndexes","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","webkitMatchesSelector","oMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","specified","duplicates","detectDuplicates","sortStable","nodeValue","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","what","_argument","forward","ofType","_context","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","unmatched","elemLang","hasFocus","_matchIndexes","radio","checkbox","file","password","image","submit","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_name","_sizzle","rerrorNames","rbrace","rmultiDash","dataAttr","removeData","_removeData","defaultDisplayMap","getDefaultDisplay","eased","swing","boolHook","removeAttr","attrHooks","attrNames","lowercaseName","stripAndCollapse","getClass","classesToArray","addClass","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","attaches","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","_callback","errorCallback","username","xhrFields","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","pageXOffset","parentOffset","Height","Width","defaultExtra","holdReady","hold","parseJSON","isNumeric","unbind","delegate","undelegate","fnOver","fnOut","_jQuery","_$","noGlobal","ENUMERABLE_NEXT","toIObject","arrayIndexOf","pIE","gOPD","getKeys","gOPS","$assign","aLen","isEnum","ArrayProto","getIteratorMethod","ARG","redefineAll","forOf","anInstance","IS_WEAK","ADDER","_c","IS_ADDER","getConstructor","setStrong","COLLECTION","of","mapping","cb","mapFn","reactElementOrRouterResult","renderedHtml","redirectLocation","_server","jsCode","lastLine","shouldBeGeneratorError","handleGeneratorFunctionIssue","fileName","lineNumber","reactElement","renderToString","_from","_keys","_map","_generatorFunction","registeredComponents","isGeneratorFunction","isRenderer","consoleReplay","_RenderUtils","wrapInScriptTags","_stringify","_scriptSanitizedVal","history","stringifiedList","symbolMap","3","4","5","6","7","8","9","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","monthsParseExact","relativeTimeWithMutation","mutationTable","softMutation","minWeekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","ll","lll","llll","plural","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eraYearOrdinalRegex","$0","$1","$2","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","relativeTimeWithSingular","translator","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","numberAsNoun","processHoursFunction","nominative","accusative","genitive","stackClear","stackDelete","stackGet","stackHas","stackSet","baseIsTypedArray","screen","deviceXDPI","logicalXDPI","utils","toTextLines","parseFont","bound","arrayDiff","updates","rasterize","orient","x0","y0","dx","dy","ln","region","compute","segment","r0","r1","clipped","vx","vy","aligned","ry","sx","sy","getScaleOrigin","drawTextLine","shadow","shadowBlur","stroked","strokeText","filled","_rects","_ctx","_el","_modelize","positioner","textShadowBlur","textShadowColor","textStrokeColor","textStrokeWidth","tw","tx","ty","frame","geometry","bgColor","drawFrame","strokeColor","textGeometry","shadowColor","drawText","helpers$2","rotated","projected","dp","toAxis","HitBox","_rotation","_rect","coordinates","vs","intersects","pr0","pr1","_points","axes","prepare","$layout","_box","_hidable","_visible","sa","sb","dirty","collider","s0","s1","collide","h0","h1","compute$1","helpers$3","helpers$4","EXPANDO_KEY","$context","$groups","_dirty","handleMoveEvents","leave","_labels","_hovered","dispatchMoveEvents","_actives","_listened","_datasets","afterDatasetUpdate","configs","afterDatasetsDraw","beforeEvent","handleClickEvents","actives","invalidate","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","un$Sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","comparefn","itemsLength","arrayLength","getSortCompare","$repeat","RangeError","un$ToFixed","c2","dataToString","fractionDigits","fractDigits","dotAll","$RegExp","MISSED_STICKY","CONVERT_TO_STRING","codeAt","IS_END","fillString","fillLen","stringFiller","intMaxLength","fillStr","$values","arrayLikeToArray","_interopRequireWildcard","_assign","_reactDom","ClientStartup","_handleError2","_ComponentRegistry","_StoreRegistry","_serverRenderReactComponent2","_buildConsoleReplay2","_createReactElement","_Authenticity","DEFAULT_OPTIONS","traceTurbolinks","ReactOnRails","registerStore","stores","getStore","throwIfMissing","setOptions","reactOnRailsPageLoaded","authenticityToken","authenticityHeaders","otherHeaders","getStoreGenerator","setStore","clearHydratedStores","hydrate","getComponent","serverRenderReactComponent","handleError","buildConsoleReplay","storeGenerators","resetOptions","clientStartup","fundEntities","Dashboard","current_user","commitment_summary","summary","activeCommitmentSummary","commitmentOptions","as_of","current_quarter","fundFromEntity","entityFromFund","entity","committed","last_capital_call_amount","last_capital_call_date","contributions","unfunded","fund_i_investor","fund_i_k1_present","fund_i_capital_account_statement_present","active_entity","both_funds_investor","fund_ii_investor","fund_ii_k1_present","fund_ii_capital_account_statement_present","fund_ii_capital_call_present","available_entities","ent","summaries","comm","fluid","entitySelector","fund_i","fund_ii","fundIIIData","fund_iii","activeFund","setActiveEntityFromFund","summaryForCommitment","fundIDocuments","fundIIDocuments","_typeof2","_sister2","_loadYouTubeIframeApi2","_YouTubePlayer2","youtubeIframeAPI","maybeElementId","strictState","emitter","proxyEvents","playerAPIReady","playVideo","YT","player","Player","playerApi","promisifyPlayer","datasetDefaults","pointRadius","FundComparison","chartData","records","record","fund_comparison_id","fund_id","selectedFunds","selectedComparison","fundId","val_1","val_2","val_3","pointBackgroundColor","bucket_1","bucket_2","bucket_3","value_type","picker","DataRoom","downloader_description","forDataRoom","fund_comparison","references","referenceType","company","affiliation","referenceFor","filterResetOptions","playerVars","autoplay","YouTube","onReady","onError","onStateChange","PlayerState","ENDED","onEnd","PLAYING","onPlay","PAUSED","onPause","onPlaybackRateChange","onPlaybackQualityChange","playerOpts","videoId","internalPlayer","onPlayerReady","onPlayerError","onPlayerStateChange","onPlayerPlaybackRateChange","onPlayerPlaybackQualityChange","createPlayer","getIframe","startSeconds","endSeconds","loadVideoById","cueVideoById","stopVideo","shouldUpdatePlayer","updatePlayer","shouldResetPlayer","resetPlayer","prevVars","vars","shouldUpdateVideo","updateVideo","containerClassName","refContainer","loading","UNSTARTED","BUFFERING","CUED","youtubeOptions","controls","fs","modestbranding","rel","AnnualMeeting","speaker","video","SAFE_CLOSING","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","speciesConstructor","callRegExpExec","$push","SPLIT","nativeSplit","internalSplit","lim","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","originalExec","MATCH","defaultConstructor","NewTargetPrototype","whitespaces","ltrim","regExpFlags","n$ToString","getFlags","NOT_GENERIC","INCORRECT_NAME","windowNames","getWindowNames","checkCorrectnessOfIteration","innerResult","innerError","usingIterator","iteratorMethod","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayWithoutHoles","iterableToArray","nonIterableSpread","_WeakMap","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","newObj","hasPropertyDescriptor","_Symbol$iterator","$fails","wks","wksDefine","enumKeys","gOPNExt","$GOPD","$GOPS","$DP","gOPN","$JSON","SymbolRegistry","OPSymbols","ObjectProto","USE_NATIVE","setSymbolDesc","protoDesc","_k","IS_OP","$set","es6Symbols","wellKnownSymbols","FAILS_ON_PRIMITIVES","TO_STRING","InternalMap","weak","validate","IS_IE11","uncaughtFrozenStore","ufstore","$WeakMap","createArrayMethod","$has","arrayFind","arrayFindIndex","UncaughtFrozenStore","findUncaughtFrozen","$Object","pa","qa","ra","extractEvents","eventTypes","ta","phasedRegistrationNames","ua","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ta","acceptsBooleans","Sa","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","Xa","Ra","setAttributeNS","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","Ya","Za","$a","ab","bb","db","eb","gb","hb","ib","jb","kb","lb","mb","nb","pb","displayName","_status","_result","qb","_debugOwner","_debugSource","return","rb","xb","_valueTracker","stopTracking","tb","yb","zb","defaultChecked","_wrapperState","initialChecked","Ab","initialValue","controlled","Bb","Cb","Db","Eb","Gb","Children","Fb","Hb","defaultSelected","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","MSApp","execUnsafeLocalFunction","Rb","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPersistent","release","mc","correspondingUseElement","oc","pc","qc","topLevelType","targetInst","ancestors","rc","eventSystemFlags","sc","containerInfo","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","delete","Mc","Nc","Pc","unstable_runWithPriority","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","unstable_UserBlockingPriority","ed","fd","gd","hd","Oc","jd","gridArea","lineClamp","kd","ld","nd","menuitem","br","embed","img","keygen","track","wbr","od","pd","qd","rd","sd","ud","vd","xd","HTMLIFrameElement","yd","contentEditable","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","ee","eventPool","fe","destructor","de","getPooled","cancelBubble","persist","isTrusted","ge","he","ie","je","ke","documentMode","le","ne","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","se","ve","te","ue","we","email","tel","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","Oe","Alt","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","fromElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","bf","cf","df","ef","ff","gf","hf","jf","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","elapsedTime","pseudoElement","mf","clipboardData","nf","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Apps","Scroll","MozPrintableKey","qf","16","17","18","19","27","32","33","34","35","36","37","38","39","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","sf","dataTransfer","tf","uf","vf","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","zf","Af","Bf","Cf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","hg","ig","jg","kg","ng","og","_currentValue","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","pending","vg","wg","suspenseConfig","payload","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","refs","Fg","Jg","isMounted","_reactInternalFiber","enqueueSetState","Gg","Hg","Ig","enqueueReplaceState","enqueueForceUpdate","Kg","shouldComponentUpdate","isPureReactComponent","Lg","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Og","Pg","_owner","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","elementType","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","dh","eh","fh","gh","memoizedProps","revealOrder","ih","responder","jh","kh","mh","nh","oh","ph","qh","rh","sh","uh","vh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","xh","yh","zh","Ah","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useCallback","useContext","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","ReactCurrentOwner","Zh","$h","ai","bi","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","gi","getDerivedStateFromError","pendingContext","ni","pi","qi","retryTime","ji","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","onclick","createElementNS","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","WeakSet","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","componentWillUnmount","Di","Mi","Ni","Oi","Pi","Qi","_reactRootContainer","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","wd","setStart","removeAllRanges","addRange","setEnd","vb","Uj","Vj","Wj","_ctor","ob","Xj","_calculateChangedBits","unstable_observedBits","Zj","isReactComponent","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hasAttribute","hk","jk","kk","unmount","Lj","lk","Events","findFiberByHostInstance","bundleType","rendererPackageName","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","forceUpdate","__self","__source","keyPrefix","IsSomeRendererActing","only","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue2","_threadCount","createFactory","createRef","forwardRef","isValidElement","memo","MessageChannel","unstable_forceFrameRate","performance","cancelAnimationFrame","port2","port1","onmessage","postMessage","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","__REACT_ON_RAILS_EVENT_HANDLERS_RAN_ONCE__","debugTurbolinks","renderInit","_isCreateReactElementResultNonReactComponent","findContext","_console","forEachComponent","initializeStore","storeGenerator","forEachStore","forEachByAttribute","domNodeIdForEl","delegateToRenderer","reactOnRailsPageUnloaded","Turbolinks","supported","Uint16Array","listing","pre","textarea","suppressContentEditableWarning","suppressHydrationWarning","domNamespace","childIndex","threadID","exhausted","currentSelectValue","previousWasTextNode","makeStaticMarkup","suspenseDepth","contextIndex","contextStack","contextValueStack","clearProviders","pushProvider","popProvider","read","fallbackFrame","renderDOM","renderToStaticMarkup","renderToNodeStream","renderToStaticNodeStream","arrayLike","mapfn","riter","skipClosing","strong","getEntry","$iterDefine","setSpecies","SIZE","registeredStoreGenerators","hydratedStores","storeKeys","htmlResult","hasErrors","routeError","redirectPath","pathname","_handleError","consoleReplayScript","_buildConsoleReplay","scriptId","scriptBody","querySelector","HTMLMetaElement","factories","Prototype","partArgs","ReactPropTypesSecret","emptyFunctionWithReset","resetWarningCache","bigint","webpackContext","req","webpackContextResolve","isMasked","hashClear","hashDelete","hashGet","hashHas","hashSet","setCacheAdd","setCacheHas","deleteCount","insertCount","actualDeleteCount","actualStart","argumentsLength","mergeSort","middle","insertionSort","llength","rlength","lindex","rindex","firefox","UA","webkit","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","tailPos","$padEnd","$padStart","callWithSafeIterationClosing","isArrayIteratorMethod","getIterator","IS_CONSTRUCTOR","iteratorClose","ENTRIES","$find","SKIPS_HOLES","TO_ENTRIES","createHTML","forcedStringHTMLMethod","quot","attribute","tablesorter","parsers","widgets","widthFixed","showProcessing","headerTemplate","onRenderTemplate","onRenderHeader","cancelSelection","sortMultiSortKey","sortResetKey","usNumberFormat","delayInit","serverSideSorting","resort","sortForce","sortList","sortAppend","sortInitialOrder","sortLocaleCompare","sortReset","sortRestart","emptyTo","stringTo","duplicateSpan","textExtraction","textAttribute","textSorter","numberSorter","initWidgets","widgetClass","widgetOptions","zebra","initialized","tableClass","cssAsc","cssDesc","cssNone","cssHeader","cssHeaderRow","cssProcessing","cssChildRow","cssInfoBlock","cssNoSort","cssIgnoreRow","cssIcon","cssIconNone","cssIconAsc","cssIconDesc","cssIconDisabled","pointerClick","pointerDown","pointerUp","selectorHeaders","selectorSort","selectorRemove","debug","headerList","empties","globalize","imgAttr","cssHasChild","childRow","header","headerRow","headerIn","icon","processing","sortAsc","sortDesc","sortNone","language","sortDisabled","nextAsc","nextDesc","nextNone","templateContent","templateIcon","templateName","nonWord","formElements","chunks","comma","digitNonUS","digitNegativeTest","digitNegativeReplace","digitTest","digitReplace","emptymin","emptymax","zero","none","keyCodes","instanceMethods","tHead","tBodies","hasInitialized","isProcessing","supportsDataObject","clickedIndex","$table","$headers","$tbodies","widgetInit","buildHeaders","fixColumnWidth","addWidgetFromClass","applyWidgetOptions","setupParsers","totalRows","validateOptions","buildCache","bindMethods","sortlist","applyWidget","sortOn","setHeadersCss","timerProcessing","benchmark","groupEnd","isApplyingWidgets","updateAll","updateHeaders","updateCell","addRows","isUpdating","appendCache","updateCache","applyWidgetId","refreshWidgets","removeWidget","getClosest","$headerIndexed","initSort","MozUserSelect","headerContent","sortVars","computeColumnIndex","getColumnData","getOrder","lockedOrder","sortedBy","role","updateHeader","addInstanceMethods","extractors","rows","getParserById","emptyToBottom","detectParserForColumn","extractor","colSpan","addParser","cells","getElementText","getParsedText","normalized","$row","colMax","getColumnText","$cell","tbodyIndex","rowIndex","isValueInArray","setColumnAriaLabel","setColumnSort","updateHeaderSortCount","commonUpdate","resortComplete","checkResort","appender","processTbody","pager","removeRows","multisort","getSortType","sortNatural","sortNaturalAsc","sortNaturalDesc","sortText","getTextValue","sortNumericAsc","sortNumericDesc","sortNumeric","addWidget","getWidgetById","hasWidget","timerReady","formatFloat","isDigit","rowSpan","cellIndex","checkColumnCount","clearTableBody","characterEquivalents","SS","replaceAccents","characterRegex","characterRegexArray","restoreHeaders","buildTable","logs","nondigit","currencyReplace","currencyTest","urlProtocolTest","urlProtocolReplace","dash","isoDate","percentTest","dateReplace","usLongDateTest1","usLongDateTest2","shortDateTest","shortDateReplace","shortDateXXY","shortDateYMD","convertFormat","timeTest","timeMatch","parserMetadataName","Sister","sister","_loadScript","_loadScript2","onYouTubeIframeAPIReady","stdOnEnd","ieOnEnd","setAttributes","_debug2","_functionNames2","_eventNames2","_FunctionStateMap2","YouTubePlayer","onEventName","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_loop2","functionName","stateInfo","playerState","getPlayerState","stateChangeRequired","acceptableStates","playerStateAfterChange","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","storage","DEBUG","formatArgs","useColors","lastC","removeItem","WebkitAppearance","firebug","exception","chrome","localStorage","localstorage","enable","prevTime","createDebug","coerce","logFn","selectColor","skips","long","fmtShort","_PlayerStates","_PlayerStates2","pauseVideo","seekTo","VIDEO_CUED","containerClass","Button","ariaLabel","btnOutlineColor","defaultAriaLabel","Queue","polylabel","polygon","cellSize","degeneratePoleOfInaccessibility","cellQueue","compareMax","Cell","bestCell","getCentroidCell","bboxCell","numProbes","cell","poleOfInaccessibility","minDistSq","ring","getSegDistSq","pointToPolygonDist","py","endPos","TinyQueue","defaultCompare","_down","_up","halfLength","best","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","genFun","ctor","mark","awrap","skipTempReset","rootRecord","rval","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Downloads","setDocs","documents","isOpen","iconType","stateKey","docs","file_url","subdocs","stateSubKey","whenToggled","renderToggle","docFolder","MeetingsPace","paceData","initialMeetings","last_30_days","engageMovements","engage_movements","toEngageConversion","to_engage_conversion_rate","evaluateMovements","evaluate_movements","toEvaluateConversion","to_evaluate_conversion_rate","termSheetMovements","term_sheet_movements","toTermSheetConversion","to_term_sheet_conversion_rate","toPortfolioConversion","to_portfolio_conversion_rate","newMeetingsData","new_meetings_chart_data","personalData","personal_data","engageData","engage_chart_data","evaluateData","evaluate_chart_data","termSheetData","term_sheet_chart_data","startups","movements","Stage","rawData","colorPalette","IndustryBreakdown","counts","ids","_extendStatics","__extends","__","__awaiter","_arguments","fulfilled","rejected","__generator","trys","ops","verb","op","__values","__read","ar","__spread","Percent","getType","castString","toBoolean","converted","toText","toNumberOrPercent","isPercent","getValueDefault","HALFPI","RADIANS","DEGREES","toNumberRange","fitToRange","minValue","maxValue","range1","range2","start1","start2","end1","end2","getDistance","point1","point2","getCubicCurveDistance","controlPointA","controlPointB","stepCount","prevPoint","getPointOnCubicCurve","getScale","startPoint1","startPoint2","initialDistance","currentDistance","getMidPoint","getAngle","diffX","diffY","normalizeAngle","getBBox","length_1","top_1","getCommonRectangle","rectangles","pointA","pointB","mt1","mt2","mt3","getCubicControlPointA","tensionX","tensionY","adjustTension","getCubicControlPointB","getArcRect","MAX_VALUE","bpoints","getArcPoint","fromAngle","toAngle","eachContinue","found","move","toIndex","removeIndex","insertIndex","getSortedIndex","keepIf","keep","Disposer","dispose","_disposed","_dispose","isDisposed","MultiDisposer","disposers","MutableValueDisposer","_disposer","disposer","CounterDisposer","_counter","pendingFrame","nextQueue","readQueue","writeQueue","idleQueue","raf","frameLoop","pendFrame","writeFrame","EventDispatcher","_killed","_disabled","_iterating","hasListeners","hasListenersByType","killed","enableType","disableType","_removeListener","_removeExistingListener","_eachListener","_shouldDispatch","dispatchImmediately","shouldClone","onAll","copyFrom","TargetedEventDispatcher","hasKey","eachOrdered","ord","keysOrdered","object1","object2","copyProperties","copyAllProperties","fromArray","indexed","ListIterator","createNewItems","_listCopy","getFirst","returnItem","getLast","DictionaryDisposer","dict","oldValue","Dictionary","_dictionary","getKey","insertKey","setKey","updateKey","removeKey","insertKeyIfEmpty","ifEmpty","_b","sortedIterator","DictionaryTemplate","_template","isTemplate","_storage","ttl","ownerStorage","cacheItem","touched","expired","registry","Registry","themes","loadedThemes","_uidCount","registeredClasses","_placeholders","invalidSprites","invalidDatas","invalidRawDatas","invalidDataItems","invalidDataRange","invalidPositions","invalidLayouts","baseSprites","baseSpritesByUid","getUniqueId","noBase","sprite","svg","paper","setCache","getCache","eventType","getPlaceholder","choice","addToInvalidComponents","baseId","removeFromInvalidComponents","addToInvalidSprites","removeFromInvalidSprites","addToInvalidPositions","removeFromInvalidPositions","addToInvalidLayouts","removeFromInvalidLayouts","IndexedIterable","_array","_end","backwards","ListGrouper","_getKey","_groups","_sort","index_1","go","push2","ListDisposer","disposeOnRemove","disposer_1","checkBounds","List","_values","hasIndex","getIndex","setIndex","_sortQuicksort","_sortPartition","value_a","value_b","moveValue","pushAll","setAll","newArray","ListTemplate","make","OrderedList","findClosestIndex","closestValue","closestDifference","closestIndex","SortedList","_ordering","OrderedListTemplate","SortedListTemplate","or","globalAdapter","GlobalAdapter","_callbackId","_callbacks","addAll","applyAll","Adapter","enableKey","disableKey","_hasListenersByType","namedColors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","grey","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellowgreen","hexToRgbWithAlpha","rgbaToRgb","pad2","rgb1","rgb2","getLightnessStep","hslToRgb","hue2rgb","rgbToHsl","_lightColor","_darkColor","brighten","darkColor","lightColor","cacheId","toColor","isColor","castColor","BaseObject","_disposers","_uid","_delayedMap","addDelayedMap","delayedMap","processDelayedMap","target_1","applyTheme","getCurrentThemes","_themes","clearCache","clonedFrom","clones","addDisposer","removeDispose","cloneId","newObject","_clones","_className","processConfig","raiseCriticalError","configKey","item_1","configValue","hasProperty","asIs","createClassInstance","processAdapters","processEvents","parent_1","asFunction","processListTemplate","processOrderedTemplate","templateValue","entryKey","entryValue","processDictionaryTemplate","processList","maybeColorOrPercent","processDictionary","isReserved","configOrder","processingErrors","errors","_processingErrors","getConfigEntryType","itemCount","extraCount","createEntryInstance","BaseObjectEvents","_eventDispatcher","stripHash","getBaseURI","vendor","baseURI","isNotEmpty","relativeToValue","full","escapeForRgex","splitTextByCharCount","maxChars","fullWords","fullWordFallback","currentIndex","wordLength","reverseString","truncateWithEllipsis","ellipsis","padString","cleanFormat","stripTags","plainText","anyToDate","setMilliseconds","getMilliseconds","anyToNumber","getYearDay","getWeek","getMonthWeek","firstWeek","currentWeek","get12Hours","getTimeZone","savings","wotz","toLocaleString","wtz","timeZoneName","fitNumber","fitNumberRelative","gap","svgPointToSprite","sprites","sprite_1","relativeX","pixelX","relativeY","pixelY","ey","pixelPaddingLeft","pixelPaddingTop","spritePointToSvg","spritePointToSprite","toSprite","spriteRectToSvg","documentPointToSvg","svgContainer","cssScale","bbox","documentPointToSprite","htmlContainer","spritePointToDocument","svgPointToDocument","urlRegexp","parseUrl","authority","port","query","serializeUrl","isRelativeUrl","joinUrl","parsedLeft","parsedRight","leftPath","rightPath","polyIn","polyOut","polyInOut","polyOut3","cubicIn","cubicOut","bounceOut","tau","SpriteState","transitionDuration","transitionEasing","propertyFields","_adapterO","ev","propValue","fieldName","dataItem","dataContext","spriteValue","SpriteEventDispatcher","_interactionEvents","_dispatchSpriteEvent","imev","_dispatchSpritePointEvent","spritePoint","svgPoint","getSvgPoint","_addInteractionObjectEvent","interactions","togglable","draggable","trackable","resizable","swipeable","wheelable","hoverable","SVGDefaults","verbose","commercialLicense","autoSetClassName","minPolylineStep","onlyShowOnViewport","autoDispose","licenses","suppressErrors","suppressWarnings","animationsEnabled","deferredDelay","disableHoverOnTransform","pixelPerfectPrecision","getProgressNumber","getProgressPercent","getProgressColor","getHybridProperty","rootStylesheet","AnimationDisposer","_pause","_delayTimeout","_time","_isFinished","pause","id_1","stopSameAnimations","system","requestFrame","_startTime","staticOptions","options_1","childObject","updateMethod","convertedFrom","applyStaticOptions","event_1","resume","setProgress","event_2","kill","isFinished","skipEvent","event_3","event_4","timeProgress","delayed","killed_1","oldOptions","SVGNS","XMLNS","XLINK","dom","getElement","currentClassName","setStyle","getShadowRoot","getRoot","fixPixelPerfect","left_1","StyleRule","getStylesheet","_rule","deleteRule","appendStylesheet","selectorText","_setVendorPrefixName","styleId","StyleClass","findFont","findFontSize","parent_2","isElementInViewport","viewportTarget","viewportRect","AMElement","_isDisposed","_y","_rotationY","_rotationX","removeNode","_transformString","transfromString","rotateString","svgbbox","attributeValue","getAttr","attrNS","getAttrNS","getAttributeNS","removeStyle","addStyle","setClass","removeChildNodes","elementName","addToBack","removeElement","hasChild","removeChildren","childNode","InterfaceColorSet","_purposes","primaryButton","primaryButtonHover","primaryButtonDown","primaryButtonActive","primaryButtonText","primaryButtonStroke","secondaryButton","secondaryButtonHover","secondaryButtonDown","secondaryButtonActive","secondaryButtonText","secondaryButtonStroke","grid","alternativeBackground","alternativeText","disabledBackground","positive","negative","getFor","purpose","setFor","InteractionObjectEventDispatcher","_domEvents","_addDOMEvent","callback_1","_dispatchKeyboardEvent","InteractionObject","eventDisposers","replacedStyles","_clickable","_contextMenuDisabled","_hoverable","_trackable","_draggable","_swipeable","_resizable","_wheelable","_inert","_isHover","isRealHover","_isHoverByTouch","_isDown","_isFocused","_isTouchProtected","_inertiaOptions","inertias","_hitOptions","_hoverOptions","_swipeOptions","_keyboardOptions","_mouseOptions","_cursorOptions","isHover","getInteraction","overObjects","isHoverByTouch","_overPointers","isDown","downObjects","_downPointers","focusedObject","unprepElement","prepElement","processClickable","processContextMenu","processHoverable","processTrackable","processDraggable","processSwipeable","processResizable","processWheelable","_focusable","_tabindex","processFocusable","_originalPosition","_originalScale","_originalAngle","inertiaOptions","hitOptions","swipeOptions","keyboardOptions","cursorOptions","contextMenuDisabled","applyCursorOverStyle","setEventDisposer","interaction","trackedObjects","transformedObjects","unlockWheel","InteractionKeyboardObject","io","directionX","directionY","keyboardEvent","_startedOn","processDragStart","getKeyboardOption","accelleration","accellerationDelay","accelleratedMs","accellerationFactor","handleTransformMove","processDragStop","Inertia","startPoint","handleMove","keyboard","Keyboard","getEventKey","eventKey","setTimezone","timezone","timeZone","_globalEventsAdded","_pointerEvents","_usePointerEventsOnly","_useTouchEventsOnly","_addHoverEvents","_passiveSupported","_delayedEvents","pointers","mouseOptions","pointercancel","pointerover","matchMedia","fullFF","wheel","onmousewheel","passiveSupported","addGlobalEvents","handleGlobalPointerDown","handleGlobalPointerMove","handleGlobalPointerUp","handleDocumentLeave","handleGlobalTouchStart","handleGlobalTouchMove","handleGlobalTouchEnd","handleGlobalKeyDown","handleGlobalKeyUp","processTouchable","handlePointerOut","handlePointerOver","processMovable","isGlobalElement","isTouchProtected","handleMouseWheel","lockWheel","handleFocus","handleBlur","handleFocusBlur","handleTouchDown","handlePointerDown","isPaused","getHitOption","ko","showTooltipOn","pointer","getPointer","getPointerPoint","addBreadCrumb","handleGlobalMove","processDelayed","preventTouchAction","cancelled","handleGlobalUp","resetPointer","handleDown","handleOver","handleOut","mod","getMouseOption","WheelEvent","handleWheel","maybePreventDefault","handleHit","lastHit","lastHitPointer","soft","hoversPaused","shouldCancelHovers","areTransformed","moved","cancelAllHovers","overPointers","handleTrack","force","hasDelayedOut","behavior","getHoverOption","keepUntil","delayedEvent","inert","stopInertia","downPointers","applyCursorDownStyle","processResizeStart","sorted","Node","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","handleUp","restoreCursorDownStyle","swiped","handleSwipe","handleInertia","processResizeStop","composedPath","lastEvent","swiping","handleTransform","skipCheck","handleMoveInertia","handleResizeInertia","inertia","getTrailPoint","getInertiaOption","lastUpEvent","pointer2","pointer1","originalPosition","singlePoint","nextPointer","pointer1Moved","dragStartEvents","pointer2Moved","handleTransformResize","pointerMoved","dragTarget","getDragPointer","dragStart","lastDownEvent","dragStop","getPointerId","isPointerTouch","lastPointer","Touch","PointerEvent","MouseEvent","swipeCanceled","lockDocument","unlockDocument","restoreAllStyles","lockElement","unlockElement","wheelLockEvent","isLocalElement","elementFromPoint","setTemporaryStyle","restoreStyle","getSwipeOption","overStyle","downStyle","setGlobalStyle","restoreGlobalStyle","tolerance","minTime","getShift","pointerExists","exists","logTouch","TouchEvent","except","Popup","_elements","_IOs","_content","_title","_classPrefix","_defaultStyles","_showCurtain","_align","_dynamicResize","_verticalAlign","_shift","_tempShift","_readerTitle","_closable","_cssLoaded","_fitTo","_sized","curtain","showCurtain","positionElement","releasePointers","forceResize","dynamicResize","images","_bbox","toStyle","setupDragging","createContentElement","getClassNames","wrapperClass","classPrefix","headerClass","titleClass","contentClass","insideClass","curtainClass","closeClass","disablePointers","loadDefaultCSS","createCurtainElement","applyEvents","applyReaderSettings","_left","_right","_top","_bottom","cs","abg","closable","_spriteInteractionsEnabled","interactionsEnabled","readerTitle","classPrefixRaw","Modal","messages","Native","_targets","_observer","ResizeObserver","addTarget","removeTarget","unobserve","Raf","lastTime_1","_timer","loop_1","ResizeSensor","_sensor","svgContainers","SVGContainer","htmlElement","ghost","autoResize","nonExportableSprites","_printing","initSensor","resizeSensor","paddingX","borderX","borderLeftWidth","borderRightWidth","paddingY","borderY","checkTransform","_container","_modal","openModal","closeModal","modal","_popups","popupTemplate","openPopup","popup","popups","closeAllPopups","_readerAlertElement","readerAlert","readerAlertElement","matrix","Paper","defs","addGroup","groupName","appendDef","foreignObject","supportsForeignObject","hasFeature","ghostPaper","getGhostPaper","ghostDiv","ghostSvgContainer","Pattern","patternUnits","interfaceColors","backgroundFill","backgroundOpacity","shapeRendering","patternElement","rotationX","rotationY","addElement","_paper","_animations","LinearGradient","_stops","gradientElement","gradientStop","addColor","stops","gradientUnits","RadialGradient","fy","_cx","_cy","_fx","_fy","MouseCursorStyle","grab","grabbing","horizontalResize","verticalResize","notAllowed","Language","en","_defaultLocale","defaultLocale","prompt","translation","translations","getTranslations","translateAny","setTranslationAny","translateEmpty","translateFunc","translateAll","TextFormatter","formatted","texts","cleanUp","wrapHtml","translateStyleShortcuts","wrapSvg","getSvgElement","styleSvgToHtml","getHtmlElement","quotedBlocks","noFormatting","chunks2","i2","chunk2","isImage","getTextFormatter","NumberFormatter","_negativeBase","_numberFormat","_outputFormat","_smallNumberThreshold","_forceLTR","_language","intlLocales","Intl","NumberFormat","parseFormat","decimals","applyFormat","forceLTR","part","partFormat","mods","modSpacing","thousands","a_1","applyPrefix","bytePrefixes","a_2","smallNumberThreshold","smallNumberPrefixes","bigNumberPrefixes","ol","toPrecision","zeros","ints","ip","intsr","decs","prefixes","newvalue","applied","invalidateSprite","_intlLocales","_bigNumberPrefixes","_smallNumberPrefixes","_bytePrefixes","outputFormat","DateFormatter","_dateFormat","_inputDateFormat","_utc","timezoneMinutes","_firstDayOfWeek","applyTimezone","DateTimeFormat","timezoneOffset","setMinutes","getMinutes","fullYear","getUTCHours","getUTCSeconds","getUTCMilliseconds","getHours","getSeconds","tzh","tzm","toUTCString","inputDateFormat","reg","parsedIndexes","resValues","indexAdjust","year3","year2","year1","getStringList","monthLong","monthShort","yearDay","weekdayLong","weekdayShort","am","hour12Base1","hourBase0","hour12Base0","hourBase1","millisecondDigits","resolveMonth","resolveShortMonth","isAm","ts","resolveTimezoneOffset","_timezoneOffset","_timezone","setHours","DurationFormatter","_baseUnit","_unitValues","_unitAliases","durationFormat","getFormat","dirs","absolute","tstamp","toTimeStamp","toTimeUnit","maxUnit","getValueUnit","durationFormats","currentUnit","_durationFormat","_durationFormats","pdfmakePromise","Validatable","_validateDisposer","ExportMenu","closeDelay","closeOnClick","_menuTag","_itemTag","_labelTag","_iconTag","_ignoreNextClose","_items","getMenuItemClass","createMenuElement","drawBranch","_currentSelection","moveSelection","branch","unsupported","ascendants","createItemElement","createIconElement","createSvgElement","createLabelElement","readerLabel","getReaderLabel","typeClickable","submenu_1","getSubMenu","selectBranch","setFocus","delayUnselectBranch","local_level","submenu","submenuElement","hideBranch","menuTag","itemTag","labelTag","iconTag","hasSubMenu","newPrefix","colorSet","alternative","setBlur","closeTimeout","ascendant","unselectBranch","event_5","event_6","newSelection","getPrevSibling","getNextSibling","getParentItem","getSiblings","showBranch","isBlob","blob_1","blob","reader","FileReader","readAsText","withCredentials","fontFamilySrcRegexp","getCssRules","loadStylesheet","e_2","rules","eachStylesheet","topUrl","CSSRule","IMPORT_RULE","eachStylesheets","doc_1","Export","_formatOptions","_extraSprites","_validateSprites","dataFieldsOrder","_dynamicDataFields","_removedObjects","_hiddenObjects","_objectsAlreadyHidden","_filePrefix","useWebFonts","useRetina","useSimplifiedExport","timeoutDelay","_exportRunning","_prevHasData","quality","imageFormat","addURL","addColumnNames","indent","useLocale","emptyAs","addBOM","printMethod","formatOptions","_menu","typeSupported","export","_disablePointers","_releasePointers","getFormatOptions","_hasData","print","_getFunction","getImage","getSVG","getPDF","getExcel","getCSV","getHTML","getPrint","handleCustom","showPreloader","hideTimeout","_timeoutTimeout","showTimeout","hideNonExportableSprites","restoreNonExportableSprites","hidePreloader","download","filePrefix","callbackTarget","getFontFamilies","DOMURL","blobs","getDOMURL","FONT_FACE_RULE","cssText_1","urls","fullUrl","url_1","e_3","webFontFilter","msSaveOrOpenBlob","createObjectURL","readAsDataURL","includeExtras","prehidden","uri","e_4","awaitValidSprites","simplifiedImageExport","getCanvas","addExtras","getContentType","disposeCanvas","getImageAdvanced","advanced","middleLeft_1","middleTop_1","middleWidth_1","middleHeight_1","extraRight_1","extraBottom_1","extras","newCanvas","ctx_1","right_1","bottom_1","extraSprites","extraSprite","extraCanvas","extraHeight","exporting","getCanvasAdvanced","crop","getDisposableCanvas","findBackgroundColor","pixelHeight","getPixelRatio","getAdjustedScale","imagesToDataURI","prepForeignObjects","normalizeSVG","serializeElement","Blob","loadNewImage","revokeObjectURL","restoreRemovedObjects","canvg","useCORS","ignoreDimensions","scaleWidth","scaleHeight","fromString","widthScale","heightScale","adjWidth","adjHeight","svgToDataURI","imageToDataURI","objects","temporarilyRemoveObject","keepTainted","btoa","crossOrigin","currentHref","Image","URL","webkitURL","encodeURI","dimParams","styleParams","fos","XMLSerializer","serializeToString","addFont","normal","vfs","bytes","bold","italics","bolditalics","pdfmake","defaultMargins","extraMargin","pageOrientation","pageMargins","defaultStyle","getPageSizeFit","addData","getPDFData","extraFonts","createPdf","getDataUrl","dataFields","dataFieldsOrder_1","dataRow","dataValue","convertToSpecialFormat","getPDFDataRow","headerRows","row","convertEmptyValue","newMargins","fitSize","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","XLSX","wbOptions","sheetName","dataFieldsOrder_2","xlsx","bookType","bookSST","normalizeExcelSheetName","SheetNames","Sheets","getExcelRow","aoa_to_sheet","workbook","csv","dataFieldsOrder_3","getCSVRow","forceQuotes","dataFieldsOrder_4","getHTMLRow","rowClass","useTag","cellClass","sourceData","_loop_1","newValue_1","keepOriginal","isDateField","isDurationField","durationFormatter","isNumberField","numberFormat","numberFormatter","useTimestamps","dateFormatter","link_1","decoded","blob_2","url_2","url_3","idoc","msBlobDownloadSupport","decodeURIComponent","msSaveBlob","atob","blobDownloadSupport","linkDownloadSupport","legacyIE","showModal","execCommand","downloadSupport","printViaCSS","printViaIframe","scroll","originalTitle","clipPath","MSStream","currentColor","_sprite","validateSprites","_dataFields","generateDataFields","handleDataUpdated","_dateFormatter","_dateFields","dateFields","_numberFormatter","_numberFields","numberFields","_durationFormatter","_durationFields","durationFields","_backgroundColor","preloader","hideModal","_canvg","vfs_fonts","pdfMake","_pdfmake","_xlsx","setFormatOptions","isHiding","visualProperties","Sprite","_bindings","_isTemplate","_isPath","_inited","_ready","_isHidden","isShowing","isStandaloneInstance","_isActive","_mask","_positionPrecision","_exporting","_exportable","positionInvalid","applyOnClones","_measuredWidthSelf","_measuredHeightSelf","maxLeftSelf","maxRightSelf","maxTopSelf","maxBottomSelf","_isDragged","_isResized","_internalDisabled","_updateDisabled","_internalDefaultsApplied","rollOutDelay","isBaseSprite","appeared","dragWhileResize","measureFailed","preventShow","cloneTooltip","setPropertyValue","_prevMeasuredWidth","_prevMeasuredHeight","_measuredWidth","_measuredHeight","_isMeasured","setClassName","_parent","applyInternalDefaults","__disabled","beforeDraw","afterDraw","invalidatePosition","validatePosition","removeSVGAttribute","sizeChanged","prevGroupTransform","transformString","nonScaling","globalScale","updateTooltipPosition","maskRectangle","_maskRectangle","_clipElement","e_1","isMeasured","horizontalCenter","verticalCenter","measureElement","e_1_1","applyFilters","showOnInit","applyMask","dispatchReady","reinit","handleGlobalScale","nonScalingStroke","updateFilterScale","removeFromInvalids","states","configField","virtualParent","exportable","_tooltip","_showSystemTooltip","showSystemTooltip","fillModifier","strokeModifier","_svgContainer","_interactionDisposer","_urlDisposer","_focusFilter","_filters","_alwaysShowDisposers","applyAccessibility","_topParent","topParent","oldParent","_tooltipContainer","tooltipContainer","_dataItem","handleAlwaysShowTooltip","handleAlwaysShow","oldDisposers","oldDisposer","_virtualParent","appendDefs","filterElement","fill_1","modify","stroke_1","_clipPath","setPaper","_htmlContainer","parent_3","_titleElement","_descriptionElement","setSVGAttributes","strokeLinecap","strokeLinejoin","setSVGAttribute","userClassName","uidAttr","updateClipPath","mask","createClipPath","width_1","height_1","filterUnits","appendPrimitives","removeClipPath","setElement","SVGPathElement","definedBBox","svgBBox","updateCenter","prevElementTransform","elementX","elementY","elementWidth","elementHeigth","pixelPaddingRight","pixelPaddingBottom","measuredWidth","measuredHeight","pixelPerfect","positionPrecision","createSVGMatrix","createSVGPoint","matrixTransform","pt3","pt4","tooltipText","tooltipHTML","sortChildren","getRelativeX","getRelativeY","getPixelX","getPixelY","isDragged","inited","hitTest","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","_states","processState","hiddenState","setVisibility","isActive","transitTo","applyCurrentState","allValues","newFilters_1","stateFilter","newFilter","currentFilter","isInTransition","isInteractive","setActive","setDisabled","deepInvalidate","_background","populateString","getTagValue","reg2","matches2","getTagValueFromObject","populateStringFrom","formatApplied","numberValue","dateValue","durationValue","formatParts","formatterType","hints","setDataItem","dataContext_1","dataContext_2","dataContext2_1","fieldValue","setColorProperty","setPercentProperty","length_2","bindToProperty","modifier","readerDescription","readerHidden","readerChecked","readerControls","live","readerLive","orientation","readerOrientation","valueNow","readerValueNow","valueText","readerValueText","labelledByIds","describedByIds","labelledBy","readerLabelledBy","describedBy","readerDescribedBy","titleElement","titleId","descriptionElement","descriptionId","_interaction","hasFocused","focusedElement","focusFilter","hoverOnFocus","applyCursorStyle","handleDragStart","handleDragMove","handleDragStop","_outTimeout","targetSprite","keepTargetHover","handleOutReal","originalAngle","originalScale","handleToggle","urlHandler","cursorOverStyle","_baseId","setBaseId","baseSprite","urlTarget","handleResize","svgMidPoint","parentPoint1","parentPoint2","spriteMidPoint","parentPoint","getExporting","_export","modalPrefix","invalidateLayout","parentWidth","pixelMarginLeft","pixelMarginRight","setMaxWidth","prevWidth","prevHeight","relativeWidth","previousWidth","previousHeight","parentHeight","valign","pixelMarginTop","pixelMarginBottom","setMaxHeight","relativeHeight","percentWidth","_pixelWidth","percentHeight","_relativeHeight","_pixelHeight","_relativeWidth","setPath","setFill","realFill","setStroke","realStroke","_rtl","showReal","_hideAnimation","_showHideDisposer","hideReal","currentSprite","hiddenState_1","getVisibility","toFront","toBack","tooltipDataItem","_tooltipDataItem","_tooltipColorSource","colorSource_1","tooltipColorSource_1","tooltipColorSource","getStrokeFromObject","getFillFromObject","autoTextColor","currentText","globalPoint","getTooltipX","getTooltipY","pointTooltipTo","instantly","showInViewport","pointTo","getCursorStyle","cursorDowntyle","setShowOnInit","_showOnInitDisposer","hideInitially","_systemUpdate","skippedSprites","_systemCheckIfValidate","_systemValidatePositions","_systemValidateLayouts","_childrenByLayout","_childrenDisposers","setStateOnSprites","layoutInvalid","_absoluteWidth","_absoluteHeight","_shouldBeReady","_tapToActivate","tapTimeout","handleChildAdded","handleChildRemoved","processChild","handleChildTransform","sortAndAdd","addChildren","fixed_1","relative_1","calculateRelativeSize","totalRelativeWidth","totalRelativeHeight","zindexed","sortArray","group_1","isCorrect","createChild","classType","disposeChildren","createBackground","processBackground","validateLayout","_availableWidth","_availableHeight","allValid","childMeasuredWidth","childMeasuredHeight","arrange","maxCellWidth","minCellWidth","contentLeft","contentRight","contentTop","contentBottom","nextX","nextY","columnWidth","rowHeight","childrenCopy","reverseOrder","fixedWidthGrid","maxColumns","getColumnWidth","childMarginLeft","childMarginRight","childMarginTop","childMarginBottom","childWidth","childHeight","childLeft","childRight","childTop","childBottom","nextColumnWidth","noneBBox","measuredContentWidth","measuredContentHeight","contentAlign","contentValign","dx_1","dy_1","mwa","mha","ddx","ddy","oldBBox","contentWidth","contentHeight","prevLeft","prevTop","prevBotttom","prevRight","dummyData","updateBackground","fitsToBounds","setStateOnChildren","_preloader","invalidateLabels","handleValidate","stateName","allReady_1","dataInvalid","setTapToActivate","handleTapToActivate","initTapTimeout","handleTapToActivateDeactivation","_tapToActivateTimeout","tapToActivate","moveHtmlContainer","newContainer","svgDiv","hasLicense","System","_isPaused","dummyCounter","_frameRequested","updateStepDuration","reportTime","invalidData","dataProvider","validateData","dataValidationProgress","validateRawData","validateDataItems","validateDataRange","skipRangeEvent","validateLayouts","validatePositions","hasSkipped","checkIfValidate2","triggerIdle","all0_1","softInvalidate","hardInvalidate","DataParser","maybeToNumber","maybeToDate","maybeToEmpty","separators","CSVParser","skipRows","skipEmpty","useColumnNames","isCSV","getDelimiterFromData","sep","lineColums","CSVToArray","numbers","parsableNumbers","parsableDates","cols","objPattern","arrData","arrMatches","strMatchedDelimiter","strMatchedValue","JSONParser","isJSON","dataLoader","DataLoader","requestOptions","getParserByType","getParserByData","DataSource","_requestOptions","_incremental","_incrementalParams","_keepCount","_updateCurrentData","lastLoad","disableCache","timestampUrl","_url","incremental","addUrlParams","incrementalParams","_parser","_reloadFrequency","_reloadDisposer","_reloadTimeout","reloadFrequency","Responsive","_rules","_appliedRules","_appliedTargets","_useDefault","_responsiveDisposers","_noStates","checkRules","_component","disposeResponsiveHandlers","applyRules","defaultRules","useDefault","isApplied","ruleId","allRules","rulesChanged","relevant","ind","defaultStateApplied","isApplied_1","getState","getDefaultState","setTargetState","stateId","tmpId","ResponsiveBreakpoints","widthXXS","XXS","widthXS","XS","widthS","widthM","widthL","widthXL","XL","widthXXL","XXL","heightXXS","heightXS","heightS","heightM","heightL","heightXL","heightXXL","isXXS","isXS","isS","isM","isL","isXL","isXXL","maybeXXS","maybeXS","maybeS","maybeM","maybeL","maybeXL","maybeXXL","DataItem","hasProperties","categories","locations","workingLocations","_hidden","_ignoreMinMax","hasChildren","_valueAnimations","_locationAnimations","noChangeValues","fields","animation_1","_hideDisposer","setWorkingValue","toValue","animation_2","getDuration","interpolationDuration","calculated","getWorkingValue","realName","workingValue","getActualWorkingValue","newDuration","handleDataItemValueChange","setCalculatedValue","handleDataItemCalculatedValueChange","interpolationEasing","handleInterpolationProgress","valueAnimation","handleDataItemWorkingValueChange","setLocation","setWorkingLocation","workingLocation","locationAnimation","handleDataItemWorkingLocationChange","setDate","event_7","handleDataItemPropertyChange","setCategory","event_8","event_9","_dataContext","addSprite","_dataSources","_parseDataFrom","_dataDisposers","_currentDataSetId","rangeChangeDuration","rangeChangeEasing","parsingStepDuration","rawDataInvalid","dataRangeInvalid","dataItemsInvalid","sequencedInterpolation","sequencedInterpolationDelay","_addAllDataItems","_usesData","minZoomCount","maxZoomCount","_dataItems","createDataItem","handleDataItemAdded","handleDataItemRemoved","invalidateData","dataUsers","handleDataUserAdded","maxZoomDeclination","invalidateDataItems","processDataItem","hasSomeValues_1","mainDataSet","rawDataItem","childDataItem","updateDataItem","validateDataElements","endIndex","dataItems","validateDataElement","removeCount","skipRaw","dataItem_1","invalidateDataUsers","invalidateDataRange","_prevStartIndex","_prevEndIndex","rangeChangeUpdate","appendDataItems","sliceData","_workingStartIndex","_workingEndIndex","invalidateRawData","disposeData","_startIndex","_endIndex","_dataSets","getDataItem","counter","this_1","dataUserDataItem","state_1","getDataSource","setDataSourceEvents","dataSourceDateFields","dataSourceNumberFields","loadData","populateDataSourceFields","targetList","keepCount","updateCurrentData","_responsive","declination","maxZoomFactor","_finalStart","_finalEnd","minZoomFactor","rangeChangeAnimation","zoomToIndexes","indexToPosition","dataSets","setDataSet","_updateDataItemIndexes","bindDataField","invalidateProcessedData","resetProcessedRange","_dataUsers","_exportData","_showOnInitDisposer2","isOversized","textValign","baseLineRatio","handleMaxSize","updateCurrentText","_currentFormat","_prevStatus","getLineBBox","lineInfo","oldW","oldH","textPathElement","resetBBox","currentHeight","currentFormat","ignoreFormatting","currentLineHeight","firstChunk","skipTextChunks","getLineInfo","getSVGLineElement","complex","lineText","avgCharWidth","excessChars","addEllipsis","node_1","node_2","elementText","lastNode","splitLines","lineText_1","restOfLine","addLineInfo","tempElement","lineInfo_1","maybeHideOversized","alignSVGText","hideUnused","fo","lineElement","getHTMLLineElement","setStyles","pathElement","hideOversized","wordWrap","selectable","initLineCache","_sourceDataItemEvents","classid","RoundedRectangle","minSide","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","maxcr","crtl","crtr","crbr","crbl","tooltipY","iconPosition","hoverState","downState","_icon","currentIcon","_label","Circle","pixelRadius","Ellipse","radiusY","widthRatio","heightRatio","positionToPoint","PointedRectangle","cr","stemX","stemY","pointerX","pointerY","bwh","pointerBaseWidth","lineT","lineR","lineB","lineL","d2","arcTR","arcBR","arcBL","arcTL","PointedShape","pointerLength","cubicCurveTo","arcTo","segments","pax","pay","ax","ay","arcToPoint","sweepFlag","largeArcFlag","xAxisRotation","rectToPath","ccw","Polyline","_distance","makePath","_realSegments","deltaAngle","totalDistance","positionA","positionB","midPoint","Polyarc","controlPointDistance","controlPointPosition","realPoints","distanceAB","cpDistance","controlPoint1","controlPoint2","i_1","Morpher","morphable","_bboxes","morphDuration","morphEasing","morphToSingle","scaleRatio","morphToPolygon","toPoints","currentPoints","sortPoints","_morphFromPointsReal","_morphToPointsReal","normalizePoints","pointsA","pointsB","surfaceA","holeA","bboxA","middleX","middleY","addPoints","splitAt","newDistance","partA","partB","bbox1","bbox2","bboxes","surface","morphToCircle","commonBBox","hole","fromPoints","realRadius","realAngle","pointOnCircle","hlen","mustHaveCount","addToSegmentCount","newPoints","point0","extraPoint","lastPoint","morphToRectangle","realWidth","realHeight","i_2","i_3","_morphProgress","currentArea","surfaceFrom","holeFrom","surfaceTo","holeTo","currentSurface","i_4","currentPoint","currentHole","i_5","morphBack","Polygon","_currentPoints","areaHole","areaArr","holeArr","pointsArr","areaAndHole","coords","pointsArr_1","_morpher","Polyspline","allPoints","closed_1","getClosestPointIndex","f0","f1","point_1","Slice","innerCornerRadius","crSin","innerRadiusY","cornerRadiusY","innerCornerRadiusY","crAngle","crAngleY","crInnerAngle","crInnerAngleY","middleAngle","mPoint","b0","b1","pixelInnerRadius","shiftRadius","updateGradient","gradient","ix","iy","Preloader","sliceContainer","backgroundSlice","progressSlice","_started","ResizeButton","CloseButton","bgc","downColor","bhs","bds","SwitchButton","leftLabel","circle","p100","switchButton","rightLabel","_leftLabel","_rightLabel","_switchButton","Scrollbar","_previousStart","_previousEnd","_prevStart","_prevEnd","_isBusy","_skipRangeEvents","updateWhileMoving","animationEasing","startGrip","endGrip","updateThumb","thumb","dispatchRangeChange","hideGrips","updateSize","updateExtremes","handleBgHit","makeBusy","thumbX","_thumbAnimation","thumbY","makeUnbusy","_thumb","_unbusyTimeout","stopAnimations","_zoomAnimation","makeUnbusyReal","_usingGrip","dispatchEvents","innerWidth_1","innerHeight_1","__start","__end","skipRangeEvents","fixRange","updateByOrientation","_startGrip","processGrip","_endGrip","handleGripDrag","cursorDownStyle","handleThumbPosition","handleDoubleClick","newStart","zoomAnimation","innerWidth_2","innerHeight_2","_hideGrips","_overDisposer","_outDisposer","Slider","TextLink","Filter","_nonScaling","filterPrimitives","filterPrimitive","updateScale","setSprite","DropShadowFilter","feGaussianBlur","feOffset","feFlood","feComposite","feMerge","_boundingRect","_pointTo","fitPointerToBounds","_verticalOrientation","fixDoc","dropShadow","pointerOrientation","handleVisibility","textX","textY","textW","textH","ignoreBounds","documentWidth","textHeight","bgWidth","bgX","bgHeight","bgY","boundX1","boundX2","boundY1","boundY2","delayedPointTo","_pointToDisposer","_animation","setBounds","oldRect","_boundingContainer","updateBounds","boundingContainer","Trapezoid","topSide","bottomSide","leftSide","rightSide","bs","ls","rs","mt","mr","ml","horizontalNeck","hn","verticalNeck","vn","Triangle","Tension","_tensionX","_tensionY","smooth","minStep","closed","wavedLine","waveLength","waveHeight","adjustWaveLength","waveLengthX","waveLengthY","halfWaveCount","sign_1","Monotone","_reversed","_closed","_curve","t0","slope2","slope3","MonotoneX","MonotoneY","Basis","x4","y4","pushCurve","pushPoint","WavedCircle","getPoints","circleLength","halfWaveHeight","halfWaveLength","angle1","angle2","WavedLine","WavedRectangle","waveLengthH","waveHeightH","waveLengthV","waveHeightV","wavedTop","wavedRight","wavedBottom","wavedLeft","setWavedSides","ZoomOutButton","PlayButton","playIcon","stopIcon","activeState","ColorModifier","GradientModifier","lightnesses","brightnesses","opacities","_lightnesses","_brightnesses","_opacities","brightness","LinearGradientModifier","Cone","topRadius","bodyFillModifier","radiusBase","LightenFilter","feColorMatrix","Rectangle3D","sideBack","sideBottom","sideLeft","sideRight","sideTop","sideFront","colorStr","filter2","filter3","filter4","filter5","Slice3D","sideA","sideB","edgeFill","edgePath","mangle","pp","RadialGradientModifier","LinePattern","_line","CirclePattern","_circle","RectPattern","rectHeight","rectWidth","ColorizeFilter","intensity","applyFilter","DesaturateFilter","BlurFilter","FocusFilter","feMorphology","feBlend","ColorSet","_list","_currentStep","_currentPass","baseColor","stepOptions","passOptions","minColors","minLightness","maxLightness","reuse","getReusableColor","tmpstep","hueStep","hues","applyStepOptions","pass","PatternSet","getLinePattern","getRectPattern","getCirclePattern","strokeDashArray","generatePatterns","AmChartsLogo","aColor","aGradient","aStroke","desaturateFilter","desaturateFilterHover","tmpContainer","svgDiv_1","container_1","listener_1","loopTimer_1","tooltipContainer_1","preloader_1","logo_1","logo","addToQueue","viewPortHandler","vpDisposer","queueHandler","removeFromQueue","nextSprite","LegendDataItem","childrenCreated","label_1","itemContainer","_valueLabel","valueLabel_1","valueLabels","_itemContainer","component_1","itemContainer_1","itemContainers","toggleDataItem","focusedItem","visibilitychanged","_marker","marker_1","markers","LegendSettings","createMarker","disabledColor","valueLabel","handleScrollbar","scrollbar","legendDataItem","tempMaxWidth","legendSettings","createLegendMarker","useDefaultMarker","updateLegendValue","itemValueText","maxValueLabelWidth","maxMarkerWidth","maxAdjustedLabelWidth","trueMaxWidth","scrollable","updateMasks","_mouseWheelDisposer","colorOrig","AxisBreak","_axis","breakSize","fillShape","_fillShape","startLine","_startLine","endLine","_endLine","addBreakSprite","renderer","gridContainer","createBreakSprites","breakTemplate","axisBreaks","invalidateSeries","startPosition","endPosition","updateBreakElement","AxisItemLocation","AxisDataItem","_grid","grid_1","isRange","axisRanges","_tick","component_2","tick_1","component_3","_axisFill","component_4","axisFill_1","axisFill","axisFills","_text","_contents","createFill","_axisBreak","axisBreak","appendChildren","appendDataItem","bullet","minPosition","maxPosition","_bullet","Axis","_gridCount","_series","_axisItemCount","hideTooltipWhileZooming","toggleZoomOutButton","zoomable","_dataItemsIterator","series","fillRule","ghostLabel","updateLabelElement","updateGridCount","gridCount","minGridDistance","axisFullLength","updateAxisLine","updateBaseGridElement","_prevLength","initRenderer","above","bulletsContainer","updateGridContainer","validateAxisRanges","axisRange","validateBreaks","_axisBreaks","processBreak","breakContainer","registerSeries","createMask","_renderer","ghostLabel_1","positionToAngle","pointToPosition","positionToCoordinate","getAnyRangePath","getPositionRangePath","anyToPosition","anyToPoint","_tooltipPosition","showTooltipAtPosition","toAxisPosition","tooltipLocation","getCellStartPosition","getCellEndPosition","tooltipLocation2","endPoint","currentItemStartPoint","currentItemEndPoint","fullWidthTooltip","getTooltipText","cursorTooltipEnabled","inversed","toGlobalPosition","boundingRectangle","roundPosition","axisLocation","_axisRanges","processAxisRange","createAxisBreak","adjustedStartValue","processSeriesDataItems","processSeriesDataItem","axisLetter","postProcessSeriesDataItems","postProcessSeriesDataItem","updateAxisBySeries","hideUnusedDataItems","dataItemsIterator","getSeriesDataItem","findNearest","stackKey","getX","getPositionX","getY","getPositionY","dataChangeUpdate","seriesDataChangeUpdate","adjustDifference","startMax","endMin","startValue","endValue","adjustedEndValue","isInBreak","fixAxisBreaks","firstAxisBreak","previousEndValue_1","getPositionLabel","createSeriesRange","resetIterators","AxisLine","AxisFill","fillPath","Grid","AxisLabel","Tick","AxisTick","AxisRenderer","cellStartLocation","cellEndLocation","minLabelPosition","maxLabelPosition","invalidateAxisItems","baseGrid","setAxis","processRenderer","positionItem","position2","getHeight","getWidth","coordinateToPosition","coordinate","coordinate2","updateGridElement","updateTickElement","updateBullet","updateFillElement","toggleVisibility","updatedStart","updatedEnd","_axisFills","createGrid","createTick","createLabel","AxisBullet","AxisRendererY","opposite","inversedPosition","relativePositionSprite","bbx","bbw","bbh","tickLength","basePoint","wavedRectangle","ValueAxisBreak","valueToPosition","ValueAxisDataItem","ValueAxis","_stepDecimalPlaces","_prevStepDecimalPlaces","_adjustLabelPrecision","_baseValue","_adjustedStart","_adjustedEnd","_extremesChanged","_deltaMinMax","_dsc","calculateTotals","axisFieldName","keepSelection","includeRangesInMinMax","_maxZoomed","_maxDefined","_minZoomed","_minDefined","_maxAdjusted","_minAdjusted","excludeFromTotal","dataItem_2","getMinMax","calculateZoom","validateAxisElements","positionToValue","differece","minMaxStep","adjustMinMax","stepDecimalPlaces","syncWithAxis","fixSmallStep","value_1","minZoomed","maxZoomed","dataItemsIterator_1","precisionChanged","formatLabel","stepPower","decCount","renderer_1","breakValue_1","adjustedMin","adjustedMax","adjustedStep","fillEndPosition","adjustLabelPrecision","baseValue","valueToPoint","min_1","max_1","_difference","treatZeroAs","difference_1","value_2","breakStartPosition","breakEndPosition","breakStartValue","breakEndValue","xToValue","yToValue","animateMinMax","ignoreMinMax","seriesMin","seriesMax","_minReal","_maxReal","dif","fixMin","fixMax","power","extraMin","extraMax","strictMinMax","_minMaxAnimation","_finalMax","_finalMin","handleSelectionExtremesChange","strictMode","initialMin","initialMax","stepDivisor","maxPrecision","minCount","maxCount","handleExtremesChange","selectionMin","selectionMax","allHidden","outOfRange","seriesSelectionMin","seriesSelectionMax","minMaxStep2","syncAxes","extraTooltipPrecision","valueStr","zoomToValues","axisBreakDif","axisBreakGridCount","breakMinMaxStep","showTooltipAt","currentCount","synced","omin","omax","ostep","checkSync","xAxis","AxisRendererX","bby","HeatLegend","markerContainer","markerCount","getMinFromRules","minValue_1","heatRules","heatRule","getMaxFromRules","maxValue_1","valueAxis","minColor","maxColor","seriesFill","minOpacity","maxOpacity","minStrokeOpacity","maxStrokeOpacity","minStroke","maxStroke","strokeGradient","color_1","opacity_1","_valueAxis","dataField","dataFieldDefined","seriesId_1","Grip","autoHideDelay","_autoHideTimeout","ChartDataItem","_legend","titles","chartAndLegendContainer","chartContainer","processTitle","updateReaderTitleReferences","fixLayout","feedLegend","titleIds_1","setLegend","_dragGrip","grip_1","Bullet","tooltipX","copyToLegendMarker","SeriesDataItem","_bullets","bullets","Series","_showBullets","_tmin","_tmax","_smin","_smax","dataItemsByAxis","skipFocusThreshold","_itemReaderTextChanged","calculatePercent","usePercentHack","simplifiedProcessing","minBulletDistance","mainContainer","positionBullet","processBullet","itemsFocusable","removeBullet","eachBullet","processValues","getFirstValue","getAbsoluteFirstValue","working","count_1","sum_1","absoluteSum_1","low_1","high_1","open_1","close_1","previous_1","first_1","absoluteFirst_1","startIndex_1","prevValue","_loop_2","dataItem_3","ksum","zeroItem_1","dataItem_4","MSInputMethodContext","updateTooltipBounds","shouldCreateBullet","bulletTemplate","disabledField","currentDataItem","readerText_1","itemReaderText","xField","yField","isDynamic","rangesContainer","getAxisField","xPosition","yPosition","readerText","_itemReaderText","_legendDataItem","notRange","itemLabelText","labelText","_heatRules","dataField_1","seriesDataItem_1","property_1","foundSprite","anySprite","anyChild","foundSprite_1","ruleTarget","propertyField","listitem","maybeIndex","SerialChartDataItem","SerialChart","seriesContainer","patterns","createSeries","handleSeriesAdded","handleSeriesRemoved","handleSeriesAdded2","handleLegendSeriesAdded","hiddenInLegend","legendData_1","Adder","_partials","Float64Array","halfPi","quarterPi","atan","hypot","haversin","streamGeometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","streamPolygon","MultiPolygon","GeometryCollection","geometries","lineStart","lineEnd","polygonStart","polygonEnd","phi00","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","deltaSum","ranges","cartesian","spherical","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","inflection","phii","lambdai","antimeridian","lambda0","lambda1","rangeCompare","rangeContains","merged","deltaMax","MapSeriesDataItem","_east","_west","_south","_north","getFeature","west","south","north","east","MapSeries","checkInclude","excludes","processIncExc","handleObjectAdded","mapObject","_geodata","geodata","reverseGeodata","processReverseGeodata","madeFromGeoData","getFeatures","_mapObjects","_northDefined","_southDefined","_westDefined","_eastDefined","name_1","MapObject","handleTooltipMove","MapImage","latitude","geoPoint","longitude","projection","d3Projection","d3Path","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","circleRadius","acos","multiLineToGeo","multiLine","multiPointToGeo","pointToGeo","multiGeoToPoint","geoPoints","geoToPoint","multiGeoLineToMultiLine","multiGeoLine","multiGeoPolygonToMultipolygon","multiGeoPolygon","geoPolygon","multiPolygon","MapPolygon","pathGenerator","calculateVisualCenter","biggestArea","biggestPolygon","_visualLongitude","_visualLatitude","visualLongitude","visualLatitude","MapPolygonSeriesDataItem","_mapPolygon","mapPolygon_1","mapPolygons","_polygon","_multiPolygon","_geoPolygon","_multiGeoPolygon","MapPolygonSeries","useGeodata","geoJSON","geodataNames","include","exclude","dataObject","mapPolygon","sortPolygonsBy","sortBy_1","reversed_1","sortPolygonsReversed","valA","valB","dirA","dirB","boxArea","_mapPolygons","polygonTemplate","getPolygonById","rejoin","Intersection","subject","pointEqual","compareIntersection","startInside","isSubject","_marked","allowArrayLike","normalCompletion","didErr","_e2","sink","clipLine","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","phi0","sinPhi0","cosPhi0","sinPhi1","cosPhi1","phi1","absDelta","phiArc","polygonContains","pointVisible","pointLine","clean","ringSegments","validSegment","_clean","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","smallRadius","notHemisphere","two","n1","n2","n2n2","n1n2","determinant","n1xn2","uu","polar","q1","v00","clipRectangle","corner","comparePoint","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","linePoint","polygonInside","cleanInside","transformer","TransformStream","fitBounds","clipExtent","fitExtent","extent","fitWidth","fitHeight","cosMinDistance","delta2","project","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","theta","preclip","postclip","recenter","resample","transformRotate","clipAngle","reflectX","reflectY","equirectangularRaw","Z0","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","_point","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","lengthLineEnd","cosDelta","Projection","_d3Projection","_d3Path","projectionStream","contextStream","invalidateProjection","unproject","deltaLongitude","deltaLatitude","unrotate","intermediatePoint","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","multiDistance","positionToGeoPoint","intermediatePointA","intermediatePointB","positionAB","SmallMap","moveToPosition","updateMapSize","newSeries","rectPoint","seriesPointToGeo","zoomToGeoPoint","zoomLevel","updateRectangle","normalizeMultiline","latitude180","wrapAngleTo180","MapLineObject","adjustRotation","mapLine","shortestDistance","MapImageSeriesDataItem","_mapImage","mapImage_1","mapImages","_geoPoint","multiPoint","MapImageSeries","multiGeoPoint","mapImage","_mapImages","getImageById","MapLine","_imageListeners","createLine","handleImagesToConnect","imagesToConnect","convertedPoints","convertedSegmentPoints","_arrow","lineObjects","_lineObjects","handleLineObjectAdded","mapLineObject","arrow","triangle","MapLineSeriesDataItem","_mapLine","mapLine_1","mapLines","_multiLine","_multiGeoLine","_geoLine","geoLine","MapLineSeries","_mapLines","lineTemplate","getLineById","Graticule","graticuleX","graticuleY","X1","X0","Y1","Y0","DX","DY","graticule","extentMajor","extentMinor","stepMajor","stepMinor","GraticuleSeriesDataItem","GraticuleSeries","longitudeStep","latitudeStep","singleSprite","lineString","MapChartDataItem","MapChart","zoomDuration","zoomEasing","minZoomLevel","maxZoomLevel","_prevZoomGeoPoint","maxPanOut","homeZoomLevel","zoomStep","centerMapOnZoomOut","backgroundSeries","handleAllInited","handleMapTransform","handleDoubleHit","handleDrag","updateCenterGeoPoint","_mapAnimation","allInited_1","updateScaleRatio","_zoomGeoPointReal","chartContainerBg","handleMapDown","_zoomControl","pan","mouseWheelBehavior","handlePanDown","handlePanUp","panSprite","handlePanMove","panBehavior","_downPointOrig","_downDeltaLongitude","_downDeltaLatitude","isResized","dln","dlt","dlg","downGeoLocal","geoLocal","goHome","updateZoomGeoPoint","seriesPoint","seriesMaxLeft","seriesMaxRight","seriesMaxTop","seriesMaxBottom","seriesWidth","seriesHeight","_centerGeoPoint","zoomGeoPoint","svgPointToGeo","zoomIn","sensitivity","zoomOut","_backgroundSeries","foundGraticule","deltaLong","deltaLat","initialScale","stepLong","stepLat","_fitWidth","_fitHeight","hScale","vScale","geoPointToSVG","geoPointToSeries","hasData_1","mapPoint","zoomToMapObject","zoomToRectangle","splitLongitude","newLong","_prevZoomLevel","_smallMap","smallMap","zoomControl","plusButton","minusButton","rotateMap","homeGeoPoint","centerGeoPoint","hideOverflow","MapSpline","MapArc","MapSplineSeriesDataItem","MapSplineSeries","MapArcSeriesDataItem","MapArcSeries","ZoomControl","slider","handleBackgroundClick","updateThumbSize","handleThumbDrag","maxPower","LN2","minPower","mercatorRaw","reclip","mercatorProjection","Mercator","millerRaw","Miller","eckert6Raw","Eckert6","azimuthalInvert","orthographicRaw","Orthographic","stereographicRaw","Stereographic","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0y","parallels","conicEqualArea","Albers","AlbersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","streams","naturalEarth1Raw","phi4","NaturalEarth1","azimuthalEqualAreaRaw","cxcy","AzimuthalEqualArea","equalEarthRaw","l6","EqualEarth","mapRef","classError","am4core","am4maps","am4geodata_usaLow","polygonSeries","colorFor","Source","timeSelection","timeInterval","statusSelection","mainChartRef","mainData","getMainData","pieceLabel","percentage","breakdownData","getBreakdownData","voyager_sources_prompt","selectedStatus","fetchChartData","clearable","handleStatusChange","selectedTime","handleTimeChange","statusFilter","timeFilter","renderMainChart","renderBreakdownChart","Voyager","voyager_disclaimer"],"mappings":"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CDriG,KAAM,IACNqiG,QAAS,6BACR,CACDriG,KAAM,IACNqiG,QAAS,mFACR,CACDriG,KAAM,IACNqiG,QAAS,2GACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,+CACR,CACDriG,KAAM,IACNqiG,QAAS,6FACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,qPACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,2DACR,CACDriG,KAAM,IACNqiG,QAAS,mCACR,CACDriG,KAAM,IACNqiG,QAAS,qGACR,CACDriG,KAAM,IACNqiG,QAAS,qGACR,CACDriG,KAAM,IACNqiG,QAAS,yFACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,mMACR,CACDriG,KAAM,IACNqiG,QAAS,+CACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,2DACR,CACDriG,KAAM,IACNqiG,QAAS,6BACR,CACDriG,KAAM,IACNqiG,QAAS,uFACR,CACDriG,KAAM,IACNqiG,QAAS,mFACR,CACDriG,KAAM,IACNqiG,QAAS,qMACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,oBACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,gBACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,qDACR,CACDriG,KAAM,IACNqiG,QAAS,2EACR,CACDriG,KAAM,IACNqiG,QAAS,mFACR,CACDriG,KAAM,KACNqiG,QAAS,gBACR,CACDriG,KAAM,IACNqiG,QAAS,iLACR,CACDriG,KAAM,IACNqiG,QAAS,mCACR,CACDriG,KAAM,IACNqiG,QAAS,yFACR,CACDriG,KAAM,IACNqiG,QAAS,yFACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,+GACR,CACDriG,KAAM,IACNqiG,QAAS,mCACR,CACDriG,KAAM,IACNqiG,QAAS,mFACR,CACDriG,KAAM,IACNqiG,QAAS,iHACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,+CACR,CACDriG,KAAM,IACNqiG,QAAS,mGACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,qPACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,2DACR,CACDriG,KAAM,IACNqiG,QAAS,mCACR,CACDriG,KAAM,IACNqiG,QAAS,qGACR,CACDriG,KAAM,IACNqiG,QAAS,yGACR,CACDriG,KAAM,IACNqiG,QAAS,+FACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,mMACR,CACDriG,KAAM,IACNqiG,QAAS,+CACR,CACDriG,KAAM,KACNqiG,QAAS,UACR,CACDriG,KAAM,IACNqiG,QAAS,iEACR,CACDriG,KAAM,IACNqiG,QAAS,6BACR,CACDriG,KAAM,IACNqiG,QAAS,2FACR,CACDriG,KAAM,IACNqiG,QAAS,oFAEPC,GAAe,IAAIn3G,OAAO,IAAMi3G,GAAW9hH,KAAI,SAAUrD,GAC3D,OAAOA,EAAEolH,WACRr9G,KAAK,IAAM,IAAK,KACfu9G,GAAkB,GAEb,GAAI,EAAG,GAAIH,GAAW1oH,OAAQ,KAGrC,IAFA,IAAI8oH,GAAYJ,GAAW,IAElBlsG,GAAI,EAAGA,GAAIssG,GAAUH,QAAQ3oH,OAAQwc,KAC5CqsG,GAAgBC,GAAUH,QAAQnsG,KAAMssG,GAAUxiG,KAItD,IAAIyiG,GA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S,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,UAAW,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,MAAO,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,OAAQ,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,OAAQ,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,UAAW,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,OAAQ,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,MAAO,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,UAAW,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,OAAQ,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,WAAY,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAA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CR,YAAe,CAAC,CAAC,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,MAAO,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,MAAO,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SA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SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,MAAO,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,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AE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SA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AU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,aAEzvH,WAAc,CACZ,KAAQ,QACR,GAAM,QACN,MAAS,2BACT,KAAQ,SAEV,GAAM,SACL,CACD,KAAQ,UACR,SAAY,CACV,KAAQ,UACR,YAAe,CAAC,CAAC,EAAE,SAAU,SAAU,EAAE,OAAQ,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,SAAU,SAAU,EAAE,QAAS,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,QAAS,EAAE,SAAU,SAAU,EAAE,SAAU,YAEhd,WAAc,CACZ,KAAQ,OACR,GAAM,QACN,MAAS,2BACT,KAAQ,SAEV,GAAM,SACL,CACD,KAAQ,UACR,SAAY,CACV,KAAQ,eACR,YAAe,CAAC,CAAC,CAAC,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,MAAO,EAAE,QAAS,SAAU,EAAE,QAAS,OAAQ,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,MAAO,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,QAAS,WAAY,CAAC,CAAC,EAAE,QAAS,QAAS,EAAE,MAAO,SAAU,EAAE,OAAQ,QAAS,EAAE,QAAS,SAAU,EAAE,QAAS,SAAU,EAAE,OAAQ,SAAU,EAAE,QAAS,QAAS,EAAE,QAAS,SAAU,EAAE,OAAQ,SA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","file":"js/data-room-bundle-da31b26345f2494ba6a2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"3\":\"vendors~canvg\",\"4\":\"vendors~pdfmake\",\"5\":\"vendors~xlsx\",\"6\":\"xlsx\"}[chunkId]||chunkId) + \"-\" + {\"3\":\"0e6773dbc24fef87e9d4\",\"4\":\"cc77a6be7f78cf947785\",\"5\":\"93082b39f112aade66de\",\"6\":\"2115ec8f7d8e1df711cf\"}[chunkId] + \".chunk.js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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 \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 765);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n;\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.moment = factory();\n})(this, function () {\n 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n } // This is done to register the method called with moment()\n // without creating circular dependencies.\n\n\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [],\n i;\n\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n\n return m._pf;\n }\n\n var some;\n\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function some(fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n\n if (m._strict) {\n isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n } // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n\n\n var momentProperties = hooks.momentProperties = [],\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n } // Moment prototype object\n\n\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\n if (!this.isValid()) {\n this._d = new Date(NaN);\n } // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n\n\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n\n if (firstTime) {\n var args = [],\n arg,\n i,\n key;\n\n for (i = 0; i < arguments.length; i++) {\n arg = '';\n\n if (_typeof(arguments[i]) === 'object') {\n arg += '\\n[' + i + '] ';\n\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n\n args.push(arg);\n }\n\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n firstTime = false;\n }\n\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set(config) {\n var prop, i;\n\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n\n this._config = config; // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n\n this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function keys(obj) {\n var i,\n res = [];\n\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L'\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {}; // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n\n if (typeof callback === 'string') {\n func = function func() {\n return this[callback]();\n };\n }\n\n if (token) {\n formatTokenFunctions[token] = func;\n }\n\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n\n return output;\n };\n } // format date using native date object\n\n\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\n if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\n return tok.slice(1);\n }\n\n return tok;\n }).join('');\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years'\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({\n unit: u,\n priority: priorities[u]\n });\n }\n }\n\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n value = toInt(value);\n\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n } // MOMENTS\n\n\n function stringGet(units) {\n units = normalizeUnits(units);\n\n if (isFunction(this[units])) {\n return this[units]();\n }\n\n return this;\n }\n\n function stringSet(units, value) {\n if (_typeof(units) === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i;\n\n for (i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n\n return this;\n }\n\n var match1 = /\\d/,\n // 0 - 9\n match2 = /\\d\\d/,\n // 00 - 99\n match3 = /\\d{3}/,\n // 000 - 999\n match4 = /\\d{4}/,\n // 0000 - 9999\n match6 = /[+-]?\\d{6}/,\n // -999999 - 999999\n match1to2 = /\\d\\d?/,\n // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/,\n // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/,\n // 99999 - 999999\n match1to3 = /\\d{1,3}/,\n // 0 - 999\n match1to4 = /\\d{1,4}/,\n // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/,\n // -999999 - 999999\n matchUnsigned = /\\d+/,\n // 0 - inf\n matchSigned = /[+-]?\\d+/,\n // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi,\n // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi,\n // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/,\n // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\n\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback;\n\n if (typeof token === 'string') {\n token = [token];\n }\n\n if (isNumber(callback)) {\n func = function func(input, array) {\n array[callback] = toInt(input);\n };\n }\n\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return (n % x + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function indexOf(o) {\n // I know\n var i;\n\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n } // FORMATTING\n\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n }); // ALIASES\n\n addUnitAlias('month', 'M'); // PRIORITY\n\n addUnitPriority('month', 8); // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.\n\n\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n }); // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months) ? this._months : this._months['standalone'];\n }\n\n return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n }\n\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n } // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n\n\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n } // test the regex\n\n\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n } // MOMENTS\n\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value); // TODO: Another silent failure?\n\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n\n return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n\n return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n } // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n\n\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n } // FORMATTING\n\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES\n\n addUnitAlias('year', 'y'); // PRIORITIES\n\n addUnitPriority('year', 1); // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n }); // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n } // HOOKS\n\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n }; // MOMENTS\n\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date; // the date constructor remaps years 0-99 to 1900-1999\n\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args; // the Date.UTC function remaps years 0-99 to 1900-1999\n\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset\n\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n } // start-of-first-week - start-of-year\n\n\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\n\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n } // FORMATTING\n\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W'); // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5); // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }); // HELPERS\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0,\n // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n } // MOMENTS\n\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n } // FORMATTING\n\n\n addFormatToken('d', 0, 'do', 'day');\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E'); // PRIORITY\n\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11); // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid\n\n\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n }); // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n\n return isNaN(input) ? null : input;\n } // LOCALES\n\n\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._weekdaysParse, llc);\n\n if (ii !== -1) {\n return ii;\n }\n\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n } // test the regex\n\n\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n } // MOMENTS\n\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n } // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n\n return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n\n return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n\n return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n } // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n\n\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n } // FORMATTING\n\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false); // ALIASES\n\n addUnitAlias('hour', 'h'); // PRIORITY\n\n addUnitPriority('hour', 13); // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n }); // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n week: defaultLocaleWeek,\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n meridiemParse: defaultLocaleMeridiemParse\n }; // internal storage for locale config files\n\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n } // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\n\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n\n if (locale) {\n return locale;\n }\n\n if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n\n j--;\n }\n\n i++;\n }\n\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire; // TODO: Find a better way to register and load all the locales in Node\n\n if (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n\n return locales[name];\n } // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n\n\n function getSetGlobalLocale(key, values) {\n var data;\n\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n } // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n\n\n getSetGlobalLocale(name);\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n\n config = mergeConfigs(parentConfig, config);\n\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n } // backwards compat for now: also set the locale\n\n\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n\n return locales[name];\n } // returns locale data\n\n\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n\n if (locale) {\n return locale;\n }\n\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n } // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\n\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/], ['YYYYMM', /\\d{6}/, false], ['YYYY', /\\d{4}/, false]],\n // iso time formats and regexes\n isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n }; // date from iso format\n\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n } // date and time from ref 2822 format\n\n\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n\n if (match) {\n parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n config._d = createUTCDate.apply(null, config._a);\n\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n } // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n\n\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }); // Pick the first defined of two or three arguments.\n\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n\n if (b != null) {\n return b;\n }\n\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n } // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n\n\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays\n\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n } //if the day of the year is set, figure out what it is\n\n\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n } // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n\n\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n } // Zero out whatever was not defaulted, including time\n\n\n for (; i < 7; i++) {\n config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n } // Check for 24:00:00.000\n\n\n if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n } // check for mismatching day of week\n\n\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n w = config._w;\n\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n curWeek = weekOfYear(createLocal(), dow, doy);\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.\n\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n } // constant that refers to the ISO standard\n\n\n hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form\n\n\n hooks.RFC_2822 = function () {}; // date from string and format string\n\n\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n\n config._a = [];\n getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era;\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n } // don't parse if it's not a known token\n\n\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n } // add remaining unparsed input length to the string\n\n\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n } // clear _12h flag if hour is <= 12\n\n\n if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem; // handle meridiem\n\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); // handle era\n\n era = getParsingFlags(config).era;\n\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n\n if (isPm && hour < 12) {\n hour += 12;\n }\n\n if (!isPm && hour === 12) {\n hour = 0;\n }\n\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n } // date from string and array of format strings\n\n\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n } // if there is any input that was not parsed add a penalty for that format\n\n\n currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens\n\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || format === undefined && input === '') {\n return createInvalid({\n nullInput: true\n });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n input = undefined;\n } // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n\n\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }),\n prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }); // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n\n function pickBy(fn, moments) {\n var res, i;\n\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n\n if (!moments.length) {\n return createLocal();\n }\n\n res = moments[0];\n\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n\n return res;\n } // TODO: Use [].sort instead?\n\n\n function min() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isAfter', args);\n }\n\n var now = function now() {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i;\n\n for (key in m) {\n if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n for (i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove\n\n this._milliseconds = +milliseconds + seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n\n this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n\n this._months = +months + quarters * 3 + years * 12;\n this._data = {};\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n } // compare two arrays, return the number of differences\n\n\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n diffs++;\n }\n }\n\n return diffs + lengthDiff;\n } // FORMATTING\n\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', ''); // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n }); // HELPERS\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n } // Return a moment from input, that is local/utc/zone equivalent to model.\n\n\n function cloneWithOffset(input, model) {\n var res, diff;\n\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.\n\n res._d.setTime(res._d.valueOf() + diff);\n\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n } // HOOKS\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n\n\n hooks.updateOffset = function () {}; // MOMENTS\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n\n\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n\n this._offset = input;\n this._isUTC = true;\n\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n\n input = input ? createLocal(input).utcOffset() : 0;\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n } // ASP.NET json date format regex\n\n\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if (match = aspNetRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\n };\n } else if (match = isoRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign)\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (_typeof(duration) === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it\n\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n\n if (!(base.isValid() && other.isValid())) {\n return {\n milliseconds: 0,\n months: 0\n };\n }\n\n other = cloneWithOffset(other, base);\n\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n } // TODO: remove 'name' arg after deprecation is removed\n\n\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp; //invert the arguments, but complain about it\n\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n } // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n\n\n function isMomentInput(input) {\n return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n\n if (arrayTest) {\n dataTypeTest = input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n } // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n\n\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n\n units = normalizeUnits(units) || 'millisecond';\n\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n\n case 'month':\n output = monthDiff(this, that);\n break;\n\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n\n case 'second':\n output = (this - that) / 1e3;\n break;\n // 1000\n\n case 'minute':\n output = (this - that) / 6e4;\n break;\n // 1000 * 60\n\n case 'hour':\n output = (this - that) / 36e5;\n break;\n // 1000 * 60 * 60\n\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break;\n // 1000 * 60 * 60 * 24, negate dst\n\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break;\n // 1000 * 60 * 60 * 24 * 7, negate dst\n\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n } // difference in months\n\n\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month\n\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month\n\n adjust = (b - anchor) / (anchor2 - anchor);\n } //check for negative zero, return zero if negative zero\n\n\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n\n\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n to: this,\n from: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n from: this,\n to: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n } // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n\n\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n\n return this;\n }\n }\n\n var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n });\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):\n\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n });\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (_typeof(eras[i].since)) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (_typeof(eras[i].until)) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1; // truncate time\n\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');\n } // FORMATTING\n\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG'); // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1); // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n }); // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n } // FORMATTING\n\n\n addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES\n\n addUnitAlias('quarter', 'Q'); // PRIORITY\n\n addUnitPriority('quarter', 7); // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n }); // MOMENTS\n\n function getSetQuarter(input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n } // FORMATTING\n\n\n addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES\n\n addUnitAlias('date', 'D'); // PRIORITY\n\n addUnitPriority('date', 9); // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n });\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n }); // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD'); // PRIORITY\n\n addUnitPriority('dayOfYear', 4); // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n }); // HELPERS\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n } // FORMATTING\n\n\n addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES\n\n addUnitAlias('minute', 'm'); // PRIORITY\n\n addUnitPriority('minute', 14); // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE); // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false); // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES\n\n addUnitAlias('second', 's'); // PRIORITY\n\n addUnitPriority('second', 15); // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND); // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false); // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n }); // ALIASES\n\n addUnitAlias('millisecond', 'ms'); // PRIORITY\n\n addUnitPriority('millisecond', 16); // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n var token, getSetMillisecond;\n\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n\n return out;\n } // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n\n\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [{\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD'\n }, {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC'\n }],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function ordinal(number) {\n var b = number % 10,\n output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n return number + output;\n }\n }); // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n return duration._bubble();\n } // supports only 2.0-style add(1, 's') or add(duration)\n\n\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n } // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\n\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays; // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n\n if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n } // The following code bubbles up values, see the tests for\n // examples of what that means.\n\n\n data.milliseconds = milliseconds % 1000;\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n days += absFloor(hours / 24); // convert days to months\n\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year\n\n years = absFloor(months / 12);\n months %= 12;\n data.days = days;\n data.months = months;\n data.years = years;\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n\n var days,\n months,\n milliseconds = this._milliseconds;\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n\n switch (units) {\n case 'month':\n return months;\n\n case 'quarter':\n return months / 3;\n\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n\n case 'day':\n return days + milliseconds / 864e5;\n\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n } // TODO: Use this.as('ms')?\n\n\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n\n return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month/week\n w: null,\n // weeks to month\n M: 11 // months to year\n\n }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\n\n if (thresholds.w != null) {\n a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\n }\n\n a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n } // This function allows you to set the rounding function for relative time strings\n\n\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n\n return false;\n } // This function allows you to set a threshold for relative time strings\n\n\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n\n if (limit === undefined) {\n return thresholds[threshold];\n }\n\n thresholds[threshold] = limit;\n\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (_typeof(argWithSuffix) === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n\n if (_typeof(argThresholds) === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n } // 3600 seconds -> 60 minutes -> 1 hour\n\n\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60; // 12 months -> 1 year\n\n years = absFloor(months / 12);\n months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang; // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf'); // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n }); //! moment.js\n\n hooks.version = '2.29.1';\n setHookCallback(createLocal);\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats\n\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n // \n DATE: 'YYYY-MM-DD',\n // \n TIME: 'HH:mm',\n // \n TIME_SECONDS: 'HH:mm:ss',\n // \n TIME_MS: 'HH:mm:ss.SSS',\n // \n WEEK: 'GGGG-[W]WW',\n // \n MONTH: 'YYYY-MM' // \n\n };\n return hooks;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\ndefine([\"./var/arr\", \"./var/getProto\", \"./var/slice\", \"./var/flat\", \"./var/push\", \"./var/indexOf\", \"./var/class2type\", \"./var/toString\", \"./var/hasOwn\", \"./var/fnToString\", \"./var/ObjectFunctionString\", \"./var/support\", \"./var/isFunction\", \"./var/isWindow\", \"./core/DOMEval\", \"./core/toType\"], function (arr, getProto, _slice, flat, push, indexOf, class2type, toString, hasOwn, fnToString, ObjectFunctionString, support, isFunction, isWindow, DOMEval, toType) {\n \"use strict\";\n\n var version = \"3.6.0\",\n // Define a local copy of jQuery\n jQuery = function jQuery(selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n };\n\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function toArray() {\n return _slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function get(num) {\n // Return all the elements in a clean array\n if (num == null) {\n return _slice.call(this);\n } // Return just the one element from the set\n\n\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function pushStack(elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n ret.prevObject = this; // Return the newly-formed element set\n\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function each(callback) {\n return jQuery.each(this, callback);\n },\n map: function map(callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n first: function first() {\n return this.eq(0);\n },\n last: function last() {\n return this.eq(-1);\n },\n even: function even() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return (i + 1) % 2;\n }));\n },\n odd: function odd() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return i % 2;\n }));\n },\n eq: function eq(i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function end() {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === \"boolean\") {\n deep = target; // Skip the boolean and the target\n\n target = arguments[i] || {};\n i++;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== \"object\" && !isFunction(target)) {\n target = {};\n } // Extend jQuery itself if only one argument is passed\n\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name]; // Prevent Object.prototype pollution\n // Prevent never-ending loop\n\n if (name === \"__proto__\" || target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name]; // Ensure proper type for the source value\n\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n\n copyIsArray = false; // Never move original objects, clone them\n\n target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n };\n\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function error(msg) {\n throw new Error(msg);\n },\n noop: function noop() {},\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor; // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n\n proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n if (!proto) {\n return true;\n } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n\n return true;\n },\n // Evaluates a script in a provided context; falls back to the global one\n // if not specified.\n globalEval: function globalEval(code, options, doc) {\n DOMEval(code, {\n nonce: options && options.nonce\n }, doc);\n },\n each: function each(obj, callback) {\n var length,\n i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n // results is for internal usage only\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function merge(first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n return first;\n },\n grep: function grep(elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert; // Go through the array, only saving the items\n // that pass the validator function\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n // arg is for internal usage only\n map: function map(elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = []; // Go through the array, translating each of the items to their new values\n\n if (isArrayLike(elems)) {\n length = elems.length;\n\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n } // Go through every key on the object,\n\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } // Flatten any nested arrays\n\n\n return flat(ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n } // Populate the class2type map\n\n\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n\n return jQuery;\n});","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","import _ from 'lodash';\n\nexport function formatNumber(amount, digits) {\n // Note: If we decide to only support ie11+, this can be replaced by:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\n if (!_.isNumber(digits)) digits = 2;\n\n const inFloat = parseFloat(String(amount).replace(/,/g, '')).toFixed(digits);\n if (isNaN(inFloat)) return amount;\n\n let parts = String(inFloat).split('.');\n parts[0] = _(parts[0].split('')).reduceRight((out, v) => {\n // out[0] = the triplet we're working on, out[1] is the string we've built\n out[0] = v + out[0];\n if (out[0].length === 3) {\n out[1] = ',' + out[0] + out[1];\n out[0] = '';\n }\n return out;\n }, ['', '']).join('').replace(/^,/, '');\n if (digits > 0) {\n if (parts.length === 1) {\n parts.push('');\n }\n parts[1] = _.padEnd(parts[1], digits, '0');\n } else {\n parts = [parts[0]];\n }\n\n return parts.join('.');\n}\n\nexport function formatMoney(amount, digits) {\n return `$${formatNumber(amount, digits)}`;\n}\n\nexport function formatPercent(amount, digits) {\n return `${formatNumber(amount, digits)}%`;\n}\n\nexport function formatMultiplier(amount, digits) {\n return `${formatNumber(amount, digits)}X`;\n}\n\nexport function toMillion(numString, digits) {\n const i = Number(String(numString).replace(/\\$/g, '').replace(/,/g, ''))\n , millions = Number(i) / 1000000\n ;\n return `${formatMoney(millions, digits)}M`;\n}\n\nfunction colorStepSize(color1, color2, steps) {\n return Math.floor((color1 - color2) / steps);\n}\nfunction hexToRgb(hex) {\n return hex.replace(/^#/, '').split(/(.{2})/).filter(v => v != '').map(v => parseInt(v, 16));\n}\n\nexport function colorGradient(lightest, darkest, steps) {\n // Make sure we're dealing with RGB values, ex: (128, 64, 32)\n if (typeof lightest === 'string') lightest = hexToRgb(lightest);\n if (typeof darkest === 'string') darkest = hexToRgb(darkest);\n\n // Figure out what kind of increment we make per step, ex: 4, 100, -45\n const [stepR, stepG, stepB] = [0,1,2].map(idx => colorStepSize(darkest[idx], lightest[idx], steps));\n\n // Actually make our list of RGB values\n let colors = [];\n _.times(steps, step => {\n const stepped = [lightest[0] + (stepR * step), lightest[1] + (stepG * step), lightest[2] + (stepB * step)];\n colors.push(stepped.map(val => {\n if (val < 0) return 0;\n if (val > 255) return 255;\n return val;\n }));\n });\n\n // Turn it back into the hex most style tools support\n return colors\n .map(colorRGB => '#' + colorRGB.map(v => _.padStart(Number(v).toString(16), 2, '0')).join(''))\n ;\n}\ncolorGradient.defaultLightest = '#FFC268';\ncolorGradient.defaultDarkest = '#FF0000';\n","define(function () {\n \"use strict\";\n\n return function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n // Plus for old WebKit, typeof returns \"function\" for HTML collections\n // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n };\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;\n(function () {\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n /** Used as the semantic version number. */\n\n var VERSION = '4.17.21';\n /** Used as the size to enable large array optimizations. */\n\n var LARGE_ARRAY_SIZE = 200;\n /** Error message constants. */\n\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n /** Used to stand-in for `undefined` hash values. */\n\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n /** Used as the maximum memoize cache size. */\n\n var MAX_MEMOIZE_SIZE = 500;\n /** Used as the internal argument placeholder. */\n\n var PLACEHOLDER = '__lodash_placeholder__';\n /** Used to compose bitmasks for cloning. */\n\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n /** Used to compose bitmasks for value comparisons. */\n\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n /** Used to compose bitmasks for function metadata. */\n\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n /** Used as default options for `_.truncate`. */\n\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n /** Used to indicate the type of lazy iteratees. */\n\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n /** Used as references for various `Number` constants. */\n\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n /** Used as references for the maximum length and index of an array. */\n\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n /** Used to associate wrap methods with their bit flags. */\n\n var wrapFlags = [['ary', WRAP_ARY_FLAG], ['bind', WRAP_BIND_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG], ['curry', WRAP_CURRY_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG], ['flip', WRAP_FLIP_FLAG], ['partial', WRAP_PARTIAL_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], ['rearg', WRAP_REARG_FLAG]];\n /** `Object#toString` result references. */\n\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n /** Used to match empty string literals in compiled template source. */\n\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n /** Used to match HTML entities and HTML characters. */\n\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n /** Used to match template delimiters. */\n\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n /** Used to match property names within property paths. */\n\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n /** Used to match leading whitespace. */\n\n var reTrimStart = /^\\s+/;\n /** Used to match a single whitespace character. */\n\n var reWhitespace = /\\s/;\n /** Used to match wrap detail comments. */\n\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n /** Used to match words composed of alphanumeric characters. */\n\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n /** Used to match backslashes in property paths. */\n\n var reEscapeChar = /\\\\(\\\\)?/g;\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n /** Used to match `RegExp` flags from their coerced string values. */\n\n var reFlags = /\\w*$/;\n /** Used to detect bad signed hexadecimal string values. */\n\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n /** Used to detect binary string values. */\n\n var reIsBinary = /^0b[01]+$/i;\n /** Used to detect host constructors (Safari). */\n\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n /** Used to detect octal string values. */\n\n var reIsOctal = /^0o[0-7]+$/i;\n /** Used to detect unsigned integer values. */\n\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n /** Used to ensure capturing order of template delimiters. */\n\n var reNoMatch = /($^)/;\n /** Used to match unescaped characters in compiled string literals. */\n\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n /** Used to compose unicode character classes. */\n\n var rsAstralRange = \"\\\\ud800-\\\\udfff\",\n rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = \"\\\\u2700-\\\\u27bf\",\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = \"\\\\u2000-\\\\u206f\",\n rsSpaceRange = \" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = \"\\\\ufe0e\\\\ufe0f\",\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n /** Used to compose unicode capture groups. */\n\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n rsSurrPair = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = \"\\\\u200d\";\n /** Used to compose unicode regexes. */\n\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n /** Used to match apostrophes. */\n\n var reApos = RegExp(rsApos, 'g');\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n\n var reComboMark = RegExp(rsCombo, 'g');\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n /** Used to match complex or compound words. */\n\n var reUnicodeWord = RegExp([rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, rsUpper + '+' + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji].join('|'), 'g');\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n /** Used to detect strings that need a more robust regexp to match words. */\n\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n /** Used to assign default `context` object properties. */\n\n var contextProps = ['Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'];\n /** Used to make template sourceURLs easier to identify. */\n\n var templateCounter = -1;\n /** Used to identify `toStringTag` values of typed arrays. */\n\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n /** Used to map Latin Unicode letters to basic Latin letters. */\n\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A',\n '\\xc1': 'A',\n '\\xc2': 'A',\n '\\xc3': 'A',\n '\\xc4': 'A',\n '\\xc5': 'A',\n '\\xe0': 'a',\n '\\xe1': 'a',\n '\\xe2': 'a',\n '\\xe3': 'a',\n '\\xe4': 'a',\n '\\xe5': 'a',\n '\\xc7': 'C',\n '\\xe7': 'c',\n '\\xd0': 'D',\n '\\xf0': 'd',\n '\\xc8': 'E',\n '\\xc9': 'E',\n '\\xca': 'E',\n '\\xcb': 'E',\n '\\xe8': 'e',\n '\\xe9': 'e',\n '\\xea': 'e',\n '\\xeb': 'e',\n '\\xcc': 'I',\n '\\xcd': 'I',\n '\\xce': 'I',\n '\\xcf': 'I',\n '\\xec': 'i',\n '\\xed': 'i',\n '\\xee': 'i',\n '\\xef': 'i',\n '\\xd1': 'N',\n '\\xf1': 'n',\n '\\xd2': 'O',\n '\\xd3': 'O',\n '\\xd4': 'O',\n '\\xd5': 'O',\n '\\xd6': 'O',\n '\\xd8': 'O',\n '\\xf2': 'o',\n '\\xf3': 'o',\n '\\xf4': 'o',\n '\\xf5': 'o',\n '\\xf6': 'o',\n '\\xf8': 'o',\n '\\xd9': 'U',\n '\\xda': 'U',\n '\\xdb': 'U',\n '\\xdc': 'U',\n '\\xf9': 'u',\n '\\xfa': 'u',\n '\\xfb': 'u',\n '\\xfc': 'u',\n '\\xdd': 'Y',\n '\\xfd': 'y',\n '\\xff': 'y',\n '\\xc6': 'Ae',\n '\\xe6': 'ae',\n '\\xde': 'Th',\n '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n \"\\u0100\": 'A',\n \"\\u0102\": 'A',\n \"\\u0104\": 'A',\n \"\\u0101\": 'a',\n \"\\u0103\": 'a',\n \"\\u0105\": 'a',\n \"\\u0106\": 'C',\n \"\\u0108\": 'C',\n \"\\u010A\": 'C',\n \"\\u010C\": 'C',\n \"\\u0107\": 'c',\n \"\\u0109\": 'c',\n \"\\u010B\": 'c',\n \"\\u010D\": 'c',\n \"\\u010E\": 'D',\n \"\\u0110\": 'D',\n \"\\u010F\": 'd',\n \"\\u0111\": 'd',\n \"\\u0112\": 'E',\n \"\\u0114\": 'E',\n \"\\u0116\": 'E',\n \"\\u0118\": 'E',\n \"\\u011A\": 'E',\n \"\\u0113\": 'e',\n \"\\u0115\": 'e',\n \"\\u0117\": 'e',\n \"\\u0119\": 'e',\n \"\\u011B\": 'e',\n \"\\u011C\": 'G',\n \"\\u011E\": 'G',\n \"\\u0120\": 'G',\n \"\\u0122\": 'G',\n \"\\u011D\": 'g',\n \"\\u011F\": 'g',\n \"\\u0121\": 'g',\n \"\\u0123\": 'g',\n \"\\u0124\": 'H',\n \"\\u0126\": 'H',\n \"\\u0125\": 'h',\n \"\\u0127\": 'h',\n \"\\u0128\": 'I',\n \"\\u012A\": 'I',\n \"\\u012C\": 'I',\n \"\\u012E\": 'I',\n \"\\u0130\": 'I',\n \"\\u0129\": 'i',\n \"\\u012B\": 'i',\n \"\\u012D\": 'i',\n \"\\u012F\": 'i',\n \"\\u0131\": 'i',\n \"\\u0134\": 'J',\n \"\\u0135\": 'j',\n \"\\u0136\": 'K',\n \"\\u0137\": 'k',\n \"\\u0138\": 'k',\n \"\\u0139\": 'L',\n \"\\u013B\": 'L',\n \"\\u013D\": 'L',\n \"\\u013F\": 'L',\n \"\\u0141\": 'L',\n \"\\u013A\": 'l',\n \"\\u013C\": 'l',\n \"\\u013E\": 'l',\n \"\\u0140\": 'l',\n \"\\u0142\": 'l',\n \"\\u0143\": 'N',\n \"\\u0145\": 'N',\n \"\\u0147\": 'N',\n \"\\u014A\": 'N',\n \"\\u0144\": 'n',\n \"\\u0146\": 'n',\n \"\\u0148\": 'n',\n \"\\u014B\": 'n',\n \"\\u014C\": 'O',\n \"\\u014E\": 'O',\n \"\\u0150\": 'O',\n \"\\u014D\": 'o',\n \"\\u014F\": 'o',\n \"\\u0151\": 'o',\n \"\\u0154\": 'R',\n \"\\u0156\": 'R',\n \"\\u0158\": 'R',\n \"\\u0155\": 'r',\n \"\\u0157\": 'r',\n \"\\u0159\": 'r',\n \"\\u015A\": 'S',\n \"\\u015C\": 'S',\n \"\\u015E\": 'S',\n \"\\u0160\": 'S',\n \"\\u015B\": 's',\n \"\\u015D\": 's',\n \"\\u015F\": 's',\n \"\\u0161\": 's',\n \"\\u0162\": 'T',\n \"\\u0164\": 'T',\n \"\\u0166\": 'T',\n \"\\u0163\": 't',\n \"\\u0165\": 't',\n \"\\u0167\": 't',\n \"\\u0168\": 'U',\n \"\\u016A\": 'U',\n \"\\u016C\": 'U',\n \"\\u016E\": 'U',\n \"\\u0170\": 'U',\n \"\\u0172\": 'U',\n \"\\u0169\": 'u',\n \"\\u016B\": 'u',\n \"\\u016D\": 'u',\n \"\\u016F\": 'u',\n \"\\u0171\": 'u',\n \"\\u0173\": 'u',\n \"\\u0174\": 'W',\n \"\\u0175\": 'w',\n \"\\u0176\": 'Y',\n \"\\u0177\": 'y',\n \"\\u0178\": 'Y',\n \"\\u0179\": 'Z',\n \"\\u017B\": 'Z',\n \"\\u017D\": 'Z',\n \"\\u017A\": 'z',\n \"\\u017C\": 'z',\n \"\\u017E\": 'z',\n \"\\u0132\": 'IJ',\n \"\\u0133\": 'ij',\n \"\\u0152\": 'Oe',\n \"\\u0153\": 'oe',\n \"\\u0149\": \"'n\",\n \"\\u017F\": 's'\n };\n /** Used to map characters to HTML entities. */\n\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n /** Used to map HTML entities to characters. */\n\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n /** Used to escape characters for inclusion in compiled string literals. */\n\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n \"\\u2028\": 'u2028',\n \"\\u2029\": 'u2029'\n };\n /** Built-in method references without a dependency on `root`. */\n\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n /** Detect free variable `global` from Node.js. */\n\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n /** Detect free variable `self`. */\n\n var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n /** Used as a reference to the global object. */\n\n var root = freeGlobal || freeSelf || Function('return this')();\n /** Detect free variable `exports`. */\n\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */\n\n var freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */\n\n var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Detect free variable `process` from Node.js. */\n\n var freeProcess = moduleExports && freeGlobal.process;\n /** Used to access faster Node.js helpers. */\n\n var nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }();\n /* Node.js helper references. */\n\n\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n\n case 1:\n return func.call(thisArg, args[0]);\n\n case 2:\n return func.call(thisArg, args[0], args[1]);\n\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n\n return func.apply(thisArg, args);\n }\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n\n return accumulator;\n }\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n\n\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n\n return array;\n }\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n\n\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n\n return array;\n }\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n\n\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n\n return true;\n }\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\n\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n }\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n\n\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n\n\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n\n\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n }\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n\n\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n }\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n\n\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n\n return accumulator;\n }\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n\n\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[--length];\n }\n\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n\n return accumulator;\n }\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n\n\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n\n\n var asciiSize = baseProperty('length');\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n function asciiToArray(string) {\n return string.split('');\n }\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n\n\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n\n\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function (value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while (fromRight ? index-- : ++index < length) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n\n return -1;\n }\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function baseIndexOf(array, value, fromIndex) {\n return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n\n return -1;\n }\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n\n\n function baseIsNaN(value) {\n return value !== value;\n }\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n\n\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? baseSum(array, iteratee) / length : NAN;\n }\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n\n\n function baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key];\n };\n }\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n\n\n function basePropertyOf(object) {\n return function (key) {\n return object == null ? undefined : object[key];\n };\n }\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n\n\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function (value, index, collection) {\n accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n\n\n function baseSortBy(array, comparer) {\n var length = array.length;\n array.sort(comparer);\n\n while (length--) {\n array[length] = array[length].value;\n }\n\n return array;\n }\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n\n\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n\n if (current !== undefined) {\n result = result === undefined ? current : result + current;\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n\n\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n }\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n\n\n function baseToPairs(object, props) {\n return arrayMap(props, function (key) {\n return [key, object[key]];\n });\n }\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n\n\n function baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;\n }\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n\n\n function baseUnary(func) {\n return function (value) {\n return func(value);\n };\n }\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n\n\n function baseValues(object, props) {\n return arrayMap(props, function (key) {\n return object[key];\n });\n }\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n\n\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n\n return index;\n }\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n\n\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n\n return index;\n }\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n\n\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n\n return result;\n }\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n\n\n var deburrLetter = basePropertyOf(deburredLetters);\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\n\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n\n\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n\n\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n\n return result;\n }\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n\n\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n\n\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n\n\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n\n return result;\n }\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n\n\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n }\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n\n\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = [value, value];\n });\n return result;\n }\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n\n return -1;\n }\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n\n return index;\n }\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n\n\n function stringSize(string) {\n return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);\n }\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\n function stringToArray(string) {\n return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);\n }\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n\n\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n\n return index;\n }\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n\n\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n\n while (reUnicode.test(string)) {\n ++result;\n }\n\n return result;\n }\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n\n\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n\n\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n\n\n var runInContext = function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n /** Built-in constructor references. */\n\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n /** Used for built-in method references. */\n\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n /** Used to detect overreaching core-js shims. */\n\n var coreJsData = context['__core-js_shared__'];\n /** Used to resolve the decompiled source of functions. */\n\n var funcToString = funcProto.toString;\n /** Used to check objects for own properties. */\n\n var hasOwnProperty = objectProto.hasOwnProperty;\n /** Used to generate unique IDs. */\n\n var idCounter = 0;\n /** Used to detect methods masquerading as native. */\n\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\n\n var nativeObjectToString = objectProto.toString;\n /** Used to infer the `Object` constructor. */\n\n var objectCtorString = funcToString.call(Object);\n /** Used to restore the original `_` reference in `_.noConflict`. */\n\n var oldDash = root._;\n /** Used to detect if a method is native. */\n\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n /** Built-in value references. */\n\n var Buffer = moduleExports ? context.Buffer : undefined,\n _Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = _Symbol ? _Symbol.isConcatSpreadable : undefined,\n symIterator = _Symbol ? _Symbol.iterator : undefined,\n symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n var defineProperty = function () {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }();\n /** Mocked built-ins. */\n\n\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n /* Built-in method references for those with the same name as other `lodash` methods. */\n\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n /* Built-in method references that are verified to be native. */\n\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n /** Used to store function metadata. */\n\n var metaMap = WeakMap && new WeakMap();\n /** Used to lookup unminified function names. */\n\n var realNames = {};\n /** Used to detect maps, sets, and weakmaps. */\n\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n /** Used to convert symbols to primitives and strings. */\n\n var symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n\n return new LodashWrapper(value);\n }\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n\n\n var baseCreate = function () {\n function object() {}\n\n return function (proto) {\n if (!isObject(proto)) {\n return {};\n }\n\n if (objectCreate) {\n return objectCreate(proto);\n }\n\n object.prototype = proto;\n var result = new object();\n object.prototype = undefined;\n return result;\n };\n }();\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n\n\n function baseLodash() {// No operation performed.\n }\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n\n\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n\n\n lodash.templateSettings = {\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n }; // Ensure wrappers are instances of `baseLodash`.\n\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n\n\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n\n\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n\n return result;\n }\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n\n\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : start - 1,\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || !isRight && arrLength == length && takeCount == length) {\n return baseWrapperValue(array, this.__actions__);\n }\n\n var result = [];\n\n outer: while (length-- && resIndex < takeCount) {\n index += dir;\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n\n result[resIndex++] = value;\n }\n\n return result;\n } // Ensure `LazyWrapper` is an instance of `baseLodash`.\n\n\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\n\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n } // Add methods to `Hash`.\n\n\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\n\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n }\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n }\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n } // Add methods to `ListCache`.\n\n\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n }\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n } // Add methods to `MapCache`.\n\n\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n }\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\n\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n }\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n\n\n function setCacheHas(value) {\n return this.__data__.has(value);\n } // Add methods to `SetCache`.\n\n\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\n function stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n }\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n }\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\n function stackGet(key) {\n return this.__data__.get(key);\n }\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\n function stackHas(key) {\n return this.__data__.has(key);\n }\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\n\n function stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n } // Add methods to `Stack`.\n\n\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n\n\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n\n\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n\n\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\n\n function assignMergeValue(object, key, value) {\n if (value !== undefined && !eq(object[key], value) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n }\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\n\n function assignValue(object, key, value) {\n var objValue = object[key];\n\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n }\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\n function assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n }\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n\n\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n\n\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\n\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n\n\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n\n return result;\n }\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n\n\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n\n return number;\n }\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n\n\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n\n if (result !== undefined) {\n return result;\n }\n\n if (!isObject(value)) {\n return value;\n }\n\n var isArr = isArray(value);\n\n if (isArr) {\n result = initCloneArray(value);\n\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n\n if (tag == objectTag || tag == argsTag || isFunc && !object) {\n result = isFlat || isFunc ? {} : initCloneObject(value);\n\n if (!isDeep) {\n return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n\n result = initCloneByTag(value, tag, isDeep);\n }\n } // Check for circular references and return its corresponding clone.\n\n\n stack || (stack = new Stack());\n var stacked = stack.get(value);\n\n if (stacked) {\n return stacked;\n }\n\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function (subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function (subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n } // Recursively populate clone (susceptible to call stack limits).\n\n\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n\n\n function baseConforms(source) {\n var props = keys(source);\n return function (object) {\n return baseConformsTo(object, source, props);\n };\n }\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n\n\n function baseConformsTo(object, source, props) {\n var length = props.length;\n\n if (object == null) {\n return !length;\n }\n\n object = Object(object);\n\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if (value === undefined && !(key in object) || !predicate(value)) {\n return false;\n }\n }\n\n return true;\n }\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n\n\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n return setTimeout(function () {\n func.apply(undefined, args);\n }, wait);\n }\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n\n\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n } else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n value = comparator || value !== 0 ? value : 0;\n\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n\n result.push(value);\n } else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n\n\n var baseEach = createBaseEach(baseForOwn);\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function (value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n\n\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined ? current === current && !isSymbol(current) : comparator(current, computed))) {\n var computed = current,\n result = value;\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n\n\n function baseFill(array, value, start, end) {\n var length = array.length;\n start = toInteger(start);\n\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n\n end = end === undefined || end > length ? length : toInteger(end);\n\n if (end < 0) {\n end += length;\n }\n\n end = start > end ? 0 : toLength(end);\n\n while (start < end) {\n array[start++] = value;\n }\n\n return array;\n }\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\n\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function (value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n\n\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n\n\n var baseFor = createBaseFor();\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n\n var baseForRight = createBaseFor(true);\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n\n\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n\n\n function baseFunctions(object, props) {\n return arrayFilter(props, function (key) {\n return isFunction(object[key]);\n });\n }\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n\n\n function baseGet(object, path) {\n path = castPath(path, object);\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n\n return index && index == length ? object : undefined;\n }\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n }\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n\n\n function baseGt(value, other) {\n return value > other;\n }\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n\n\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n\n\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n\n\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n\n\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined;\n }\n\n array = arrays[0];\n var index = -1,\n seen = caches[0];\n\n outer: while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n value = comparator || value !== 0 ? value : 0;\n\n if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {\n othIndex = othLength;\n\n while (--othIndex) {\n var cache = caches[othIndex];\n\n if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) {\n continue outer;\n }\n }\n\n if (seen) {\n seen.push(computed);\n }\n\n result.push(value);\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function (value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n\n\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\n\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n\n\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n\n\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\n\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n\n\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n\n\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n\n object = Object(object);\n\n while (index--) {\n var data = matchData[index];\n\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false;\n }\n }\n\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack();\n\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n\n if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {\n return false;\n }\n }\n }\n\n return true;\n }\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\n\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n\n\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n\n\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\n\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n\n\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n\n if (value == null) {\n return identity;\n }\n\n if (_typeof(value) == 'object') {\n return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n }\n\n return property(value);\n }\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n\n\n function baseLt(value, other) {\n return value < other;\n }\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n\n\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n baseEach(collection, function (value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n\n\n function baseMatches(source) {\n var matchData = getMatchData(source);\n\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n\n return function (object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n\n\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n\n return function (object) {\n var objValue = get(object, path);\n return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n\n\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n\n baseFor(source, function (srcValue, key) {\n stack || (stack = new Stack());\n\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n } else {\n var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n\n\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n\n var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined;\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n newValue = srcValue;\n\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n } else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n } else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n } else {\n newValue = [];\n }\n } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n } else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n } else {\n isCommon = false;\n }\n }\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n\n assignMergeValue(object, key, newValue);\n }\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n\n\n function baseNth(array, n) {\n var length = array.length;\n\n if (!length) {\n return;\n }\n\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n\n\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function (iteratee) {\n if (isArray(iteratee)) {\n return function (value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n };\n }\n\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n var result = baseMap(collection, function (value, key, collection) {\n var criteria = arrayMap(iteratees, function (iteratee) {\n return iteratee(value);\n });\n return {\n 'criteria': criteria,\n 'index': ++index,\n 'value': value\n };\n });\n return baseSortBy(result, function (object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n\n\n function basePick(object, paths) {\n return basePickBy(object, paths, function (value, path) {\n return hasIn(object, path);\n });\n }\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n\n\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n\n return result;\n }\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n\n\n function basePropertyDeep(path) {\n return function (object) {\n return baseGet(object, path);\n };\n }\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n\n\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n\n splice.call(array, fromIndex, 1);\n }\n }\n\n return array;\n }\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n\n\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n\n if (length == lastIndex || index !== previous) {\n var previous = index;\n\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n\n return array;\n }\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n\n\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n\n\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n\n return result;\n }\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n\n\n function baseRepeat(string, n) {\n var result = '';\n\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n } // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n\n\n do {\n if (n % 2) {\n result += string;\n }\n\n n = nativeFloor(n / 2);\n\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n\n\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n\n\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n\n\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n\n\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n }\n }\n\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n\n return object;\n }\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n\n\n var baseSetData = !metaMap ? identity : function (func, data) {\n metaMap.set(func, data);\n return func;\n };\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n\n var baseSetToString = !defineProperty ? identity : function (func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n\n\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n\n end = end > length ? length : end;\n\n if (end < 0) {\n end += length;\n }\n\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n\n while (++index < length) {\n result[index] = array[index + start];\n }\n\n return result;\n }\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n\n\n function baseSome(collection, predicate) {\n var result;\n baseEach(collection, function (value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n\n\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = low + high >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return high;\n }\n\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n\n\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? computed <= value : computed < value;\n }\n\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n\n\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n\n\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n return +value;\n }\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n\n\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n }\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n\n\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n } else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n\n if (set) {\n return setToArray(set);\n }\n\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache();\n } else {\n seen = iteratee ? [] : result;\n }\n\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n value = comparator || value !== 0 ? value : 0;\n\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n\n if (iteratee) {\n seen.push(computed);\n }\n\n result.push(value);\n } else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n\n result.push(value);\n }\n }\n\n return result;\n }\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n\n\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n\n\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n\n\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n\n return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);\n }\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n\n\n function baseWrapperValue(value, actions) {\n var result = value;\n\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n\n return arrayReduce(actions, function (result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n\n\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n\n\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n\n return result;\n }\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n\n\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n\n\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n\n\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n\n\n var castRest = baseRest;\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return !start && end >= length ? array : baseSlice(array, start, end);\n }\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n\n\n var clearTimeout = ctxClearTimeout || function (id) {\n return root.clearTimeout(id);\n };\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n\n\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n buffer.copy(result);\n return result;\n }\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n\n\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n\n\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n\n\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n\n\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n\n\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n\n\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {\n return 1;\n }\n\n if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {\n return -1;\n }\n }\n\n return 0;\n }\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n\n\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n\n\n return object.index - other.index;\n }\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n\n\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n\n return result;\n }\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n\n\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n\n var offset = argsIndex;\n\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n\n return result;\n }\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n\n\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n array || (array = Array(length));\n\n while (++index < length) {\n array[index] = source[index];\n }\n\n return array;\n }\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n\n\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n\n return object;\n }\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n\n\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n\n\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n\n\n function createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n\n\n function createAssigner(assigner) {\n return baseRest(function (object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n\n object = Object(object);\n\n while (++index < length) {\n var source = sources[index];\n\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n\n return object;\n });\n }\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n\n\n function createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n\n return collection;\n };\n }\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n\n\n function createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n\n return object;\n };\n }\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n\n return wrapper;\n }\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n\n\n function createCaseFirst(methodName) {\n return function (string) {\n string = toString(string);\n var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined;\n var chr = strSymbols ? strSymbols[0] : string.charAt(0);\n var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1);\n return chr[methodName]() + trailing;\n };\n }\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n\n\n function createCompounder(callback) {\n return function (string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createCtor(Ctor) {\n return function () {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n\n switch (args.length) {\n case 0:\n return new Ctor();\n\n case 1:\n return new Ctor(args[0]);\n\n case 2:\n return new Ctor(args[0], args[1]);\n\n case 3:\n return new Ctor(args[0], args[1], args[2]);\n\n case 4:\n return new Ctor(args[0], args[1], args[2], args[3]);\n\n case 5:\n return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n\n case 6:\n return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n\n case 7:\n return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args); // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n\n return isObject(result) ? result : thisBinding;\n };\n }\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n\n var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);\n length -= holders.length;\n\n if (length < arity) {\n return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length);\n }\n\n var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n return apply(fn, this, args);\n }\n\n return wrapper;\n }\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n\n\n function createFind(findIndexFunc) {\n return function (collection, predicate, fromIndex) {\n var iterable = Object(collection);\n\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n\n predicate = function predicate(key) {\n return iteratee(iterable[key], key, iterable);\n };\n }\n\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n\n\n function createFlow(fromRight) {\n return flatRest(function (funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n\n while (index--) {\n var func = funcs[index];\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n\n index = wrapper ? index : length;\n\n while (++index < length) {\n func = funcs[index];\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);\n }\n }\n\n return function () {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n\n return result;\n };\n });\n }\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n\n length -= holdersCount;\n\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length);\n }\n\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n length = args.length;\n\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n\n if (isAry && ary < length) {\n args.length = ary;\n }\n\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n\n return fn.apply(thisBinding, args);\n }\n\n return wrapper;\n }\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n\n\n function createInverter(setter, toIteratee) {\n return function (object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n\n\n function createMathOperation(operator, defaultValue) {\n return function (value, other) {\n var result;\n\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n\n if (value !== undefined) {\n result = value;\n }\n\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n\n result = operator(value, other);\n }\n\n return result;\n };\n }\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n\n\n function createOver(arrayFunc) {\n return flatRest(function (iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function (args) {\n var thisArg = this;\n return arrayFunc(iteratees, function (iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n\n\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n var charsLength = chars.length;\n\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length);\n }\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n\n return apply(fn, isBind ? thisArg : this, args);\n }\n\n return wrapper;\n }\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n\n\n function createRange(fromRight) {\n return function (start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n } // Ensure the sign of `-0` is preserved.\n\n\n start = toFinite(start);\n\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n\n step = step === undefined ? start < end ? 1 : -1 : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n\n\n function createRelationalOperation(operator) {\n return function (value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n\n return operator(value, other);\n };\n }\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n\n var newData = [func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity];\n var result = wrapFunc.apply(undefined, newData);\n\n if (isLaziable(func)) {\n setData(result, newData);\n }\n\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n\n\n function createRound(methodName) {\n var func = Math[methodName];\n return function (number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n\n return func(number);\n };\n }\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n\n\n var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) {\n return new Set(values);\n };\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n\n function createToPairs(keysFunc) {\n return function (object) {\n var tag = getTag(object);\n\n if (tag == mapTag) {\n return mapToArray(object);\n }\n\n if (tag == setTag) {\n return setToPairs(object);\n }\n\n return baseToPairs(object, keysFunc(object));\n };\n }\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n\n\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var length = partials ? partials.length : 0;\n\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n partials = holders = undefined;\n }\n\n var data = isBindKey ? undefined : getData(func);\n var newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n if (data) {\n mergeData(newData, data);\n }\n\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n\n\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n return srcValue;\n }\n\n return objValue;\n }\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n\n\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n\n return objValue;\n }\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n\n\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\n\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Check that cyclic values are equal.\n\n\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n }\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Check that cyclic values are equal.\n\n\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n\n\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n\n\n var getData = !metaMap ? noop : function (func) {\n return metaMap.get(func);\n };\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n\n function getFuncName(func) {\n var result = func.name + '',\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n\n return result;\n }\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n\n\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n\n\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n }\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n\n\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n result[length] = [key, value, isStrictComparable(value)];\n }\n\n return result;\n }\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\n\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n }\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\n\n var getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) {\n var result = [];\n\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n\n return result;\n };\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n }\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n\n\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop':\n start += size;\n break;\n\n case 'dropRight':\n end -= size;\n break;\n\n case 'take':\n end = nativeMin(end, start + size);\n break;\n\n case 'takeRight':\n start = nativeMax(start, end - size);\n break;\n }\n }\n\n return {\n 'start': start,\n 'end': end\n };\n }\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n\n\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n\n\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n\n object = object[key];\n }\n\n if (result || ++index != length) {\n return result;\n }\n\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));\n }\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n\n\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length); // Add properties assigned by `RegExp#exec`.\n\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n\n return result;\n }\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n\n\n function initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n }\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n\n\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag:\n case float64Tag:\n case int8Tag:\n case int16Tag:\n case int32Tag:\n case uint8Tag:\n case uint8ClampedTag:\n case uint16Tag:\n case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor();\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor();\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n\n\n function insertWrapDetails(source, details) {\n var length = details.length;\n\n if (!length) {\n return source;\n }\n\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n\n\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\n\n function isIndex(value, length) {\n var type = _typeof(value);\n\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n\n\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n\n var type = _typeof(index);\n\n if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n return eq(object[index], value);\n }\n\n return false;\n }\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n\n\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n\n var type = _typeof(value);\n\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n }\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\n\n function isKeyable(value) {\n var type = _typeof(value);\n\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n }\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n\n\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n\n if (func === other) {\n return true;\n }\n\n var data = getData(other);\n return !!data && func === data[0];\n }\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n\n\n var isMaskable = coreJsData ? isFunction : stubFalse;\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n }\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n\n\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n\n\n function matchesStrictComparable(key, srcValue) {\n return function (object) {\n if (object == null) {\n return false;\n }\n\n return object[key] === srcValue && (srcValue !== undefined || key in Object(object));\n };\n }\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n\n\n function memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n\n return key;\n });\n var cache = result.cache;\n return result;\n }\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n\n\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; // Exit early if metadata can't be merged.\n\n if (!(isCommon || isCombo)) {\n return data;\n } // Use source `thisArg` if available.\n\n\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2]; // Set when currying a bound function.\n\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n } // Compose partial arguments.\n\n\n var value = source[3];\n\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n } // Compose partial right arguments.\n\n\n value = source[5];\n\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n } // Use source `argPos` if available.\n\n\n value = source[7];\n\n if (value) {\n data[7] = value;\n } // Use source `ary` if it's smaller.\n\n\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n } // Use source `arity` if one is not provided.\n\n\n if (data[9] == null) {\n data[9] = source[9];\n } // Use source `func` and merge bitmasks.\n\n\n data[0] = source[0];\n data[1] = newBitmask;\n return data;\n }\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\n function nativeKeysIn(object) {\n var result = [];\n\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n\n return result;\n }\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\n\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n\n\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? func.length - 1 : start, 0);\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n\n index = -1;\n var otherArgs = Array(start + 1);\n\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n\n\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n\n\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n\n return array;\n }\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\n\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n\n\n var setData = shortOut(baseSetData);\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n\n var setTimeout = ctxSetTimeout || function (func, wait) {\n return root.setTimeout(func, wait);\n };\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n\n\n var setToString = shortOut(baseSetToString);\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n\n function setWrapToString(wrapper, reference, bitmask) {\n var source = reference + '';\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n\n\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n return function () {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n lastCalled = stamp;\n\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n\n return func.apply(undefined, arguments);\n };\n }\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n\n\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n size = size === undefined ? length : size;\n\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n array[rand] = array[index];\n array[index] = value;\n }\n\n array.length = size;\n return array;\n }\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n\n\n var stringToPath = memoizeCapped(function (string) {\n var result = [];\n\n if (string.charCodeAt(0) === 46\n /* . */\n ) {\n result.push('');\n }\n\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n });\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n }\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\n\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n }\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n\n\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function (pair) {\n var value = '_.' + pair[0];\n\n if (bitmask & pair[1] && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n\n\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n\n\n function chunk(array, size, guard) {\n if (guard ? isIterateeCall(array, size, guard) : size === undefined) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n\n var length = array == null ? 0 : array.length;\n\n if (!length || size < 1) {\n return [];\n }\n\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, index += size);\n }\n\n return result;\n }\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n\n\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (value) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n }\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n\n\n function concat() {\n var length = arguments.length;\n\n if (!length) {\n return [];\n }\n\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n\n\n var difference = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];\n });\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n\n var differenceBy = baseRest(function (array, values) {\n var iteratee = last(values);\n\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : [];\n });\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n\n var differenceWith = baseRest(function (array, values) {\n var comparator = last(values);\n\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) : [];\n });\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n n = guard || n === undefined ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n\n\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n n = guard || n === undefined ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n\n\n function dropRightWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];\n }\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n\n\n function dropWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];\n }\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n\n\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n\n return baseFill(array, value, start, end);\n }\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n\n\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return -1;\n }\n\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n\n\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return -1;\n }\n\n var index = length - 1;\n\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n\n\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n\n\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n\n\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n\n\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n\n return result;\n }\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n\n\n function head(array) {\n return array && array.length ? array[0] : undefined;\n }\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n\n\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return -1;\n }\n\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n\n return baseIndexOf(array, value, index);\n }\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n\n\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n\n\n var intersection = baseRest(function (arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];\n });\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n\n var intersectionBy = baseRest(function (arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee, 2)) : [];\n });\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n\n var intersectionWith = baseRest(function (arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n\n if (comparator) {\n mapped.pop();\n }\n\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined, comparator) : [];\n });\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n\n\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n\n\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return -1;\n }\n\n var index = length;\n\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n\n return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true);\n }\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n\n\n function nth(array, n) {\n return array && array.length ? baseNth(array, toInteger(n)) : undefined;\n }\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n\n\n var pull = baseRest(pullAll);\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n\n function pullAll(array, values) {\n return array && array.length && values && values.length ? basePullAll(array, values) : array;\n }\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n\n\n function pullAllBy(array, values, iteratee) {\n return array && array.length && values && values.length ? basePullAll(array, values, getIteratee(iteratee, 2)) : array;\n }\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n\n\n function pullAllWith(array, values, comparator) {\n return array && array.length && values && values.length ? basePullAll(array, values, undefined, comparator) : array;\n }\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n\n\n var pullAt = flatRest(function (array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n basePullAt(array, arrayMap(indexes, function (index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n return result;\n });\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n\n function remove(array, predicate) {\n var result = [];\n\n if (!(array && array.length)) {\n return result;\n }\n\n var index = -1,\n indexes = [],\n length = array.length;\n predicate = getIteratee(predicate, 3);\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n\n basePullAt(array, indexes);\n return result;\n }\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n\n\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n\n\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n } else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n\n return baseSlice(array, start, end);\n }\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n\n\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n\n\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n\n\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n\n if (length) {\n var index = baseSortedIndex(array, value);\n\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n\n return -1;\n }\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n\n\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n\n\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n\n\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n\n if (eq(array[index], value)) {\n return index;\n }\n }\n\n return -1;\n }\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n\n\n function sortedUniq(array) {\n return array && array.length ? baseSortedUniq(array) : [];\n }\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n\n\n function sortedUniqBy(array, iteratee) {\n return array && array.length ? baseSortedUniq(array, getIteratee(iteratee, 2)) : [];\n }\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n\n\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n\n\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n\n n = guard || n === undefined ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n\n\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n\n if (!length) {\n return [];\n }\n\n n = guard || n === undefined ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n\n\n function takeRightWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];\n }\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n\n\n function takeWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];\n }\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n\n\n var union = baseRest(function (arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n\n var unionBy = baseRest(function (arrays) {\n var iteratee = last(arrays);\n\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n\n var unionWith = baseRest(function (arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n\n function uniq(array) {\n return array && array.length ? baseUniq(array) : [];\n }\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n\n\n function uniqBy(array, iteratee) {\n return array && array.length ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n\n\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return array && array.length ? baseUniq(array, undefined, comparator) : [];\n }\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n\n\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n\n var length = 0;\n array = arrayFilter(array, function (group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function (index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n\n\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n\n var result = unzip(array);\n\n if (iteratee == null) {\n return result;\n }\n\n return arrayMap(result, function (group) {\n return apply(iteratee, undefined, group);\n });\n }\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n\n\n var without = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, values) : [];\n });\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n\n var xor = baseRest(function (arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n\n var xorBy = baseRest(function (arrays) {\n var iteratee = last(arrays);\n\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n\n var xorWith = baseRest(function (arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n\n var zip = baseRest(unzip);\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n\n\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n\n\n var zipWith = baseRest(function (arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n\n\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n\n\n function thru(value, interceptor) {\n return interceptor(value);\n }\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n\n\n var wrapperAt = flatRest(function (paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function interceptor(object) {\n return baseAt(object, paths);\n };\n\n if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n\n value = value.slice(start, +start + (length ? 1 : 0));\n\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n\n return new LodashWrapper(value, this.__chain__).thru(function (array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n\n return array;\n });\n });\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n\n function wrapperChain() {\n return chain(this);\n }\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n\n\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n\n\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n return {\n 'done': done,\n 'value': value\n };\n }\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n\n\n function wrapperToIterator() {\n return this;\n }\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n\n\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n\n var previous = clone;\n parent = parent.__wrapped__;\n }\n\n previous.__wrapped__ = value;\n return result;\n }\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n\n\n function wrapperReverse() {\n var value = this.__wrapped__;\n\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n\n wrapped = wrapped.reverse();\n\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n\n return new LodashWrapper(wrapped, this.__chain__);\n }\n\n return this.thru(reverse);\n }\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n\n\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n\n\n var countBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n\n return func(collection, getIteratee(predicate, 3));\n }\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n\n\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n\n\n var find = createFind(findIndex);\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n\n var findLast = createFind(findLastIndex);\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n\n\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n\n\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n\n\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n\n\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n\n\n var groupBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;\n var length = collection.length;\n\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n\n return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;\n }\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n\n\n var invokeMap = baseRest(function (collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n baseEach(collection, function (value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n\n var keyBy = createAggregator(function (result, value, key) {\n baseAssignValue(result, key, value);\n });\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n\n\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n\n orders = guard ? undefined : orders;\n\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n\n return baseOrderBy(collection, iteratees, orders);\n }\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n\n\n var partition = createAggregator(function (result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function () {\n return [[], []];\n });\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n\n\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n\n\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n\n\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n\n\n function sampleSize(collection, n, guard) {\n if (guard ? isIterateeCall(collection, n, guard) : n === undefined) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n\n\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n\n\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n\n var tag = getTag(collection);\n\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n\n return baseKeys(collection).length;\n }\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n\n\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n\n return func(collection, getIteratee(predicate, 3));\n }\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n\n\n var sortBy = baseRest(function (collection, iteratees) {\n if (collection == null) {\n return [];\n }\n\n var length = iteratees.length;\n\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\n var now = ctxNow || function () {\n return root.Date.now();\n };\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n\n\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n n = toInteger(n);\n return function () {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n\n\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = func && n == null ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n\n\n function before(n, func) {\n var result;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n n = toInteger(n);\n return function () {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n\n if (n <= 1) {\n func = undefined;\n }\n\n return result;\n };\n }\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n\n\n var bind = baseRest(function (func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n\n var bindKey = baseRest(function (object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n\n return createWrap(key, bitmask, object, partials, holders);\n });\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n\n\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\n\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n\n\n var defer = baseRest(function (func, args) {\n return baseDelay(func, 1, args);\n });\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n\n var delay = baseRest(function (func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n\n\n function memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n } // Expose `MapCache`.\n\n\n memoize.Cache = MapCache;\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n return function () {\n var args = arguments;\n\n switch (args.length) {\n case 0:\n return !predicate.call(this);\n\n case 1:\n return !predicate.call(this, args[0]);\n\n case 2:\n return !predicate.call(this, args[0], args[1]);\n\n case 3:\n return !predicate.call(this, args[0], args[1], args[2]);\n }\n\n return !predicate.apply(this, args);\n };\n }\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n\n\n function once(func) {\n return before(2, func);\n }\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n\n\n var overArgs = castRest(function (func, transforms) {\n transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n var funcsLength = transforms.length;\n return baseRest(function (args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n\n return apply(func, this, args);\n });\n });\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n\n var partial = baseRest(function (func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n\n var partialRight = baseRest(function (func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n\n var rearg = flatRest(function (func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n\n\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function (args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n\n return apply(func, this, otherArgs);\n });\n }\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n\n\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n\n\n function unary(func) {\n return ary(func, 1);\n }\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n\n\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n\n\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n\n\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n\n\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n\n\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n\n\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n\n\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\n\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n\n\n var gt = createRelationalOperation(baseGt);\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n\n var gte = createRelationalOperation(function (value, other) {\n return value >= other;\n });\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\n var isArguments = baseIsArguments(function () {\n return arguments;\n }()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n };\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\n var isArray = Array.isArray;\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n\n\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n\n\n function isBoolean(value) {\n return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;\n }\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\n\n var isBuffer = nativeIsBuffer || stubFalse;\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n\n\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n\n if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n\n var tag = getTag(value);\n\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n }\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\n\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n\n\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n\n\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag || typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value);\n }\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n\n\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\n\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n\n\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\n\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\n function isObject(value) {\n var type = _typeof(value);\n\n return value != null && (type == 'object' || type == 'function');\n }\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\n function isObjectLike(value) {\n return value != null && _typeof(value) == 'object';\n }\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n\n\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n\n\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n\n\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n\n\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n\n return baseIsNative(value);\n }\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n\n\n function isNull(value) {\n return value === null;\n }\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n\n\n function isNil(value) {\n return value == null;\n }\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n\n\n function isNumber(value) {\n return typeof value == 'number' || isObjectLike(value) && baseGetTag(value) == numberTag;\n }\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n\n\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n\n var proto = getPrototype(value);\n\n if (proto === null) {\n return true;\n }\n\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n }\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n\n\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n\n\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n\n function isString(value) {\n return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;\n }\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\n function isSymbol(value) {\n return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n }\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\n\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n\n function isUndefined(value) {\n return value === undefined;\n }\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n\n\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n\n\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n\n\n var lt = createRelationalOperation(baseLt);\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n\n var lte = createRelationalOperation(function (value, other) {\n return value <= other;\n });\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n\n function toArray(value) {\n if (!value) {\n return [];\n }\n\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;\n return func(value);\n }\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n\n\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n\n value = toNumber(value);\n\n if (value === INFINITY || value === -INFINITY) {\n var sign = value < 0 ? -1 : 1;\n return sign * MAX_INTEGER;\n }\n\n return value === value ? value : 0;\n }\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n\n\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n return result === result ? remainder ? result - remainder : result : 0;\n }\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n\n\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\n\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n }\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n\n\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n\n\n function toSafeInteger(value) {\n return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;\n }\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n\n\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n\n\n var assign = createAssigner(function (object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n\n var assignIn = createAssigner(function (object, source) {\n copyObject(source, keysIn(source), object);\n });\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n\n var assignInWith = createAssigner(function (object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n\n var assignWith = createAssigner(function (object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n\n var at = flatRest(baseAt);\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n\n\n var defaults = baseRest(function (object, sources) {\n object = Object(object);\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n\n var defaultsDeep = baseRest(function (args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n\n\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n\n\n function forIn(object, iteratee) {\n return object == null ? object : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n\n\n function forInRight(object, iteratee) {\n return object == null ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n\n\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n\n\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n\n\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n\n\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n\n\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n\n\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n\n\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n\n\n var invert = createInverter(function (result, value, key) {\n if (value != null && typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n\n var invertBy = createInverter(function (result, value, key) {\n if (value != null && typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n\n var invoke = baseRest(baseInvoke);\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n\n\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n\n\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n baseForOwn(object, function (value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n\n\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n baseForOwn(object, function (value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n\n\n var merge = createAssigner(function (object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n\n var mergeWith = createAssigner(function (object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n\n var omit = flatRest(function (object, paths) {\n var result = {};\n\n if (object == null) {\n return result;\n }\n\n var isDeep = false;\n paths = arrayMap(paths, function (path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n\n var length = paths.length;\n\n while (length--) {\n baseUnset(result, paths[length]);\n }\n\n return result;\n });\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n\n\n var pick = flatRest(function (object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n\n var props = arrayMap(getAllKeysIn(object), function (prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function (value, path) {\n return predicate(value, path[0]);\n });\n }\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n\n\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n var index = -1,\n length = path.length; // Ensure the loop is entered when path is empty.\n\n if (!length) {\n length = 1;\n object = undefined;\n }\n\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n\n object = isFunction(value) ? value.call(object) : value;\n }\n\n return object;\n }\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n\n\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n\n\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n\n\n var toPairs = createToPairs(keys);\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n\n var toPairsIn = createToPairs(keysIn);\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n iteratee = getIteratee(iteratee, 4);\n\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n\n if (isArrLike) {\n accumulator = isArr ? new Ctor() : [];\n } else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n } else {\n accumulator = {};\n }\n }\n\n (isArrLike ? arrayEach : baseForOwn)(object, function (value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n\n\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n\n\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n\n\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n\n\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n\n\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n\n\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n\n return baseClamp(toNumber(number), lower, upper);\n }\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n\n\n function inRange(number, start, end) {\n start = toFinite(start);\n\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n\n\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n } else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n } else {\n lower = toFinite(lower);\n\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1))), upper);\n }\n\n return baseRandom(lower, upper);\n }\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n\n\n var camelCase = createCompounder(function (result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n\n\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n\n\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n var length = string.length;\n position = position === undefined ? length : baseClamp(toInteger(position), 0, length);\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n\n\n function escape(string) {\n string = toString(string);\n return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;\n }\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n\n\n function escapeRegExp(string) {\n string = toString(string);\n return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\\\$&') : string;\n }\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n\n\n var kebabCase = createCompounder(function (result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n\n var lowerCase = createCompounder(function (result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n\n var lowerFirst = createCaseFirst('toLowerCase');\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n\n if (!length || strLength >= length) {\n return string;\n }\n\n var mid = (length - strLength) / 2;\n return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);\n }\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n\n\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n return length && strLength < length ? string + createPadding(length - strLength, chars) : string;\n }\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n\n\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n return length && strLength < length ? createPadding(length - strLength, chars) + string : string;\n }\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n\n\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n\n\n function repeat(string, n, guard) {\n if (guard ? isIterateeCall(string, n, guard) : n === undefined) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n\n return baseRepeat(toString(string), n);\n }\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n\n\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n\n\n var snakeCase = createCompounder(function (result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n\n if (!limit) {\n return [];\n }\n\n string = toString(string);\n\n if (string && (typeof separator == 'string' || separator != null && !isRegExp(separator))) {\n separator = baseToString(separator);\n\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n\n return string.split(separator, limit);\n }\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n\n\n var startCase = createCompounder(function (result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '\");\n }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(val) {\n // Replace closing\n var re = /<\\/\\W*script/gi;\n return val.replace(re, '(/script');\n};\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime-corejs2/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _assign = _interopRequireDefault(require(\"@babel/runtime-corejs2/core-js/object/assign\"));\n\nvar _default = {\n authenticityToken: function authenticityToken() {\n var token = document.querySelector('meta[name=\"csrf-token\"]');\n\n if (token && token instanceof window.HTMLMetaElement) {\n return token.content;\n }\n\n return null;\n },\n authenticityHeaders: function authenticityHeaders() {\n var otherHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return (0, _assign.default)(otherHeaders, {\n 'X-CSRF-Token': this.authenticityToken(),\n 'X-Requested-With': 'XMLHttpRequest'\n });\n }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = context;\n/**\n * Get the context, be it window or global\n * @returns {boolean|Window|*|context}\n */\n\nfunction context() {\n return typeof window !== 'undefined' && window || typeof global !== 'undefined' && global || this;\n}","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\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 = NATIVE_BIND ? Function.bind : function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","/**\n * Copyright (c) 2013-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'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nfunction emptyFunctionWithReset() {}\n\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n ;\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n }\n\n ; // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};","/**\n * Copyright (c) 2013-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'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\nmodule.exports = ReactPropTypesSecret;","var map = {\n\t\"./af\": 349,\n\t\"./af.js\": 349,\n\t\"./ar\": 350,\n\t\"./ar-dz\": 351,\n\t\"./ar-dz.js\": 351,\n\t\"./ar-kw\": 352,\n\t\"./ar-kw.js\": 352,\n\t\"./ar-ly\": 353,\n\t\"./ar-ly.js\": 353,\n\t\"./ar-ma\": 354,\n\t\"./ar-ma.js\": 354,\n\t\"./ar-sa\": 355,\n\t\"./ar-sa.js\": 355,\n\t\"./ar-tn\": 356,\n\t\"./ar-tn.js\": 356,\n\t\"./ar.js\": 350,\n\t\"./az\": 357,\n\t\"./az.js\": 357,\n\t\"./be\": 358,\n\t\"./be.js\": 358,\n\t\"./bg\": 359,\n\t\"./bg.js\": 359,\n\t\"./bm\": 360,\n\t\"./bm.js\": 360,\n\t\"./bn\": 361,\n\t\"./bn-bd\": 362,\n\t\"./bn-bd.js\": 362,\n\t\"./bn.js\": 361,\n\t\"./bo\": 363,\n\t\"./bo.js\": 363,\n\t\"./br\": 364,\n\t\"./br.js\": 364,\n\t\"./bs\": 365,\n\t\"./bs.js\": 365,\n\t\"./ca\": 366,\n\t\"./ca.js\": 366,\n\t\"./cs\": 367,\n\t\"./cs.js\": 367,\n\t\"./cv\": 368,\n\t\"./cv.js\": 368,\n\t\"./cy\": 369,\n\t\"./cy.js\": 369,\n\t\"./da\": 370,\n\t\"./da.js\": 370,\n\t\"./de\": 371,\n\t\"./de-at\": 372,\n\t\"./de-at.js\": 372,\n\t\"./de-ch\": 373,\n\t\"./de-ch.js\": 373,\n\t\"./de.js\": 371,\n\t\"./dv\": 374,\n\t\"./dv.js\": 374,\n\t\"./el\": 375,\n\t\"./el.js\": 375,\n\t\"./en-au\": 376,\n\t\"./en-au.js\": 376,\n\t\"./en-ca\": 377,\n\t\"./en-ca.js\": 377,\n\t\"./en-gb\": 378,\n\t\"./en-gb.js\": 378,\n\t\"./en-ie\": 379,\n\t\"./en-ie.js\": 379,\n\t\"./en-il\": 380,\n\t\"./en-il.js\": 380,\n\t\"./en-in\": 381,\n\t\"./en-in.js\": 381,\n\t\"./en-nz\": 382,\n\t\"./en-nz.js\": 382,\n\t\"./en-sg\": 383,\n\t\"./en-sg.js\": 383,\n\t\"./eo\": 384,\n\t\"./eo.js\": 384,\n\t\"./es\": 385,\n\t\"./es-do\": 386,\n\t\"./es-do.js\": 386,\n\t\"./es-mx\": 387,\n\t\"./es-mx.js\": 387,\n\t\"./es-us\": 388,\n\t\"./es-us.js\": 388,\n\t\"./es.js\": 385,\n\t\"./et\": 389,\n\t\"./et.js\": 389,\n\t\"./eu\": 390,\n\t\"./eu.js\": 390,\n\t\"./fa\": 391,\n\t\"./fa.js\": 391,\n\t\"./fi\": 392,\n\t\"./fi.js\": 392,\n\t\"./fil\": 393,\n\t\"./fil.js\": 393,\n\t\"./fo\": 394,\n\t\"./fo.js\": 394,\n\t\"./fr\": 395,\n\t\"./fr-ca\": 396,\n\t\"./fr-ca.js\": 396,\n\t\"./fr-ch\": 397,\n\t\"./fr-ch.js\": 397,\n\t\"./fr.js\": 395,\n\t\"./fy\": 398,\n\t\"./fy.js\": 398,\n\t\"./ga\": 399,\n\t\"./ga.js\": 399,\n\t\"./gd\": 400,\n\t\"./gd.js\": 400,\n\t\"./gl\": 401,\n\t\"./gl.js\": 401,\n\t\"./gom-deva\": 402,\n\t\"./gom-deva.js\": 402,\n\t\"./gom-latn\": 403,\n\t\"./gom-latn.js\": 403,\n\t\"./gu\": 404,\n\t\"./gu.js\": 404,\n\t\"./he\": 405,\n\t\"./he.js\": 405,\n\t\"./hi\": 406,\n\t\"./hi.js\": 406,\n\t\"./hr\": 407,\n\t\"./hr.js\": 407,\n\t\"./hu\": 408,\n\t\"./hu.js\": 408,\n\t\"./hy-am\": 409,\n\t\"./hy-am.js\": 409,\n\t\"./id\": 410,\n\t\"./id.js\": 410,\n\t\"./is\": 411,\n\t\"./is.js\": 411,\n\t\"./it\": 412,\n\t\"./it-ch\": 413,\n\t\"./it-ch.js\": 413,\n\t\"./it.js\": 412,\n\t\"./ja\": 414,\n\t\"./ja.js\": 414,\n\t\"./jv\": 415,\n\t\"./jv.js\": 415,\n\t\"./ka\": 416,\n\t\"./ka.js\": 416,\n\t\"./kk\": 417,\n\t\"./kk.js\": 417,\n\t\"./km\": 418,\n\t\"./km.js\": 418,\n\t\"./kn\": 419,\n\t\"./kn.js\": 419,\n\t\"./ko\": 420,\n\t\"./ko.js\": 420,\n\t\"./ku\": 421,\n\t\"./ku.js\": 421,\n\t\"./ky\": 422,\n\t\"./ky.js\": 422,\n\t\"./lb\": 423,\n\t\"./lb.js\": 423,\n\t\"./lo\": 424,\n\t\"./lo.js\": 424,\n\t\"./lt\": 425,\n\t\"./lt.js\": 425,\n\t\"./lv\": 426,\n\t\"./lv.js\": 426,\n\t\"./me\": 427,\n\t\"./me.js\": 427,\n\t\"./mi\": 428,\n\t\"./mi.js\": 428,\n\t\"./mk\": 429,\n\t\"./mk.js\": 429,\n\t\"./ml\": 430,\n\t\"./ml.js\": 430,\n\t\"./mn\": 431,\n\t\"./mn.js\": 431,\n\t\"./mr\": 432,\n\t\"./mr.js\": 432,\n\t\"./ms\": 433,\n\t\"./ms-my\": 434,\n\t\"./ms-my.js\": 434,\n\t\"./ms.js\": 433,\n\t\"./mt\": 435,\n\t\"./mt.js\": 435,\n\t\"./my\": 436,\n\t\"./my.js\": 436,\n\t\"./nb\": 437,\n\t\"./nb.js\": 437,\n\t\"./ne\": 438,\n\t\"./ne.js\": 438,\n\t\"./nl\": 439,\n\t\"./nl-be\": 440,\n\t\"./nl-be.js\": 440,\n\t\"./nl.js\": 439,\n\t\"./nn\": 441,\n\t\"./nn.js\": 441,\n\t\"./oc-lnc\": 442,\n\t\"./oc-lnc.js\": 442,\n\t\"./pa-in\": 443,\n\t\"./pa-in.js\": 443,\n\t\"./pl\": 444,\n\t\"./pl.js\": 444,\n\t\"./pt\": 445,\n\t\"./pt-br\": 446,\n\t\"./pt-br.js\": 446,\n\t\"./pt.js\": 445,\n\t\"./ro\": 447,\n\t\"./ro.js\": 447,\n\t\"./ru\": 448,\n\t\"./ru.js\": 448,\n\t\"./sd\": 449,\n\t\"./sd.js\": 449,\n\t\"./se\": 450,\n\t\"./se.js\": 450,\n\t\"./si\": 451,\n\t\"./si.js\": 451,\n\t\"./sk\": 452,\n\t\"./sk.js\": 452,\n\t\"./sl\": 453,\n\t\"./sl.js\": 453,\n\t\"./sq\": 454,\n\t\"./sq.js\": 454,\n\t\"./sr\": 455,\n\t\"./sr-cyrl\": 456,\n\t\"./sr-cyrl.js\": 456,\n\t\"./sr.js\": 455,\n\t\"./ss\": 457,\n\t\"./ss.js\": 457,\n\t\"./sv\": 458,\n\t\"./sv.js\": 458,\n\t\"./sw\": 459,\n\t\"./sw.js\": 459,\n\t\"./ta\": 460,\n\t\"./ta.js\": 460,\n\t\"./te\": 461,\n\t\"./te.js\": 461,\n\t\"./tet\": 462,\n\t\"./tet.js\": 462,\n\t\"./tg\": 463,\n\t\"./tg.js\": 463,\n\t\"./th\": 464,\n\t\"./th.js\": 464,\n\t\"./tk\": 465,\n\t\"./tk.js\": 465,\n\t\"./tl-ph\": 466,\n\t\"./tl-ph.js\": 466,\n\t\"./tlh\": 467,\n\t\"./tlh.js\": 467,\n\t\"./tr\": 468,\n\t\"./tr.js\": 468,\n\t\"./tzl\": 469,\n\t\"./tzl.js\": 469,\n\t\"./tzm\": 470,\n\t\"./tzm-latn\": 471,\n\t\"./tzm-latn.js\": 471,\n\t\"./tzm.js\": 470,\n\t\"./ug-cn\": 472,\n\t\"./ug-cn.js\": 472,\n\t\"./uk\": 473,\n\t\"./uk.js\": 473,\n\t\"./ur\": 474,\n\t\"./ur.js\": 474,\n\t\"./uz\": 475,\n\t\"./uz-latn\": 476,\n\t\"./uz-latn.js\": 476,\n\t\"./uz.js\": 475,\n\t\"./vi\": 477,\n\t\"./vi.js\": 477,\n\t\"./x-pseudo\": 478,\n\t\"./x-pseudo.js\": 478,\n\t\"./yo\": 479,\n\t\"./yo.js\": 479,\n\t\"./zh-cn\": 480,\n\t\"./zh-cn.js\": 480,\n\t\"./zh-hk\": 481,\n\t\"./zh-hk.js\": 481,\n\t\"./zh-mo\": 482,\n\t\"./zh-mo.js\": 482,\n\t\"./zh-tw\": 483,\n\t\"./zh-tw.js\": 483\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 = 609;","var baseIsEqual = require('./_baseIsEqual');\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\n\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;","var assocIndexOf = require('./_assocIndexOf');\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype;\n/** Built-in value references. */\n\nvar splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n}\n\nmodule.exports = listCacheSet;","var ListCache = require('./_ListCache');\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\nfunction stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n}\n\nmodule.exports = stackClear;","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n/** Used as the size to enable large array optimizations. */\n\n\nvar LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;","var _Symbol = require('./_Symbol');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n\nmodule.exports = getRawTag;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;","var coreJsData = require('./_coreJsData');\n/** Used to detect methods masquerading as native. */\n\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n\nmodule.exports = isMasked;","var root = require('./_root');\n/** Used to detect overreaching core-js shims. */\n\n\nvar coreJsData = root['__core-js_shared__'];\nmodule.exports = coreJsData;","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n\nmodule.exports = mapCacheClear;","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nmodule.exports = Hash;","var nativeCreate = require('./_nativeCreate');\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;","var nativeCreate = require('./_nativeCreate');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;","var getMapData = require('./_getMapData');\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = _typeof(value);\n\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n\nmodule.exports = isKeyable;","var getMapData = require('./_getMapData');\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;","var getMapData = require('./_getMapData');\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;","var getMapData = require('./_getMapData');\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\n\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n} // Add methods to `SetCache`.\n\n\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\nmodule.exports = SetCache;","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n}\n\nmodule.exports = setCacheAdd;","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n}\n\nmodule.exports = arraySome;","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;","var _Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */\n\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n}\n\nmodule.exports = equalByTag;","var root = require('./_root');\n/** Built-in value references. */\n\n\nvar Uint8Array = root.Uint8Array;\nmodule.exports = Uint8Array;","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;","var getAllKeys = require('./_getAllKeys');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Check that cyclic values are equal.\n\n\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n\nmodule.exports = arrayPush;","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\nmodule.exports = getSymbols;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayFilter;","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayLikeKeys;","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n\nmodule.exports = baseTimes;","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar freeGlobal = require('./_freeGlobal');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && freeGlobal.process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n\nmodule.exports = nodeUtil;","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = baseKeys;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n\nmodule.exports = isPrototype;","var overArg = require('./_overArg');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeKeys = overArg(Object.keys, Object);\nmodule.exports = nativeKeys;","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n/** `Object#toString` result references. */\n\n\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nmodule.exports = getTag;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar DataView = getNative(root, 'DataView');\nmodule.exports = DataView;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Promise = getNative(root, 'Promise');\nmodule.exports = Promise;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Set = getNative(root, 'Set');\nmodule.exports = Set;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar WeakMap = getNative(root, 'WeakMap');\nmodule.exports = WeakMap;","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n\n\nvar keyBy = createAggregator(function (result, value, key) {\n baseAssignValue(result, key, value);\n});\nmodule.exports = keyBy;","var defineProperty = require('./_defineProperty');\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\n\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;","var getNative = require('./_getNative');\n\nvar defineProperty = function () {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}();\n\nmodule.exports = defineProperty;","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n\n\nfunction createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;","var baseEach = require('./_baseEach');\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n\n\nvar baseEach = createBaseEach(baseForOwn);\nmodule.exports = baseEach;","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;","var createBaseFor = require('./_createBaseFor');\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n\n\nvar baseFor = createBaseFor();\nmodule.exports = baseFor;","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n\n return object;\n };\n}\n\nmodule.exports = createBaseFor;","var isArrayLike = require('./isArrayLike');\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n\n\nfunction createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n\n\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n\n if (value == null) {\n return identity;\n }\n\n if (_typeof(value) == 'object') {\n return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n }\n\n return property(value);\n}\n\nmodule.exports = baseIteratee;","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n\n\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n\n return function (object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n\n object = Object(object);\n\n while (index--) {\n var data = matchData[index];\n\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false;\n }\n }\n\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack();\n\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n\n if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nmodule.exports = baseIsMatch;","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n\n\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n result[length] = [key, value, isStrictComparable(value)];\n }\n\n return result;\n}\n\nmodule.exports = getMatchData;","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n/** Used to compose bitmasks for value comparisons. */\n\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n\n return function (object) {\n var objValue = get(object, path);\n return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;","var baseGet = require('./_baseGet');\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n\n\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;","var memoizeCapped = require('./_memoizeCapped');\n/** Used to match property names within property paths. */\n\n\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n/** Used to match backslashes in property paths. */\n\nvar reEscapeChar = /\\\\(\\\\)?/g;\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n\nvar stringToPath = memoizeCapped(function (string) {\n var result = [];\n\n if (string.charCodeAt(0) === 46\n /* . */\n ) {\n result.push('');\n }\n\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n});\nmodule.exports = stringToPath;","var memoize = require('./memoize');\n/** Used as the maximum memoize cache size. */\n\n\nvar MAX_MEMOIZE_SIZE = 500;\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n\nfunction memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n\n return key;\n });\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;","var MapCache = require('./_MapCache');\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n} // Expose `MapCache`.\n\n\nmemoize.Cache = MapCache;\nmodule.exports = memoize;","var baseToString = require('./_baseToString');\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;","var _Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n/** Used as references for various `Number` constants. */\n\n\nvar INFINITY = 1 / 0;\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n\nmodule.exports = baseToString;","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n}\n\nmodule.exports = arrayMap;","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n\n\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n\n\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n\n object = object[key];\n }\n\n if (result || ++index != length) {\n return result;\n }\n\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n\n\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;","var baseGet = require('./_baseGet');\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n\n\nfunction basePropertyDeep(path) {\n return function (object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\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 }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\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(toIntegerOrInfinity(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","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'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 global = require('../internals/global');\n\nmodule.exports = global;\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\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 IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, 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 = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(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');\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 } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'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","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '"') + '\"';\n return p1 + '>' + S + '';\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","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n!function (e) {\n \"function\" == typeof define && define.amd ? define([\"jquery\"], e) : \"object\" == (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) && \"object\" == _typeof(module.exports) ? module.exports = e(require(\"jquery\")) : e(jQuery);\n}(function (e) {\n return function (A) {\n \"use strict\";\n\n var L = A.tablesorter = {\n version: \"2.31.3\",\n parsers: [],\n widgets: [],\n defaults: {\n theme: \"default\",\n widthFixed: !1,\n showProcessing: !1,\n headerTemplate: \"{content}\",\n onRenderTemplate: null,\n onRenderHeader: null,\n cancelSelection: !0,\n tabIndex: !0,\n dateFormat: \"mmddyyyy\",\n sortMultiSortKey: \"shiftKey\",\n sortResetKey: \"ctrlKey\",\n usNumberFormat: !0,\n delayInit: !1,\n serverSideSorting: !1,\n resort: !0,\n headers: {},\n ignoreCase: !0,\n sortForce: null,\n sortList: [],\n sortAppend: null,\n sortStable: !1,\n sortInitialOrder: \"asc\",\n sortLocaleCompare: !1,\n sortReset: !1,\n sortRestart: !1,\n emptyTo: \"bottom\",\n stringTo: \"max\",\n duplicateSpan: !0,\n textExtraction: \"basic\",\n textAttribute: \"data-text\",\n textSorter: null,\n numberSorter: null,\n initWidgets: !0,\n widgetClass: \"widget-{name}\",\n widgets: [],\n widgetOptions: {\n zebra: [\"even\", \"odd\"]\n },\n initialized: null,\n tableClass: \"\",\n cssAsc: \"\",\n cssDesc: \"\",\n cssNone: \"\",\n cssHeader: \"\",\n cssHeaderRow: \"\",\n cssProcessing: \"\",\n cssChildRow: \"tablesorter-childRow\",\n cssInfoBlock: \"tablesorter-infoOnly\",\n cssNoSort: \"tablesorter-noSort\",\n cssIgnoreRow: \"tablesorter-ignoreRow\",\n cssIcon: \"tablesorter-icon\",\n cssIconNone: \"\",\n cssIconAsc: \"\",\n cssIconDesc: \"\",\n cssIconDisabled: \"\",\n pointerClick: \"click\",\n pointerDown: \"mousedown\",\n pointerUp: \"mouseup\",\n selectorHeaders: \"> thead th, > thead td\",\n selectorSort: \"th, td\",\n selectorRemove: \".remove-me\",\n debug: !1,\n headerList: [],\n empties: {},\n strings: {},\n parsers: [],\n globalize: 0,\n imgAttr: 0\n },\n css: {\n table: \"tablesorter\",\n cssHasChild: \"tablesorter-hasChildRow\",\n childRow: \"tablesorter-childRow\",\n colgroup: \"tablesorter-colgroup\",\n header: \"tablesorter-header\",\n headerRow: \"tablesorter-headerRow\",\n headerIn: \"tablesorter-header-inner\",\n icon: \"tablesorter-icon\",\n processing: \"tablesorter-processing\",\n sortAsc: \"tablesorter-headerAsc\",\n sortDesc: \"tablesorter-headerDesc\",\n sortNone: \"tablesorter-headerUnSorted\"\n },\n language: {\n sortAsc: \"Ascending sort applied, \",\n sortDesc: \"Descending sort applied, \",\n sortNone: \"No sort applied, \",\n sortDisabled: \"sorting is disabled\",\n nextAsc: \"activate to apply an ascending sort\",\n nextDesc: \"activate to apply a descending sort\",\n nextNone: \"activate to remove the sort\"\n },\n regex: {\n templateContent: /\\{content\\}/g,\n templateIcon: /\\{icon\\}/g,\n templateName: /\\{name\\}/i,\n spaces: /\\s+/g,\n nonWord: /\\W/g,\n formElements: /(input|select|button|textarea)/i,\n chunk: /(^([+\\-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\n chunks: /(^\\\\0|\\\\0$)/,\n hex: /^0x[0-9a-f]+$/i,\n comma: /,/g,\n digitNonUS: /[\\s|\\.]/g,\n digitNegativeTest: /^\\s*\\([.\\d]+\\)/,\n digitNegativeReplace: /^\\s*\\(([.\\d]+)\\)/,\n digitTest: /^[\\-+(]?\\d+[)]?$/,\n digitReplace: /[,.'\"\\s]/g\n },\n string: {\n max: 1,\n min: -1,\n emptymin: 1,\n emptymax: -1,\n zero: 0,\n none: 0,\n \"null\": 0,\n top: !0,\n bottom: !1\n },\n keyCodes: {\n enter: 13\n },\n dates: {},\n instanceMethods: {},\n setup: function setup(t, r) {\n if (t && t.tHead && 0 !== t.tBodies.length && !0 !== t.hasInitialized) {\n var e,\n o = \"\",\n s = A(t),\n a = A.metadata;\n t.hasInitialized = !1, t.isProcessing = !0, t.config = r, A.data(t, \"tablesorter\", r), L.debug(r, \"core\") && (console[console.group ? \"group\" : \"log\"](\"Initializing tablesorter v\" + L.version), A.data(t, \"startoveralltimer\", new Date())), r.supportsDataObject = ((e = A.fn.jquery.split(\".\"))[0] = parseInt(e[0], 10), 1 < e[0] || 1 === e[0] && 4 <= parseInt(e[1], 10)), r.emptyTo = r.emptyTo.toLowerCase(), r.stringTo = r.stringTo.toLowerCase(), r.last = {\n sortList: [],\n clickedIndex: -1\n }, /tablesorter\\-/.test(s.attr(\"class\")) || (o = \"\" !== r.theme ? \" tablesorter-\" + r.theme : \"\"), r.namespace ? r.namespace = \".\" + r.namespace.replace(L.regex.nonWord, \"\") : r.namespace = \".tablesorter\" + Math.random().toString(16).slice(2), r.table = t, r.$table = s.addClass(L.css.table + \" \" + r.tableClass + o + \" \" + r.namespace.slice(1)).attr(\"role\", \"grid\"), r.$headers = s.find(r.selectorHeaders), r.$table.children().children(\"tr\").attr(\"role\", \"row\"), r.$tbodies = s.children(\"tbody:not(.\" + r.cssInfoBlock + \")\").attr({\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"all\"\n }), r.$table.children(\"caption\").length && ((o = r.$table.children(\"caption\")[0]).id || (o.id = r.namespace.slice(1) + \"caption\"), r.$table.attr(\"aria-labelledby\", o.id)), r.widgetInit = {}, r.textExtraction = r.$table.attr(\"data-text-extraction\") || r.textExtraction || \"basic\", L.buildHeaders(r), L.fixColumnWidth(t), L.addWidgetFromClass(t), L.applyWidgetOptions(t), L.setupParsers(r), r.totalRows = 0, r.debug && L.validateOptions(r), r.delayInit || L.buildCache(r), L.bindEvents(t, r.$headers, !0), L.bindMethods(r), r.supportsDataObject && void 0 !== s.data().sortlist ? r.sortList = s.data().sortlist : a && s.metadata() && s.metadata().sortlist && (r.sortList = s.metadata().sortlist), L.applyWidget(t, !0), 0 < r.sortList.length ? (r.last.sortList = r.sortList, L.sortOn(r, r.sortList, {}, !r.initWidgets)) : (L.setHeadersCss(r), r.initWidgets && L.applyWidget(t, !1)), r.showProcessing && s.unbind(\"sortBegin\" + r.namespace + \" sortEnd\" + r.namespace).bind(\"sortBegin\" + r.namespace + \" sortEnd\" + r.namespace, function (e) {\n clearTimeout(r.timerProcessing), L.isProcessing(t), \"sortBegin\" === e.type && (r.timerProcessing = setTimeout(function () {\n L.isProcessing(t, !0);\n }, 500));\n }), t.hasInitialized = !0, t.isProcessing = !1, L.debug(r, \"core\") && (console.log(\"Overall initialization time:\" + L.benchmark(A.data(t, \"startoveralltimer\"))), L.debug(r, \"core\") && console.groupEnd && console.groupEnd()), s.triggerHandler(\"tablesorter-initialized\", t), \"function\" == typeof r.initialized && r.initialized(t);\n } else L.debug(r, \"core\") && (t.hasInitialized ? console.warn(\"Stopping initialization. Tablesorter has already been initialized\") : console.error(\"Stopping initialization! No table, thead or tbody\", t));\n },\n bindMethods: function bindMethods(r) {\n var e = r.$table,\n t = r.namespace,\n o = \"sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave \".split(\" \").join(t + \" \");\n e.unbind(o.replace(L.regex.spaces, \" \")).bind(\"sortReset\" + t, function (e, t) {\n e.stopPropagation(), L.sortReset(this.config, function (e) {\n e.isApplyingWidgets ? setTimeout(function () {\n L.applyWidget(e, \"\", t);\n }, 100) : L.applyWidget(e, \"\", t);\n });\n }).bind(\"updateAll\" + t, function (e, t, r) {\n e.stopPropagation(), L.updateAll(this.config, t, r);\n }).bind(\"update\" + t + \" updateRows\" + t, function (e, t, r) {\n e.stopPropagation(), L.update(this.config, t, r);\n }).bind(\"updateHeaders\" + t, function (e, t) {\n e.stopPropagation(), L.updateHeaders(this.config, t);\n }).bind(\"updateCell\" + t, function (e, t, r, o) {\n e.stopPropagation(), L.updateCell(this.config, t, r, o);\n }).bind(\"addRows\" + t, function (e, t, r, o) {\n e.stopPropagation(), L.addRows(this.config, t, r, o);\n }).bind(\"updateComplete\" + t, function () {\n this.isUpdating = !1;\n }).bind(\"sorton\" + t, function (e, t, r, o) {\n e.stopPropagation(), L.sortOn(this.config, t, r, o);\n }).bind(\"appendCache\" + t, function (e, t, r) {\n e.stopPropagation(), L.appendCache(this.config, r), A.isFunction(t) && t(this);\n }).bind(\"updateCache\" + t, function (e, t, r) {\n e.stopPropagation(), L.updateCache(this.config, t, r);\n }).bind(\"applyWidgetId\" + t, function (e, t) {\n e.stopPropagation(), L.applyWidgetId(this, t);\n }).bind(\"applyWidgets\" + t, function (e, t) {\n e.stopPropagation(), L.applyWidget(this, !1, t);\n }).bind(\"refreshWidgets\" + t, function (e, t, r) {\n e.stopPropagation(), L.refreshWidgets(this, t, r);\n }).bind(\"removeWidget\" + t, function (e, t, r) {\n e.stopPropagation(), L.removeWidget(this, t, r);\n }).bind(\"destroy\" + t, function (e, t, r) {\n e.stopPropagation(), L.destroy(this, t, r);\n }).bind(\"resetToLoadState\" + t, function (e) {\n e.stopPropagation(), L.removeWidget(this, !0, !1);\n var t = A.extend(!0, {}, r.originalSettings);\n (r = A.extend(!0, {}, L.defaults, t)).originalSettings = t, this.hasInitialized = !1, L.setup(this, r);\n });\n },\n bindEvents: function bindEvents(e, t, r) {\n var o,\n i = (e = A(e)[0]).config,\n s = i.namespace,\n d = null;\n !0 !== r && (t.addClass(s.slice(1) + \"_extra_headers\"), (o = L.getClosest(t, \"table\")).length && \"TABLE\" === o[0].nodeName && o[0] !== e && A(o[0]).addClass(s.slice(1) + \"_extra_table\")), o = (i.pointerDown + \" \" + i.pointerUp + \" \" + i.pointerClick + \" sort keyup \").replace(L.regex.spaces, \" \").split(\" \").join(s + \" \"), t.find(i.selectorSort).add(t.filter(i.selectorSort)).unbind(o).bind(o, function (e, t) {\n var r,\n o,\n s,\n a = A(e.target),\n n = \" \" + e.type + \" \";\n\n if (!(1 !== (e.which || e.button) && !n.match(\" \" + i.pointerClick + \" | sort | keyup \") || \" keyup \" === n && e.which !== L.keyCodes.enter || n.match(\" \" + i.pointerClick + \" \") && void 0 !== e.which || n.match(\" \" + i.pointerUp + \" \") && d !== e.target && !0 !== t)) {\n if (n.match(\" \" + i.pointerDown + \" \")) return d = e.target, void (\"1\" === (s = a.jquery.split(\".\"))[0] && s[1] < 4 && e.preventDefault());\n if (d = null, r = L.getClosest(A(this), \".\" + L.css.header), L.regex.formElements.test(e.target.nodeName) || a.hasClass(i.cssNoSort) || 0 < a.parents(\".\" + i.cssNoSort).length || r.hasClass(\"sorter-false\") || 0 < a.parents(\"button\").length) return !i.cancelSelection;\n i.delayInit && L.isEmptyObject(i.cache) && L.buildCache(i), i.last.clickedIndex = r.attr(\"data-column\") || r.index(), (o = i.$headerIndexed[i.last.clickedIndex][0]) && !o.sortDisabled && L.initSort(i, o, e);\n }\n }), i.cancelSelection && t.attr(\"unselectable\", \"on\").bind(\"selectstart\", !1).css({\n \"user-select\": \"none\",\n MozUserSelect: \"none\"\n });\n },\n buildHeaders: function buildHeaders(d) {\n var e, l, t, r;\n\n for (d.headerList = [], d.headerContent = [], d.sortVars = [], L.debug(d, \"core\") && (t = new Date()), d.columns = L.computeColumnIndex(d.$table.children(\"thead, tfoot\").children(\"tr\")), l = d.cssIcon ? '' : \"\", d.$headers = A(A.map(d.$table.find(d.selectorHeaders), function (e, t) {\n var r,\n o,\n s,\n a,\n n,\n i = A(e);\n if (!L.getClosest(i, \"tr\").hasClass(d.cssIgnoreRow)) return /(th|td)/i.test(e.nodeName) || (n = L.getClosest(i, \"th, td\"), i.attr(\"data-column\", n.attr(\"data-column\"))), r = L.getColumnData(d.table, d.headers, t, !0), d.headerContent[t] = i.html(), \"\" === d.headerTemplate || i.find(\".\" + L.css.headerIn).length || (a = d.headerTemplate.replace(L.regex.templateContent, i.html()).replace(L.regex.templateIcon, i.find(\".\" + L.css.icon).length ? \"\" : l), d.onRenderTemplate && (o = d.onRenderTemplate.apply(i, [t, a])) && \"string\" == typeof o && (a = o), i.html('
' + a + \"
\")), d.onRenderHeader && d.onRenderHeader.apply(i, [t, d, d.$table]), s = parseInt(i.attr(\"data-column\"), 10), e.column = s, n = L.getOrder(L.getData(i, r, \"sortInitialOrder\") || d.sortInitialOrder), d.sortVars[s] = {\n count: -1,\n order: n ? d.sortReset ? [1, 0, 2] : [1, 0] : d.sortReset ? [0, 1, 2] : [0, 1],\n lockedOrder: !1,\n sortedBy: \"\"\n }, void 0 !== (n = L.getData(i, r, \"lockedOrder\") || !1) && !1 !== n && (d.sortVars[s].lockedOrder = !0, d.sortVars[s].order = L.getOrder(n) ? [1, 1] : [0, 0]), d.headerList[t] = e, i.addClass(L.css.header + \" \" + d.cssHeader), L.getClosest(i, \"tr\").addClass(L.css.headerRow + \" \" + d.cssHeaderRow).attr(\"role\", \"row\"), d.tabIndex && i.attr(\"tabindex\", 0), e;\n })), d.$headerIndexed = [], r = 0; r < d.columns; r++) {\n L.isEmptyObject(d.sortVars[r]) && (d.sortVars[r] = {}), e = d.$headers.filter('[data-column=\"' + r + '\"]'), d.$headerIndexed[r] = e.length ? e.not(\".sorter-false\").length ? e.not(\".sorter-false\").filter(\":last\") : e.filter(\":last\") : A();\n }\n\n d.$table.find(d.selectorHeaders).attr({\n scope: \"col\",\n role: \"columnheader\"\n }), L.updateHeader(d), L.debug(d, \"core\") && (console.log(\"Built headers:\" + L.benchmark(t)), console.log(d.$headers));\n },\n addInstanceMethods: function addInstanceMethods(e) {\n A.extend(L.instanceMethods, e);\n },\n setupParsers: function setupParsers(e, t) {\n var r,\n o,\n s,\n a,\n n,\n i,\n d,\n l,\n c,\n g,\n p,\n u,\n f,\n h,\n m = e.table,\n b = 0,\n y = L.debug(e, \"core\"),\n w = {};\n if (e.$tbodies = e.$table.children(\"tbody:not(.\" + e.cssInfoBlock + \")\"), 0 === (h = (f = void 0 === t ? e.$tbodies : t).length)) return y ? console.warn(\"Warning: *Empty table!* Not building a parser cache\") : \"\";\n\n for (y && (u = new Date(), console[console.group ? \"group\" : \"log\"](\"Detecting parsers for each column\")), o = {\n extractors: [],\n parsers: []\n }; b < h;) {\n if ((r = f[b].rows).length) for (n = 0, a = e.columns, i = 0; i < a; i++) {\n if ((d = e.$headerIndexed[n]) && d.length && (l = L.getColumnData(m, e.headers, n), p = L.getParserById(L.getData(d, l, \"extractor\")), g = L.getParserById(L.getData(d, l, \"sorter\")), c = \"false\" === L.getData(d, l, \"parser\"), e.empties[n] = (L.getData(d, l, \"empty\") || e.emptyTo || (e.emptyToBottom ? \"bottom\" : \"top\")).toLowerCase(), e.strings[n] = (L.getData(d, l, \"string\") || e.stringTo || \"max\").toLowerCase(), c && (g = L.getParserById(\"no-parser\")), p = p || !1, g = g || L.detectParserForColumn(e, r, -1, n), y && (w[\"(\" + n + \") \" + d.text()] = {\n parser: g.id,\n extractor: p ? p.id : \"none\",\n string: e.strings[n],\n empty: e.empties[n]\n }), o.parsers[n] = g, o.extractors[n] = p, 0 < (s = d[0].colSpan - 1))) for (n += s, a += s; 0 < s + 1;) {\n o.parsers[n - s] = g, o.extractors[n - s] = p, s--;\n }\n n++;\n }\n b += o.parsers.length ? h : 1;\n }\n\n y && (L.isEmptyObject(w) ? console.warn(\" No parsers detected!\") : console[console.table ? \"table\" : \"log\"](w), console.log(\"Completed detecting parsers\" + L.benchmark(u)), console.groupEnd && console.groupEnd()), e.parsers = o.parsers, e.extractors = o.extractors;\n },\n addParser: function addParser(e) {\n var t,\n r = L.parsers.length,\n o = !0;\n\n for (t = 0; t < r; t++) {\n L.parsers[t].id.toLowerCase() === e.id.toLowerCase() && (o = !1);\n }\n\n o && (L.parsers[L.parsers.length] = e);\n },\n getParserById: function getParserById(e) {\n if (\"false\" == e) return !1;\n var t,\n r = L.parsers.length;\n\n for (t = 0; t < r; t++) {\n if (L.parsers[t].id.toLowerCase() === e.toString().toLowerCase()) return L.parsers[t];\n }\n\n return !1;\n },\n detectParserForColumn: function detectParserForColumn(e, t, r, o) {\n for (var s, a, n, i = L.parsers.length, d = !1, l = \"\", c = L.debug(e, \"core\"), g = !0; \"\" === l && g;) {\n (n = t[++r]) && r < 50 ? n.className.indexOf(L.cssIgnoreRow) < 0 && (d = t[r].cells[o], l = L.getElementText(e, d, o), a = A(d), c && console.log(\"Checking if value was empty on row \" + r + \", column: \" + o + ': \"' + l + '\"')) : g = !1;\n }\n\n for (; 0 <= --i;) {\n if ((s = L.parsers[i]) && \"text\" !== s.id && s.is && s.is(l, e.table, d, a)) return s;\n }\n\n return L.getParserById(\"text\");\n },\n getElementText: function getElementText(e, t, r) {\n if (!t) return \"\";\n var o,\n s = e.textExtraction || \"\",\n a = t.jquery ? t : A(t);\n return \"string\" == typeof s ? \"basic\" === s && void 0 !== (o = a.attr(e.textAttribute)) ? A.trim(o) : A.trim(t.textContent || a.text()) : \"function\" == typeof s ? A.trim(s(a[0], e.table, r)) : \"function\" == typeof (o = L.getColumnData(e.table, s, r)) ? A.trim(o(a[0], e.table, r)) : A.trim(a[0].textContent || a.text());\n },\n getParsedText: function getParsedText(e, t, r, o) {\n void 0 === o && (o = L.getElementText(e, t, r));\n var s = \"\" + o,\n a = e.parsers[r],\n n = e.extractors[r];\n return a && (n && \"function\" == typeof n.format && (o = n.format(o, e.table, t, r)), s = \"no-parser\" === a.id ? \"\" : a.format(\"\" + o, e.table, t, r), e.ignoreCase && \"string\" == typeof s && (s = s.toLowerCase())), s;\n },\n buildCache: function buildCache(e, t, r) {\n var o,\n s,\n a,\n n,\n i,\n d,\n l,\n c,\n g,\n p,\n u,\n f,\n h,\n m,\n b,\n y,\n w,\n x,\n v,\n C,\n $,\n I,\n D = e.table,\n R = e.parsers,\n T = L.debug(e, \"core\");\n if (e.$tbodies = e.$table.children(\"tbody:not(.\" + e.cssInfoBlock + \")\"), l = void 0 === r ? e.$tbodies : r, e.cache = {}, e.totalRows = 0, !R) return T ? console.warn(\"Warning: *Empty table!* Not building a cache\") : \"\";\n\n for (T && (f = new Date()), e.showProcessing && L.isProcessing(D, !0), d = 0; d < l.length; d++) {\n for (y = [], o = e.cache[d] = {\n normalized: []\n }, h = l[d] && l[d].rows.length || 0, n = 0; n < h; ++n) {\n if (m = {\n child: [],\n raw: []\n }, g = [], !(c = A(l[d].rows[n])).hasClass(e.selectorRemove.slice(1))) if (c.hasClass(e.cssChildRow) && 0 !== n) for ($ = o.normalized.length - 1, (b = o.normalized[$][e.columns]).$row = b.$row.add(c), c.prev().hasClass(e.cssChildRow) || c.prev().addClass(L.css.cssHasChild), p = c.children(\"th, td\"), $ = b.child.length, b.child[$] = [], x = 0, C = e.columns, i = 0; i < C; i++) {\n (u = p[i]) && (b.child[$][i] = L.getParsedText(e, u, i), 0 < (w = p[i].colSpan - 1) && (x += w, C += w)), x++;\n } else {\n for (m.$row = c, m.order = n, x = 0, C = e.columns, i = 0; i < C; ++i) {\n if ((u = c[0].cells[i]) && x < e.columns && (!(v = void 0 !== R[x]) && T && console.warn(\"No parser found for row: \" + n + \", column: \" + i + '; cell containing: \"' + A(u).text() + '\"; does it have a header?'), s = L.getElementText(e, u, x), m.raw[x] = s, a = L.getParsedText(e, u, x, s), g[x] = a, v && \"numeric\" === (R[x].type || \"\").toLowerCase() && (y[x] = Math.max(Math.abs(a) || 0, y[x] || 0)), 0 < (w = u.colSpan - 1))) {\n for (I = 0; I <= w;) {\n a = e.duplicateSpan || 0 === I ? a : \"string\" != typeof e.textExtraction && L.getElementText(e, u, x + I) || \"\", m.raw[x + I] = a, g[x + I] = a, I++;\n }\n\n x += w, C += w;\n }\n\n x++;\n }\n\n g[e.columns] = m, o.normalized[o.normalized.length] = g;\n }\n }\n\n o.colMax = y, e.totalRows += o.normalized.length;\n }\n\n if (e.showProcessing && L.isProcessing(D), T) {\n for ($ = Math.min(5, e.cache[0].normalized.length), console[console.group ? \"group\" : \"log\"](\"Building cache for \" + e.totalRows + \" rows (showing \" + $ + \" rows in log) and \" + e.columns + \" columns\" + L.benchmark(f)), s = {}, i = 0; i < e.columns; i++) {\n for (x = 0; x < $; x++) {\n s[\"row: \" + x] || (s[\"row: \" + x] = {}), s[\"row: \" + x][e.$headerIndexed[i].text()] = e.cache[0].normalized[x][i];\n }\n }\n\n console[console.table ? \"table\" : \"log\"](s), console.groupEnd && console.groupEnd();\n }\n\n A.isFunction(t) && t(D);\n },\n getColumnText: function getColumnText(e, t, r, o) {\n var s,\n a,\n n,\n i,\n d,\n l,\n c,\n g,\n p,\n u,\n f = \"function\" == typeof r,\n h = \"all\" === t,\n m = {\n raw: [],\n parsed: [],\n $cell: []\n },\n b = (e = A(e)[0]).config;\n\n if (!L.isEmptyObject(b)) {\n for (d = b.$tbodies.length, s = 0; s < d; s++) {\n for (l = (n = b.cache[s].normalized).length, a = 0; a < l; a++) {\n i = n[a], o && !i[b.columns].$row.is(o) || (u = !0, g = h ? i.slice(0, b.columns) : i[t], i = i[b.columns], c = h ? i.raw : i.raw[t], p = h ? i.$row.children() : i.$row.children().eq(t), f && (u = r({\n tbodyIndex: s,\n rowIndex: a,\n parsed: g,\n raw: c,\n $row: i.$row,\n $cell: p\n })), !1 !== u && (m.parsed[m.parsed.length] = g, m.raw[m.raw.length] = c, m.$cell[m.$cell.length] = p));\n }\n }\n\n return m;\n }\n\n L.debug(b, \"core\") && console.warn(\"No cache found - aborting getColumnText function!\");\n },\n setHeadersCss: function setHeadersCss(a) {\n function e(e, t) {\n e.removeClass(n).addClass(i[t]).attr(\"aria-sort\", l[t]).find(\".\" + L.css.icon).removeClass(d[2]).addClass(d[t]);\n }\n\n var t,\n r,\n o = a.sortList,\n s = o.length,\n n = L.css.sortNone + \" \" + a.cssNone,\n i = [L.css.sortAsc + \" \" + a.cssAsc, L.css.sortDesc + \" \" + a.cssDesc],\n d = [a.cssIconAsc, a.cssIconDesc, a.cssIconNone],\n l = [\"ascending\", \"descending\"],\n c = a.$table.find(\"tfoot tr\").children(\"td, th\").add(A(a.namespace + \"_extra_headers\")).removeClass(i.join(\" \")),\n g = a.$headers.add(A(\"thead \" + a.namespace + \"_extra_headers\")).removeClass(i.join(\" \")).addClass(n).attr(\"aria-sort\", \"none\").find(\".\" + L.css.icon).removeClass(d.join(\" \")).end();\n\n for (g.not(\".sorter-false\").find(\".\" + L.css.icon).addClass(d[2]), a.cssIconDisabled && g.filter(\".sorter-false\").find(\".\" + L.css.icon).addClass(a.cssIconDisabled), t = 0; t < s; t++) {\n if (2 !== o[t][1]) {\n if ((g = (g = a.$headers.filter(function (e) {\n for (var t = !0, r = a.$headers.eq(e), o = parseInt(r.attr(\"data-column\"), 10), s = o + L.getClosest(r, \"th, td\")[0].colSpan; o < s; o++) {\n t = !!t && (t || -1 < L.isValueInArray(o, a.sortList));\n }\n\n return t;\n })).not(\".sorter-false\").filter('[data-column=\"' + o[t][0] + '\"]' + (1 === s ? \":last\" : \"\"))).length) for (r = 0; r < g.length; r++) {\n g[r].sortDisabled || e(g.eq(r), o[t][1]);\n }\n c.length && e(c.filter('[data-column=\"' + o[t][0] + '\"]'), o[t][1]);\n }\n }\n\n for (s = a.$headers.length, t = 0; t < s; t++) {\n L.setColumnAriaLabel(a, a.$headers.eq(t));\n }\n },\n getClosest: function getClosest(e, t) {\n return A.fn.closest ? e.closest(t) : e.is(t) ? e : e.parents(t).filter(\":first\");\n },\n setColumnAriaLabel: function setColumnAriaLabel(e, t, r) {\n if (t.length) {\n var o = parseInt(t.attr(\"data-column\"), 10),\n s = e.sortVars[o],\n a = t.hasClass(L.css.sortAsc) ? \"sortAsc\" : t.hasClass(L.css.sortDesc) ? \"sortDesc\" : \"sortNone\",\n n = A.trim(t.text()) + \": \" + L.language[a];\n t.hasClass(\"sorter-false\") || !1 === r ? n += L.language.sortDisabled : (a = (s.count + 1) % s.order.length, r = s.order[a], n += L.language[0 === r ? \"nextAsc\" : 1 === r ? \"nextDesc\" : \"nextNone\"]), t.attr(\"aria-label\", n), s.sortedBy ? t.attr(\"data-sortedBy\", s.sortedBy) : t.removeAttr(\"data-sortedBy\");\n }\n },\n updateHeader: function updateHeader(e) {\n var t,\n r,\n o,\n s,\n a = e.table,\n n = e.$headers.length;\n\n for (t = 0; t < n; t++) {\n o = e.$headers.eq(t), s = L.getColumnData(a, e.headers, t, !0), r = \"false\" === L.getData(o, s, \"sorter\") || \"false\" === L.getData(o, s, \"parser\"), L.setColumnSort(e, o, r);\n }\n },\n setColumnSort: function setColumnSort(e, t, r) {\n var o = e.table.id;\n t[0].sortDisabled = r, t[r ? \"addClass\" : \"removeClass\"](\"sorter-false\").attr(\"aria-disabled\", \"\" + r), e.tabIndex && (r ? t.removeAttr(\"tabindex\") : t.attr(\"tabindex\", \"0\")), o && (r ? t.removeAttr(\"aria-controls\") : t.attr(\"aria-controls\", o));\n },\n updateHeaderSortCount: function updateHeaderSortCount(e, t) {\n var r,\n o,\n s,\n a,\n n,\n i,\n d,\n l,\n c = t || e.sortList,\n g = c.length;\n\n for (e.sortList = [], a = 0; a < g; a++) {\n if (d = c[a], (r = parseInt(d[0], 10)) < e.columns) {\n switch (e.sortVars[r].order || (l = L.getOrder(e.sortInitialOrder) ? e.sortReset ? [1, 0, 2] : [1, 0] : e.sortReset ? [0, 1, 2] : [0, 1], e.sortVars[r].order = l, e.sortVars[r].count = 0), l = e.sortVars[r].order, o = (o = (\"\" + d[1]).match(/^(1|d|s|o|n)/)) ? o[0] : \"\") {\n case \"1\":\n case \"d\":\n o = 1;\n break;\n\n case \"s\":\n o = n || 0;\n break;\n\n case \"o\":\n o = 0 === (i = l[(n || 0) % l.length]) ? 1 : 1 === i ? 0 : 2;\n break;\n\n case \"n\":\n o = l[++e.sortVars[r].count % l.length];\n break;\n\n default:\n o = 0;\n }\n\n n = 0 === a ? o : n, s = [r, parseInt(o, 10) || 0], e.sortList[e.sortList.length] = s, o = A.inArray(s[1], l), e.sortVars[r].count = 0 <= o ? o : s[1] % l.length;\n }\n }\n },\n updateAll: function updateAll(e, t, r) {\n var o = e.table;\n o.isUpdating = !0, L.refreshWidgets(o, !0, !0), L.buildHeaders(e), L.bindEvents(o, e.$headers, !0), L.bindMethods(e), L.commonUpdate(e, t, r);\n },\n update: function update(e, t, r) {\n e.table.isUpdating = !0, L.updateHeader(e), L.commonUpdate(e, t, r);\n },\n updateHeaders: function updateHeaders(e, t) {\n e.table.isUpdating = !0, L.buildHeaders(e), L.bindEvents(e.table, e.$headers, !0), L.resortComplete(e, t);\n },\n updateCell: function updateCell(e, t, r, o) {\n if (A(t).closest(\"tr\").hasClass(e.cssChildRow)) console.warn('Tablesorter Warning! \"updateCell\" for child row content has been disabled, use \"update\" instead');else {\n if (L.isEmptyObject(e.cache)) return L.updateHeader(e), void L.commonUpdate(e, r, o);\n e.table.isUpdating = !0, e.$table.find(e.selectorRemove).remove();\n var s,\n a,\n n,\n i,\n d,\n l,\n c = e.$tbodies,\n g = A(t),\n p = c.index(L.getClosest(g, \"tbody\")),\n u = e.cache[p],\n f = L.getClosest(g, \"tr\");\n\n if (t = g[0], c.length && 0 <= p) {\n if (n = c.eq(p).find(\"tr\").not(\".\" + e.cssChildRow).index(f), d = u.normalized[n], (l = f[0].cells.length) !== e.columns) for (s = !1, a = i = 0; a < l; a++) {\n s || f[0].cells[a] === t ? s = !0 : i += f[0].cells[a].colSpan;\n } else i = g.index();\n s = L.getElementText(e, t, i), d[e.columns].raw[i] = s, s = L.getParsedText(e, t, i, s), d[i] = s, \"numeric\" === (e.parsers[i].type || \"\").toLowerCase() && (u.colMax[i] = Math.max(Math.abs(s) || 0, u.colMax[i] || 0)), !1 !== (s = \"undefined\" !== r ? r : e.resort) ? L.checkResort(e, s, o) : L.resortComplete(e, o);\n } else L.debug(e, \"core\") && console.error(\"updateCell aborted, tbody missing or not within the indicated table\"), e.table.isUpdating = !1;\n }\n },\n addRows: function addRows(e, t, r, o) {\n var s,\n a,\n n,\n i,\n d,\n l,\n c,\n g,\n p,\n u,\n f,\n h,\n m,\n b = \"string\" == typeof t && 1 === e.$tbodies.length && /'), t = n.$table.width(), s = (o = n.$tbodies.find(\"tr:first\").children(\":visible\")).length, a = 0; a < s; a++) {\n r = parseInt(o.eq(a).width() / t * 1e3, 10) / 10 + \"%\", i.append(A(\"\").css(\"width\", r));\n }\n\n n.$table.prepend(i);\n }\n },\n getData: function getData(e, t, r) {\n var o,\n s,\n a = \"\",\n n = A(e);\n return n.length ? (o = !!A.metadata && n.metadata(), s = \" \" + (n.attr(\"class\") || \"\"), void 0 !== n.data(r) || void 0 !== n.data(r.toLowerCase()) ? a += n.data(r) || n.data(r.toLowerCase()) : o && void 0 !== o[r] ? a += o[r] : t && void 0 !== t[r] ? a += t[r] : \" \" !== s && s.match(\" \" + r + \"-\") && (a = s.match(new RegExp(\"\\\\s\" + r + \"-([\\\\w-]+)\"))[1] || \"\"), A.trim(a)) : \"\";\n },\n getColumnData: function getColumnData(e, t, r, o, s) {\n if (\"object\" != _typeof(t) || null === t) return t;\n var a,\n n = (e = A(e)[0]).config,\n i = s || n.$headers,\n d = n.$headerIndexed && n.$headerIndexed[r] || i.find('[data-column=\"' + r + '\"]:last');\n if (void 0 !== t[r]) return o ? t[r] : t[i.index(d)];\n\n for (a in t) {\n if (\"string\" == typeof a && d.filter(a).add(d.find(a)).length) return t[a];\n }\n },\n isProcessing: function isProcessing(e, t, r) {\n var o = (e = A(e))[0].config,\n s = r || e.find(\".\" + L.css.header);\n t ? (void 0 !== r && 0 < o.sortList.length && (s = s.filter(function () {\n return !this.sortDisabled && 0 <= L.isValueInArray(parseFloat(A(this).attr(\"data-column\")), o.sortList);\n })), e.add(s).addClass(L.css.processing + \" \" + o.cssProcessing)) : e.add(s).removeClass(L.css.processing + \" \" + o.cssProcessing);\n },\n processTbody: function processTbody(e, t, r) {\n if (e = A(e)[0], r) return e.isProcessing = !0, t.before(''), A.fn.detach ? t.detach() : t.remove();\n var o = A(e).find(\"colgroup.tablesorter-savemyplace\");\n t.insertAfter(o), o.remove(), e.isProcessing = !1;\n },\n clearTableBody: function clearTableBody(e) {\n A(e)[0].config.$tbodies.children().detach();\n },\n characterEquivalents: {\n a: \"áàâãäąå\",\n A: \"ÁÀÂÃÄĄÅ\",\n c: \"çćč\",\n C: \"ÇĆČ\",\n e: \"éèêëěę\",\n E: \"ÉÈÊËĚĘ\",\n i: \"íìİîïı\",\n I: \"ÍÌİÎÏ\",\n o: \"óòôõöō\",\n O: \"ÓÒÔÕÖŌ\",\n ss: \"ß\",\n SS: \"ẞ\",\n u: \"úùûüů\",\n U: \"ÚÙÛÜŮ\"\n },\n replaceAccents: function replaceAccents(e) {\n var t,\n r = \"[\",\n o = L.characterEquivalents;\n\n if (!L.characterRegex) {\n for (t in L.characterRegexArray = {}, o) {\n \"string\" == typeof t && (r += o[t], L.characterRegexArray[t] = new RegExp(\"[\" + o[t] + \"]\", \"g\"));\n }\n\n L.characterRegex = new RegExp(r + \"]\");\n }\n\n if (L.characterRegex.test(e)) for (t in o) {\n \"string\" == typeof t && (e = e.replace(L.characterRegexArray[t], t));\n }\n return e;\n },\n validateOptions: function validateOptions(e) {\n var t,\n r,\n o,\n s,\n a = \"headers sortForce sortList sortAppend widgets\".split(\" \"),\n n = e.originalSettings;\n\n if (n) {\n for (t in L.debug(e, \"core\") && (s = new Date()), n) {\n if (\"undefined\" === (o = _typeof(L.defaults[t]))) console.warn('Tablesorter Warning! \"table.config.' + t + '\" option not recognized');else if (\"object\" === o) for (r in n[t]) {\n o = L.defaults[t] && _typeof(L.defaults[t][r]), A.inArray(t, a) < 0 && \"undefined\" === o && console.warn('Tablesorter Warning! \"table.config.' + t + \".\" + r + '\" option not recognized');\n }\n }\n\n L.debug(e, \"core\") && console.log(\"validate options time:\" + L.benchmark(s));\n }\n },\n restoreHeaders: function restoreHeaders(e) {\n var t,\n r,\n o = A(e)[0].config,\n s = o.$table.find(o.selectorHeaders),\n a = s.length;\n\n for (t = 0; t < a; t++) {\n (r = s.eq(t)).find(\".\" + L.css.headerIn).length && r.html(o.headerContent[t]);\n }\n },\n destroy: function destroy(e, t, r) {\n if ((e = A(e)[0]).hasInitialized) {\n L.removeWidget(e, !0, !1);\n var o,\n s = A(e),\n a = e.config,\n n = s.find(\"thead:first\"),\n i = n.find(\"tr.\" + L.css.headerRow).removeClass(L.css.headerRow + \" \" + a.cssHeaderRow),\n d = s.find(\"tfoot:first > tr\").children(\"th, td\");\n !1 === t && 0 <= A.inArray(\"uitheme\", a.widgets) && (s.triggerHandler(\"applyWidgetId\", [\"uitheme\"]), s.triggerHandler(\"applyWidgetId\", [\"zebra\"])), n.find(\"tr\").not(i).remove(), o = \"sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave \" + \"keypress sortBegin sortEnd resetToLoadState \".split(\" \").join(a.namespace + \" \"), s.removeData(\"tablesorter\").unbind(o.replace(L.regex.spaces, \" \")), a.$headers.add(d).removeClass([L.css.header, a.cssHeader, a.cssAsc, a.cssDesc, L.css.sortAsc, L.css.sortDesc, L.css.sortNone].join(\" \")).removeAttr(\"data-column\").removeAttr(\"aria-label\").attr(\"aria-disabled\", \"true\"), i.find(a.selectorSort).unbind(\"mousedown mouseup keypress \".split(\" \").join(a.namespace + \" \").replace(L.regex.spaces, \" \")), L.restoreHeaders(e), s.toggleClass(L.css.table + \" \" + a.tableClass + \" tablesorter-\" + a.theme, !1 === t), s.removeClass(a.namespace.slice(1)), e.hasInitialized = !1, delete e.config.cache, \"function\" == typeof r && r(e), L.debug(a, \"core\") && console.log(\"tablesorter has been removed\");\n }\n }\n };\n A.fn.tablesorter = function (t) {\n return this.each(function () {\n var e = A.extend(!0, {}, L.defaults, t, L.instanceMethods);\n e.originalSettings = t, !this.hasInitialized && L.buildTable && \"TABLE\" !== this.nodeName ? L.buildTable(this, e) : L.setup(this, e);\n });\n }, window.console && window.console.log || (L.logs = [], console = {}, console.log = console.warn = console.error = console.table = function () {\n var e = 1 < arguments.length ? arguments : arguments[0];\n L.logs[L.logs.length] = {\n date: Date.now(),\n log: e\n };\n }), L.addParser({\n id: \"no-parser\",\n is: function is() {\n return !1;\n },\n format: function format() {\n return \"\";\n },\n type: \"text\"\n }), L.addParser({\n id: \"text\",\n is: function is() {\n return !0;\n },\n format: function format(e, t) {\n var r = t.config;\n return e && (e = A.trim(r.ignoreCase ? e.toLocaleLowerCase() : e), e = r.sortLocaleCompare ? L.replaceAccents(e) : e), e;\n },\n type: \"text\"\n }), L.regex.nondigit = /[^\\w,. \\-()]/g, L.addParser({\n id: \"digit\",\n is: function is(e) {\n return L.isDigit(e);\n },\n format: function format(e, t) {\n var r = L.formatFloat((e || \"\").replace(L.regex.nondigit, \"\"), t);\n return e && \"number\" == typeof r ? r : e ? A.trim(e && t.config.ignoreCase ? e.toLocaleLowerCase() : e) : e;\n },\n type: \"numeric\"\n }), L.regex.currencyReplace = /[+\\-,. ]/g, L.regex.currencyTest = /^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/, L.addParser({\n id: \"currency\",\n is: function is(e) {\n return e = (e || \"\").replace(L.regex.currencyReplace, \"\"), L.regex.currencyTest.test(e);\n },\n format: function format(e, t) {\n var r = L.formatFloat((e || \"\").replace(L.regex.nondigit, \"\"), t);\n return e && \"number\" == typeof r ? r : e ? A.trim(e && t.config.ignoreCase ? e.toLocaleLowerCase() : e) : e;\n },\n type: \"numeric\"\n }), L.regex.urlProtocolTest = /^(https?|ftp|file):\\/\\//, L.regex.urlProtocolReplace = /(https?|ftp|file):\\/\\/(www\\.)?/, L.addParser({\n id: \"url\",\n is: function is(e) {\n return L.regex.urlProtocolTest.test(e);\n },\n format: function format(e) {\n return e ? A.trim(e.replace(L.regex.urlProtocolReplace, \"\")) : e;\n },\n type: \"text\"\n }), L.regex.dash = /-/g, L.regex.isoDate = /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/, L.addParser({\n id: \"isoDate\",\n is: function is(e) {\n return L.regex.isoDate.test(e);\n },\n format: function format(e) {\n var t = e ? new Date(e.replace(L.regex.dash, \"/\")) : e;\n return t instanceof Date && isFinite(t) ? t.getTime() : e;\n },\n type: \"numeric\"\n }), L.regex.percent = /%/g, L.regex.percentTest = /(\\d\\s*?%|%\\s*?\\d)/, L.addParser({\n id: \"percent\",\n is: function is(e) {\n return L.regex.percentTest.test(e) && e.length < 15;\n },\n format: function format(e, t) {\n return e ? L.formatFloat(e.replace(L.regex.percent, \"\"), t) : e;\n },\n type: \"numeric\"\n }), L.addParser({\n id: \"image\",\n is: function is(e, t, r, o) {\n return 0 < o.find(\"img\").length;\n },\n format: function format(e, t, r) {\n return A(r).find(\"img\").attr(t.config.imgAttr || \"alt\") || e;\n },\n parsed: !0,\n type: \"text\"\n }), L.regex.dateReplace = /(\\S)([AP]M)$/i, L.regex.usLongDateTest1 = /^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i, L.regex.usLongDateTest2 = /^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i, L.addParser({\n id: \"usLongDate\",\n is: function is(e) {\n return L.regex.usLongDateTest1.test(e) || L.regex.usLongDateTest2.test(e);\n },\n format: function format(e) {\n var t = e ? new Date(e.replace(L.regex.dateReplace, \"$1 $2\")) : e;\n return t instanceof Date && isFinite(t) ? t.getTime() : e;\n },\n type: \"numeric\"\n }), L.regex.shortDateTest = /(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/, L.regex.shortDateReplace = /[\\-.,]/g, L.regex.shortDateXXY = /(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, L.regex.shortDateYMD = /(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/, L.convertFormat = function (e, t) {\n e = (e || \"\").replace(L.regex.spaces, \" \").replace(L.regex.shortDateReplace, \"/\"), \"mmddyyyy\" === t ? e = e.replace(L.regex.shortDateXXY, \"$3/$1/$2\") : \"ddmmyyyy\" === t ? e = e.replace(L.regex.shortDateXXY, \"$3/$2/$1\") : \"yyyymmdd\" === t && (e = e.replace(L.regex.shortDateYMD, \"$1/$2/$3\"));\n var r = new Date(e);\n return r instanceof Date && isFinite(r) ? r.getTime() : \"\";\n }, L.addParser({\n id: \"shortDate\",\n is: function is(e) {\n return e = (e || \"\").replace(L.regex.spaces, \" \").replace(L.regex.shortDateReplace, \"/\"), L.regex.shortDateTest.test(e);\n },\n format: function format(e, t, r, o) {\n if (e) {\n var s = t.config,\n a = s.$headerIndexed[o],\n n = a.length && a.data(\"dateFormat\") || L.getData(a, L.getColumnData(t, s.headers, o), \"dateFormat\") || s.dateFormat;\n return a.length && a.data(\"dateFormat\", n), L.convertFormat(e, n) || e;\n }\n\n return e;\n },\n type: \"numeric\"\n }), L.regex.timeTest = /^(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)$|^((?:[01]\\d|[2][0-4]):[0-5]\\d)$/i, L.regex.timeMatch = /(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)|((?:[01]\\d|[2][0-4]):[0-5]\\d)/i, L.addParser({\n id: \"time\",\n is: function is(e) {\n return L.regex.timeTest.test(e);\n },\n format: function format(e) {\n var t = (e || \"\").match(L.regex.timeMatch),\n r = new Date(e),\n o = e && (null !== t ? t[0] : \"00:00 AM\"),\n s = o ? new Date(\"2000/01/01 \" + o.replace(L.regex.dateReplace, \"$1 $2\")) : o;\n return s instanceof Date && isFinite(s) ? (r instanceof Date && isFinite(r) ? r.getTime() : 0) ? parseFloat(s.getTime() + \".\" + r.getTime()) : s.getTime() : e;\n },\n type: \"numeric\"\n }), L.addParser({\n id: \"metadata\",\n is: function is() {\n return !1;\n },\n format: function format(e, t, r) {\n var o = t.config,\n s = o.parserMetadataName ? o.parserMetadataName : \"sortValue\";\n return A(r).metadata()[s];\n },\n type: \"numeric\"\n }), L.addWidget({\n id: \"zebra\",\n priority: 90,\n format: function format(e, t, r) {\n var o,\n s,\n a,\n n,\n i,\n d,\n l,\n c = new RegExp(t.cssChildRow, \"i\"),\n g = t.$tbodies.add(A(t.namespace + \"_extra_table\").children(\"tbody:not(.\" + t.cssInfoBlock + \")\"));\n\n for (i = 0; i < g.length; i++) {\n for (a = 0, l = (o = g.eq(i).children(\"tr:visible\").not(t.selectorRemove)).length, d = 0; d < l; d++) {\n s = o.eq(d), c.test(s[0].className) || a++, n = a % 2 == 0, s.removeClass(r.zebra[n ? 1 : 0]).addClass(r.zebra[n ? 0 : 1]);\n }\n }\n },\n remove: function remove(e, t, r, o) {\n if (!o) {\n var s,\n a,\n n = t.$tbodies,\n i = (r.zebra || [\"even\", \"odd\"]).join(\" \");\n\n for (s = 0; s < n.length; s++) {\n (a = L.processTbody(e, n.eq(s), !0)).children().removeClass(i), L.processTbody(e, a, !1);\n }\n }\n }\n });\n }(e), e.tablesorter;\n});","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n 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}\n\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}\n\nmodule.exports = _taggedTemplateLiteral, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nvar Sister;\n/**\n* @link https://github.com/gajus/sister for the canonical source repository\n* @license https://github.com/gajus/sister/blob/master/LICENSE BSD 3-Clause\n*/\n\nSister = function Sister() {\n var sister = {},\n events = {};\n /**\n * @name handler\n * @function\n * @param {Object} data Event data.\n */\n\n /**\n * @param {String} name Event name.\n * @param {handler} handler\n * @return {listener}\n */\n\n sister.on = function (name, handler) {\n var listener = {\n name: name,\n handler: handler\n };\n events[name] = events[name] || [];\n events[name].unshift(listener);\n return listener;\n };\n /**\n * @param {listener}\n */\n\n\n sister.off = function (listener) {\n var index = events[listener.name].indexOf(listener);\n\n if (index !== -1) {\n events[listener.name].splice(index, 1);\n }\n };\n /**\n * @param {String} name Event name.\n * @param {Object} data Event data.\n */\n\n\n sister.trigger = function (name, data) {\n var listeners = events[name],\n i;\n\n if (listeners) {\n i = listeners.length;\n\n while (i--) {\n listeners[i].handler(data);\n }\n }\n };\n\n return sister;\n};\n\nmodule.exports = Sister;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _loadScript = require('load-script');\n\nvar _loadScript2 = _interopRequireDefault(_loadScript);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nexports.default = function (emitter) {\n /**\n * A promise that is resolved when window.onYouTubeIframeAPIReady is called.\n * The promise is resolved with a reference to window.YT object.\n */\n var iframeAPIReady = new Promise(function (resolve) {\n if (window.YT && window.YT.Player && window.YT.Player instanceof Function) {\n resolve(window.YT);\n return;\n } else {\n var protocol = window.location.protocol === 'http:' ? 'http:' : 'https:';\n (0, _loadScript2.default)(protocol + '//www.youtube.com/iframe_api', function (error) {\n if (error) {\n emitter.trigger('error', error);\n }\n });\n }\n\n var previous = window.onYouTubeIframeAPIReady; // The API will call this function when page has finished downloading\n // the JavaScript for the player API.\n\n window.onYouTubeIframeAPIReady = function () {\n if (previous) {\n previous();\n }\n\n resolve(window.YT);\n };\n });\n return iframeAPIReady;\n};\n\nmodule.exports = exports['default'];","module.exports = function load(src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n cb = cb || function () {};\n\n script.type = opts.type || 'text/javascript';\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true;\n script.src = src;\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs);\n }\n\n if (opts.text) {\n script.text = '' + opts.text;\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd;\n onend(script, cb); // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script);\n};\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd(script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null;\n cb(null, script);\n };\n\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null;\n cb(new Error('Failed to load ' + this.src), script);\n };\n}\n\nfunction ieOnEnd(script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return;\n this.onreadystatechange = null;\n cb(null, script); // there is no way to catch loading errors in IE8\n };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _debug = require('debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _functionNames = require('./functionNames');\n\nvar _functionNames2 = _interopRequireDefault(_functionNames);\n\nvar _eventNames = require('./eventNames');\n\nvar _eventNames2 = _interopRequireDefault(_eventNames);\n\nvar _FunctionStateMap = require('./FunctionStateMap');\n\nvar _FunctionStateMap2 = _interopRequireDefault(_FunctionStateMap);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n/* eslint-disable promise/prefer-await-to-then */\n\n\nvar debug = (0, _debug2.default)('youtube-player');\nvar YouTubePlayer = {};\n/**\n * Construct an object that defines an event handler for all of the YouTube\n * player events. Proxy captured events through an event emitter.\n *\n * @todo Capture event parameters.\n * @see https://developers.google.com/youtube/iframe_api_reference#Events\n */\n\nYouTubePlayer.proxyEvents = function (emitter) {\n var events = {};\n\n var _loop = function _loop(eventName) {\n var onEventName = 'on' + eventName.slice(0, 1).toUpperCase() + eventName.slice(1);\n\n events[onEventName] = function (event) {\n debug('event \"%s\"', onEventName, event);\n emitter.trigger(eventName, event);\n };\n };\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _eventNames2.default[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var eventName = _step.value;\n\n _loop(eventName);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return events;\n};\n/**\n * Delays player API method execution until player state is ready.\n *\n * @todo Proxy all of the methods using Object.keys.\n * @todo See TRICKY below.\n * @param playerAPIReady Promise that resolves when player is ready.\n * @param strictState A flag designating whether or not to wait for\n * an acceptable state when calling supported functions.\n * @returns {Object}\n */\n\n\nYouTubePlayer.promisifyPlayer = function (playerAPIReady) {\n var strictState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var functions = {};\n\n var _loop2 = function _loop2(functionName) {\n if (strictState && _FunctionStateMap2.default[functionName]) {\n functions[functionName] = function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return playerAPIReady.then(function (player) {\n var stateInfo = _FunctionStateMap2.default[functionName];\n var playerState = player.getPlayerState(); // eslint-disable-next-line no-warning-comments\n // TODO: Just spread the args into the function once Babel is fixed:\n // https://github.com/babel/babel/issues/4270\n //\n // eslint-disable-next-line prefer-spread\n\n var value = player[functionName].apply(player, args); // TRICKY: For functions like `seekTo`, a change in state must be\n // triggered given that the resulting state could match the initial\n // state.\n\n if (stateInfo.stateChangeRequired || // eslint-disable-next-line no-extra-parens\n Array.isArray(stateInfo.acceptableStates) && stateInfo.acceptableStates.indexOf(playerState) === -1) {\n return new Promise(function (resolve) {\n var onPlayerStateChange = function onPlayerStateChange() {\n var playerStateAfterChange = player.getPlayerState();\n var timeout = void 0;\n\n if (typeof stateInfo.timeout === 'number') {\n timeout = setTimeout(function () {\n player.removeEventListener('onStateChange', onPlayerStateChange);\n resolve();\n }, stateInfo.timeout);\n }\n\n if (Array.isArray(stateInfo.acceptableStates) && stateInfo.acceptableStates.indexOf(playerStateAfterChange) !== -1) {\n player.removeEventListener('onStateChange', onPlayerStateChange);\n clearTimeout(timeout);\n resolve();\n }\n };\n\n player.addEventListener('onStateChange', onPlayerStateChange);\n }).then(function () {\n return value;\n });\n }\n\n return value;\n });\n };\n } else {\n functions[functionName] = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return playerAPIReady.then(function (player) {\n // eslint-disable-next-line no-warning-comments\n // TODO: Just spread the args into the function once Babel is fixed:\n // https://github.com/babel/babel/issues/4270\n //\n // eslint-disable-next-line prefer-spread\n return player[functionName].apply(player, args);\n });\n };\n }\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = _functionNames2.default[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var functionName = _step2.value;\n\n _loop2(functionName);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return functions;\n};\n\nexports.default = YouTubePlayer;\nmodule.exports = exports['default'];","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n } // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\n\nexports.formatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n if (!useColors) return;\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if ('%%' === match) return;\n index++;\n\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch (e) {}\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.debug;\n } catch (e) {} // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\n\nexports.enable(load());\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}","/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0,\n i;\n\n for (i in namespace) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n\nfunction createDebug(namespace) {\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n var self = debug; // set `diff` timestamp\n\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr; // turn the `arguments` into a proper Array\n\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n } // apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val); // now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // apply env-specific formatting (colors, etc.)\n\n exports.formatArgs.call(self, args);\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace); // env-specific initialization logic for debug instances\n\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n exports.names = [];\n exports.skips = [];\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n/**\n * Disable debug output.\n *\n * @api public\n */\n\n\nfunction disable() {\n exports.enable('');\n}\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\nfunction enabled(name) {\n var i, len;\n\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n}\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Helpers.\n */\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n\n var type = _typeof(val);\n\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n\n throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\n\nfunction parse(str) {\n str = String(str);\n\n if (str.length > 100) {\n return;\n }\n\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n\n if (!match) {\n return;\n }\n\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n\n default:\n return undefined;\n }\n}\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n\n return ms + 'ms';\n}\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms';\n}\n/**\n * Pluralization helper.\n */\n\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n\n return Math.ceil(ms / n) + ' ' + name + 's';\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * @see https://developers.google.com/youtube/iframe_api_reference#Functions\n */\n\nexports.default = ['cueVideoById', 'loadVideoById', 'cueVideoByUrl', 'loadVideoByUrl', 'playVideo', 'pauseVideo', 'stopVideo', 'getVideoLoadedFraction', 'cuePlaylist', 'loadPlaylist', 'nextVideo', 'previousVideo', 'playVideoAt', 'setShuffle', 'setLoop', 'getPlaylist', 'getPlaylistIndex', 'setOption', 'mute', 'unMute', 'isMuted', 'setVolume', 'getVolume', 'seekTo', 'getPlayerState', 'getPlaybackRate', 'setPlaybackRate', 'getAvailablePlaybackRates', 'getPlaybackQuality', 'setPlaybackQuality', 'getAvailableQualityLevels', 'getCurrentTime', 'getDuration', 'removeEventListener', 'getVideoUrl', 'getVideoEmbedCode', 'getOptions', 'getOption', 'addEventListener', 'destroy', 'setSize', 'getIframe'];\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * @see https://developers.google.com/youtube/iframe_api_reference#Events\n * `volumeChange` is not officially supported but seems to work\n * it emits an object: `{volume: 82.6923076923077, muted: false}`\n */\n\nexports.default = ['ready', 'stateChange', 'playbackQualityChange', 'playbackRateChange', 'error', 'apiChange', 'volumeChange'];\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _PlayerStates = require('./constants/PlayerStates');\n\nvar _PlayerStates2 = _interopRequireDefault(_PlayerStates);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nexports.default = {\n pauseVideo: {\n acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PAUSED],\n stateChangeRequired: false\n },\n playVideo: {\n acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING],\n stateChangeRequired: false\n },\n seekTo: {\n acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING, _PlayerStates2.default.PAUSED],\n stateChangeRequired: true,\n // TRICKY: `seekTo` may not cause a state change if no buffering is\n // required.\n timeout: 3000\n }\n};\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n BUFFERING: 3,\n ENDED: 0,\n PAUSED: 2,\n PLAYING: 1,\n UNSTARTED: -1,\n VIDEO_CUED: 5\n};\nmodule.exports = exports[\"default\"];","module.exports = require(\"regenerator-runtime\");\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"cssModule\", \"fluid\", \"tag\"];\nimport React from 'react';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar defaultProps = {\n tag: 'div'\n};\n\nvar Container = function Container(props) {\n var className = props.className,\n cssModule = props.cssModule,\n fluid = props.fluid,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, _excluded);\n\n var containerClass = 'container';\n\n if (fluid === true) {\n containerClass = 'container-fluid';\n } else if (fluid) {\n containerClass = \"container-\" + fluid;\n }\n\n var classes = mapToCssModules(classNames(className, containerClass), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nContainer.defaultProps = defaultProps;\nexport default Container;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nvar _excluded = [\"active\", \"aria-label\", \"block\", \"className\", \"close\", \"cssModule\", \"color\", \"outline\", \"size\", \"tag\", \"innerRef\"];\nimport React from 'react';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar defaultProps = {\n color: 'secondary',\n tag: 'button'\n};\n\nvar Button = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Button, _React$Component);\n\n function Button(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = Button.prototype;\n\n _proto.onClick = function onClick(e) {\n if (this.props.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.props.onClick) {\n return this.props.onClick(e);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n active = _this$props.active,\n ariaLabel = _this$props['aria-label'],\n block = _this$props.block,\n className = _this$props.className,\n close = _this$props.close,\n cssModule = _this$props.cssModule,\n color = _this$props.color,\n outline = _this$props.outline,\n size = _this$props.size,\n Tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutPropertiesLoose(_this$props, _excluded);\n\n if (close && typeof attributes.children === 'undefined') {\n attributes.children = /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": true\n }, \"\\xD7\");\n }\n\n var btnOutlineColor = \"btn\" + (outline ? '-outline' : '') + \"-\" + color;\n var classes = mapToCssModules(classNames(className, {\n close: close\n }, close || 'btn', close || btnOutlineColor, size ? \"btn-\" + size : false, block ? 'btn-block' : false, {\n active: active,\n disabled: this.props.disabled\n }), cssModule);\n\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n\n var defaultAriaLabel = close ? 'Close' : null;\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && attributes.onClick ? 'button' : undefined\n }, attributes, {\n className: classes,\n ref: innerRef,\n onClick: this.onClick,\n \"aria-label\": ariaLabel || defaultAriaLabel\n }));\n };\n\n return Button;\n}(React.Component);\n\nButton.defaultProps = defaultProps;\nexport default Button;","'use strict';\n\nvar Queue = require('tinyqueue');\n\nif (Queue.default) Queue = Queue.default; // temporary webpack fix\n\nmodule.exports = polylabel;\nmodule.exports.default = polylabel;\n\nfunction polylabel(polygon, precision, debug) {\n precision = precision || 1.0; // find the bounding box of the outer ring\n\n var minX, minY, maxX, maxY;\n\n for (var i = 0; i < polygon[0].length; i++) {\n var p = polygon[0][i];\n if (!i || p[0] < minX) minX = p[0];\n if (!i || p[1] < minY) minY = p[1];\n if (!i || p[0] > maxX) maxX = p[0];\n if (!i || p[1] > maxY) maxY = p[1];\n }\n\n var width = maxX - minX;\n var height = maxY - minY;\n var cellSize = Math.min(width, height);\n var h = cellSize / 2;\n\n if (cellSize === 0) {\n var degeneratePoleOfInaccessibility = [minX, minY];\n degeneratePoleOfInaccessibility.distance = 0;\n return degeneratePoleOfInaccessibility;\n } // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n\n\n var cellQueue = new Queue(undefined, compareMax); // cover polygon with initial cells\n\n for (var x = minX; x < maxX; x += cellSize) {\n for (var y = minY; y < maxY; y += cellSize) {\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\n }\n } // take centroid as the first best guess\n\n\n var bestCell = getCentroidCell(polygon); // special case for rectangular polygons\n\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n var numProbes = cellQueue.length;\n\n while (cellQueue.length) {\n // pick the most promising cell from the queue\n var cell = cellQueue.pop(); // update the best cell if we found a better one\n\n if (cell.d > bestCell.d) {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n } // do not drill down further if there's no chance of a better solution\n\n\n if (cell.max - bestCell.d <= precision) continue; // split the cell into four cells\n\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\n numProbes += 4;\n }\n\n if (debug) {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n var poleOfInaccessibility = [bestCell.x, bestCell.y];\n poleOfInaccessibility.distance = bestCell.d;\n return poleOfInaccessibility;\n}\n\nfunction compareMax(a, b) {\n return b.max - a.max;\n}\n\nfunction Cell(x, y, h, polygon) {\n this.x = x; // cell center x\n\n this.y = y; // cell center y\n\n this.h = h; // half the cell size\n\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\n\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n} // signed distance from point to polygon outline (negative if point is outside)\n\n\nfunction pointToPolygonDist(x, y, polygon) {\n var inside = false;\n var minDistSq = Infinity;\n\n for (var k = 0; k < polygon.length; k++) {\n var ring = polygon[k];\n\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n var a = ring[i];\n var b = ring[j];\n if (a[1] > y !== b[1] > y && x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0]) inside = !inside;\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\n }\n }\n\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\n} // get polygon centroid\n\n\nfunction getCentroidCell(polygon) {\n var area = 0;\n var x = 0;\n var y = 0;\n var points = polygon[0];\n\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n var a = points[i];\n var b = points[j];\n var f = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * f;\n y += (a[1] + b[1]) * f;\n area += f * 3;\n }\n\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\n return new Cell(x / area, y / area, 0, polygon);\n} // get squared distance from a point to a segment\n\n\nfunction getSegDistSq(px, py, a, b) {\n var x = a[0];\n var y = a[1];\n var dx = b[0] - x;\n var dy = b[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = b[0];\n y = b[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n return dx * dx + dy * dy;\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 toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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 = lengthOfArrayLike(O);\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","function _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); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar TinyQueue = /*#__PURE__*/function () {\n function TinyQueue() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var compare = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCompare;\n\n _classCallCheck(this, TinyQueue);\n\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (var i = (this.length >> 1) - 1; i >= 0; i--) {\n this._down(i);\n }\n }\n }\n\n _createClass(TinyQueue, [{\n key: \"push\",\n value: function push(item) {\n this.data.push(item);\n this.length++;\n\n this._up(this.length - 1);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n if (this.length === 0) return undefined;\n var top = this.data[0];\n var bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n\n this._down(0);\n }\n\n return top;\n }\n }, {\n key: \"peek\",\n value: function peek() {\n return this.data[0];\n }\n }, {\n key: \"_up\",\n value: function _up(pos) {\n var data = this.data,\n compare = this.compare;\n var item = data[pos];\n\n while (pos > 0) {\n var parent = pos - 1 >> 1;\n var current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n }, {\n key: \"_down\",\n value: function _down(pos) {\n var data = this.data,\n compare = this.compare;\n var halfLength = this.length >> 1;\n var item = data[pos];\n\n while (pos < halfLength) {\n var left = (pos << 1) + 1;\n var best = data[left];\n var right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n\n if (compare(best, item) >= 0) break;\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n }]);\n\n return TinyQueue;\n}();\n\nexport { TinyQueue as default };\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\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 define(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 = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(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 define(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 define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(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, in modern engines\n // we can explicitly access globalThis. In older engines 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 if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import _ from 'lodash';\nimport React from 'react';\nimport { Container, Row, Col } from 'reactstrap';\n\nexport default class Downloads extends React.Component {\n constructor(props) {\n super(props);\n\n this.setDocs(props.documents);\n\n this.state = {};\n }\n\n setDocs(documents) {\n this.documents = _.pickBy(documents, (v, k) => k !== 'Quarterly Reporting');\n this.documents['Quarterly Reporting'] = _.groupBy(\n documents['Quarterly Reporting']\n , doc => doc.name.substr(0, 4)\n );\n }\n\n renderToggle(isOpen, iconType) {\n return isOpen\n ? \n : \n ;\n }\n\n docFolder(stateKey, docs) {\n if (!this.state[stateKey]) {\n return ;\n }\n\n if (_.isArray(docs)) {\n return (\n
\n );\n }\n return (\n
\n {_.map(docs, (subdocs, year) => {\n const stateSubKey = `${stateKey}/${year}`\n , isOpen = this.state[stateSubKey]\n , whenToggled = {}\n ;\n whenToggled[stateSubKey] = !this.state[stateSubKey];\n return (\n
\n
this.setState(whenToggled)} className='doc-subfolder-title'>\n {this.renderToggle(isOpen, 'caret')}\n {year}\n
\n {this.docFolder(stateSubKey, subdocs)}\n
\n );\n })}\n
\n );\n }\n\n render() {\n return (\n \n \n \n

\n Download only the documents you need. Our fund overviews, investment track records, references,\n legal documents, early exits, investment memos, quarterly reports, annual meetings, team bios,\n thought leadership, and more.\n

\n {Object.keys(this.props.documents).map((docFolder) => {\n return (\n
\n
this.setState({ [docFolder]: !this.state[docFolder]})}>\n {this.renderToggle(this.state[docFolder], 'chevron')}\n {docFolder}\n
\n\n {this.docFolder(docFolder, this.documents[docFolder])}\n
\n );\n })}\n \n
\n
\n );\n }\n}\n","import React from 'react';\nimport { Row, Col } from 'reactstrap';\nimport { Bar } from 'react-chartjs-2';\nimport data from '../../data/meetings_pace_data.json';\nimport {colorGradient} from '../../../shared/utils';\n\nexport default class MeetingsPace extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n render() {\n // Keeping it in the same format as the Voyager component for easier copy/pasting changes.\n const paceData = {\n initialMeetings: data.last_30_days,\n engageMovements: data.engage_movements,\n toEngageConversion: data.targets.to_engage_conversion_rate,\n evaluateMovements: data.evaluate_movements,\n toEvaluateConversion: data.targets.to_evaluate_conversion_rate,\n termSheetMovements: data.term_sheet_movements,\n toTermSheetConversion: data.targets.to_term_sheet_conversion_rate,\n toPortfolioConversion: data.targets.to_portfolio_conversion_rate,\n newMeetingsData: data.new_meetings_chart_data,\n personalData: data.personal_data,\n engageData: data.engage_chart_data,\n evaluateData: data.evaluate_chart_data,\n termSheetData: data.term_sheet_chart_data,\n loading: false\n }\n , colors = colorGradient(colorGradient.defaultLightest, colorGradient.defaultDarkest, 4)\n ;\n\n return (\n \n \n startups.length),\n backgroundColor: colors[0],\n yAxisID: 'B',\n },\n {\n label: 'Companies moved to Engage',\n data: Object.values(paceData.engageData).map(movements => movements.length),\n backgroundColor: colors[1],\n yAxisID: 'A',\n },\n {\n label: 'Companies moved to Evaluate',\n data: Object.values(paceData.evaluateData).map(movements => movements.length),\n backgroundColor: colors[2],\n yAxisID: 'A',\n },\n {\n label: 'Companies moved to Term Sheet',\n data: Object.values(paceData.termSheetData).map(movements => movements.length),\n backgroundColor: colors[3],\n yAxisID: 'A',\n }\n ]\n }}\n\n options={{\n tooltips: {\n mode: 'label',\n intersect: true\n },\n scales: {\n xAxes: [{\n gridLines: { display: false },\n ticks: {\n fontColor: '#242946',\n fontSize: 12,\n }\n }],\n yAxes: [\n {\n gridLines: { display: true },\n id: 'A',\n ticks: { fontColor: '#242946', beginAtZero: true, max: 20 },\n position: 'right'\n },\n {\n gridLines: { display: true },\n id: 'B',\n ticks: { fontColor: '#242946', beginAtZero: true, max: 100 } \n }\n ],\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }}\n />\n \n\n \n \n First Calls (Last 30 days / Monthly Target)\n \n

\n {paceData.initialMeetings} / 64\n

\n\n {paceData.toEngageConversion}% Conversion (25% target)\n\n

\n\n \n Engage Movements\n \n

\n {paceData.engageMovements} / 16\n

\n\n {paceData.toEvaluateConversion}% Conversion (25% target)\n\n

\n\n \n Evaluate Movements\n \n

\n {paceData.evaluateMovements} / 4\n

\n\n {paceData.toTermSheetConversion}% Conversion (50% target)\n\n

\n\n \n Term Sheets Issued\n \n

\n {paceData.termSheetMovements} / 1\n

\n\n {paceData.toPortfolioConversion}% Conversion (65% target)\n\n

\n \n
\n );\n }\n}\n","import React from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport rawData from '../../data/stage_data.json';\nimport {colorGradient} from '../../../shared/utils';\n\nexport default class Stage extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n colorPalette(count) {\n return colorGradient(colorGradient.defaultLightest, colorGradient.defaultDarkest, count);\n }\n\n render() {\n const data = rawData.data;\n return (\n \n );\n }\n}\n","import React from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport rawData from '../../data/industries_data.json';\nimport {colorGradient} from '../../../shared/utils';\n\nexport default class IndustryBreakdown extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n colorPalette(count) {\n return colorGradient(colorGradient.defaultLightest, colorGradient.defaultDarkest, count);\n }\n\n render() {\n const data = rawData.data;\n return (\n sum + x);\n const currentValue = dataset.data[tooltipItem.index];\n const percentage = parseFloat((currentValue/total*100.0).toFixed(1));\n return currentValue + ' (' + percentage + '%)';\n },\n title: function(tooltipItem, data) {\n return data.labels[tooltipItem[0].index];\n }\n }\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n\n }}\n />\n );\n }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _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\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\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\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(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\nexport { _assign as __assign };\nexport function __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nexport function __metadata(metadataKey, metadataValue) {\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\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) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nexport function __generator(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 = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, 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}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n for (var p in m) {\n if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n }\n}\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\n/** @deprecated */\n\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\n/** @deprecated */\n\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\n\nvar __setModuleDefault = Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n}\nexport function __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}","/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Represents a relative value (percent).\r\n *\r\n * The Percent object, can be instantiated using two ways:\r\n *\r\n * * Via `new Percent(X)`.\r\n * * Via `am4core.percent(X)`.\r\n *\r\n * `Percent` type objects can be used in a number of dual-measuring or\r\n * positioning properties, like `width`. E.g.:\r\n *\r\n * ```TypeScript\r\n * chart.paddingRight = new Percent(10);\r\n * // or\r\n * chart.paddingRight = am4core.percent(10);\r\n * ```\r\n * ```JavaScript\r\n * chart.paddingRight = new Percent(10);\r\n * // or\r\n * chart.paddingRight = am4core.percent(10);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"paddingRight\": \"10%\"\r\n * }\r\n * ```\r\n */\nvar Percent =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param percent Percent value\r\n */\n function Percent(percent) {\n this._value = percent;\n }\n\n Object.defineProperty(Percent.prototype, \"value\", {\n /**\r\n * Relative value.\r\n *\r\n * E.g. 100% is 1, 50% is 0.5, etc.\r\n *\r\n * This is useful to apply transformations to other values. E.g.:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = new am4core.Percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = new am4core.Percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * Alternatively, you can use `am4core.percent()` helper function:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = am4core.percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = am4core.percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * @readonly\r\n * @return Relative value\r\n */\n get: function get() {\n return this._value / 100;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Percent.prototype, \"percent\", {\n /**\r\n * Value in percent.\r\n *\r\n * @return Percent\r\n */\n get: function get() {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n\n Percent.prototype.toString = function () {\n return \"\" + this._value + \"%\";\n };\n\n return Percent;\n}();\n\nexport { Percent };\n/**\r\n * Converts numeric percent value to a proper [[Percent]] object.\r\n *\r\n * ```TypeScript\r\n * pieSeries.radius = am4core.percent(80);\r\n * ```\r\n * ```JavaScript\r\n * pieSeries.radius = am4core.percent(80);\r\n * ```\r\n *\r\n * @param value Percent\r\n * @return Percent object\r\n */\n\nexport function percent(value) {\n return new Percent(value);\n}\n/**\r\n * Checks if value is a [[Percent]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Input value\r\n * @return Is percent?\r\n */\n\nexport function isPercent(value) {\n return value instanceof Percent;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\r\n * A collection of utility functions for various type checks and conversion\r\n * @todo Review unused functions for removal\r\n * @hidden\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { percent, isPercent } from \"./Percent\";\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns `true` if value is not a number (NaN).\r\n *\r\n * @param value Input value\r\n * @return Is NaN?\r\n * @deprecated Is not used anywhere. JS built-in isNaN is used everywhere. Maybe we don't need this, or if we do, then we should use it everywhere\r\n */\n\nexport function isNaN(value) {\n return Number(value) !== value;\n}\n/**\r\n * Returns a type of the value.\r\n *\r\n * @param value Input value\r\n * @return Type of the value\r\n */\n\nexport function getType(value) {\n return {}.toString.call(value);\n}\n/**\r\n * Returns a default value if the passed in value is empty.\r\n *\r\n * @param value Input value\r\n * @param optional Default value\r\n * @return Value or default value whichever is available\r\n * @deprecated Not used anywhere\r\n */\n\nexport function getDefault(value, optional) {\n return value || optional;\n}\n/**\r\n * Checks if the passed in value is a string.\r\n *\r\n * @param value Value\r\n * @return Is string?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\n\nexport function checkString(value) {\n if (typeof value === \"string\") {\n return true;\n } else {\n throw new Error(\"Expected a string but got \" + getType(value));\n }\n}\n/**\r\n * Checks if the passed in value is a boolean.\r\n *\r\n * @param value Value\r\n * @return Is boolean?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\n\nexport function checkBoolean(value) {\n if (typeof value === \"boolean\") {\n return true;\n } else {\n throw new Error(\"Expected a boolean but got \" + getType(value));\n }\n}\n/**\r\n * Checks if the passed in value is a number.\r\n *\r\n * @param value Value\r\n * @return Is number?\r\n * @throws {Error}\r\n */\n\nexport function checkNumber(value) {\n if (typeof value === \"number\") {\n if (isNaN(value)) {\n throw new Error(\"Expected a number but got NaN\");\n }\n } else {\n throw new Error(\"Expected a number but got \" + getType(value));\n }\n\n return true;\n}\n/**\r\n * Checks if the passed in value is an object.\r\n *\r\n * @param value Value\r\n * @return Is object?\r\n * @throws {Error}\r\n * @todo Is the input type correct?\r\n * @deprecated Not used anywhere\r\n */\n\nexport function checkObject(value) {\n var t = getType(value);\n\n if (t === \"[object Object]\") {\n return true;\n } else {\n throw new Error(\"Expected an object but got \" + t);\n }\n}\n/**\r\n * Checks if the passed in value is an array.\r\n *\r\n * @param value Value\r\n * @return Is array?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\n\nexport function checkArray(value) {\n if (Array.isArray(value)) {\n return true;\n } else {\n throw new Error(\"Expected an array but got \" + getType(value));\n }\n}\n/**\r\n * Checks if the passed in value is a Date object.\r\n *\r\n * @param value Value\r\n * @return Is Date object?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\n\nexport function checkDate(value) {\n var t = getType(value);\n\n if (t === \"[object Date]\") {\n return true;\n } else {\n throw new Error(\"Expected a date but got \" + t);\n }\n}\n/**\r\n * ============================================================================\r\n * TYPE CASTING\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Casts string or a number into string.\r\n *\r\n * @param value Input\r\n * @return String value\r\n * @deprecated Not used anywhere\r\n */\n\nexport function castString(value) {\n if (typeof value === \"string\") {\n return value;\n } else if (typeof value === \"number\") {\n return \"\" + value;\n } else {\n throw new Error(\"Expected a string or number but got \" + getType(value));\n }\n}\n/**\r\n * Casts string or a number into a number.\r\n *\r\n * @param value Input value\r\n * @return Number value\r\n * @throws {Error}\r\n */\n\nexport function castNumber(value) {\n if (typeof value === \"string\") {\n var number = +value;\n\n if (isNaN(number)) {\n throw new Error(\"Cannot cast string \" + JSON.stringify(value) + \" to a number\");\n } else {\n return number;\n }\n } else if (typeof value === \"number\") {\n if (isNaN(value)) {\n throw new Error(\"Expected a number but got NaN\");\n } else {\n return value;\n }\n } else {\n var t = getType(value);\n\n if (t === \"[object Date]\") {\n return value.getTime();\n } else {\n throw new Error(\"Expected a string, number, or date but got \" + t);\n }\n }\n}\n/**\r\n * Casts number, string or Date into a Date object.\r\n *\r\n * @param value Input value\r\n * @return Date object\r\n * @deprecated Not used anywhere\r\n * @throws {Error}\r\n * @hidden\r\n * @deprecated\r\n */\n\n/*export function castDate(value: string | number | Date, formatter?: DateFormatter): Date {\r\n if (typeof value === \"string\") {\r\n if (formatter) {\r\n return formatter.parse(value);\r\n }\r\n return new Date(value);\r\n\r\n } else if (typeof value === \"number\") {\r\n return new Date(value);\r\n\r\n } else {\r\n const t = getType(value);\r\n\r\n if (t === \"[object Date]\") {\r\n return value;\r\n\r\n } else {\r\n throw new Error(\"Expected a string, number, or date but got \" + t);\r\n }\r\n }\r\n}*/\n\n/**\r\n * ============================================================================\r\n * QUICK CONVERSION\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Converts any value into `boolean`.\r\n *\r\n * @param value Source value\r\n * @return `true` or `false`\r\n */\n\nexport function toBoolean(value) {\n return value ? true : false;\n}\n/**\r\n * Converts any value into a `number`.\r\n *\r\n * @param value Source value\r\n * @return Number representation of value\r\n */\n\nexport function toNumber(value) {\n if (hasValue(value) && !isNumber(value)) {\n var converted = Number(value);\n\n if (isNaN(converted) && isString(value) && value != \"\") {\n return toNumber(value.replace(/[^0-9.\\-]+/g, ''));\n }\n\n return converted;\n }\n\n return value;\n}\n/**\r\n * Converts any value into a string (text).\r\n *\r\n * @param value Source value\r\n * @return String representation of the input\r\n */\n\nexport function toText(value) {\n if (hasValue(value) && !isString(value)) {\n if (isNumber(value)) {\n return castString(value);\n } else if (isObject(value)) {\n return value.toString();\n }\n }\n\n return value;\n}\n/**\r\n * Converts any value to a number or [[Percent]].\r\n *\r\n * If the parameter is a string and contains \"%\", it will\r\n * convert it into a [[Percent]].\r\n *\r\n * Otherwise, it will convert into a number.\r\n *\r\n * @param value Number or percent\r\n * @return Percent object\r\n */\n\nexport function toNumberOrPercent(value) {\n if (!hasValue(value) || isNumber(value) || isPercent(value)) {\n return value;\n }\n\n if (isString(value) && value.indexOf(\"%\") != -1) {\n return percent(toNumber(value));\n }\n\n return toNumber(value);\n}\n/**\r\n * Checks if a variable has a value.\r\n *\r\n * @param a Input value\r\n * @returns Has value?\r\n */\n\nexport function hasValue(a) {\n return a != null;\n}\n/**\r\n * Returns a value or throws an {Error} exception if the variable has not\r\n * value.\r\n *\r\n * @param a Input value\r\n * @returns Value\r\n */\n\nexport function getValue(a) {\n if (hasValue(a)) {\n return a;\n } else {\n throw new Error(\"Value doesn't exist\");\n }\n}\n/**\r\n * Returns a value, or returns the default value if it doesn't have a value.\r\n *\r\n * @param a Input value\r\n * @returns Value\r\n */\n\nexport function getValueDefault(a, defaultValue) {\n if (hasValue(a)) {\n return a;\n } else {\n return defaultValue;\n }\n}\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Checks if parameter is `Date`.\r\n *\r\n * @param value Input value\r\n * @return Is Date?\r\n */\n\nexport function isDate(value) {\n return getType(value) === \"[object Date]\";\n}\n/**\r\n * Checks if parameter is `string`.\r\n *\r\n * @param value Input value\r\n * @return Is string?\r\n */\n\nexport function isString(value) {\n return typeof value === \"string\";\n}\n/**\r\n * Checks if parameter is `number`.\r\n *\r\n * @param value Input value\r\n * @return Is number?\r\n */\n\nexport function isNumber(value) {\n return typeof value === \"number\" && Number(value) == value;\n}\n/**\r\n * Checks if parameter is `object`.\r\n *\r\n * @param value Input value\r\n * @return Is object?\r\n */\n\nexport function isObject(value) {\n return _typeof(value) === \"object\" && value != null;\n}\n/**\r\n * Checks if parameter is `Array`.\r\n *\r\n * @param value Input value\r\n * @return Is Array?\r\n */\n\nexport function isArray(value) {\n return Array.isArray(value);\n}","/**\r\n * A collection of Math-related functions\r\n *\r\n * @todo Comment trigonometric functions?\r\n */\nimport * as $type from \"./Type\";\n/**\r\n * ============================================================================\r\n * CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nexport var PI = Math.PI;\nexport var HALFPI = PI / 2;\nexport var RADIANS = PI / 180;\nexport var DEGREES = 180 / PI;\n/**\r\n * Converts any value and fits it into a specific value range.\r\n *\r\n * @param value Source value\r\n * @param min Minimum allowable value\r\n * @param max Maximum allowable value\r\n * @return Number\r\n */\n\nexport function toNumberRange(value, min, max) {\n if ($type.hasValue(value)) {\n value = $type.toNumber(value);\n return fitToRange(value, min, max);\n }\n\n return value;\n}\n/**\r\n * Rounds the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @param floor In case value ends with 0.5 and precision is 0, we might need to floor the value instead of ceiling it.\r\n * @return Rounded value\r\n */\n\nexport function round(value, precision, floor) {\n if (!$type.isNumber(precision) || precision <= 0) {\n var rounded = Math.round(value);\n\n if (floor) {\n if (rounded - value == 0.5) {\n rounded--;\n }\n }\n\n return rounded;\n } else {\n var d = Math.pow(10, precision);\n return Math.round(value * d) / d;\n }\n}\n/**\r\n * Ceils the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @return Rounded value\r\n */\n\nexport function ceil(value, precision) {\n if (!$type.isNumber(precision) || precision <= 0) {\n return Math.ceil(value);\n } else {\n var d = Math.pow(10, precision);\n return Math.ceil(value * d) / d;\n }\n}\n/**\r\n * Stretches `t` so that it will always be between `from` and `to`.\r\n *\r\n * @param t Number from 0 to 1\r\n * @param from Lowest possible value\r\n * @param to Highest possible value\r\n * @return Adjusted value\r\n */\n\nexport function stretch(t, from, to) {\n return t * (to - from) + from;\n}\n/**\r\n * Adjust numeric value so it fits to specific value range.\r\n *\r\n * @param value Value\r\n * @param minValue Lowest possible value\r\n * @param maxValue Highest possible value\r\n * @return Adjusted value\r\n */\n\nexport function fitToRange(value, minValue, maxValue) {\n if ($type.isNumber(minValue)) {\n if ($type.isNumber(maxValue) && maxValue < minValue) {\n var temp = maxValue;\n maxValue = minValue;\n minValue = temp;\n }\n\n if (value < minValue) {\n value = minValue;\n }\n }\n\n if ($type.isNumber(maxValue)) {\n if (value > maxValue) {\n value = maxValue;\n }\n }\n\n return value;\n}\n/**\r\n * Returns sine of a number.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\n\nexport function sin(value) {\n return round(Math.sin(RADIANS * value), 10);\n}\n/**\r\n * Returns tan of a number.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\n\nexport function tan(value) {\n return round(Math.tan(RADIANS * value), 10);\n}\n/**\r\n * Returns cosine of a number.\r\n *\r\n * @param value Value\r\n * @return Cosine\r\n */\n\nexport function cos(value) {\n return round(Math.cos(RADIANS * value), 10);\n}\nexport function max(left, right) {\n if ($type.isNumber(left)) {\n if ($type.isNumber(right)) {\n if (right > left) {\n return right;\n } else {\n return left;\n }\n } else {\n return left;\n }\n } else if ($type.isNumber(right)) {\n return right;\n } else {\n return null;\n }\n}\nexport function min(left, right) {\n if ($type.isNumber(left)) {\n if ($type.isNumber(right)) {\n if (right < left) {\n return right;\n } else {\n return left;\n }\n } else {\n return left;\n }\n } else if ($type.isNumber(right)) {\n return right;\n } else {\n return null;\n }\n}\n/**\r\n * Returns the closest value from the array of values to the reference value.\r\n *\r\n * @param values Array of values\r\n * @param value Reference value\r\n * @return Closes value from the array\r\n */\n\nexport function closest(values, referenceValue) {\n return values.reduce(function (prev, curr) {\n return Math.abs(curr - referenceValue) < Math.abs(prev - referenceValue) ? curr : prev;\n });\n}\n/**\r\n * Checks whether two ranges of values intersect.\r\n *\r\n * @param range1 Range 1\r\n * @param range2 Range 2\r\n * @return Any intersecting numbers?\r\n */\n\nexport function intersect(range1, range2) {\n var start1 = $type.getValue(range1.start);\n var start2 = $type.getValue(range2.start);\n var end1 = $type.getValue(range1.end);\n var end2 = $type.getValue(range2.end);\n return Math.max(start1, start2) <= Math.min(end1, end2);\n}\n/**\r\n * Inverts the range of values.\r\n *\r\n * @param range Range\r\n */\n\nexport function invertRange(range) {\n var start = $type.getValue(range.start);\n var end = $type.getValue(range.end);\n return {\n start: 1 - end,\n end: 1 - start\n };\n}\n/**\r\n * Returns an intersection range between two ranges of values.\r\n *\r\n * @param range1 Range 1\r\n * @param range2 Range 2\r\n * @return Intersecting value range\r\n */\n\nexport function intersection(range1, range2) {\n var start1 = $type.getValue(range1.start);\n var start2 = $type.getValue(range2.start);\n var end1 = $type.getValue(range1.end);\n var end2 = $type.getValue(range2.end);\n var startMax = Math.max(start1, start2);\n var endMin = Math.min(end1, end2);\n\n if (endMin < startMax) {\n return undefined;\n } else {\n return {\n start: startMax,\n end: endMin\n };\n }\n}\n/**\r\n * Returns pixel \"distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\n\nexport function getDistance(point1, point2) {\n if (!point1) {\n return 0;\n }\n\n if (!point2) {\n point2 = {\n x: 0,\n y: 0\n };\n }\n\n return Math.sqrt(Math.pow(Math.abs(point1.x - point2.x), 2) + Math.pow(Math.abs(point1.y - point2.y), 2));\n}\n/**\r\n * Returns pixel \"horizontal distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\n\nexport function getHorizontalDistance(point1, point2) {\n if (!point1) {\n return 0;\n }\n\n if (!point2) {\n point2 = {\n x: 0,\n y: 0\n };\n }\n\n return Math.abs(point1.x - point2.x);\n}\n/**\r\n * Returns pixel \"vertical distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\n\nexport function getVerticalDistance(point1, point2) {\n if (!point1) {\n return 0;\n }\n\n if (!point2) {\n point2 = {\n x: 0,\n y: 0\n };\n }\n\n return Math.abs(point1.y - point2.y);\n}\n/**\r\n * Returns approximate pixel \"distance\" between two points of cubic curve\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @param controlPointA Control Point 1\r\n * @param controlPointB Control Point 2\r\n * @param stepCount number of steps (the more, the more accurate result)\r\n * @return Distance in relative pixels\r\n */\n\nexport function getCubicCurveDistance(point1, point2, controlPointA, controlPointB, stepCount) {\n if (!point1) {\n return 0;\n }\n\n if (!point2) {\n point2 = {\n x: 0,\n y: 0\n };\n }\n\n var distance = 0;\n var prevPoint = point1;\n\n if (stepCount > 0) {\n for (var s = 0; s <= stepCount; s++) {\n var point = getPointOnCubicCurve(point1, point2, controlPointA, controlPointB, s / stepCount);\n distance += getDistance(prevPoint, point);\n prevPoint = point;\n }\n }\n\n return distance;\n}\n/**\r\n * Returns scale based on original and end position of the two points.\r\n *\r\n * @param point1 Current position of point 1\r\n * @param startPoint1 Start position of point 1\r\n * @param point2 Current position of point 1\r\n * @param startPoint2 Start position of point 2\r\n * @return Scale Calculated scale\r\n */\n\nexport function getScale(point1, startPoint1, point2, startPoint2) {\n var initialDistance = getDistance(startPoint1, startPoint2);\n var currentDistance = getDistance(point1, point2);\n return Math.abs(currentDistance / initialDistance);\n}\n/**\r\n * Returns an exact mid point between two points.\r\n *\r\n * @param point1 Position of point 1\r\n * @param point2 Position of point 2\r\n * @return Mid point Position of mid-point\r\n */\n\nexport function getMidPoint(point1, point2, position) {\n if (!$type.isNumber(position)) {\n position = 0.5;\n }\n\n return {\n \"x\": point1.x + (point2.x - point1.x) * position,\n \"y\": point1.y + (point2.y - point1.y) * position\n };\n}\n/**\r\n * Returns difference in angles between starting and ending position of two\r\n * vectors.\r\n *\r\n * @param point1 Current position of point 1\r\n * @param startPoint1 Start position of point 1\r\n * @param point2 Current position of point 1\r\n * @param startPoint2 Start position of point 2\r\n * @return Angle difference in degrees\r\n */\n\nexport function getRotation(point1, startPoint1, point2, startPoint2) {\n // Get start and end angles\n var startAngle = getAngle(startPoint1, startPoint2);\n var angle = getAngle(point1, point2); // Calculate angle\n\n var diff = startAngle - angle;\n\n if (diff < 0) {\n diff += 360;\n }\n\n return diff;\n}\n/**\r\n * Calculates angle of the vector based on two or one point.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Angle in degrees\r\n */\n\nexport function getAngle(point1, point2) {\n if (!point2) {\n point2 = {\n x: point1.x * 2,\n y: point1.y * 2\n };\n }\n\n var diffX = point2.x - point1.x;\n var diffY = point2.y - point1.y;\n var angle = Math.atan2(diffY, diffX) * DEGREES;\n\n if (angle < 0) {\n angle += 360;\n }\n\n return normalizeAngle(angle);\n}\n/**\r\n * Returns the shift in coordinates of the center when item is rotated, moved\r\n * and scaled at the same time.\r\n *\r\n * @param center Current center\r\n * @param point1 Frst reference point\r\n * @param startPoint1 Original position of the first reference point\r\n * @param point2 Second reference point\r\n * @param startPoint2 Original position of the first reference point\r\n * @return Shift in center point coordinates\r\n */\n\nexport function getCenterShift(center, point1, startPoint1, point2, startPoint2) {\n // Get angle\n var angle = getRotation(point1, startPoint1, point2, startPoint2) - 90;\n\n if (angle < 0) {\n angle += 360;\n } // Get distance between new position\n\n\n var distance = getDistance(point1, point2); // Calculate new X\n\n var x = Math.cos(angle) / distance + point1.x;\n var y = Math.cos(angle) / distance + point1.y;\n var shift = {\n \"x\": x - center.x,\n \"y\": y - center.y\n };\n return shift;\n}\n/**\r\n * Converts an array of points into a bounding box rectangle.\r\n *\r\n * Array can contain any number of points.\r\n *\r\n * @param points Points\r\n * @return Bounding box rectangle\r\n */\n\nexport function getBBox(points) {\n if (points) {\n var length_1 = points.length;\n\n if (length_1 !== 0) {\n var left = void 0;\n var right = void 0;\n var top_1;\n var bottom = void 0;\n\n for (var i = 0; i < length_1; i++) {\n var point = points[i];\n\n if (!$type.isNumber(right) || point.x > right) {\n right = point.x;\n }\n\n if (!$type.isNumber(left) || point.x < left) {\n left = point.x;\n }\n\n if (!$type.isNumber(top_1) || point.y < top_1) {\n top_1 = point.y;\n }\n\n if (!$type.isNumber(bottom) || point.y > bottom) {\n bottom = point.y;\n }\n }\n\n return {\n x: left,\n y: top_1,\n width: right - left,\n height: bottom - top_1\n };\n }\n }\n\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n}\n/**\r\n * Returns a [[IRectangle]] object representing a common rectangle that fits\r\n * all passed in rectangles in it.\r\n *\r\n * @param rectangles An array of rectangles\r\n * @return Common rectangle\r\n */\n\nexport function getCommonRectangle(rectangles) {\n var length = rectangles.length;\n\n if (length !== 0) {\n var minX = void 0;\n var minY = void 0;\n var maxX = void 0;\n var maxY = void 0;\n\n for (var i = 0; i < length; i++) {\n var rectangle = rectangles[i];\n minX = min(rectangle.x, minX);\n minY = min(rectangle.y, minY);\n maxX = max(rectangle.x + rectangle.width, maxX);\n maxY = max(rectangle.y + rectangle.height, maxY);\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n}\n/**\r\n * [getPointOnQuadraticCurve description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointA [description]\r\n * @param pointB [description]\r\n * @param controlPoint [description]\r\n * @param position [description]\r\n * @return [description]\r\n */\n\nexport function getPointOnQuadraticCurve(pointA, pointB, controlPoint, position) {\n var x = (1 - position) * (1 - position) * pointA.x + 2 * (1 - position) * position * controlPoint.x + position * position * pointB.x;\n var y = (1 - position) * (1 - position) * pointA.y + 2 * (1 - position) * position * controlPoint.y + position * position * pointB.y;\n return {\n x: x,\n y: y\n };\n}\n/**\r\n * [getPointOnCubicCurve description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointA [description]\r\n * @param pointB [description]\r\n * @param controlPointA [description]\r\n * @param controlPointB [description]\r\n * @param position [description]\r\n * @return [description]\r\n */\n\nexport function getPointOnCubicCurve(pointA, pointB, controlPointA, controlPointB, position) {\n var point = {\n x: 0,\n y: 0\n };\n var mt1 = 1 - position;\n var mt2 = mt1 * mt1;\n var mt3 = mt2 * mt1;\n point.x = pointA.x * mt3 + controlPointA.x * 3 * mt2 * position + controlPointB.x * 3 * mt1 * position * position + pointB.x * position * position * position;\n point.y = pointA.y * mt3 + controlPointA.y * 3 * mt2 * position + controlPointB.y * 3 * mt1 * position * position + pointB.y * position * position * position;\n return point;\n}\n/**\r\n * [getCubicControlPointA description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\n\nexport function getCubicControlPointA(p0, p1, p2, p3, tensionX, tensionY) {\n tensionX = adjustTension(tensionX);\n tensionY = adjustTension(tensionY);\n return {\n x: (-p0.x + p1.x / tensionX + p2.x) * tensionX,\n y: (-p0.y + p1.y / tensionY + p2.y) * tensionY\n };\n}\n/**\r\n * [getCubicControlPointB description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\n\nexport function getCubicControlPointB(p0, p1, p2, p3, tensionX, tensionY) {\n tensionX = adjustTension(tensionX);\n tensionY = adjustTension(tensionY);\n return {\n x: (p1.x + p2.x / tensionX - p3.x) * tensionX,\n y: (p1.y + p2.y / tensionY - p3.y) * tensionY\n };\n}\n/**\r\n * [adjustTension description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param tension [description]\r\n * @return [description]\r\n */\n\nexport function adjustTension(tension) {\n return 1 - tension + 0.00001;\n}\n/**\r\n * [normalizeAngle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n * @return [description]\r\n */\n\nexport function normalizeAngle(value) {\n if (value == 360) {\n return 360;\n }\n\n return value % 360;\n}\n/**\r\n * [normalizeAngleToRange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @todo review this with various angles, can be tested on radar chart with custom start/end angles\r\n * @param value [description]\r\n * @param startAngle [description]\r\n * @param endAngle [description]\r\n * @return [description]\r\n */\n\nexport function fitAngleToRange(value, startAngle, endAngle) {\n if (startAngle > endAngle) {\n var temp = startAngle;\n startAngle = endAngle;\n endAngle = temp;\n }\n\n value = normalizeAngle(value);\n var count = (startAngle - normalizeAngle(startAngle)) / 360;\n\n if (value < startAngle) {\n value += 360 * (count + 1);\n }\n\n var maxEnd = startAngle + (endAngle - startAngle) / 2 + 180;\n var maxStart = startAngle + (endAngle - startAngle) / 2 - 180;\n\n if (value > endAngle) {\n if (value - 360 > startAngle) {\n value -= 360;\n } else {\n if (value < maxEnd) {\n value = endAngle;\n } else {\n value = startAngle;\n }\n }\n }\n\n if (value < startAngle) {\n if (value > maxStart) {\n value = startAngle;\n } else {\n value = endAngle;\n }\n }\n\n return value;\n}\n/**\r\n * Returns [[IRectangle]] of an arc in relative values, assuming that the\r\n * center is at the circle center.\r\n *\r\n * Used to find out max radius of an arc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param startAngle Start angle\r\n * @param endAngle End angle\r\n * @param radius \t Relative radius\r\n * @return Rectangle\r\n */\n\nexport function getArcRect(startAngle, endAngle, radius) {\n var minX = Number.MAX_VALUE;\n var minY = Number.MAX_VALUE;\n var maxX = -Number.MAX_VALUE;\n var maxY = -Number.MAX_VALUE;\n var bpoints = [];\n\n if (!$type.isNumber(radius)) {\n radius = 1;\n }\n\n bpoints.push(getArcPoint(radius, startAngle));\n bpoints.push(getArcPoint(radius, endAngle));\n var fromAngle = Math.min(Math.floor(startAngle / 90) * 90, Math.floor(endAngle / 90) * 90);\n var toAngle = Math.max(Math.ceil(startAngle / 90) * 90, Math.ceil(endAngle / 90) * 90);\n\n for (var angle = fromAngle; angle <= toAngle; angle += 90) {\n if (angle >= startAngle && angle <= endAngle) {\n bpoints.push(getArcPoint(radius, angle));\n }\n }\n\n for (var i = 0; i < bpoints.length; i++) {\n var pt = bpoints[i];\n\n if (pt.x < minX) {\n minX = pt.x;\n }\n\n if (pt.y < minY) {\n minY = pt.y;\n }\n\n if (pt.x > maxX) {\n maxX = pt.x;\n }\n\n if (pt.y > maxY) {\n maxY = pt.y;\n }\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\n/**\r\n * Returns point on arc\r\n *\r\n * @param center point\r\n * @param radius\r\n * @param arc\r\n * @return {boolean}\r\n */\n\nexport function getArcPoint(radius, arc) {\n return {\n x: radius * cos(arc),\n y: radius * sin(arc)\n };\n}\n/**\r\n * Returns true if a point is within rectangle\r\n *\r\n * @param point\r\n * @param rectangle\r\n * @return {boolean}\r\n */\n\nexport function isInRectangle(point, rectangle) {\n if (point.x >= rectangle.x && point.x <= rectangle.x + rectangle.width && point.y >= rectangle.y && point.y <= rectangle.y + rectangle.height) {\n return true;\n }\n\n return false;\n}\nexport function getLineIntersection(pointA1, pointA2, pointB1, pointB2) {\n var x = ((pointA1.x * pointA2.y - pointA2.x * pointA1.y) * (pointB1.x - pointB2.x) - (pointA1.x - pointA2.x) * (pointB1.x * pointB2.y - pointB1.y * pointB2.x)) / ((pointA1.x - pointA2.x) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x - pointB2.x));\n var y = ((pointA1.x * pointA2.y - pointA2.x * pointA1.y) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x * pointB2.y - pointB1.y * pointB2.x)) / ((pointA1.x - pointA2.x) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x - pointB2.x));\n return {\n x: x,\n y: y\n };\n}","import * as $math from \"./Math\";\nimport * as $type from \"./Type\";\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Searches `array` for `value`.\r\n *\r\n * Returns -1 if not found.\r\n *\r\n * @param array Source array\r\n * @param value Value to search\r\n * @returns Index\r\n */\n\nexport function indexOf(array, value) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n // TODO handle NaN\n if (array[i] === value) {\n return i;\n }\n }\n\n return -1;\n}\n/**\r\n * Calls `test` for each element in `array`.\r\n *\r\n * If `test` returns `true` then it immediately returns `true`.\r\n *\r\n * If `test` returns `false` for all of the elements in `array` then it returns `false`.\r\n *\r\n * @param array Source array\r\n * @param test Function which is called on each element\r\n * @returns Whether `test` returned true or not\r\n */\n\nexport function any(array, test) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n if (test(array[i])) {\n return true;\n }\n }\n\n return false;\n}\n/**\r\n * Calls `fn` function for every member of array and returns a new array out\r\n * of all outputs.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n * @returns New array\r\n */\n\nexport function map(array, fn) {\n var length = array.length;\n var output = new Array(length);\n\n for (var i = 0; i < length; ++i) {\n output[i] = fn(array[i], i);\n }\n\n return output;\n}\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\n\nexport function each(array, fn) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n fn(array[i], i);\n }\n}\n/**\r\n * Iterates through all items in array in reverse order and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\n\nexport function eachReverse(array, fn) {\n var i = array.length;\n\n while (i--) {\n fn(array[i], i);\n }\n}\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * If `fn` call evaluates to `false`, further iteration is cancelled.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\n\nexport function eachContinue(array, fn) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n if (!fn(array[i], i)) {\n break;\n }\n }\n}\n/**\r\n * Shifts an item at `index` towards beginning of the array.\r\n *\r\n * @param array Source array\r\n * @param index Target element index\r\n */\n\nexport function shiftLeft(array, index) {\n var length = array.length;\n\n for (var i = index; i < length; ++i) {\n array[i - index] = array[i];\n }\n\n array.length = length - index;\n}\n/**\r\n * Returns the last item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\n\nexport function last(array) {\n var length = array.length;\n return length ? array[length - 1] : undefined;\n}\n/**\r\n * Returns the first item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\n\nexport function first(array) {\n return array[0];\n}\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * Caps `index` to be between `0` and `array.length`\r\n *\r\n * @param array Source array\r\n * @param element Item to insert\r\n * @param array Index to insert item at\r\n */\n\nexport function insert(array, element, index) {\n //if (array) {\n index = $math.fitToRange(index, 0, array.length);\n array.splice(index, 0, element); //}\n}\n/**\r\n * Removes all copies of `element` from `array` (if they exist) and then\r\n * inserts `element` at `index`.\r\n *\r\n * @param array Source array\r\n * @param element Item\r\n * @param array Index to move item to\r\n */\n\nexport function setIndex(array, element, index) {\n remove(array, element);\n insert(array, element, index);\n}\n/**\r\n * Pushes all of the elements from `input` into `array`.\r\n *\r\n * @param array Output array\r\n * @param input Input array\r\n */\n\nexport function pushAll(array, input) {\n var length = input.length;\n\n for (var i = 0; i < length; ++i) {\n array.push(input[i]);\n }\n}\n/**\r\n * Removes `element` from `array`.\r\n *\r\n * If there are multiple copies of `element`, they are all removed.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n */\n\nexport function remove(array, element) {\n var found = false;\n var index = array.indexOf(element);\n\n if (index !== -1) {\n found = true;\n array.splice(index, 1);\n var length_1 = array.length;\n\n while (index < length_1) {\n // TODO handle NaN\n if (array[index] === element) {\n array.splice(index, 1);\n --length_1;\n } else {\n ++index;\n }\n }\n }\n\n return found;\n}\n/**\r\n * Adds an `element` to `array`.\r\n *\r\n * If array already contains and item like this, it is removed before adding\r\n * it again.\r\n *\r\n * Optionally `toIndex` can be specified to add element at specific index.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to move item to\r\n */\n\nexport function move(array, element, toIndex) {\n // @todo this implementation must be the same as the List.moveValue method\n // @todo don't do anything if the desired index is the same as the current index\n var index = indexOf(array, element); // @todo remove all old values rather than only the first ?\n\n if (index !== -1) {\n removeIndex(array, index);\n }\n\n if (toIndex == null) {\n array.push(element);\n } else {\n insertIndex(array, toIndex, element);\n }\n}\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to add item at\r\n */\n\nexport function add(array, element, index) {\n // Append to the end if index is not set\n if (!$type.isNumber(index)) {\n array.push(element);\n } // Add to the beginning of array if index is 0\n else if (index === 0) {\n array.unshift(element);\n } // Add to indicated place if index is set\n else {\n array.splice(index, 0, element);\n }\n}\n/**\r\n * Removes `element` from `array` (if it exists) and then inserts `element` at\r\n * `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n * @param array Index to move item to\r\n */\n\nexport function replace(array, element, index) {\n // check if exists\n var ind = array.indexOf(element); // remove if exists\n\n if (ind !== -1) {\n array.splice(ind, 1);\n } // add to end if index is not set\n\n\n if (!$type.isNumber(index)) {\n array.push(element);\n } // add to indicated place if index is set\n else {\n array.splice(index, 0, element);\n }\n}\n/**\r\n * Wraps `input` in an array, if it isn't already an array.\r\n *\r\n * @param input Source value\r\n * @return An array\r\n */\n\nexport function toArray(input) {\n if (Array.isArray(input)) {\n return input;\n } else {\n return [input];\n }\n}\n/**\r\n * Returns `true` if `element` exists in `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to search for\r\n * @returns Item in array?\r\n */\n\nexport function has(array, element) {\n return indexOf(array, element) !== -1;\n}\n/**\r\n * Returns a shallow copy of `array`.\r\n *\r\n * @param array Source array\r\n * @returns Copy of the array\r\n */\n\nexport function copy(array) {\n var length = array.length; // It's faster to create the array with a pre-defined length\n\n var output = new Array(length);\n\n for (var i = 0; i < length; ++i) {\n // Because the array has a pre-defined length, we have to assign rather than push\n // This is also faster than pushing\n output[i] = array[i];\n }\n\n return output;\n}\n/**\r\n * Returns a copy of `array` which contains all the elements between `start`\r\n * and `end`. (including `start` and excluding `end`)\r\n *\r\n * If `end` is not provided, it defaults to `array.length`.\r\n *\r\n * @param array Source array\r\n * @param start Start index\r\n * @param end End index\r\n * @returns Part of the array\r\n */\n\nexport function slice(array, start, end) {\n if (end === void 0) {\n end = array.length;\n }\n\n var output = new Array(end - start);\n\n for (var i = start; i < end; ++i) {\n output[i - start] = array[i];\n }\n\n return output;\n}\n/**\r\n * Inserts a value into array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n * @param value Value to insert\r\n */\n\nexport function insertIndex(array, index, value) {\n array.splice(index, 0, value);\n}\n/**\r\n * Removes a value from array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n */\n\nexport function removeIndex(array, index) {\n array.splice(index, 1);\n}\n/**\r\n * Orders an array using specific `ordering` function and returns index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @param value Value to search for\r\n * @returns Result of the search\r\n */\n\nexport function getSortedIndex(array, ordering, value) {\n var start = 0;\n var end = array.length;\n var found = false;\n\n while (start < end) {\n // TODO is this faster/slower than using Math.floor ?\n var pivot = start + end >> 1;\n var order = ordering(value, array[pivot]); // less\n\n if (order < 0) {\n end = pivot; // equal\n } else if (order === 0) {\n found = true;\n start = pivot + 1; // more\n } else {\n start = pivot + 1;\n }\n }\n\n return {\n found: found,\n index: found ? start - 1 : start\n };\n}\n/**\r\n * Searches the array using custom function and returns index of the item if\r\n * found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns -1.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\n\nexport function findIndex(array, matches) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n if (matches(array[i], i)) {\n return i;\n }\n }\n\n return -1;\n}\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\n\nexport function find(array, matches) {\n var index = findIndex(array, matches);\n\n if (index !== -1) {\n return array[index];\n }\n}\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\n\nexport function shuffle(array) {\n // https://stackoverflow.com/a/2450976/449477\n var currentIndex = array.length,\n temporaryValue,\n randomIndex; // While there remain elements to shuffle...\n\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1; // And swap it with the current element.\n\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n}\nexport function keepIf(array, keep) {\n var length = array.length;\n var i = 0;\n\n while (i < length) {\n if (keep(array[i])) {\n ++i;\n } else {\n array.splice(i, 1);\n --length;\n }\n }\n}","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\n/**\r\n * A base class for disposable objects.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar Disposer =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param dispose Function that disposes object\r\n */\n function Disposer(dispose) {\n this._disposed = false;\n this._dispose = dispose;\n }\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\n\n\n Disposer.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Disposes the object.\r\n */\n\n\n Disposer.prototype.dispose = function () {\n if (!this._disposed) {\n this._disposed = true;\n\n this._dispose();\n }\n };\n\n return Disposer;\n}();\n\nexport { Disposer };\n/**\r\n * A collection of related disposers that can be disposed in one go.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar MultiDisposer =\n/** @class */\nfunction (_super) {\n __extends(MultiDisposer, _super);\n\n function MultiDisposer(disposers) {\n return _super.call(this, function () {\n $array.each(disposers, function (x) {\n x.dispose();\n });\n }) || this;\n }\n\n return MultiDisposer;\n}(Disposer);\n\nexport { MultiDisposer };\n/**\r\n * A special kind of Disposer that has attached value set.\r\n *\r\n * If a new value is set using `set()` method, the old disposer value is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar MutableValueDisposer =\n/** @class */\nfunction (_super) {\n __extends(MutableValueDisposer, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function MutableValueDisposer() {\n var _this = _super.call(this, function () {\n if ($type.hasValue(_this._disposer)) {\n _this._disposer.dispose();\n\n _this._disposer = undefined;\n }\n }) || this;\n\n return _this;\n }\n /**\r\n * Returns current value.\r\n *\r\n * @return Value\r\n */\n\n\n MutableValueDisposer.prototype.get = function () {\n return this._value;\n };\n /**\r\n * Sets value and disposes previous disposer if it was set.\r\n *\r\n * @param value New value\r\n * @param disposer Disposer\r\n */\n\n\n MutableValueDisposer.prototype.set = function (value, disposer) {\n if ($type.hasValue(this._disposer)) {\n this._disposer.dispose();\n }\n\n this._disposer = disposer;\n this._value = value;\n };\n /**\r\n * Resets the disposer value.\r\n */\n\n\n MutableValueDisposer.prototype.reset = function () {\n this.set(undefined, undefined);\n };\n\n return MutableValueDisposer;\n}(Disposer);\n\nexport { MutableValueDisposer };\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar CounterDisposer =\n/** @class */\nfunction (_super) {\n __extends(CounterDisposer, _super);\n\n function CounterDisposer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * [_counter description]\r\n *\r\n * @todo Description\r\n */\n\n\n _this._counter = 0;\n return _this;\n }\n /**\r\n * [increment description]\r\n *\r\n * @todo Description\r\n */\n\n\n CounterDisposer.prototype.increment = function () {\n var _this = this; // TODO throw an error if it is disposed\n\n\n ++this._counter; // TODO make this more efficient\n\n return new Disposer(function () {\n --_this._counter;\n\n if (_this._counter === 0) {\n _this.dispose();\n }\n });\n };\n\n return CounterDisposer;\n}(Disposer);\n\nexport { CounterDisposer };","/**\r\n * A collection of low-level async operation stuff.\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $array from \"./Array\";\nvar pendingFrame = false;\nvar nextQueue = [];\nvar readQueue = [];\nvar writeQueue = [];\nvar idleQueue = [];\nvar fps = 1000 / 60;\n/**\r\n * [raf description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport var raf = typeof requestAnimationFrame === \"function\" ? function (fn) {\n requestAnimationFrame(fn);\n} : function (fn) {\n setTimeout(fn, fps);\n};\n/**\r\n * [frameLoop description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nfunction frameLoop() {\n var now = Date.now();\n var length = nextQueue.length;\n\n for (var i = 0; i < length; ++i) {\n nextQueue[i](now);\n }\n\n $array.shiftLeft(nextQueue, length);\n\n for (var i = 0; i < readQueue.length; ++i) {\n readQueue[i](now);\n }\n\n readQueue.length = 0;\n\n for (var i = 0; i < writeQueue.length; ++i) {\n writeQueue[i](now);\n }\n\n writeQueue.length = 0;\n\n if (nextQueue.length === 0 && readQueue.length === 0) {\n pendingFrame = false;\n } else {\n raf(frameLoop);\n }\n}\n/**\r\n * [pendFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\nfunction pendFrame() {\n if (!pendingFrame) {\n pendingFrame = true;\n raf(frameLoop);\n }\n}\n/**\r\n * [nextFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\n\n\nexport function nextFrame(fn) {\n nextQueue.push(fn);\n pendFrame();\n}\n/**\r\n * [readFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\n\nexport function readFrame(fn) {\n readQueue.push(fn);\n pendFrame();\n}\n/**\r\n * [writeFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\n\nexport function writeFrame(fn) {\n writeQueue.push(fn);\n pendFrame();\n}\n/**\r\n * [whenIdle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\n\nexport function whenIdle(fn) {\n idleQueue.push(fn);\n}\n/**\r\n * [triggerIdle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @todo Maybe don't trigger a callback which was added while in the middle of triggering?\r\n */\n\nexport function triggerIdle() {\n var now = Date.now();\n var length = idleQueue.length;\n\n for (var i = 0; i < length; ++i) {\n idleQueue.shift()(now);\n }\n}","/**\r\n * Event Dispatcher module is used for registering listeners and dispatching\r\n * events across amCharts system.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Disposer } from \"./Disposer\";\nimport * as $array from \"./Array\";\nimport * as $async from \"./AsyncPending\";\nimport * as $type from \"./Type\";\n/*export interface IEventDispatcher {\r\n isDisposed(): boolean;\r\n dispose(): void;\r\n hasListeners(): boolean;\r\n enable(): void;\r\n disable(): void;\r\n enableType(type: Key): void;\r\n disableType(type: Key, amount?: number): void;\r\n isEnabled(type: Key): boolean;\r\n has(type: Key, callback?: (this: C, event: T[Key]) => void, context?: C): boolean;\r\n dispatchImmediately(type: Key, event: T[Key]): void;\r\n dispatch(type: Key, event: T[Key]): void;\r\n onAll(callback: (this: C, type: Key, event: T[Key]) => void, context?: C): IDisposer;\r\n on(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): IDisposer;\r\n once(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): IDisposer;\r\n off(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): void;\r\n off(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): void;\r\n copyFrom(source: this): void;\r\n}*/\n\n/**\r\n * Universal Event Dispatcher.\r\n *\r\n * @important\r\n */\n\nvar EventDispatcher =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n */\n function EventDispatcher() {\n this._listeners = [];\n this._killed = [];\n this._disabled = {};\n this._iterating = 0;\n this._enabled = true;\n this._disposed = false;\n }\n /**\r\n * Returns if this object has been already disposed.\r\n *\r\n * @return Disposed?\r\n */\n\n\n EventDispatcher.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Dispose (destroy) this object.\r\n */\n\n\n EventDispatcher.prototype.dispose = function () {\n if (!this._disposed) {\n this._disposed = true;\n var a = this._listeners;\n this._iterating = 1;\n this._listeners = null;\n this._disabled = null;\n\n try {\n $array.each(a, function (x) {\n x.disposer.dispose();\n });\n } finally {\n this._killed = null;\n this._iterating = null;\n }\n }\n };\n /**\r\n * Checks if this particular event dispatcher has any listeners set.\r\n *\r\n * @return Has listeners?\r\n */\n\n\n EventDispatcher.prototype.hasListeners = function () {\n return this._listeners.length !== 0;\n };\n /**\r\n * Checks if this particular event dispatcher has any particular listeners set.\r\n *\r\n * @return Has particular event listeners?\r\n */\n\n\n EventDispatcher.prototype.hasListenersByType = function (type) {\n return $array.any(this._listeners, function (x) {\n return (x.type === null || x.type === type) && !x.killed;\n });\n };\n /**\r\n * Enable dispatching of events if they were previously disabled by\r\n * `disable()`.\r\n */\n\n\n EventDispatcher.prototype.enable = function () {\n this._enabled = true;\n };\n /**\r\n * Disable dispatching of events until re-enabled by `enable()`.\r\n */\n\n\n EventDispatcher.prototype.disable = function () {\n this._enabled = false;\n };\n /**\r\n * Enable dispatching particular event, if it was disabled before by\r\n * `disableType()`.\r\n *\r\n * @param type Event type\r\n */\n\n\n EventDispatcher.prototype.enableType = function (type) {\n delete this._disabled[type];\n };\n /**\r\n * Disable dispatching of events for a certain event type.\r\n *\r\n * Optionally, can set how many dispatches to skip before automatically\r\n * re-enabling the dispatching.\r\n *\r\n * @param type Event type\r\n * @param amount Number of event dispatches to skip\r\n */\n\n\n EventDispatcher.prototype.disableType = function (type, amount) {\n if (amount === void 0) {\n amount = Infinity;\n }\n\n this._disabled[type] = amount;\n };\n /**\r\n * Removes listener from dispatcher.\r\n *\r\n * Will throw an exception if such listener does not exists.\r\n *\r\n * @param listener Listener to remove\r\n */\n\n\n EventDispatcher.prototype._removeListener = function (listener) {\n if (this._iterating === 0) {\n var index = this._listeners.indexOf(listener);\n\n if (index === -1) {\n throw new Error(\"Invalid state: could not remove listener\");\n }\n\n this._listeners.splice(index, 1);\n } else {\n this._killed.push(listener);\n }\n };\n /**\r\n * Removes existing listener by certain parameters.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\n\n\n EventDispatcher.prototype._removeExistingListener = function (once, type, callback, context) {\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n }\n\n this._eachListener(function (info) {\n if (info.once === once && // TODO is this correct ?\n info.type === type && (callback == null || info.callback === callback) && info.context === context) {\n info.disposer.dispose();\n }\n });\n };\n /**\r\n * Checks if dispatching for particular event type is enabled.\r\n *\r\n * @param type Event type\r\n * @return Enabled?\r\n */\n\n\n EventDispatcher.prototype.isEnabled = function (type) {\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n } // TODO is this check correct ?\n\n\n return this._enabled && this._listeners.length > 0 && this.hasListenersByType(type) && this._disabled[type] == null;\n };\n /**\r\n * Checks if there's already a listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @return Has listener?\r\n */\n\n\n EventDispatcher.prototype.has = function (type, callback, context) {\n var index = $array.findIndex(this._listeners, function (info) {\n return info.once !== true && // Ignoring \"once\" listeners\n info.type === type && (callback == null || info.callback === callback) && info.context === context;\n });\n return index !== -1;\n };\n /**\r\n * Checks whether event of the particular type should be dispatched.\r\n *\r\n * @param type Event type\r\n * @return Dispatch?\r\n */\n\n\n EventDispatcher.prototype._shouldDispatch = function (type) {\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n }\n\n var count = this._disabled[type];\n\n if (!$type.isNumber(count)) {\n return this._enabled;\n } else {\n if (count <= 1) {\n delete this._disabled[type];\n } else {\n --this._disabled[type];\n }\n\n return false;\n }\n };\n /**\r\n * [_eachListener description]\r\n *\r\n * All of this extra code is needed when a listener is removed while iterating\r\n *\r\n * @todo Description\r\n * @param fn [description]\r\n */\n\n\n EventDispatcher.prototype._eachListener = function (fn) {\n var _this = this;\n\n ++this._iterating;\n\n try {\n $array.each(this._listeners, fn);\n } finally {\n --this._iterating; // TODO should this be inside or outside the finally ?\n\n if (this._iterating === 0 && this._killed.length !== 0) {\n // Remove killed listeners\n $array.each(this._killed, function (killed) {\n _this._removeListener(killed);\n });\n this._killed.length = 0;\n }\n }\n };\n /**\r\n * Dispatches an event immediately without waiting for next cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\n\n\n EventDispatcher.prototype.dispatchImmediately = function (type, event) {\n if (this._shouldDispatch(type)) {\n // TODO check if it's faster to use an object of listeners rather than a single big array\n // TODO if the function throws, maybe it should keep going ?\n this._eachListener(function (listener) {\n if (!listener.killed && (listener.type === null || listener.type === type)) {\n listener.dispatch(type, event);\n }\n });\n }\n };\n /**\r\n * Shelves the event to be dispatched within next update cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\n\n\n EventDispatcher.prototype.dispatch = function (type, event) {\n if (this._shouldDispatch(type)) {\n this._eachListener(function (listener) {\n // TODO check if it's faster to use an object of listeners rather than a single big array\n if (!listener.killed && (listener.type === null || listener.type === type)) {\n // TODO if the function throws, maybe it should keep going ?\n // TODO dispatch during the update cycle, rather than using whenIdle\n $async.whenIdle(function () {\n if (!listener.killed) {\n listener.dispatch(type, event);\n }\n });\n }\n });\n }\n };\n /**\r\n * Creates, catalogs and returns an [[EventListener]].\r\n *\r\n * Event listener can be disposed.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @param dispatch\r\n * @returns An event listener\r\n */\n\n\n EventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {\n var _this = this;\n\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n }\n\n this._removeExistingListener(once, type, callback, context);\n\n var info = {\n type: type,\n callback: callback,\n context: context,\n shouldClone: shouldClone,\n dispatch: dispatch,\n killed: false,\n once: once,\n disposer: new Disposer(function () {\n info.killed = true;\n\n _this._removeListener(info);\n })\n };\n\n this._listeners.push(info);\n\n return info;\n };\n /**\r\n * Creates an event listener to be invoked on **any** event.\r\n *\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\n\n\n EventDispatcher.prototype.onAll = function (callback, context, shouldClone) {\n if (shouldClone === void 0) {\n shouldClone = true;\n }\n\n return this._on(false, null, callback, context, shouldClone, function (type, event) {\n return callback.call(context, type, event);\n }).disposer;\n };\n /**\r\n * Creates an event listener to be invoked on a specific event type.\r\n *\r\n * ```TypeScript\r\n * series.events.on(\"hidden\", (ev) => {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * series.events.on(\"hidden\", function(ev) {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"events\": {\r\n * \t\"hidden\": function(ev) {\r\n * \t console.log(\"Series hidden: \" + ev.target.name);\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will invoke our custom event handler whenever series we put\r\n * event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\n\n\n EventDispatcher.prototype.on = function (type, callback, context, shouldClone) {\n if (shouldClone === void 0) {\n shouldClone = true;\n }\n\n return this._on(false, type, callback, context, shouldClone, function (type, event) {\n return callback.call(context, event);\n }).disposer;\n };\n /**\r\n * Creates an event listener to be invoked on a specific event type once.\r\n *\r\n * Once the event listener is invoked, it is automatically disposed.\r\n *\r\n * ```TypeScript\r\n * series.events.on(\"hidden\", (ev) => {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * series.events.on(\"hidden\", function(ev) {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"events\": {\r\n * \t\"hidden\": function(ev) {\r\n * \t console.log(\"Series hidden: \" + ev.target.name);\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will invoke our custom event handler the first time series we\r\n * put event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\n\n\n EventDispatcher.prototype.once = function (type, callback, context, shouldClone) {\n if (shouldClone === void 0) {\n shouldClone = true;\n }\n\n var x = this._on(true, type, callback, context, shouldClone, function (type, event) {\n x.disposer.dispose();\n callback.call(context, event);\n }); // TODO maybe this should return a different Disposer ?\n\n\n return x.disposer;\n };\n /**\r\n * Removes the event listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\n\n\n EventDispatcher.prototype.off = function (type, callback, context) {\n this._removeExistingListener(false, type, callback, context);\n };\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n */\n\n\n EventDispatcher.prototype.copyFrom = function (source) {\n var _this = this;\n\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n }\n\n if (source === this) {\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\n }\n\n $array.each(source._listeners, function (x) {\n // TODO is this correct ?\n if (!x.killed && x.shouldClone) {\n if (x.type === null) {\n _this.onAll(x.callback, x.context);\n } else if (x.once) {\n _this.once(x.type, x.callback, x.context);\n } else {\n _this.on(x.type, x.callback, x.context);\n }\n }\n });\n };\n\n return EventDispatcher;\n}();\n\nexport { EventDispatcher };\n/**\r\n * A version of the [[EventDispatcher]] that dispatches events for a specific\r\n * target object.\r\n *\r\n * @important\r\n */\n\nvar TargetedEventDispatcher =\n/** @class */\nfunction (_super) {\n __extends(TargetedEventDispatcher, _super);\n /**\r\n * Constructor\r\n *\r\n * @param target Event dispatcher target\r\n */\n\n\n function TargetedEventDispatcher(target) {\n var _this = _super.call(this) || this;\n\n _this.target = target;\n return _this;\n }\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n */\n\n\n TargetedEventDispatcher.prototype.copyFrom = function (source) {\n var _this = this;\n\n if (this._disposed) {\n throw new Error(\"EventDispatcher is disposed\");\n }\n\n if (source === this) {\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\n }\n\n $array.each(source._listeners, function (x) {\n // TODO very hacky\n if (x.context === source.target) {\n return;\n } // TODO is this correct ?\n\n\n if (!x.killed && x.shouldClone) {\n if (x.type === null) {\n _this.onAll(x.callback, x.context);\n } else if (x.once) {\n _this.once(x.type, x.callback, x.context);\n } else {\n _this.on(x.type, x.callback, x.context);\n }\n }\n });\n };\n\n return TargetedEventDispatcher;\n}(EventDispatcher);\n\nexport { TargetedEventDispatcher };","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns an iterator for all entries in object.\r\n *\r\n * Can be used to safely iterate through all properties of the object.\r\n *\r\n * @param object Source object\r\n * @returns Iterator\r\n */\n\nexport function entries(object) {\n return function (push) {\n // TODO make this more efficient ?\n for (var key in object) {\n if (hasKey(object, key)) {\n if (!push([key, object[key]])) {\n break;\n }\n }\n }\n };\n}\n/**\r\n * Returns an array of object's property names.\r\n *\r\n * @param object Source object\r\n * @returns Object property names\r\n */\n\nexport function keys(object) {\n var output = [];\n\n for (var key in object) {\n if (hasKey(object, key)) {\n output.push(key);\n }\n }\n\n return output;\n}\n/**\r\n * Returns an array of object's property names ordered using specific ordering\r\n * function.\r\n *\r\n * @param object Source object\r\n * @param order Ordering function\r\n * @returns Object property names\r\n */\n\nexport function keysOrdered(object, order) {\n return keys(object).sort(order);\n}\n/**\r\n * Checks if `object` has a specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Has key?\r\n */\n\nexport function hasKey(object, key) {\n return {}.hasOwnProperty.call(object, key);\n}\n/**\r\n * Returns value of the specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Key value\r\n */\n\nexport function getKey(object, key) {\n return object[key];\n}\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * If return value of the function evaluates to `false` further iteration is\r\n * cancelled.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\n\nexport function eachContinue(object, fn) {\n for (var key in object) {\n if (hasKey(object, key)) {\n if (!fn(key, object[key])) {\n break;\n }\n }\n }\n}\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\n\nexport function each(object, fn) {\n eachContinue(object, function (key, value) {\n fn(key, value);\n return true;\n });\n}\n/**\r\n * Orders object properties using custom `ord` function and iterates through\r\n * them calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n * @param order Ordering function\r\n */\n\nexport function eachOrdered(object, fn, ord) {\n $array.each(keysOrdered(object, ord), function (key) {\n fn(key, object[key]);\n });\n}\n/**\r\n * Returns a copy of the object.\r\n *\r\n * @param object Source object\r\n * @returns Copy of the object\r\n */\n\nexport function copy(object) {\n return Object.assign({}, object);\n}\n/**\r\n * Merges two objects and returns a new object that contains properties from\r\n * both source objects.\r\n *\r\n * @param object1 Source object #1\r\n * @param object2 Source object #2\r\n * @returns Combined object\r\n */\n\nexport function merge(object1, object2) {\n return Object.assign({}, object1, object2);\n}\n/**\r\n * Returns object clone.\r\n *\r\n * @param object Source object\r\n * @returns Clone\r\n */\n\nexport function clone(object) {\n return JSON.parse(JSON.stringify(object));\n}\n/**\r\n * Copies a list of properties from one object to another.\r\n *\r\n * Will not copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\n\nexport function copyProperties(source, target, keys) {\n $array.each(keys, function (key) {\n if ($type.hasValue(source[key])) {\n target[key] = source[key];\n }\n });\n}\n/**\r\n * Copies a list of properties from one object to another only if target does't have value of the property set.\r\n *\r\n * Will not copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\n\nexport function softCopyProperties(source, target, keys) {\n $array.each(keys, function (key) {\n if ($type.hasValue(source[key]) && !$type.hasValue(target[key])) {\n target[key] = source[key];\n }\n });\n}\n/**\r\n * Copies a list of properties from one object to another.\r\n *\r\n * Will copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\n\nexport function forceCopyProperties(source, target, keys) {\n $array.each(keys, function (key) {\n target[key] = source[key];\n });\n}\n/**\r\n * Copies all properties from one object to another.\r\n *\r\n * @param from Source object\r\n * @param to Target object\r\n */\n\nexport function copyAllProperties(from, to) {\n copyProperties(from, to, keys(from));\n}","import * as $array from \"./Array\";\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function fromArray(array) {\n return function (push) {\n var length = array.length;\n\n for (var i = 0; i < length; ++i) {\n if (!push(array[i])) {\n break;\n }\n }\n };\n}\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function length(iter) {\n var sum = 0;\n iter(function (_) {\n ++sum;\n return true;\n });\n return sum;\n}\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function toArray(iter) {\n var output = [];\n iter(function (value) {\n output.push(value);\n return true;\n });\n return output;\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function eachContinue(iter, fn) {\n iter(fn);\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function each(iter, fn) {\n iter(function (value) {\n fn(value);\n return true;\n });\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function sort(iter, fn) {\n return fromArray(toArray(iter).sort(fn));\n}\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function map(iter, fn) {\n return function (push) {\n return iter(function (value) {\n return push(fn(value));\n });\n };\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function filter(iter, fn) {\n return function (push) {\n return iter(function (value) {\n if (fn(value)) {\n return push(value);\n } else {\n return true;\n }\n });\n };\n}\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function concat() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n return function (push) {\n var go = true;\n\n var push2 = function push2(value) {\n return go = push(value);\n };\n\n var length = args.length;\n\n for (var i = 0; i < length; ++i) {\n args[i](push2);\n\n if (!go) {\n break;\n }\n }\n };\n}\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function flatten(iter) {\n return function (push) {\n var go = true;\n\n var push2 = function push2(value) {\n return go = push(value);\n };\n\n iter(function (value) {\n value(push2);\n return go;\n });\n };\n}\n/**\r\n * [number description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function indexed(iter) {\n return function (push) {\n var index = 0;\n iter(function (value) {\n return push([index++, value]);\n });\n };\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function findIndex(iter, matches) {\n var found = false;\n var i = 0;\n iter(function (value) {\n if (matches(value)) {\n found = true;\n return false;\n } else {\n ++i;\n return true;\n }\n });\n return found ? i : -1;\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function find(iter, matches) {\n var output;\n iter(function (value) {\n if (matches(value)) {\n output = value;\n return false;\n } else {\n return true;\n }\n });\n return output;\n}\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function findMap(iter, matches) {\n var output;\n iter(function (value) {\n var v = matches(value);\n\n if (v !== null) {\n output = v;\n return false;\n } else {\n return true;\n }\n });\n return output;\n}\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function contains(iter, matches) {\n var output = false;\n iter(function (value) {\n if (matches(value)) {\n output = true;\n return false;\n } else {\n return true;\n }\n });\n return output;\n}\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nexport function foldl(iter, init, fn) {\n iter(function (value) {\n init = fn(init, value);\n return true;\n });\n return init;\n}\n/**\r\n * [min2 description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param left [description]\r\n * @param right [description]\r\n * @return [description]\r\n */\n\nfunction min2(left, right) {\n if (left == null || right < left) {\n return right;\n } else {\n return left;\n }\n}\n/**\r\n * [min description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Verify that this works correctly\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\n\n\nexport function min(a) {\n return foldl(a, null, min2);\n}\n/**\r\n * [max2 description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param left [description]\r\n * @param right [description]\r\n * @return [description]\r\n */\n\nfunction max2(left, right) {\n if (left == null || right > left) {\n return right;\n } else {\n return left;\n }\n}\n/**\r\n * [max description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Verify that this works correctly\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\n\n\nexport function max(a) {\n return foldl(a, null, max2);\n}\n/**\r\n * [join description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param iter [description]\r\n * @param separator [description]\r\n * @return [description]\r\n */\n\nexport function join(iter, separator) {\n if (separator === void 0) {\n separator = \"\";\n }\n\n var first = true;\n var init = \"\";\n iter(function (value) {\n if (first) {\n first = false;\n } else {\n init += separator;\n }\n\n init += value;\n return true;\n });\n return init;\n}\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar ListIterator =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n *\r\n * @param list [description]\r\n * @param create [description]\r\n */\n function ListIterator(list, create) {\n // flag specifies if iterator should create new list item if it is reqested for a nextItem but there is no more left in the list\n this.createNewItems = false;\n this.list = list;\n this._create = create;\n this.reset();\n }\n\n ListIterator.prototype.reset = function () {\n this._listCopy = toArray(this.list.iterator());\n };\n\n ListIterator.prototype.clear = function () {\n this._listCopy.length = 0;\n };\n\n ListIterator.prototype.getFirst = function () {\n return this.returnItem(0);\n };\n\n ListIterator.prototype.getLast = function () {\n return this.returnItem(this._listCopy.length - 1);\n };\n\n ListIterator.prototype.find = function (fn) {\n var index = $array.findIndex(this._listCopy, fn);\n\n if (index !== -1) {\n var item = this._listCopy[index]; // TODO use removeIndex instead ?\n\n $array.remove(this._listCopy, item);\n return item;\n } else {\n return this.getLast();\n }\n };\n\n ListIterator.prototype.removeItem = function (item) {\n return $array.remove(this._listCopy, item);\n };\n\n ListIterator.prototype.returnItem = function (index) {\n if (index >= 0 && index < this._listCopy.length) {\n var item = this._listCopy[index]; // TODO use removeIndex instead ?\n\n $array.remove(this._listCopy, item);\n return item;\n } else if (this.createNewItems) {\n return this._create();\n }\n };\n\n ListIterator.prototype.iterator = function () {\n return fromArray(this._listCopy);\n };\n\n return ListIterator;\n}();\n\nexport { ListIterator };","/**\r\n * ============================================================================\r\n * COMPARING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Comparing function used for ordering.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Use localeCompare\r\n * @param a Item 1\r\n * @param b Item 2\r\n * @return Result\r\n */\nexport function order(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else {\n return 1;\n }\n}\n/**\r\n * ============================================================================\r\n * OTHER FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Repeats a `string` number of times as set in `amount`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make this faster\r\n * @param string Source string\r\n * @param amount Number of times to repeat string\r\n * @return New string\r\n */\n\nexport function repeat(string, amount) {\n return new Array(amount + 1).join(string);\n}\n/**\r\n * Generates a random string `characters` length.\r\n *\r\n * @param chars Number of characters\r\n * @return Random string\r\n */\n\nexport function random(chars) {\n var res = \"\";\n var choice = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n for (var i = 0; i < chars; i++) {\n res += choice.charAt(Math.floor(Math.random() * choice.length));\n }\n\n return res;\n}","import { __extends, __generator, __read } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Disposer } from \"./Disposer\";\nimport { EventDispatcher } from \"./EventDispatcher\";\nimport * as $object from \"./Object\";\nimport * as $iter from \"./Iterator\";\nimport * as $string from \"./String\";\n/**\r\n * A disposable dictionary, which when disposed itself will call `dispose()`\r\n * method on all its items.\r\n */\n\nvar DictionaryDisposer =\n/** @class */\nfunction (_super) {\n __extends(DictionaryDisposer, _super);\n\n function DictionaryDisposer(dict) {\n var _this = this;\n\n var disposer = dict.events.on(\"removed\", function (x) {\n x.oldValue.dispose();\n }, undefined, false);\n _this = _super.call(this, function () {\n disposer.dispose(); // TODO clear the dictionary ?\n\n $iter.each(dict.iterator(), function (a) {\n var v = a[1];\n v.dispose();\n });\n }) || this;\n return _this;\n }\n\n return DictionaryDisposer;\n}(Disposer);\n\nexport { DictionaryDisposer };\n/**\r\n * A Dictionary is collection where values of some type can be mapped to\r\n * string keys.\r\n *\r\n * You might call it an \"associative list\" or \"associative array\".\r\n */\n\nvar Dictionary =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n */\n function Dictionary() {\n /**\r\n * Event dispatcher.\r\n */\n this.events = new EventDispatcher();\n this._dictionary = {};\n }\n /**\r\n * Returns `true` if key exists in Dictionary.\r\n *\r\n * @param key The key to search for\r\n * @return `true` if key exists, `false` if it doesn't\r\n */\n\n\n Dictionary.prototype.hasKey = function (key) {\n return $object.hasKey(this._dictionary, key);\n };\n /**\r\n * Returns the value for a specific key.\r\n *\r\n * @param key The key to search for\r\n * @return Value for the key, or `undefined` if it doesn't exist\r\n */\n\n\n Dictionary.prototype.getKey = function (key) {\n return this._dictionary[key];\n };\n /**\r\n * Inserts value at specific key.\r\n *\r\n * Will thrown an exception if the key already exists in the dictionary.\r\n *\r\n * @param key Key\r\n * @param value Value\r\n */\n\n\n Dictionary.prototype.insertKey = function (key, value) {\n if ($object.hasKey(this._dictionary, key)) {\n throw new Error(\"Key \" + key + \" already exists in dictionary\");\n } else {\n this._dictionary[key] = value;\n\n if (this.events.isEnabled(\"insertKey\")) {\n this.events.dispatchImmediately(\"insertKey\", {\n type: \"insertKey\",\n target: this,\n key: key,\n newValue: value\n });\n }\n }\n };\n /**\r\n * Adds or updates key/value into dictionary.\r\n *\r\n * If the key already exists, the old value will be overwritten.\r\n *\r\n * If the new value is exactly the same as the old value (using ===), it won't do anything.\r\n *\r\n * @param key Key\r\n * @param value Value\r\n */\n\n\n Dictionary.prototype.setKey = function (key, value) {\n if ($object.hasKey(this._dictionary, key)) {\n var oldValue = this._dictionary[key];\n\n if (oldValue !== value) {\n this._dictionary[key] = value;\n\n if (this.events.isEnabled(\"setKey\")) {\n this.events.dispatchImmediately(\"setKey\", {\n type: \"setKey\",\n target: this,\n key: key,\n oldValue: oldValue,\n newValue: value\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n oldValue: oldValue\n });\n }\n }\n } else {\n this._dictionary[key] = value;\n\n if (this.events.isEnabled(\"insertKey\")) {\n this.events.dispatchImmediately(\"insertKey\", {\n type: \"insertKey\",\n target: this,\n key: key,\n newValue: value\n });\n }\n }\n };\n /**\r\n * Updates the value at specific `key` using custom function.\r\n *\r\n * Passes in current value into the function, and uses its output as a new\r\n * value.\r\n *\r\n * If the new value is exactly the same as the old value (using ===), it won't do anything.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param fn Function to transform the value\r\n */\n\n\n Dictionary.prototype.updateKey = function (key, fn) {\n if ($object.hasKey(this._dictionary, key)) {\n var oldValue = this._dictionary[key];\n var newValue = fn(oldValue);\n\n if (oldValue !== newValue) {\n this._dictionary[key] = newValue;\n\n if (this.events.isEnabled(\"setKey\")) {\n this.events.dispatchImmediately(\"setKey\", {\n type: \"setKey\",\n target: this,\n key: key,\n oldValue: oldValue,\n newValue: newValue\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n oldValue: oldValue\n });\n }\n }\n } else {\n throw new Error(\"Key \" + key + \" doesn't exist in dictionary\");\n }\n };\n /**\r\n * Removes value at specific `key` from dictionary.\r\n *\r\n * @param key Key to remove\r\n */\n\n\n Dictionary.prototype.removeKey = function (key) {\n if ($object.hasKey(this._dictionary, key)) {\n var oldValue = this._dictionary[key];\n delete this._dictionary[key];\n\n if (this.events.isEnabled(\"removeKey\")) {\n this.events.dispatchImmediately(\"removeKey\", {\n type: \"removeKey\",\n target: this,\n key: key,\n oldValue: oldValue\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n oldValue: oldValue\n });\n }\n }\n };\n /**\r\n * [insertKeyIfEmpty description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo description\r\n * @param key [description]\r\n * @param ifEmpty [description]\r\n * @return [description]\r\n */\n\n\n Dictionary.prototype.insertKeyIfEmpty = function (key, ifEmpty) {\n if (!this.hasKey(key)) {\n this.insertKey(key, ifEmpty());\n }\n\n return this.getKey(key);\n };\n /**\r\n * Removes all items from the dictionary.\r\n */\n\n\n Dictionary.prototype.clear = function () {\n var _this = this; // TODO dispatch this after clear\n\n\n if (this.events.isEnabled(\"removed\")) {\n $object.each(this._dictionary, function (key, value) {\n _this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: _this,\n oldValue: value\n });\n });\n }\n\n this._dictionary = {};\n\n if (this.events.isEnabled(\"cleared\")) {\n this.events.dispatchImmediately(\"cleared\", {\n type: \"cleared\",\n target: this\n });\n }\n };\n /**\r\n * Copies items from another Dictionary.\r\n *\r\n * @param source A Dictionary to copy items from\r\n */\n\n\n Dictionary.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source.iterator(), function (a) {\n // TODO fix this type cast\n _this.setKey(a[0], a[1]);\n });\n };\n /**\r\n * Returns an interator that can be used to iterate through all items in\r\n * the dictionary.\r\n *\r\n * @return Iterator\r\n */\n\n\n Dictionary.prototype.iterator = function () {\n // @todo fix this type after the Iterator bug is fixed\n // https://github.com/Microsoft/TypeScript/issues/16730\n return $object.entries(this._dictionary);\n };\n /**\r\n * Returns an ES6 iterator for the keys/values of the dictionary.\r\n */\n\n\n Dictionary.prototype[Symbol.iterator] = function () {\n var _a, _b, _i, key;\n\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = [];\n\n for (_b in this._dictionary) {\n _a.push(_b);\n }\n\n _i = 0;\n _c.label = 1;\n\n case 1:\n if (!(_i < _a.length)) return [3\n /*break*/\n , 4];\n key = _a[_i];\n if (!$object.hasKey(this._dictionary, key)) return [3\n /*break*/\n , 3];\n return [4\n /*yield*/\n , [key, this._dictionary[key]]];\n\n case 2:\n _c.sent();\n\n _c.label = 3;\n\n case 3:\n _i++;\n return [3\n /*break*/\n , 1];\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n };\n /**\r\n * Calls `f` for each key/value in the dictionary.\r\n */\n\n\n Dictionary.prototype.each = function (f) {\n $iter.each(this.iterator(), function (_a) {\n var _b = __read(_a, 2),\n key = _b[0],\n value = _b[1];\n\n return f(key, value);\n });\n };\n /**\r\n * Returns an iterator that can be used to iterate through all items in\r\n * the dictionary, ordered by key.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Iterator\r\n */\n\n\n Dictionary.prototype.sortedIterator = function () {\n return $iter.sort(this.iterator(), function (x, y) {\n return $string.order(x[0], y[0]);\n });\n };\n\n return Dictionary;\n}();\n\nexport { Dictionary };\n/**\r\n * A version of a [[Dictionary]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\n\nvar DictionaryTemplate =\n/** @class */\nfunction (_super) {\n __extends(DictionaryTemplate, _super);\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\n\n\n function DictionaryTemplate(t) {\n var _this = _super.call(this) || this;\n\n _this.template = t;\n return _this;\n }\n\n Object.defineProperty(DictionaryTemplate.prototype, \"template\", {\n /**\r\n * @return Template object\r\n */\n get: function get() {\n return this._template;\n },\n\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\n set: function set(v) {\n v.isTemplate = true;\n this._template = v;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all elements from other dictionary.\r\n *\r\n * @param source Source dictionary\r\n */\n\n DictionaryTemplate.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source.iterator(), function (a) {\n // TODO fix this type cast\n // TODO why does this need to clone ?\n _this.setKey(a[0], a[1].clone());\n });\n };\n /**\r\n * Instantiates a new object of the specified type, adds it to specified\r\n * `key` in the dictionary, and returns it.\r\n *\r\n * @param make Item type to use. Will use the default type for the dictionary if not specified.\r\n * @return Newly created item\r\n */\n\n\n DictionaryTemplate.prototype.create = function (key) {\n var _this = this;\n\n return this.insertKeyIfEmpty(key, function () {\n return _this.template.clone();\n });\n };\n\n return DictionaryTemplate;\n}(Dictionary);\n\nexport { DictionaryTemplate };","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { Dictionary } from \"./Dictionary\";\nimport * as $type from \"./Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Represents object cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Better storage\r\n * @todo TTL logging\r\n * @todo Garbage collector\r\n */\n\nvar Cache =\n/** @class */\nfunction () {\n function Cache() {\n /**\r\n * Storage for cache items.\r\n */\n this._storage = new Dictionary();\n /**\r\n * Default TTL in milliseconds.\r\n */\n\n this.ttl = 1000;\n }\n /**\r\n * Caches or updates cached value, resets TTL.\r\n *\r\n * If `ttl` is set to zero, item will never expire.\r\n *\r\n * @param owner An id of the object that owns this cache\r\n * @param key Index key\r\n * @param value Value\r\n * @param ttl TTL of the cache to live in milliseconds\r\n */\n\n\n Cache.prototype.set = function (owner, key, value, ttl) {\n // Create if storage does not exist for this owner\n var ownerStorage = this._storage.insertKeyIfEmpty(owner, function () {\n return new Dictionary();\n }); // Create cache item\n\n\n var item = {\n \"touched\": new Date().getTime(),\n \"ttl\": $type.isNumber(ttl) ? ttl : this.ttl,\n \"value\": value\n }; // Set\n\n ownerStorage.setKey(key, item);\n };\n /**\r\n * Rerturns cached item, respecting TTL.\r\n *\r\n * @param owner An id of the object that owns this cache\r\n * @param key Index key\r\n * @param value Value to return if cache not available\r\n * @return Value, or `undefined` if not set\r\n */\n\n\n Cache.prototype.get = function (owner, key, value) {\n if (value === void 0) {\n value = undefined;\n } // \t\t || ypeof this._storage[owner][key] === \"undefined\" || this._storage[owner][key].expired === true) {\n\n\n if (this._storage.hasKey(owner)) {\n var ownerStorage = this._storage.getKey(owner);\n\n if (ownerStorage.hasKey(key)) {\n var cacheItem = ownerStorage.getKey(key);\n\n if (cacheItem.ttl && cacheItem.touched + cacheItem.ttl < new Date().getTime()) {\n cacheItem.expired = true;\n }\n\n if (cacheItem.expired) {\n ownerStorage.removeKey(key);\n return value;\n }\n\n return cacheItem.value;\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n /**\r\n * Clears cache for specific owner or everything.\r\n *\r\n * @param owner Owner to clear cache for\r\n */\n\n\n Cache.prototype.clear = function (owner) {\n if (owner) {\n this._storage.removeKey(owner);\n } else {\n this._storage.clear();\n }\n };\n\n return Cache;\n}();\n\nexport { Cache };\n/**\r\n * ============================================================================\r\n * GLOBAL INSTANCE\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A global instance of cache. Use this instance to cache any values.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var cache = new Cache();","import { EventDispatcher } from \"./utils/EventDispatcher\";\nimport { Dictionary } from \"./utils/Dictionary\";\nimport { cache } from \"./utils/Cache\";\nimport * as $type from \"./utils/Type\";\nimport * as $string from \"./utils/String\";\nimport * as $array from \"./utils/Array\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Registry is used to store miscellaneous system-wide information, like ids,\r\n * maps, themes, and registered classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar Registry =\n/** @class */\nfunction () {\n function Registry() {\n var _this = this;\n /**\r\n * Event dispacther.\r\n */\n\n\n this.events = new EventDispatcher();\n /**\r\n * All currently applied themes. All new chart instances created will\r\n * automatically inherit and retain System's themes.\r\n */\n\n this.themes = [];\n /**\r\n * List of all loaded available themes.\r\n *\r\n * Whenever a theme loads, it registers itself in System's `loadedThemes`\r\n * collection.\r\n */\n\n this.loadedThemes = {};\n /**\r\n * An indeternal counter used to generate unique IDs.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this._uidCount = 0;\n /**\r\n * Keeps register of class references so that they can be instnatiated using\r\n * string key.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.registeredClasses = {};\n /**\r\n * Holds all generated placeholders.\r\n */\n\n this._placeholders = {};\n /**\r\n * A list of invalid(ated) [[Sprite]] objects that need to be re-validated\r\n * during next cycle.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidSprites = {};\n /**\r\n * Components are added to this list when their data provider changes to\r\n * a new one or data is added/removed from their data provider.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidDatas = {};\n /**\r\n * Components are added to this list when values of their raw data change.\r\n * Used when we want a smooth animation from one set of values to another.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidRawDatas = [];\n /**\r\n * Components are added to this list when values of their data changes\r\n * (but not data provider itself).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidDataItems = [];\n /**\r\n * Components are added to this list when their data range (selection) is\r\n * changed, e.g. zoomed.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidDataRange = [];\n /**\r\n * A list of [[Sprite]] objects that have invalid(ated) positions, that need\r\n * to be recalculated.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidPositions = {};\n /**\r\n * A list of [[Container]] objects with invalid(ated) layouts.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.invalidLayouts = {};\n /**\r\n * An array holding all active (non-disposed) top level elemens.\r\n *\r\n * When, for example, a new chart is created, its instance will be added to\r\n * this array, and will be removed when the chart is disposed.\r\n */\n\n this.baseSprites = [];\n /**\r\n * An UID-based map of base sprites (top-level charts).\r\n */\n\n this.baseSpritesByUid = {};\n /**\r\n * Queued charts (waiting for their turn) to initialize.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/performance/#Daisy_chaining_multiple_charts} for more information\r\n */\n\n this.queue = [];\n /**\r\n * An array of deferred charts that haven't been created yet.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/performance/#Deferred_daisy_chained_instantiation} for more information\r\n * @since 4.10.0\r\n */\n\n this.deferred = [];\n this.uid = this.getUniqueId();\n this.invalidSprites.noBase = [];\n this.invalidDatas.noBase = [];\n this.invalidLayouts.noBase = [];\n this.invalidPositions.noBase = []; // This is needed for Angular Universal SSR\n\n if (typeof addEventListener !== \"undefined\") {\n // This is needed to prevent charts from being cut off when printing\n addEventListener(\"beforeprint\", function () {\n $array.each(_this.baseSprites, function (sprite) {\n var svg = sprite.paper.svg;\n svg.setAttribute(\"viewBox\", \"0 0 \" + svg.clientWidth + \" \" + svg.clientHeight);\n });\n });\n addEventListener(\"afterprint\", function () {\n $array.each(_this.baseSprites, function (sprite) {\n var svg = sprite.paper.svg;\n svg.removeAttribute(\"viewBox\");\n });\n });\n }\n }\n /**\r\n * Generates a unique chart system-wide ID.\r\n *\r\n * @return Generated ID\r\n */\n\n\n Registry.prototype.getUniqueId = function () {\n var uid = this._uidCount;\n this._uidCount += 1;\n return \"id-\" + uid;\n };\n\n Object.defineProperty(Registry.prototype, \"map\", {\n /**\r\n * Returns a universal collection for mapping ids with objects.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Map collection\r\n */\n get: function get() {\n if (!this._map) {\n this._map = new Dictionary();\n }\n\n return this._map;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Caches value in object's cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param value Value\r\n * @param ttl TTL in seconds\r\n */\n\n Registry.prototype.setCache = function (key, value, ttl) {\n cache.set(this.uid, key, value, ttl);\n };\n /**\r\n * Retrieves cached value.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param value Value to return if cache is not available\r\n * @return Value\r\n */\n\n\n Registry.prototype.getCache = function (key, value) {\n if (value === void 0) {\n value = undefined;\n }\n\n return cache.get(this.uid, key, value);\n };\n /**\r\n * Dispatches an event using own event dispatcher. Will automatically\r\n * populate event data object with event type and target (this element).\r\n * It also checks if there are any handlers registered for this sepecific\r\n * event.\r\n *\r\n * @param eventType Event type (name)\r\n * @param data Data to pass into event handler(s)\r\n */\n\n\n Registry.prototype.dispatch = function (eventType, data) {\n // @todo Implement proper type check\n if (this.events.isEnabled(eventType)) {\n if (data) {\n data.type = eventType;\n data.target = data.target || this;\n this.events.dispatch(eventType, {\n type: eventType,\n target: this\n });\n } else {\n this.events.dispatch(eventType, {\n type: eventType,\n target: this\n });\n }\n }\n };\n /**\r\n * Works like `dispatch`, except event is triggered immediately, without\r\n * waiting for the next frame cycle.\r\n *\r\n * @param eventType Event type (name)\r\n * @param data Data to pass into event handler(s)\r\n */\n\n\n Registry.prototype.dispatchImmediately = function (eventType, data) {\n // @todo Implement proper type check\n if (this.events.isEnabled(eventType)) {\n if (data) {\n data.type = eventType;\n data.target = data.target || this;\n this.events.dispatchImmediately(eventType, data);\n } else {\n this.events.dispatchImmediately(eventType, {\n type: eventType,\n target: this\n });\n }\n }\n };\n /**\r\n * Returns a unique placeholder suitable for the key.\r\n *\r\n * @param key Key\r\n * @return Random string to be used as placeholder\r\n */\n\n\n Registry.prototype.getPlaceholder = function (key) {\n if ($type.hasValue(this._placeholders[key])) {\n return this._placeholders[key];\n }\n\n this._placeholders[key] = \"__amcharts_\" + key + \"_\" + $string.random(8) + \"__\";\n return this._placeholders[key];\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.addToInvalidComponents = function (component) {\n if (component.baseId) {\n $array.move(this.invalidDatas[component.baseId], component);\n } else {\n $array.move(this.invalidDatas[\"noBase\"], component);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.removeFromInvalidComponents = function (component) {\n if (component.baseId) {\n $array.remove(this.invalidDatas[component.baseId], component);\n }\n\n $array.remove(this.invalidDatas[\"noBase\"], component);\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.addToInvalidSprites = function (sprite) {\n if (sprite.baseId) {\n $array.add(this.invalidSprites[sprite.baseId], sprite);\n } else {\n $array.add(this.invalidSprites[\"noBase\"], sprite);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.removeFromInvalidSprites = function (sprite) {\n if (sprite.baseId) {\n $array.remove(this.invalidSprites[sprite.baseId], sprite);\n }\n\n $array.remove(this.invalidSprites[\"noBase\"], sprite);\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.addToInvalidPositions = function (sprite) {\n if (sprite.baseId) {\n $array.add(this.invalidPositions[sprite.baseId], sprite);\n } else {\n $array.add(this.invalidPositions[\"noBase\"], sprite);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.removeFromInvalidPositions = function (sprite) {\n if (sprite.baseId) {\n $array.remove(this.invalidPositions[sprite.baseId], sprite);\n }\n\n $array.remove(this.invalidPositions[\"noBase\"], sprite);\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.addToInvalidLayouts = function (sprite) {\n if (sprite.baseId) {\n $array.add(this.invalidLayouts[sprite.baseId], sprite);\n } else {\n $array.add(this.invalidLayouts[\"noBase\"], sprite);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Registry.prototype.removeFromInvalidLayouts = function (sprite) {\n if (sprite.baseId) {\n $array.remove(this.invalidLayouts[sprite.baseId], sprite);\n }\n\n $array.remove(this.invalidLayouts[\"noBase\"], sprite);\n };\n\n return Registry;\n}();\n\nexport { Registry };\n/**\r\n * A singleton global instance of [[Registry]].\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var registry = new Registry();\n/**\r\n * Returns `true` if object is an instance of the class. It's the same as `instanceof` except it doesn't need to import the class.\r\n *\r\n * @param object Object\r\n * @param name Class name\r\n * @return Is instance of class\r\n */\n\nexport function is(object, name) {\n var x = registry.registeredClasses[name];\n return x != null && object instanceof x;\n}","import { __extends, __generator } from \"tslib\";\nimport { Disposer, MultiDisposer } from \"./Disposer\";\nimport { EventDispatcher } from \"./EventDispatcher\";\nimport * as $array from \"./Array\";\nimport * as $iter from \"./Iterator\";\n/**\r\n * @todo Description\r\n */\n\nvar IndexedIterable =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param array List items\r\n * @param start Start index\r\n * @param end End index\r\n */\n function IndexedIterable(array, start, end) {\n this._array = array;\n this._start = start;\n this._end = end;\n }\n /**\r\n * Returns a list item iterator.\r\n *\r\n * @return Iterator\r\n */\n\n\n IndexedIterable.prototype.iterator = function () {\n var _this = this;\n\n return function (push) {\n if (_this._start !== _this._end) {\n if (_this._start < _this._end) {\n for (var i = _this._start; i < _this._end; ++i) {\n if (!push(_this._array[i])) {\n break;\n }\n }\n } else {\n for (var i = _this._start - 1; i >= _this._end; --i) {\n if (!push(_this._array[i])) {\n break;\n }\n }\n }\n }\n };\n };\n /**\r\n * Returns an interable list sorted backwards than current list.\r\n *\r\n * @return List\r\n */\n\n\n IndexedIterable.prototype.backwards = function () {\n return new IndexedIterable(this._array, this._end, this._start);\n };\n /**\r\n * Returns a new list consisting only of specific range of items between\r\n * `start` and `end` indexes.\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return List\r\n */\n\n\n IndexedIterable.prototype.range = function (start, end) {\n if (start <= end) {\n if (this._start === this._end) {\n return this;\n } else if (this._start < this._end) {\n var diff = end - start;\n start = Math.max(this._start + start, this._start);\n end = Math.min(start + diff, this._end);\n return new IndexedIterable(this._array, start, end);\n } else {\n var diff = end - start;\n start = Math.max(this._start - start, this._end);\n end = Math.max(start - diff, this._end);\n return new IndexedIterable(this._array, start, end);\n }\n } else {\n throw new Error(\"Start index must be lower than end index\");\n }\n };\n\n return IndexedIterable;\n}();\n\nexport { IndexedIterable };\n/**\r\n * ListGrouper organizes [[List]] items into groups.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar ListGrouper =\n/** @class */\nfunction (_super) {\n __extends(ListGrouper, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function ListGrouper(list, getKey, sort) {\n var _this = _super.call(this, [list.events.on(\"inserted\", function (x) {\n var value = x.newValue;\n\n var key = _this._getKey(value);\n\n var index = 0;\n $iter.eachContinue(list.iterator(), function (x) {\n if (x === value) {\n return false;\n } else if (_this._getKey(x) === key) {\n ++index;\n }\n\n return true;\n });\n\n _this._insert(value, key, index);\n }, undefined, false), list.events.on(\"removed\", function (x) {\n _this._remove(x.oldValue);\n }, undefined, false)]) || this;\n /**\r\n * Grouping keys.\r\n */\n\n\n _this._keys = [];\n /**\r\n * List item groups.\r\n */\n\n _this._groups = {};\n _this._getKey = getKey;\n _this._sort = sort;\n $iter.each(list.iterator(), function (x) {\n _this._insert(x, getKey(x));\n });\n return _this;\n }\n /**\r\n * Inserts an item (`x`) to a specific group (`key`) and specific `index`.\r\n *\r\n * @param x Item\r\n * @param key Group name\r\n * @param index Index\r\n */\n\n\n ListGrouper.prototype._insert = function (x, key, index) {\n if (this._groups[key] == null) {\n this._groups[key] = []; // TODO code duplication with SortedList\n\n var _a = $array.getSortedIndex(this._keys, this._sort, key),\n found = _a.found,\n index_1 = _a.index;\n\n if (found) {\n throw new Error(\"Key already exists: \" + key);\n } else {\n $array.insertIndex(this._keys, index_1, key);\n }\n }\n\n if (index == null) {\n this._groups[key].push(x);\n } else {\n $array.insertIndex(this._groups[key], index, x);\n }\n };\n /**\r\n * Removes an item from the list.\r\n *\r\n * @param x Item to remove\r\n */\n\n\n ListGrouper.prototype._remove = function (x) {\n var key = this._getKey(x);\n\n var values = this._groups[key];\n\n if (values != null) {\n $array.remove(values, x);\n\n if (values.length === 0) {\n delete this._groups[key];\n\n var _a = $array.getSortedIndex(this._keys, this._sort, key),\n found = _a.found,\n index = _a.index;\n\n if (found) {\n $array.removeIndex(this._keys, index);\n } else {\n throw new Error(\"Key doesn't exist: \" + key);\n }\n }\n }\n };\n /**\r\n * Returns an iterator for the list.\r\n *\r\n * The iterator will iterate through all items in all groups.\r\n *\r\n * @return Iterator\r\n */\n\n\n ListGrouper.prototype.iterator = function () {\n var _this = this;\n\n return $iter.flatten($iter.map($iter.fromArray(this._keys), function (key) {\n return $iter.fromArray(_this._groups[key]);\n }));\n };\n\n return ListGrouper;\n}(MultiDisposer);\n\nexport { ListGrouper };\n/**\r\n * A disposable list, which when disposed itself will call `dispose()` method\r\n * on all its items.\r\n */\n\nvar ListDisposer =\n/** @class */\nfunction (_super) {\n __extends(ListDisposer, _super);\n\n function ListDisposer(list, disposeOnRemove) {\n if (disposeOnRemove === void 0) {\n disposeOnRemove = true;\n }\n\n var _this = this;\n\n if (disposeOnRemove) {\n var disposer_1 = list.events.on(\"removed\", function (x) {\n x.oldValue.dispose();\n }, undefined, false);\n _this = _super.call(this, function () {\n disposer_1.dispose(); // TODO clear the list ?\n\n $iter.each(list.iterator(), function (x) {\n x.dispose();\n });\n }) || this;\n } else {\n _this = _super.call(this, function () {\n // TODO clear the list ?\n $iter.each(list.iterator(), function (x) {\n x.dispose();\n });\n }) || this;\n }\n\n return _this;\n }\n\n return ListDisposer;\n}(Disposer);\n\nexport { ListDisposer };\n/**\r\n * Checks if specific index fits into length.\r\n *\r\n * @param index Index\r\n * @param len Length\r\n */\n\nfunction checkBounds(index, len) {\n if (!(index >= 0 && index < len)) {\n throw new Error(\"Index out of bounds: \" + index);\n }\n}\n/**\r\n * A List class is used to hold a number of indexed items of the same type.\r\n */\n\n\nvar List =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\n function List(initial) {\n if (initial === void 0) {\n initial = [];\n }\n /**\r\n * Event dispatcher.\r\n */\n\n\n this.events = new EventDispatcher();\n this._values = initial;\n }\n\n Object.defineProperty(List.prototype, \"values\", {\n /**\r\n * An array of values in the list.\r\n *\r\n * Do not use this property to add values. Rather use dedicated methods, like\r\n * `push()`, `removeIndex()`, etc.\r\n *\r\n * @readonly\r\n * @return List values\r\n */\n get: function get() {\n return this._values;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if list contains specific item reference.\r\n *\r\n * @param item Item to search for\r\n * @return `true` if found, `false` if not found\r\n */\n\n List.prototype.contains = function (value) {\n return this._values.indexOf(value) !== -1;\n };\n /**\r\n * Removes specific item from the list.\r\n *\r\n * @param item An item to remove\r\n */\n\n\n List.prototype.removeValue = function (value) {\n var i = 0;\n var length = this._values.length;\n\n while (i < length) {\n // TODO handle NaN\n if (this._values[i] === value) {\n this.removeIndex(i);\n --length;\n } else {\n ++i;\n }\n }\n };\n /**\r\n * Searches the list for specific item and returns its index.\r\n *\r\n * @param item An item to search for\r\n * @return Index or -1 if not found\r\n */\n\n\n List.prototype.indexOf = function (value) {\n return $array.indexOf(this._values, value);\n };\n\n Object.defineProperty(List.prototype, \"length\", {\n /**\r\n * Number of items in list.\r\n *\r\n * @readonly\r\n * @return Number of items\r\n */\n get: function get() {\n return this._values.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if there's a value at specific index.\r\n *\r\n * @param index Index\r\n * @return Value exists?\r\n */\n\n List.prototype.hasIndex = function (index) {\n return index >= 0 && index < this._values.length;\n };\n /**\r\n * Returns an item at specified index.\r\n *\r\n * @param index Index\r\n * @return List item\r\n */\n\n\n List.prototype.getIndex = function (index) {\n return this._values[index];\n };\n /**\r\n * Sets value at specific index.\r\n *\r\n * If there's already a value at the index, it is overwritten.\r\n *\r\n * @param index Index\r\n * @param value New value\r\n * @return New value\r\n */\n\n\n List.prototype.setIndex = function (index, value) {\n checkBounds(index, this._values.length);\n var oldValue = this._values[index]; // Do nothing if the old value and the new value are the same\n\n if (oldValue !== value) {\n this._values[index] = value;\n\n if (this.events.isEnabled(\"setIndex\")) {\n this.events.dispatchImmediately(\"setIndex\", {\n type: \"setIndex\",\n target: this,\n index: index,\n oldValue: oldValue,\n newValue: value\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n oldValue: oldValue\n });\n }\n\n if (this.events.isEnabled(\"inserted\")) {\n this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: this,\n newValue: value\n });\n }\n }\n\n return oldValue;\n };\n /**\r\n * Adds an item to the list at a specific index, which pushes all the other\r\n * items further down the list.\r\n *\r\n * @param index Index\r\n * @param item An item to add\r\n */\n\n\n List.prototype.insertIndex = function (index, value) {\n checkBounds(index, this._values.length + 1);\n $array.insertIndex(this._values, index, value);\n\n if (this.events.isEnabled(\"insertIndex\")) {\n this.events.dispatchImmediately(\"insertIndex\", {\n type: \"insertIndex\",\n target: this,\n index: index,\n newValue: value\n });\n }\n\n if (this.events.isEnabled(\"inserted\")) {\n this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: this,\n newValue: value\n });\n }\n };\n /**\r\n * [_sortQuicksort description]\r\n *\r\n * @todo Description\r\n * @param low [description]\r\n * @param high [description]\r\n * @param order [description]\r\n */\n\n\n List.prototype._sortQuicksort = function (low, high, order) {\n if (low < high) {\n var p = this._sortPartition(low, high, order);\n\n this._sortQuicksort(low, p, order);\n\n this._sortQuicksort(p + 1, high, order);\n }\n };\n /**\r\n * [_sortPartition description]\r\n *\r\n * @todo Description\r\n * @param low [description]\r\n * @param high [description]\r\n * @param order [description]\r\n * @return [description]\r\n */\n\n\n List.prototype._sortPartition = function (low, high, order) {\n var values = this._values;\n var pivot = values[low];\n var i = low - 1;\n var j = high + 1;\n\n for (;;) {\n do {\n ++i;\n } while (order(values[i], pivot) < 0);\n\n do {\n --j;\n } while (order(values[j], pivot) > 0);\n\n if (i >= j) {\n return j;\n } else {\n this.swap(i, j);\n }\n }\n };\n /**\r\n * Reorders list items according to specific ordering function.\r\n *\r\n * @param order Ordering function\r\n */\n\n\n List.prototype.sort = function (order) {\n // https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n // @todo faster implementation of this\n // @todo test this\n this._sortQuicksort(0, this._values.length - 1, order);\n };\n /**\r\n * Swaps indexes of two items in the list.\r\n *\r\n * @param a Item 1\r\n * @param b Item 2\r\n */\n\n\n List.prototype.swap = function (a, b) {\n var len = this._values.length;\n checkBounds(a, len);\n checkBounds(b, len);\n\n if (a !== b) {\n var value_a = this._values[a];\n var value_b = this._values[b];\n this._values[a] = value_b;\n\n if (this.events.isEnabled(\"setIndex\")) {\n this.events.dispatchImmediately(\"setIndex\", {\n type: \"setIndex\",\n target: this,\n index: a,\n oldValue: value_a,\n newValue: value_b\n });\n }\n\n this._values[b] = value_a;\n\n if (this.events.isEnabled(\"setIndex\")) {\n this.events.dispatchImmediately(\"setIndex\", {\n type: \"setIndex\",\n target: this,\n index: b,\n oldValue: value_b,\n newValue: value_a\n });\n }\n }\n };\n /**\r\n * Removes a value at specific index.\r\n *\r\n * @param index Index of value to remove\r\n * @return Removed value\r\n */\n\n\n List.prototype.removeIndex = function (index) {\n checkBounds(index, this._values.length);\n var oldValue = this._values[index];\n $array.removeIndex(this._values, index);\n\n if (this.events.isEnabled(\"removeIndex\")) {\n this.events.dispatchImmediately(\"removeIndex\", {\n type: \"removeIndex\",\n target: this,\n index: index,\n oldValue: oldValue\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n oldValue: oldValue\n });\n }\n\n return oldValue;\n };\n /**\r\n * Moves an item to a specific index within the list.\r\n *\r\n * If the index is not specified it will move the item to the end of the\r\n * list.\r\n *\r\n * @param value Item to move\r\n * @param index Index to place item at\r\n */\n\n\n List.prototype.moveValue = function (value, toIndex) {\n // TODO don't do anything if the desired index is the same as the current index\n var index = this.indexOf(value); // TODO remove all old values rather than only the first ?\n\n if (index !== -1) {\n var oldValue = this._values[index];\n $array.removeIndex(this._values, index);\n\n if (this.events.isEnabled(\"removeIndex\")) {\n this.events.dispatchImmediately(\"removeIndex\", {\n type: \"removeIndex\",\n target: this,\n index: index,\n oldValue: oldValue\n });\n }\n }\n\n if (toIndex == null) {\n toIndex = this._values.length;\n\n this._values.push(value);\n } else {\n $array.insertIndex(this._values, toIndex, value);\n }\n\n if (this.events.isEnabled(\"insertIndex\")) {\n this.events.dispatchImmediately(\"insertIndex\", {\n type: \"insertIndex\",\n target: this,\n index: toIndex,\n newValue: value\n });\n }\n\n if (index === -1) {\n if (this.events.isEnabled(\"inserted\")) {\n this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: this,\n newValue: value\n });\n }\n }\n };\n /**\r\n * Adds an item to the end of the list.\r\n *\r\n * @param item An item to add\r\n */\n\n\n List.prototype.push = function (value) {\n var index = this._values.push(value) - 1;\n\n if (this.events.isEnabled(\"insertIndex\")) {\n this.events.dispatchImmediately(\"insertIndex\", {\n type: \"insertIndex\",\n target: this,\n index: index,\n newValue: value\n });\n }\n\n if (this.events.isEnabled(\"inserted\")) {\n this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: this,\n newValue: value\n });\n }\n\n return value;\n };\n /**\r\n * Adds an item as a first item in the list.\r\n *\r\n * @param item An item to add\r\n */\n\n\n List.prototype.unshift = function (value) {\n this.insertIndex(0, value);\n };\n /**\r\n * Adds multiple items to the list.\r\n *\r\n * @param items An Array of items to add\r\n */\n\n\n List.prototype.pushAll = function (values) {\n var _this = this;\n\n $array.each(values, function (value) {\n _this.push(value);\n });\n };\n /**\r\n * Copies and adds items from abother list.\r\n *\r\n * @param source A list top copy items from\r\n */\n\n\n List.prototype.copyFrom = function (source) {\n this.pushAll(source._values);\n };\n /**\r\n * Returns the last item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\n\n\n List.prototype.pop = function () {\n var index = this._values.length - 1;\n return index < 0 ? undefined : this.removeIndex(this._values.length - 1);\n };\n /**\r\n * Returns the first item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\n\n\n List.prototype.shift = function () {\n return this._values.length ? this.removeIndex(0) : undefined;\n };\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\n\n\n List.prototype.setAll = function (newArray) {\n var _this = this; // @tod if a value exists in both the new and old arrays, don't send remove/insert events\n\n\n var oldArray = $array.copy(this._values);\n this._values.length = 0;\n $array.each(newArray, function (value) {\n _this._values.push(value);\n });\n\n if (this.events.isEnabled(\"setAll\")) {\n this.events.dispatchImmediately(\"setAll\", {\n type: \"setAll\",\n target: this,\n oldArray: oldArray,\n newArray: this._values // TODO make a copy ?\n\n });\n }\n\n if (this.events.isEnabled(\"removed\")) {\n $array.each(oldArray, function (x) {\n _this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: _this,\n oldValue: x\n });\n });\n }\n\n if (this.events.isEnabled(\"inserted\")) {\n $array.each(this._values, function (x) {\n _this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: _this,\n newValue: x\n });\n });\n }\n };\n /**\r\n * Removes all items from the list.\r\n */\n\n\n List.prototype.clear = function () {\n this.setAll([]);\n };\n /**\r\n * Returns a list iterator.\r\n *\r\n * @return Iterator\r\n */\n\n\n List.prototype.iterator = function () {\n return $iter.fromArray(this._values);\n };\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\n\n\n List.prototype[Symbol.iterator] = function () {\n var length, i;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n length = this._values.length;\n i = 0;\n _a.label = 1;\n\n case 1:\n if (!(i < length)) return [3\n /*break*/\n , 4];\n return [4\n /*yield*/\n , this._values[i]];\n\n case 2:\n _a.sent();\n\n _a.label = 3;\n\n case 3:\n ++i;\n return [3\n /*break*/\n , 1];\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n };\n /**\r\n * Calls `f` for each element in the list.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\n\n\n List.prototype.each = function (f) {\n $array.each(this._values, f);\n };\n /**\r\n * Returns a specific range of list items, which can be iterated.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Code duplication with IndexedIterable\r\n * @param start Start index\r\n * @param end End index\r\n * @return Range\r\n */\n\n\n List.prototype.range = function (start, end) {\n if (start <= end) {\n var diff = end - start;\n start = Math.max(start, 0);\n end = Math.min(start + diff, this._values.length);\n return new IndexedIterable(this._values, start, end);\n } else {\n throw new Error(\"Start index must be lower than end index\");\n }\n };\n /**\r\n * Returns an iterator that has list items sorted backwards.\r\n *\r\n * @ignore Exclude from docs\r\n * @return List\r\n */\n\n\n List.prototype.backwards = function () {\n return new IndexedIterable(this._values, this._values.length, 0);\n };\n\n return List;\n}();\n\nexport { List };\n/**\r\n * A version of a [[List]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\n\nvar ListTemplate =\n/** @class */\nfunction (_super) {\n __extends(ListTemplate, _super);\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\n\n\n function ListTemplate(t) {\n var _this = _super.call(this) || this;\n\n _this.template = t;\n return _this;\n }\n\n Object.defineProperty(ListTemplate.prototype, \"template\", {\n /**\r\n * @return Template object\r\n */\n get: function get() {\n return this._template;\n },\n\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\n set: function set(v) {\n v.isTemplate = true;\n this._template = v;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\n\n ListTemplate.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source.iterator(), function (value) {\n _this.push(value.clone());\n });\n };\n\n ListTemplate.prototype.create = function (make) {\n var clone = make != null ? new make() : this.template.clone();\n this.push(clone);\n return clone;\n };\n /**\r\n * Creates an exact clone of the list, including its items and template.\r\n *\r\n * @return New list\r\n */\n\n\n ListTemplate.prototype.clone = function () {\n var out = new ListTemplate(this.template);\n var values = this.values;\n var length = values.length;\n\n for (var i = 0; i < length; ++i) {\n out.push(values[i].clone());\n }\n\n return out;\n };\n\n return ListTemplate;\n}(List);\n\nexport { ListTemplate };","import { __extends, __generator } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { EventDispatcher } from \"./EventDispatcher\";\nimport * as $array from \"./Array\";\nimport * as $iter from \"./Iterator\";\nimport * as $type from \"./Type\";\n/**\r\n * Ordered list contains values of any type in an indexed array.\r\n */\n\nvar OrderedList =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\n function OrderedList(initial) {\n /**\r\n * Holds list values.\r\n */\n this._values = [];\n /**\r\n * Event dispatcher.\r\n */\n\n this.events = new EventDispatcher();\n\n if (initial != null) {\n this.setAll(initial);\n }\n }\n\n Object.defineProperty(OrderedList.prototype, \"values\", {\n /**\r\n * All items of the list.\r\n *\r\n * Do not modify the list directly. Rather use `insert()` and `remove()`\r\n * methods.\r\n *\r\n * @return List values\r\n */\n get: function get() {\n return this._values;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Inserts a value into list item array.\r\n *\r\n * @param value Value\r\n */\n\n OrderedList.prototype._insert = function (value) {\n this._values.push(value);\n\n return this._values.length - 1;\n };\n\n Object.defineProperty(OrderedList.prototype, \"length\", {\n /**\r\n * Number of items in the list.\r\n *\r\n * @readonly\r\n * @return Length\r\n */\n get: function get() {\n return this._values.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns the index of the specific `value`.\r\n *\r\n * -1 if not found.\r\n *\r\n * @param value Value\r\n * @return Index\r\n */\n\n OrderedList.prototype.indexOf = function (value) {\n return $array.indexOf(this._values, value);\n };\n /**\r\n * Checks if list contains the `value`.\r\n *\r\n * @param value Value\r\n * @return In the list?\r\n */\n\n\n OrderedList.prototype.contains = function (value) {\n return this.indexOf(value) !== -1;\n };\n /**\r\n * Returns an item at specific `index`.\r\n *\r\n * @param index Index\r\n * @return Item\r\n */\n\n\n OrderedList.prototype.getIndex = function (index) {\n return this._values[index];\n };\n\n Object.defineProperty(OrderedList.prototype, \"first\", {\n /**\r\n * First item in the list.\r\n *\r\n * @return Item\r\n */\n get: function get() {\n return this._values[0];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OrderedList.prototype, \"last\", {\n /**\r\n * Last item in the list.\r\n *\r\n * @return Item\r\n */\n get: function get() {\n return this._values[this._values.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Inserts a value into list.\r\n *\r\n * @param value Value\r\n */\n\n OrderedList.prototype.insert = function (value) {\n var index = this._insert(value);\n\n if (this.events.isEnabled(\"inserted\")) {\n this.events.dispatchImmediately(\"inserted\", {\n type: \"inserted\",\n target: this,\n index: index,\n newValue: value\n });\n }\n };\n /**\r\n * Removes an item with the `value` from the list.\r\n *\r\n * @param value Value\r\n */\n\n\n OrderedList.prototype.remove = function (value) {\n var index = this.indexOf(value);\n\n if (index !== -1) {\n var oldValue = this._values[index];\n $array.removeIndex(this._values, index);\n\n if (this.events.isEnabled(\"removed\")) {\n this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: this,\n index: index,\n oldValue: oldValue\n });\n }\n }\n };\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\n\n\n OrderedList.prototype.setAll = function (newArray) {\n var _this = this;\n\n $array.eachReverse(this._values, function (x, i) {\n _this._values.pop();\n\n if (_this.events.isEnabled(\"removed\")) {\n _this.events.dispatchImmediately(\"removed\", {\n type: \"removed\",\n target: _this,\n index: i,\n oldValue: x\n });\n }\n });\n $array.each(newArray, function (value) {\n _this.insert(value);\n });\n };\n /**\r\n * Removes all items from the list.\r\n */\n\n\n OrderedList.prototype.clear = function () {\n this.setAll([]);\n };\n /**\r\n * Returns part of the list between `start` and `end` indexes, as a new\r\n * [[OrderedList]].\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return Items in range\r\n */\n\n\n OrderedList.prototype.slice = function (start, end) {\n var out = new OrderedList();\n out._values = this._values.slice(start, end);\n return out;\n };\n /**\r\n * Finds a closest available index to the `value` in specified direction.\r\n *\r\n * @ignore exclude from docs\r\n * @param value value to search for\r\n * @param fn A callback function that returns value of the item\r\n * @param direction Direciton\r\n * @return Index\r\n */\n\n\n OrderedList.prototype.findClosestIndex = function (value, fn, direction) {\n if (direction === void 0) {\n direction = \"any\";\n } // Init temporary values\n\n\n var closestIndex = -1;\n var closestValue;\n var closestDifference;\n var i = 0;\n $iter.eachContinue(this.iterator(), function (element) {\n var item = fn(element); // Calc difference\n\n if (direction === \"any\") {\n // Exact match?\n if (item === value) {\n // Found exact value - don't bother searching further\n closestIndex = i;\n return false;\n }\n\n var difference = Math.abs(value - item);\n\n if (!$type.hasValue(closestDifference) || closestDifference > difference) {\n closestIndex = i;\n closestValue = item;\n closestDifference = difference;\n }\n } else if (direction === \"left\" && item < value) {\n if (!$type.hasValue(closestValue) || closestValue < item) {\n closestIndex = i;\n closestValue = item;\n }\n } else if (direction === \"right\" && item >= value) {\n if (!$type.hasValue(closestValue) || closestValue >= item) {\n closestIndex = i;\n closestValue = item;\n }\n }\n\n ++i;\n return true;\n }); // Found nothing?\n\n if (closestIndex === -1) {\n if (direction === \"left\") {\n // Use First one\n closestIndex = 0;\n } else if (direction === \"right\") {\n // Use last item\n closestIndex = this.length - 1;\n }\n }\n\n return closestIndex;\n };\n /**\r\n * Returns a list iterator.\r\n *\r\n * @return Iterator\r\n */\n\n\n OrderedList.prototype.iterator = function () {\n return $iter.fromArray(this._values);\n };\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\n\n\n OrderedList.prototype[Symbol.iterator] = function () {\n var length, i;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n length = this._values.length;\n i = 0;\n _a.label = 1;\n\n case 1:\n if (!(i < length)) return [3\n /*break*/\n , 4];\n return [4\n /*yield*/\n , this._values[i]];\n\n case 2:\n _a.sent();\n\n _a.label = 3;\n\n case 3:\n ++i;\n return [3\n /*break*/\n , 1];\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n };\n /**\r\n * Calls `f` for each element in the list.\r\n */\n\n\n OrderedList.prototype.each = function (f) {\n $array.each(this._values, f);\n };\n\n return OrderedList;\n}();\n\nexport { OrderedList };\n/**\r\n * A list where all items are ordered according to specific ordering function,\r\n * which is passed in via constructor parameter, when creating an instance of\r\n * [[SortedList]].\r\n */\n\nvar SortedList =\n/** @class */\nfunction (_super) {\n __extends(SortedList, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param sort Ordering function\r\n */\n\n\n function SortedList(sort) {\n var _this = _super.call(this) || this;\n\n _this._ordering = sort;\n return _this;\n }\n /**\r\n * Inserts item into the list.\r\n *\r\n * @param value Item\r\n */\n\n\n SortedList.prototype._insert = function (value) {\n var index = $array.getSortedIndex(this._values, this._ordering, value).index;\n $array.insertIndex(this._values, index, value);\n return index;\n };\n /**\r\n * Returns index of the item in list if found.\r\n *\r\n * -1 if item is not in the list.\r\n *\r\n * @param value Item to search for\r\n * @return Index\r\n */\n\n\n SortedList.prototype.indexOf = function (value) {\n var _a = $array.getSortedIndex(this._values, this._ordering, value),\n found = _a.found,\n index = _a.index;\n\n if (found) {\n return index;\n } else {\n return -1;\n }\n };\n /**\r\n * [udpate description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\n\n\n SortedList.prototype.update = function (value) {\n // @todo test this\n var index = $array.indexOf(this._values, value); // @todo throw an error if it doesn't exist ?\n\n if (index !== -1) {\n var last = this._values.length - 1; // Check if the current ordering is correct\n\n if (!((index === 0 || this._ordering(this._values[index - 1], value) < 0) && (index === last || this._ordering(value, this._values[index + 1]) < 0))) {\n // TODO send remove/insert/move events\n $array.removeIndex(this._values, index);\n\n this._insert(value);\n }\n }\n };\n\n return SortedList;\n}(OrderedList);\n\nexport { SortedList };\n/**\r\n * A version of a [[OrderedList]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\n\nvar OrderedListTemplate =\n/** @class */\nfunction (_super) {\n __extends(OrderedListTemplate, _super);\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\n\n\n function OrderedListTemplate(t) {\n var _this = _super.call(this) || this;\n\n _this.template = t;\n return _this;\n }\n\n Object.defineProperty(OrderedListTemplate.prototype, \"template\", {\n /**\r\n * @return Template object\r\n */\n get: function get() {\n return this._template;\n },\n\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\n set: function set(v) {\n v.isTemplate = true;\n this._template = v;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\n\n OrderedListTemplate.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source.iterator(), function (value) {\n _this.insert(value.clone());\n });\n };\n /**\r\n * Returns part of the list, starting at `start` and ending at `end` indexes,\r\n * as a new [[OrderedListTemplate]].\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return New list\r\n */\n\n\n OrderedListTemplate.prototype.slice = function (start, end) {\n var out = new OrderedListTemplate(this.template);\n out._values = this._values.slice(start, end);\n return out;\n };\n\n OrderedListTemplate.prototype.create = function (make) {\n var clone = make != null ? new make() : this.template.clone();\n this.insert(clone);\n return clone;\n };\n\n return OrderedListTemplate;\n}(OrderedList);\n\nexport { OrderedListTemplate };\n/**\r\n * A version of a [[SortedList]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\n\nvar SortedListTemplate =\n/** @class */\nfunction (_super) {\n __extends(SortedListTemplate, _super);\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n * @param sort Ordering function\r\n */\n\n\n function SortedListTemplate(t, sort) {\n var _this = _super.call(this, sort) || this;\n\n _this.template = t;\n return _this;\n }\n\n Object.defineProperty(SortedListTemplate.prototype, \"template\", {\n /**\r\n * @return Template object\r\n */\n get: function get() {\n return this._template;\n },\n\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\n set: function set(v) {\n v.isTemplate = true;\n this._template = v;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\n\n SortedListTemplate.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source.iterator(), function (value) {\n _this.insert(value.clone());\n });\n };\n\n SortedListTemplate.prototype.create = function (make) {\n var clone = make != null ? new make() : this.template.clone();\n this.insert(clone);\n return clone;\n };\n\n return SortedListTemplate;\n}(SortedList);\n\nexport { SortedListTemplate };","/**\r\n * ============================================================================\r\n * COMPARING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Comparing function used for ordering.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Number 1\r\n * @param b Number 2\r\n * @return Result\r\n */\nexport function order(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else {\n return 1;\n }\n}","/**\r\n * A collection of functions for ordering.\r\n */\n\n/**\r\n * [reverse description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\nexport function reverse(a) {\n switch (a) {\n case 0:\n return 0;\n\n case -1:\n return 1;\n\n case 1:\n return -1;\n }\n}\n/**\r\n * [or description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param a Item 1\r\n * @param b Item 2\r\n * @return [description]\r\n */\n\nexport function or(a, b) {\n if (a === 0) {\n return b;\n } else {\n return a;\n }\n}","/**\r\n * An Adapter can be used to apply chained synchronous transformations to any\r\n * value at runtime.\r\n *\r\n * Each type class using Adapters must have `adapters` property and adapter\r\n * interface defined.\r\n *\r\n * Adapters can be used to allow external code to apply transformations to any\r\n * value at any time.\r\n *\r\n * For example we have a Weather class which has a method `now()` which returns\r\n * current temperature.\r\n *\r\n * ```\r\n * function now() {\r\n * // ... calculate temperature\r\n * let temp = \"Temperature now is \" + degrees + \"F\";\r\n * return temp;\r\n * }\r\n * ```\r\n *\r\n * Now, supposed we want to let other classes to modify the output of the\r\n * `now()`? We just apply an adapter to the `temp` before it is returned:\r\n *\r\n * ```\r\n * temp = this.adapters.apply(\"now\", {\r\n * temp: temp,\r\n * degrees: degrees\r\n * }).temp;\r\n * ```\r\n *\r\n * Some other class might tap onto it by defining an Adapter that calculates\r\n * the temperature in Celsius:\r\n *\r\n * weather.adapters.add(\"now\", (arg) => {\r\n * arg.temp += \"(\" + farenheitToCelsius(arg.degrees) + \"C)\";\r\n * return arh;\r\n * });\r\n *\r\n * Furthermore some time-related class could add time:\r\n *\r\n * weather.adapters.add(\"now\", (arg) => {\r\n * arg.temp += \"; the time now is \" + (new Date().toLocaleString());\r\n * return arh;\r\n * });\r\n *\r\n * So without adapters we would get output like this:\r\n *\r\n * ```\r\n * Temperature now is 90F\r\n * ```\r\n *\r\n * With adapters applied we now have:\r\n *\r\n * ```\r\n * Temperature now is 90F (32C); the time now is 12/11/2012, 7:00:00 PM\r\n * ```\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { SortedList } from \"./SortedList\";\nimport * as $number from \"./Number\";\nimport * as $order from \"./Order\";\nimport * as $iter from \"../utils/Iterator\";\nimport * as $array from \"../utils/Array\";\nimport * as $type from \"../utils/Type\";\nimport * as $object from \"../utils/Object\";\n/**\r\n * ============================================================================\r\n * GLOBAL ADAPTER\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A global adapter is an adpater that is attached to a class type rather than\r\n * specific object instance.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar GlobalAdapter =\n/** @class */\nfunction () {\n function GlobalAdapter() {\n /**\r\n * Callback id iterator.\r\n */\n this._callbackId = 0;\n /**\r\n * A list of if callbacks (adapters).\r\n */\n\n this._callbacks = new SortedList(function (left, right) {\n return $order.or($number.order(left.priority, right.priority), $number.order(left.id, right.id));\n });\n }\n /**\r\n * Adds a global callback which is not specific to any particular object.\r\n * Whenever an adapter in any object of the specific class type is invoked\r\n * global adapters will kick in.\r\n *\r\n * @param type Class type\r\n * @param key Adapter key\r\n * @param callback Callback function\r\n * @param priority Priority (higher priority meaning adapter will be applied later)\r\n * @param scope Callback function scaope\r\n */\n\n\n GlobalAdapter.prototype.addAll = function (type, key, callback, priority, scope) {\n if (priority === void 0) {\n priority = 0;\n }\n\n this._callbacks.insert({\n id: ++this._callbackId,\n key: key,\n callback: callback,\n priority: priority,\n scope: scope,\n type: type\n });\n };\n /**\r\n * Returns if there are adapters for specific type available.\r\n *\r\n * @param type Adapter type\r\n * @param key Adapter key\r\n * @return {boolean}\r\n */\n\n\n GlobalAdapter.prototype.isEnabled = function (type, key) {\n return $array.any(this._callbacks.values, function (x) {\n return x.key === key && type instanceof x.type;\n });\n };\n /**\r\n * Applies global adapters for the object of the specific type.\r\n *\r\n * @param type Class type\r\n * @param key Adapter key\r\n * @param value Value\r\n */\n\n\n GlobalAdapter.prototype.applyAll = function (type, key, value) {\n // This is needed to improve the performance and reduce garbage collection\n var callbacks = this._callbacks.values;\n var length = callbacks.length;\n\n if (length == 0) {\n return value;\n } // Cycle through all callbacks and find the ones we need to use\n\n\n for (var i = 0; i < length; ++i) {\n var item = callbacks[i];\n\n if (item.key === key && type instanceof item.type) {\n value = item.callback.call(item.scope, value, type, key);\n }\n }\n\n return value;\n };\n\n return GlobalAdapter;\n}();\n\nexport { GlobalAdapter };\n/**\r\n * A global Adapter for plugins that want to add specific\r\n * functionality for any chart, not just specific instance.\r\n *\r\n * If you want to add an adapter which applies to all instances of the same\r\n * object type, like, for instance all slices in PieSeries, you can use\r\n * global adapter.\r\n *\r\n * Global adapter is a system-wide instance, accessible via `globalAdapter`.\r\n *\r\n * ```TypeScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries, \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries, \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n *\r\n * @ignore\r\n */\n\nexport var globalAdapter = new GlobalAdapter();\n/**\r\n * ============================================================================\r\n * REGULAR ADAPTER\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Adapter allows adding ordered callback functions and associating them with a\r\n * string-based key. An Adapter user can then easily invoke those callbacks to\r\n * apply custom functions on its input, output or intermediate values.\r\n *\r\n * Custom code and plugins can add their own callbacks to modify and enhance\r\n * core functionality.\r\n *\r\n * See the description of `add()` for an example.\r\n *\r\n * Almost any object in amCharts4 has own adapter, accessible with `adapter`\r\n * property.\r\n *\r\n * Any adapters added to it will be applied to that object only.\r\n *\r\n * ### Global Adapters\r\n *\r\n * If you want to add an adapter which applies to all instances of the same\r\n * object type, like, for instance all slices in PieSeries, you can use\r\n * global adapter.\r\n *\r\n * Global adapter is a system-wide instance, accessible via `globalAdapter`.\r\n *\r\n * ```TypeScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries. \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries. \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n *\r\n * {@link https://www.amcharts.com/docs/v4/reference/adapter_module/#globalAdapter_property More info}.\r\n *\r\n * @important\r\n */\n\nvar Adapter =\n/** @class */\nfunction () {\n /**\r\n * Constructor, sets the object referece this Adapter should be used for.\r\n *\r\n * @param c Object\r\n */\n function Adapter(c) {\n /**\r\n * Internal counter for callback ids.\r\n */\n this._callbackId = 0;\n /**\r\n * A list of adapter callbacks.\r\n *\r\n * @param $number.order(left.priority, right.priority) [description]\r\n * @param $number.order(left.id, right.id));\t} [description]\r\n */\n\n this._callbacks = new SortedList(function (left, right) {\n return $order.or($number.order(left.priority, right.priority), $number.order(left.id, right.id));\n });\n this._disabled = {};\n this.object = c; // TODO this exposes the internal events\n\n this.events = this._callbacks.events;\n }\n /**\r\n * Adds a callback for a specific key.\r\n *\r\n * ```TypeScript\r\n * // Override fill color value and make all slices green\r\n * chart.series.template.adapter.add(\"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * // Override fill color value and make all slices green\r\n * chart.series.template.adapter.add(\"fill\", function(value, target, key) {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"adapter\": {\r\n * \t// Override fill color value and make all slices green\r\n * \t\"fill\": function(value, target, key) {\r\n * \t return am4core.color(\"#005500\");\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will call user-defined function (adapter) whenever `fill` value\r\n * is requested from the Pie series, allowing it to override the default\r\n * using custom code and any fuzzy logic.\r\n *\r\n * There can be any number of adapters set on one property key.\r\n *\r\n * In this case adapters will be applied in daisy-chain fashion. The first\r\n * adapter in queue will make its transformation. The next one will have\r\n * the output of the first adapter as a starting value, etc.\r\n *\r\n * The order of the adapters are determined either by the order they were\r\n * added in, or their `priority` value.\r\n *\r\n * The heigher the `priority`, the later in the game adapter will be applied.\r\n *\r\n * @param key Key\r\n * @param callback A callback function\r\n * @param priority The higher priority, the more chance the adapter will be applied last\r\n * @param scope Scope for the callback function\r\n */\n\n\n Adapter.prototype.add = function (key, callback, priority, scope) {\n if (priority === void 0) {\n priority = 0;\n }\n\n this._callbacks.insert({\n id: ++this._callbackId,\n key: key,\n callback: callback,\n priority: priority,\n scope: scope\n });\n };\n /**\r\n * Checks whether specific adapter is already set.\r\n *\r\n * @param key Key\r\n * @param callback A callback function\r\n * @param priority The higher priority, the more chance the adapter will be applied last\r\n * @param scope Scope for the callback function\r\n * @returns Adapter set?\r\n */\n\n\n Adapter.prototype.has = function (key, callback, priority, scope) {\n if (priority === void 0) {\n priority = 0;\n }\n\n return $iter.contains(this._callbacks.iterator(), function (item) {\n return item.key === key && item.callback === callback && item.priority === priority && item.scope === scope;\n });\n };\n /**\r\n * Removes adapter callbacks for the specific `key`.\r\n *\r\n * If `priority` is specified, only callbacks for that priority are removed.\r\n *\r\n * @param key Key\r\n * @param priority Priority\r\n * @todo Implement\r\n */\n\n\n Adapter.prototype.remove = function (key, priority) {\n var _this = this; // It has to make a copy because it removes the elements while iterating\n // TODO inefficient\n // TODO should this re-enable the key ?\n\n\n $array.each($iter.toArray(this._callbacks.iterator()), function (item) {\n // TODO test this\n if (item.key === key && (!$type.isNumber(priority) || priority === item.priority)) {\n _this._callbacks.remove(item);\n }\n });\n };\n /**\r\n * Enable applying adapters for a certain key, if it was disabled before by\r\n * `disableKey()`.\r\n *\r\n * @param key Key\r\n */\n\n\n Adapter.prototype.enableKey = function (key) {\n delete this._disabled[key];\n };\n /**\r\n * Disable applying adapters for a certain key.\r\n *\r\n * Optionally, can set how many applies to skip before automatically\r\n * re-enabling the applying.\r\n *\r\n * @param key Key\r\n * @param amount Number of applies to skip\r\n */\n\n\n Adapter.prototype.disableKey = function (key, amount) {\n if (amount === void 0) {\n amount = Infinity;\n }\n\n this._disabled[key] = amount;\n };\n\n Adapter.prototype._hasListenersByType = function (key) {\n return $array.any(this._callbacks.values, function (x) {\n return x.key === key;\n });\n };\n /**\r\n * Returns if there are any enabled adapters set for the specific `key`.\r\n *\r\n * @returns Are there any adapters for the key?\r\n */\n\n\n Adapter.prototype.isEnabled = function (key) {\n return this._disabled[key] == null && (this._hasListenersByType(key) || globalAdapter.isEnabled(this.object, key));\n };\n\n Adapter.prototype._shouldDispatch = function (key) {\n var count = this._disabled[key];\n\n if (!$type.isNumber(count)) {\n return true;\n } else {\n if (count <= 1) {\n delete this._disabled[key];\n } else {\n --this._disabled[key];\n }\n\n return false;\n }\n };\n /**\r\n * Passes the input value through all the callbacks for the defined `key`.\r\n *\r\n * @param key Key\r\n * @param value Input value\r\n * @param ...rest Rest of the parameters to be passed into callback\r\n * @return Output value\r\n */\n\n\n Adapter.prototype.apply = function (key, value) {\n if (this._shouldDispatch(key)) {\n // This is needed to improve the performance and reduce garbage collection\n var callbacks = this._callbacks.values;\n var length_1 = callbacks.length;\n\n if (length_1 > 0) {\n for (var i = 0; i < length_1; ++i) {\n var item = callbacks[i];\n\n if (item.key === key) {\n value = item.callback.call(item.scope, value, this.object, key);\n }\n }\n } // Apply global adapters\n\n\n value = globalAdapter.applyAll(this.object, key, value);\n return value;\n } else {\n return value;\n }\n };\n /**\r\n * Returns all adapter keys which are in this adapter.\r\n *\r\n * @return Adapter keys\r\n */\n\n\n Adapter.prototype.keys = function () {\n // TODO inefficient\n return $iter.toArray($iter.map(this._callbacks.iterator(), function (x) {\n return x.key;\n }));\n };\n /**\r\n * Copies all the adapter callbacks from `source`.\r\n *\r\n * @param source An Adapter to copy items from\r\n */\n\n\n Adapter.prototype.copyFrom = function (source) {\n var _this = this;\n\n $iter.each(source._callbacks.iterator(), function (x) {\n _this.add(x.key, x.callback, x.priority, x.scope);\n });\n $object.each(source._disabled, function (key, val) {\n _this._disabled[key] = val;\n });\n };\n /**\r\n * Clears all callbacks from this Adapter.\r\n */\n\n\n Adapter.prototype.clear = function () {\n // TODO should this also re-enable all the keys ?\n this._callbacks.clear();\n };\n\n return Adapter;\n}();\n\nexport { Adapter };","/**\r\n * A collection of color-related functions\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $math from \"./Math\";\nimport * as $type from \"./Type\";\n/**\r\n * Define named colors for easy resolution to RGB.\r\n */\n\nvar namedColors = {\n aliceblue: {\n r: 240,\n g: 248,\n b: 255\n },\n antiquewhite: {\n r: 250,\n g: 235,\n b: 215\n },\n aqua: {\n r: 0,\n g: 255,\n b: 255\n },\n aquamarine: {\n r: 127,\n g: 255,\n b: 212\n },\n azure: {\n r: 240,\n g: 255,\n b: 255\n },\n beige: {\n r: 245,\n g: 245,\n b: 220\n },\n bisque: {\n r: 255,\n g: 228,\n b: 196\n },\n black: {\n r: 0,\n g: 0,\n b: 0\n },\n blanchedalmond: {\n r: 255,\n g: 235,\n b: 205\n },\n blue: {\n r: 0,\n g: 0,\n b: 255\n },\n blueviolet: {\n r: 138,\n g: 43,\n b: 226\n },\n brown: {\n r: 165,\n g: 42,\n b: 42\n },\n burlywood: {\n r: 222,\n g: 184,\n b: 135\n },\n cadetblue: {\n r: 95,\n g: 158,\n b: 160\n },\n chartreuse: {\n r: 127,\n g: 255,\n b: 0\n },\n chocolate: {\n r: 210,\n g: 105,\n b: 30\n },\n coral: {\n r: 255,\n g: 127,\n b: 80\n },\n cornflowerblue: {\n r: 100,\n g: 149,\n b: 237\n },\n cornsilk: {\n r: 255,\n g: 248,\n b: 220\n },\n crimson: {\n r: 220,\n g: 20,\n b: 60\n },\n cyan: {\n r: 0,\n g: 255,\n b: 255\n },\n darkblue: {\n r: 0,\n g: 0,\n b: 139\n },\n darkcyan: {\n r: 0,\n g: 139,\n b: 139\n },\n darkgoldenrod: {\n r: 184,\n g: 134,\n b: 11\n },\n darkgray: {\n r: 169,\n g: 169,\n b: 169\n },\n darkgrey: {\n r: 169,\n g: 169,\n b: 169\n },\n darkgreen: {\n r: 0,\n g: 100,\n b: 0\n },\n darkkhaki: {\n r: 189,\n g: 183,\n b: 107\n },\n darkmagenta: {\n r: 139,\n g: 0,\n b: 139\n },\n darkolivegreen: {\n r: 85,\n g: 107,\n b: 47\n },\n darkorange: {\n r: 255,\n g: 140,\n b: 0\n },\n darkorchid: {\n r: 153,\n g: 50,\n b: 204\n },\n darkred: {\n r: 139,\n g: 0,\n b: 0\n },\n darksalmon: {\n r: 233,\n g: 150,\n b: 122\n },\n darkseagreen: {\n r: 143,\n g: 188,\n b: 143\n },\n darkslateblue: {\n r: 72,\n g: 61,\n b: 139\n },\n darkslategray: {\n r: 47,\n g: 79,\n b: 79\n },\n darkslategrey: {\n r: 47,\n g: 79,\n b: 79\n },\n darkturquoise: {\n r: 0,\n g: 206,\n b: 209\n },\n darkviolet: {\n r: 148,\n g: 0,\n b: 211\n },\n deeppink: {\n r: 255,\n g: 20,\n b: 147\n },\n deepskyblue: {\n r: 0,\n g: 191,\n b: 255\n },\n dimgray: {\n r: 105,\n g: 105,\n b: 105\n },\n dimgrey: {\n r: 105,\n g: 105,\n b: 105\n },\n dodgerblue: {\n r: 30,\n g: 144,\n b: 255\n },\n firebrick: {\n r: 178,\n g: 34,\n b: 34\n },\n floralwhite: {\n r: 255,\n g: 250,\n b: 240\n },\n forestgreen: {\n r: 34,\n g: 139,\n b: 34\n },\n fuchsia: {\n r: 255,\n g: 0,\n b: 255\n },\n gainsboro: {\n r: 220,\n g: 220,\n b: 220\n },\n ghostwhite: {\n r: 248,\n g: 248,\n b: 255\n },\n gold: {\n r: 255,\n g: 215,\n b: 0\n },\n goldenrod: {\n r: 218,\n g: 165,\n b: 32\n },\n gray: {\n r: 128,\n g: 128,\n b: 128\n },\n grey: {\n r: 128,\n g: 128,\n b: 128\n },\n green: {\n r: 0,\n g: 128,\n b: 0\n },\n greenyellow: {\n r: 173,\n g: 255,\n b: 47\n },\n honeydew: {\n r: 240,\n g: 255,\n b: 240\n },\n hotpink: {\n r: 255,\n g: 105,\n b: 180\n },\n indianred: {\n r: 205,\n g: 92,\n b: 92\n },\n indigo: {\n r: 75,\n g: 0,\n b: 130\n },\n ivory: {\n r: 255,\n g: 255,\n b: 240\n },\n khaki: {\n r: 240,\n g: 230,\n b: 140\n },\n lavender: {\n r: 230,\n g: 230,\n b: 250\n },\n lavenderblush: {\n r: 255,\n g: 240,\n b: 245\n },\n lawngreen: {\n r: 124,\n g: 252,\n b: 0\n },\n lemonchiffon: {\n r: 255,\n g: 250,\n b: 205\n },\n lightblue: {\n r: 173,\n g: 216,\n b: 230\n },\n lightcoral: {\n r: 240,\n g: 128,\n b: 128\n },\n lightcyan: {\n r: 224,\n g: 255,\n b: 255\n },\n lightgoldenrodyellow: {\n r: 250,\n g: 250,\n b: 210\n },\n lightgray: {\n r: 211,\n g: 211,\n b: 211\n },\n lightgrey: {\n r: 211,\n g: 211,\n b: 211\n },\n lightgreen: {\n r: 144,\n g: 238,\n b: 144\n },\n lightpink: {\n r: 255,\n g: 182,\n b: 193\n },\n lightsalmon: {\n r: 255,\n g: 160,\n b: 122\n },\n lightseagreen: {\n r: 32,\n g: 178,\n b: 170\n },\n lightskyblue: {\n r: 135,\n g: 206,\n b: 250\n },\n lightslategray: {\n r: 119,\n g: 136,\n b: 153\n },\n lightslategrey: {\n r: 119,\n g: 136,\n b: 153\n },\n lightsteelblue: {\n r: 176,\n g: 196,\n b: 222\n },\n lightyellow: {\n r: 255,\n g: 255,\n b: 224\n },\n lime: {\n r: 0,\n g: 255,\n b: 0\n },\n limegreen: {\n r: 50,\n g: 205,\n b: 50\n },\n linen: {\n r: 250,\n g: 240,\n b: 230\n },\n magenta: {\n r: 255,\n g: 0,\n b: 255\n },\n maroon: {\n r: 128,\n g: 0,\n b: 0\n },\n mediumaquamarine: {\n r: 102,\n g: 205,\n b: 170\n },\n mediumblue: {\n r: 0,\n g: 0,\n b: 205\n },\n mediumorchid: {\n r: 186,\n g: 85,\n b: 211\n },\n mediumpurple: {\n r: 147,\n g: 112,\n b: 219\n },\n mediumseagreen: {\n r: 60,\n g: 179,\n b: 113\n },\n mediumslateblue: {\n r: 123,\n g: 104,\n b: 238\n },\n mediumspringgreen: {\n r: 0,\n g: 250,\n b: 154\n },\n mediumturquoise: {\n r: 72,\n g: 209,\n b: 204\n },\n mediumvioletred: {\n r: 199,\n g: 21,\n b: 133\n },\n midnightblue: {\n r: 25,\n g: 25,\n b: 112\n },\n mintcream: {\n r: 245,\n g: 255,\n b: 250\n },\n mistyrose: {\n r: 255,\n g: 228,\n b: 225\n },\n moccasin: {\n r: 255,\n g: 228,\n b: 181\n },\n navajowhite: {\n r: 255,\n g: 222,\n b: 173\n },\n navy: {\n r: 0,\n g: 0,\n b: 128\n },\n oldlace: {\n r: 253,\n g: 245,\n b: 230\n },\n olive: {\n r: 128,\n g: 128,\n b: 0\n },\n olivedrab: {\n r: 107,\n g: 142,\n b: 35\n },\n orange: {\n r: 255,\n g: 165,\n b: 0\n },\n orangered: {\n r: 255,\n g: 69,\n b: 0\n },\n orchid: {\n r: 218,\n g: 112,\n b: 214\n },\n palegoldenrod: {\n r: 238,\n g: 232,\n b: 170\n },\n palegreen: {\n r: 152,\n g: 251,\n b: 152\n },\n paleturquoise: {\n r: 175,\n g: 238,\n b: 238\n },\n palevioletred: {\n r: 219,\n g: 112,\n b: 147\n },\n papayawhip: {\n r: 255,\n g: 239,\n b: 213\n },\n peachpuff: {\n r: 255,\n g: 218,\n b: 185\n },\n peru: {\n r: 205,\n g: 133,\n b: 63\n },\n pink: {\n r: 255,\n g: 192,\n b: 203\n },\n plum: {\n r: 221,\n g: 160,\n b: 221\n },\n powderblue: {\n r: 176,\n g: 224,\n b: 230\n },\n purple: {\n r: 128,\n g: 0,\n b: 128\n },\n rebeccapurple: {\n r: 102,\n g: 51,\n b: 153\n },\n red: {\n r: 255,\n g: 0,\n b: 0\n },\n rosybrown: {\n r: 188,\n g: 143,\n b: 143\n },\n royalblue: {\n r: 65,\n g: 105,\n b: 225\n },\n saddlebrown: {\n r: 139,\n g: 69,\n b: 19\n },\n salmon: {\n r: 250,\n g: 128,\n b: 114\n },\n sandybrown: {\n r: 244,\n g: 164,\n b: 96\n },\n seagreen: {\n r: 46,\n g: 139,\n b: 87\n },\n seashell: {\n r: 255,\n g: 245,\n b: 238\n },\n sienna: {\n r: 160,\n g: 82,\n b: 45\n },\n silver: {\n r: 192,\n g: 192,\n b: 192\n },\n skyblue: {\n r: 135,\n g: 206,\n b: 235\n },\n slateblue: {\n r: 106,\n g: 90,\n b: 205\n },\n slategray: {\n r: 112,\n g: 128,\n b: 144\n },\n slategrey: {\n r: 112,\n g: 128,\n b: 144\n },\n snow: {\n r: 255,\n g: 250,\n b: 250\n },\n springgreen: {\n r: 0,\n g: 255,\n b: 127\n },\n steelblue: {\n r: 70,\n g: 130,\n b: 180\n },\n tan: {\n r: 210,\n g: 180,\n b: 140\n },\n teal: {\n r: 0,\n g: 128,\n b: 128\n },\n thistle: {\n r: 216,\n g: 191,\n b: 216\n },\n tomato: {\n r: 255,\n g: 99,\n b: 71\n },\n turquoise: {\n r: 64,\n g: 224,\n b: 208\n },\n violet: {\n r: 238,\n g: 130,\n b: 238\n },\n wheat: {\n r: 245,\n g: 222,\n b: 179\n },\n white: {\n r: 255,\n g: 255,\n b: 255\n },\n whitesmoke: {\n r: 245,\n g: 245,\n b: 245\n },\n yellow: {\n r: 255,\n g: 255,\n b: 0\n },\n yellowgreen: {\n r: 154,\n g: 205,\n b: 50\n }\n};\n/**\r\n * Tries to resolve a named color into a hex color representation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Color name\r\n * @return Color\r\n * @deprecated\r\n * @hidden\r\n */\n\n/*export function resolveNamedColor(value: string): Color {\r\n return (namedColors)[value] ? (namedColors)[value] : undefined;\r\n}*/\n\n/**\r\n * Converts a proper color hex code (i.e. \"#FF5500\") or named color (i.e. \"red\")\r\n * into an {iRGB} object. If the code is not correctly formatted, an RGB of\r\n * black is returned.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Color code\r\n * @param alpha Alpha (0-1)\r\n * @return RGB\r\n */\n\nexport function rgb(color, alpha) {\n // Init return value\n var rgb; // Try resolving color format\n // Named color?\n\n if (namedColors[color]) {\n rgb = namedColors[color];\n } // Hex code?\n else if (color.charAt(0) === \"#\") {\n rgb = hexToRgb(color);\n } // rgb() format?\n else if (color.match(/^rgba?\\(/)) {\n rgb = rgbaToRgb(color);\n } // Was not able to resolve?\n\n\n if (!rgb) {\n rgb = {\n r: 0,\n g: 0,\n b: 0,\n a: 1\n };\n } // Set alpha\n\n\n if ($type.hasValue(alpha)) {\n rgb.a = alpha;\n }\n\n return rgb;\n}\n/**\r\n * Converts a hex color code (i.e. \"#FF5500\") to an [[iRGB]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param hex Hex color code\r\n * @return RGB\r\n */\n\nexport function hexToRgb(hex) {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : hexToRgbWithAlpha(hex);\n}\n/**\r\n * Converts a hex color code with alpha (i.e. \"#FF5500128\") to an [[iRGB]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param hex Hex color code\r\n * @return RGB\r\n */\n\nexport function hexToRgbWithAlpha(hex) {\n // Expand shorthand form (e.g. \"03FA\") to full form (e.g. \"0033FFAA\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function (m, r, g, b, a) {\n return r + r + g + g + b + b + a + a;\n });\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: parseInt(result[4], 16) / 256\n } : undefined;\n}\n/**\r\n * Converts color strings in format like `rgb()` and `rgba()` to [[iRGB]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Color code\r\n * @return RGB\r\n */\n\nexport function rgbaToRgb(color) {\n color = color.replace(/[ ]/g, \"\"); // Init\n\n var matches = color.match(/^rgb\\(([0-9]*),([0-9]*),([0-9]*)\\)/i); // Try rgb() format\n\n if (matches) {\n matches.push(\"1\");\n } else {\n matches = color.match(/^rgba\\(([0-9]*),([0-9]*),([0-9]*),([.0-9]*)\\)/i);\n\n if (!matches) {\n return;\n }\n }\n\n return {\n r: parseInt(matches[1]),\n g: parseInt(matches[2]),\n b: parseInt(matches[3]),\n a: parseFloat(matches[4])\n };\n}\n/**\r\n * Converts an [[iRGB]] object into a hex color code.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rgb RGB\r\n * @return Hex color code\r\n */\n\nexport function rgbToHex(rgb) {\n return \"#\" + pad2(rgb.r.toString(16)) + pad2(rgb.g.toString(16)) + pad2(rgb.b.toString(16));\n}\n/**\r\n * Converts an [[iRGB]] object into its `rgb()` or `rgba()` representation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rgb RGB\r\n * @return `rgba()` syntax\r\n */\n\nexport function rgbToRGBA(rgb) {\n if ($type.hasValue(rgb.a) && rgb.a !== 1) {\n return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + rgb.a + \")\";\n } else {\n return \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n }\n}\n/**\r\n * Pads a 1-digit string with a zero.\r\n *\r\n * @ignore Exclude from docs\r\n * @param c Input string\r\n * @return Padded string\r\n */\n\nexport function pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n/**\r\n * Returns an intermediate color between two colors based on the relative\r\n * position. Position needs to be in range between 0 and 1. Zero meaning the\r\n * resulting color will be closest to the first reference color.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color1 First reference color\r\n * @param color2 Second reference color\r\n * @param percent Relative position (0-1)\r\n * @return Interpolated color\r\n */\n\nexport function interpolate(rgb1, rgb2, percent) {\n percent = $math.fitToRange(percent, 0, 1);\n\n if (rgb1) {\n if (rgb2) {\n return {\n r: rgb1.r + Math.round((rgb2.r - rgb1.r) * percent),\n g: rgb1.g + Math.round((rgb2.g - rgb1.g) * percent),\n b: rgb1.b + Math.round((rgb2.b - rgb1.b) * percent),\n a: (rgb1.a || 1) + Math.round(((rgb2.a || 1) - (rgb1.a || 1)) * percent)\n };\n } else {\n return rgb1;\n }\n } else if (rgb2) {\n return rgb2;\n } else {\n return rgb1;\n }\n}\n/**\r\n * Returns a color that is `percent` brighter than the reference color.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Reference color\r\n * @param percent Brightness percent\r\n * @return Hex code of the new color\r\n */\n\nexport function lighten(rgb, percent) {\n if (rgb) {\n return {\n r: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\n g: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\n b: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\n a: rgb.a\n };\n } else {\n // TODO is this correct ?\n return rgb;\n }\n}\n;\n/**\r\n * Gets lightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\n\nexport function getLightnessStep(value, percent) {\n var base = percent > 0 ? 255 - value : value;\n return Math.round(base * percent);\n}\n/**\r\n * Returns a color that is `percent` brighter than the source `color`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Source color\r\n * @param percent Brightness percent\r\n * @return New color\r\n */\n\nexport function brighten(rgb, percent) {\n if (rgb) {\n var base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230); //let base = Math.max(rgb.r, rgb.g, rgb.b);\n\n var step = getLightnessStep(base, percent);\n return {\n r: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\n g: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\n b: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\n a: rgb.a\n };\n } else {\n // TODO is this correct ?\n return rgb;\n }\n}\n;\n/**\r\n * Returns brightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\n\nexport function getBrightnessStep(value, percent) {\n var base = 255; //percent > 0 ? 255 - value : value;\n\n return Math.round(base * percent);\n}\n/**\r\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\r\n * saturation applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Base color\r\n * @param saturation Saturation (0-1)\r\n * @return New color\r\n */\n\nexport function saturate(rgb, saturation) {\n if (rgb == null || saturation == 1) {\n return rgb;\n }\n\n var hsl = rgbToHsl(rgb);\n hsl.s = saturation;\n return hslToRgb(hsl);\n}\n/*\r\n// not used\r\nexport function rgbToMatrix(rgb: iRGB): string {\r\n let r = $type.toText($math.round((rgb.r || 0) / 255, 10));\r\n let g = $type.toText($math.round((rgb.g || 0) / 255, 10));\r\n let b = $type.toText($math.round((rgb.b || 0) / 255, 10));\r\n let a = $type.toText(rgb.a || 1);\r\n return\t r + \" 0 0 0 0\" +\r\n \" 0 \" + g + \" 0 0 0\" +\r\n \" 0 0 \" + b + \" 0 0\" +\r\n \" 0 0 0 \" + a + \" 0\";\r\n}\r\n*/\n\n/**\r\n * The functions below are taken and adapted from Garry Tan's blog post:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * The further attributions go mjijackson.com, which now seems to be defunct.\r\n */\n\n/**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h, s, and l are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @ignore Exclude from docs\r\n * @param h The hue\r\n * @param s The saturation\r\n * @param l The lightness\r\n * @return The RGB representation\r\n */\n\nexport function hslToRgb(color) {\n var r, g, b;\n var h = color.h;\n var s = color.s;\n var l = color.l;\n\n if (s == 0) {\n r = g = b = l; // achromatic\n } else {\n var hue2rgb = function hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n\n if (t > 1) {\n t -= 1;\n }\n\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n\n if (t < 1 / 2) {\n return q;\n }\n\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n\n return p;\n };\n\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255)\n };\n}\n/**\r\n * Converts an RGB color value to HSL. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and l in the set [0, 1].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @ignore Exclude from docs\r\n * @param r The red color value\r\n * @param g The green color value\r\n * @param b The blue color value\r\n * @return The HSL representation\r\n */\n\nexport function rgbToHsl(color) {\n var r = color.r / 255;\n var g = color.g / 255;\n var b = color.b / 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return {\n h: h,\n s: s,\n l: l\n };\n}\n/**\r\n * Converts an RGB color value to HSV. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and v in the set [0, 1].\r\n *\r\n * @ignore Exclude from docs\r\n * @param Number r The red color value\r\n * @param Number g The green color value\r\n * @param Number b The blue color value\r\n * @return Array The HSV representation\r\n */\n\nexport function rgbToHsv(color) {\n var r = color.r / 255;\n var g = color.g / 255;\n var b = color.b / 255;\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var v = max;\n var d = max - min;\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return {\n h: h,\n s: s,\n v: v\n };\n}\n/**\r\n * Converts an HSV color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\r\n * Assumes h, s, and v are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * @ignore Exclude from docs\r\n * @param Number h The hue\r\n * @param Number s The saturation\r\n * @param Number v The value\r\n * @return Array The RGB representation\r\n */\n\nexport function hsvToRgb(color) {\n var r = 0;\n var g = 0;\n var b = 0;\n var h = color.h;\n var s = color.s;\n var v = color.v;\n var i = Math.floor(h * 6);\n var f = h * 6 - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255)\n };\n}\n/**\r\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\r\n * color to use for elements over this color. E.g.: you would want to use\r\n * black text over light background, and vice versa.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Source color\r\n * @return Light?\r\n */\n\nexport function isLight(color) {\n return (color.r * 299 + color.g * 587 + color.b * 114) / 1000 >= 128;\n}","/**\r\n * This module contains Color object definition\r\n */\nimport { registry } from \"../Registry\";\nimport * as $colors from \"./Colors\";\nimport * as $type from \"./Type\";\n/**\r\n * Represents a color.\r\n *\r\n * `Color` accepts value only in [[iRGB]] object format. To create `Color`\r\n * object by parsing it from any supported string-based formats, use helper\r\n * [[color]] function:\r\n *\r\n * ```TypeScript\r\n * am4core.color(\"#ff0000\");\r\n * am4core.color(\"#f00\");\r\n * am4core.color(\"rgb(255, 0, 0)\");\r\n * am4core.color(\"rgba(255, 0, 0, 0.5)\");\r\n * am4core.color({ r: 255, g: 0, b: 0 });\r\n * am4core.color(\"red\");\r\n * ```\r\n * ```JavaScript\r\n * am4core.color(\"#ff0000\");\r\n * am4core.color(\"#f00\");\r\n * am4core.color(\"rgb(255, 0, 0)\");\r\n * am4core.color(\"rgba(255, 0, 0, 0.5)\");\r\n * am4core.color({ r: 255, g: 0, b: 0 });\r\n * am4core.color(\"red\");\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\n\nvar Color =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n *\r\n * @param color Source color\r\n */\n function Color(color) {\n this._value = color;\n }\n\n Object.defineProperty(Color.prototype, \"rgb\", {\n /**\r\n * Returns [[iRGB]] representation of the color.\r\n *\r\n * @return RGB object\r\n */\n get: function get() {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Color.prototype, \"hex\", {\n /**\r\n * Returns color hex value string, e.g. \"#FF0000\".\r\n *\r\n * @return Hex color code\r\n */\n get: function get() {\n return this._value ? $colors.rgbToHex(this._value) : \"none\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Color.prototype, \"rgba\", {\n /**\r\n * Returns an `rgba()` representation of the color, e.g.:\r\n * `rgba(255, 0, 0, 0.5)`.\r\n *\r\n * @return rgba color string\r\n */\n get: function get() {\n return this._value ? $colors.rgbToRGBA(this._value) : \"none\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Color.prototype, \"alpha\", {\n /**\r\n * Returns current transparency.\r\n *\r\n * @return Alpha (0-1)\r\n */\n get: function get() {\n if (this._value != null && this._value.a != null) {\n return this._value.a;\n } else {\n return 1;\n }\n },\n\n /**\r\n * Set alpha (transparency) of the color.\r\n *\r\n * @param value Alpha (0-1)\r\n */\n set: function set(value) {\n if (this._value) {\n this._value.a = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Color.prototype, \"lightColor\", {\n /**\r\n * Returns current light color setting.\r\n *\r\n * @return Color\r\n */\n get: function get() {\n if (!this._lightColor) {\n this._lightColor = new Color({\n r: 255,\n g: 255,\n b: 255\n });\n }\n\n return this._lightColor;\n },\n\n /**\r\n * Sets \"light\" color. Used when determining contrasting color.\r\n *\r\n * @param color Color\r\n */\n set: function set(color) {\n this._lightColor = color;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Color.prototype, \"darkColor\", {\n /**\r\n * Returns current dark color setting.\r\n *\r\n * @return Color\r\n */\n get: function get() {\n if (!this._darkColor) {\n this._darkColor = new Color({\n r: 0,\n g: 0,\n b: 0\n });\n }\n\n return this._darkColor;\n },\n\n /**\r\n * Sets \"dark\" color. Used when determining contrasting color.\r\n *\r\n * @param color Color\r\n */\n set: function set(color) {\n this._darkColor = color;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Overrides `toString` method so that [[Color]] object can be used as\r\n * string.\r\n *\r\n * @ignore Exclude from docs\r\n * @return String represantion of color (usable in CSS)\r\n */\n\n Color.prototype.toString = function () {\n return this.alpha < 1 ? this.rgba : this.hex;\n };\n /**\r\n * Returns a new [[Color]] which is percent lighter (positive value),\r\n * or darker (negative value).\r\n *\r\n * Parameter is in the scale of -1 to 1.\r\n *\r\n * @param percent Increase/decrease lightness by X\r\n * @return New Color\r\n */\n\n\n Color.prototype.lighten = function (percent) {\n return new Color($colors.lighten(this.rgb, percent));\n };\n /**\r\n * Returns a new [[Color]] which is percent brighter (positive value),\r\n * or darker (negative value).\r\n *\r\n * Parameter is in the scale of -1 to 1.\r\n *\r\n * @param percent Increase/decrease brightness by X\r\n * @return New Color\r\n */\n\n\n Color.prototype.brighten = function (percent) {\n return new Color($colors.brighten(this.rgb, percent));\n };\n /**\r\n * Returns a new [[Color]] based on current color with specific saturation\r\n * applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @param saturation Saturation (0-1)\r\n * @return New (saturated) color\r\n */\n\n\n Color.prototype.saturate = function (saturation) {\n return new Color($colors.saturate(this.rgb, saturation));\n };\n\n Object.defineProperty(Color.prototype, \"alternative\", {\n /**\r\n * Returns a either light or dark color that contrasts specifically with\r\n * this color.\r\n *\r\n * Uses properties `darkColor` (default black) and `lightColor` (default\r\n * white).\r\n *\r\n * Useful when determining which color label should be on a colored\r\n * background, so that it stands out.\r\n *\r\n * @return Contrasting color\r\n */\n get: function get() {\n if (this.rgb != null) {\n return $colors.isLight(this.rgb) ? this.darkColor : this.lightColor;\n } else {\n throw new Error(\"Color does not exist\");\n }\n },\n enumerable: true,\n configurable: true\n });\n return Color;\n}();\n\nexport { Color };\n/**\r\n * Resolves an input variable to a normal [[iRGB]] color and creates [[Color]]\r\n * object for it.\r\n *\r\n * @param value Input value\r\n * @param alpha Alpha (0-1)\r\n * @return Color object\r\n */\n\nexport function color(value, alpha) {\n if (!$type.hasValue(value)) {\n return new Color(undefined);\n }\n\n if (typeof value == \"string\") {\n var cacheId = \"_color_\" + value + \"_\" + (alpha || \"1\");\n var cached = registry.getCache(cacheId);\n\n if (cached) {\n return new Color({\n r: cached.r,\n g: cached.g,\n b: cached.b,\n a: cached.a\n });\n }\n\n var rgb = $colors.rgb(value, alpha);\n registry.setCache(cacheId, rgb);\n return new Color(rgb);\n } // Check if it's already a Color object\n\n\n if (value instanceof Color) {\n if ($type.hasValue(alpha)) {\n value.alpha = alpha;\n }\n\n return value;\n } // Not a string or Color instance, it's the iRGB object then\n\n\n return new Color(value);\n}\n/**\r\n * Checks if supplied argument is instance of [[Color]].\r\n *\r\n * @param value Input value\r\n * @return Is Color?\r\n */\n\nexport function isColor(value) {\n return value instanceof Color;\n}\n/**\r\n * Converts any value to [[Color]].\r\n *\r\n * @param value Input value\r\n * @return Color\r\n */\n\nexport function castColor(value) {\n return color(value);\n}\n/**\r\n * Converts any value into a [[Color]].\r\n *\r\n * @param value Source value\r\n * @return Color object\r\n */\n\nexport function toColor(value) {\n if ($type.hasValue(value) && !isColor(value)) {\n return castColor(value);\n }\n\n return value;\n}","/**\r\n * Base functionality\r\n*/\nimport { __extends } from \"tslib\";\nimport { List, ListTemplate } from \"./utils/List\";\nimport { OrderedListTemplate, SortedListTemplate } from \"./utils/SortedList\";\nimport { Dictionary, DictionaryTemplate } from \"./utils/Dictionary\";\nimport { Disposer } from \"./utils/Disposer\";\nimport { EventDispatcher } from \"./utils/EventDispatcher\";\nimport { Adapter } from \"./utils/Adapter\";\nimport { Color, color } from \"./utils/Color\";\nimport { Percent, percent } from \"./utils/Percent\";\nimport { registry } from \"./Registry\";\nimport { cache } from \"./utils/Cache\";\nimport * as $array from \"./utils/Array\";\nimport * as $object from \"./utils/Object\";\nimport * as $type from \"./utils/Type\"; //import * as $debug from \"./utils/Debug\";\n\n/**\r\n * Provides base functionality for all derivative objects, like generating ids,\r\n * handling cache, etc.\r\n */\n\nvar BaseObject =\n/** @class */\nfunction () {\n //protected _classes: { [index: string]: any } = {};\n\n /**\r\n * Constructor\r\n * * Sets class name\r\n */\n function BaseObject() {\n /**\r\n * Indicates if this object has already been deleted. Any\r\n * destruction/disposal code should take this into account when deciding\r\n * wheter to run potentially costly disposal operations if they already have\r\n * been run.\r\n */\n this._disposed = false;\n /**\r\n * List of IDisposer which will be disposed when the BaseObject is disposed.\r\n */\n\n this._disposers = [];\n this.className = \"BaseObject\"; //this.debug();\n }\n\n BaseObject.prototype.debug = function () {//$debug.debug(this);\n };\n\n Object.defineProperty(BaseObject.prototype, \"uid\", {\n /**\r\n * Returns object's internal unique ID.\r\n *\r\n * @return Unique ID\r\n */\n get: function get() {\n if (!this._uid) {\n this._uid = registry.getUniqueId();\n registry.map.setKey(this._uid, this);\n }\n\n return this._uid;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseObject.prototype, \"id\", {\n /**\r\n * @return Id\r\n */\n get: function get() {\n return this._id;\n },\n\n /**\r\n * Sets the user-defined id of the element.\r\n *\r\n * @param value Id\r\n */\n set: function set(value) {\n //registry.map.setKey(value, this); // registry.map only stores by uid\n this._id = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseObject.prototype, \"map\", {\n /**\r\n * Returns a universal collection for mapping ids with objects.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Map collection\r\n */\n get: function get() {\n if (!this._map) {\n this._map = new Dictionary();\n }\n\n return this._map;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseObject.prototype, \"delayedMap\", {\n /**\r\n * Returns mapping for objects referenced by id in JSON config that are not yet\r\n * available at processing time.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Map collection\r\n */\n get: function get() {\n if (!this._delayedMap) {\n this._delayedMap = new Dictionary();\n }\n\n return this._delayedMap;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Logs an id and property of the target element that is not yet available\r\n * for later assignment.\r\n *\r\n * @ignore\r\n * @param property Property to set\r\n * @param id ID of the target element\r\n */\n\n BaseObject.prototype.addDelayedMap = function (property, id) {\n var map = this.delayedMap;\n\n if (!map.hasKey(id)) {\n map.setKey(id, []);\n }\n\n var list = map.getKey(id);\n list.push({\n property: property,\n target: this\n });\n };\n /**\r\n * Processes delayed JSON config items.\r\n *\r\n * @ignore\r\n */\n\n\n BaseObject.prototype.processDelayedMap = function () {\n var _this = this;\n\n this.delayedMap.each(function (id, list) {\n if (_this.map.hasKey(id)) {\n var target_1 = _this.map.getKey(id);\n\n $array.each(list, function (item) {\n item.target[item.property] = target_1;\n });\n\n _this.delayedMap.removeKey(id);\n }\n });\n };\n /**\r\n * Applies properties from all assigned themes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n BaseObject.prototype.applyTheme = function () {\n var _this = this; // TODO is this needed ?\n\n\n if (registry) {\n var themes = this.getCurrentThemes(); // TODO is this needed ?\n\n if (themes) {\n $array.each(themes, function (theme, index) {\n theme(_this);\n });\n }\n }\n };\n\n Object.defineProperty(BaseObject.prototype, \"themes\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return An array of themes\r\n */\n get: function get() {\n return this._themes;\n },\n\n /**\r\n * A list of themes to be used for this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value An array of themes\r\n */\n set: function set(value) {\n this._themes = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a list of themes that should be applied to this element. It could\r\n * either be a list of themes set explicitly on this element, or system-wide.\r\n *\r\n * @return List of themes\r\n */\n\n BaseObject.prototype.getCurrentThemes = function () {\n return this.themes || registry.themes;\n };\n /**\r\n * Returns if this object has been already been disposed.\r\n *\r\n * @return Is disposed?\r\n */\n\n\n BaseObject.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Destroys this object and all related data.\r\n */\n\n\n BaseObject.prototype.dispose = function () {\n if (!this._disposed) {\n this._disposed = true;\n var a = this._disposers;\n this._disposers = null;\n\n while (a.length !== 0) {\n var disposer = a.shift();\n disposer.dispose();\n } // Clear cache\n\n\n this.clearCache(); // remove from clones list\n\n if (this.clonedFrom) {\n this.clonedFrom.clones.removeValue(this);\n }\n\n var uid = this._uid;\n\n if (uid != null) {\n registry.map.removeKey(uid);\n }\n }\n };\n /**\r\n * Adds an IDisposer, which will be disposed when this object is disposed.\r\n *\r\n * @param target Object to dispose\r\n * @ignore Exclude from docs\r\n */\n\n\n BaseObject.prototype.addDisposer = function (target) {\n this._disposers.push(target);\n };\n /**\r\n * Disposes disposable object and removes it from `_disposers`.\r\n *\r\n * @param target Object to dispose\r\n * @ignore Exclude from docs\r\n */\n\n\n BaseObject.prototype.removeDispose = function (target) {\n //if(target){\n if (!this._disposed) {\n var index = $array.indexOf(this._disposers, target);\n\n if (index > -1) {\n this._disposers.splice(index, 1);\n }\n }\n\n target.dispose(); //}\n };\n /**\r\n * Makes a copy of this object and returns the clone. Try to avoid cloning complex objects like chart, create new instances if you need them.\r\n *\r\n * @param cloneId An id to use for clone (if not set a unique id will be generated)\r\n * @returns Clone\r\n */\n\n\n BaseObject.prototype.clone = function (cloneId) {\n if (!cloneId) {\n cloneId = \"clone-\" + registry.getUniqueId();\n }\n\n var newObject = new this.constructor();\n newObject.cloneId = cloneId;\n newObject.copyFrom(this); // add to clones list\n // this.clones.push(newObject); // moved this to copyFrom\n\n return newObject;\n };\n\n Object.defineProperty(BaseObject.prototype, \"clones\", {\n /**\r\n * Returns a collection of object's clones.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Clones\r\n */\n get: function get() {\n if (!this._clones) {\n this._clones = new List();\n }\n\n return this._clones;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all properties and related data from different element.\r\n *\r\n * @param object Source element\r\n */\n\n BaseObject.prototype.copyFrom = function (object) {\n object.clones.push(this); // do not moveValue, as it is expensive! even if there will be several items in clones list, it's not that bad.\n\n this.clonedFrom = object;\n };\n\n Object.defineProperty(BaseObject.prototype, \"className\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Class name\r\n */\n get: function get() {\n return this._className;\n },\n\n /**\r\n * Element's class name. (a class that was used to instantiate the element)\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Class name\r\n */\n set: function set(value) {\n this._className = value;\n /*if (registry) {\r\n registry.registeredClasses[value] = typeof this;\r\n }*/\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Caches value in object's cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param value Value\r\n * @param ttl TTL in seconds\r\n */\n\n BaseObject.prototype.setCache = function (key, value, ttl) {\n cache.set(this.uid, key, value, ttl);\n };\n /**\r\n * Retrieves cached value.\r\n *\r\n * If optional second padarameter is specified, it will return that value\r\n * if cache is not available or is expired.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param value Value to return if cache is not available\r\n * @return Value\r\n */\n\n\n BaseObject.prototype.getCache = function (key, value) {\n if (value === void 0) {\n value = undefined;\n }\n\n return cache.get(this.uid, key, value);\n };\n /**\r\n * Clears object's local cache.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n BaseObject.prototype.clearCache = function () {\n cache.clear(this.uid);\n };\n /**\r\n * Creates [[Disposer]] for `setTimeout` function call. This ensures that all\r\n * timeouts created by the object will be cleared when object itself is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fn Callback function\r\n * @param delay Timeout (ms)\r\n * @return Disposer for timeout\r\n */\n\n\n BaseObject.prototype.setTimeout = function (fn, delay) {\n var _this = this;\n\n var id = setTimeout(function () {\n _this.removeDispose(disposer);\n\n fn();\n }, delay);\n var disposer = new Disposer(function () {\n clearTimeout(id);\n });\n\n this._disposers.push(disposer);\n\n return disposer;\n };\n /**\r\n * Creates [[Disposer]] for `setInterval` function call. This ensures that all\r\n * timeouts created by the object will be cleared when object itself is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fn Callback function\r\n * @param delay Timeout (ms)\r\n * @return Disposer for timeout\r\n */\n\n\n BaseObject.prototype.setInterval = function (fn, delay) {\n var _this = this;\n\n var id = setInterval(function () {\n _this.removeDispose(disposer);\n\n fn();\n }, delay);\n var disposer = new Disposer(function () {\n clearTimeout(id);\n });\n\n this._disposers.push(disposer);\n\n return disposer;\n };\n\n Object.defineProperty(BaseObject.prototype, \"config\", {\n /**\r\n * ==========================================================================\r\n * JSON-BASED CONFIG PROCESSING\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Use this property to set JSON-based config. When set, triggers processing\r\n * routine, which will go through all properties, and try to apply values,\r\n * create instances, etc.\r\n *\r\n * Use this with caution, as it is a time-consuming process. It's used for\r\n * initialchart setup only, not routine operations.\r\n *\r\n * @param json JSON config\r\n */\n set: function set(config) {\n try {\n this.processConfig(config);\n } catch (e) {\n /*if (this instanceof Sprite) {\r\n this.raiseCriticalError(e);\r\n }*/\n this.raiseCriticalError(e);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes the JSON config.\r\n *\r\n * @param json JSON config\r\n * @ignore Exclude from docs\r\n */\n\n BaseObject.prototype.processConfig = function (config) {\n var _this = this;\n\n if (!config) {\n return;\n } // Get target\n\n\n var target = this; // Iterate through all of the items\n\n $object.eachOrdered(config, function (configKey, value) {\n var configValue = value; // Is this a callback?\n\n if (configKey == \"callback\" && typeof value == \"function\") {\n value.call(target);\n } // Check if there's a property in target\n\n\n if (_this.hasProperty(configKey)) {\n var item_1; // Do we have instructions to create an object?\n // We create a new object if \"type\" key is set, but only if the\n // target object is of different type.\n\n if ($type.isObject(configValue) && $type.hasValue(configValue[\"type\"]) && (!$type.isObject(target[configKey]) || !$type.hasValue(target[configKey].className) || configValue[\"forceCreate\"] || target[configKey].className != configValue[\"type\"]) && !_this.asIs(configKey)) {\n item_1 = _this.createClassInstance(configValue[\"type\"]); // Create new instance\n\n if (item_1) {\n target[configKey] = item_1;\n } else {\n item_1 = target[configKey];\n }\n } else {\n // Get item from the object\n item_1 = target[configKey];\n }\n /**\r\n * It is...\r\n * --------------------------------------------------------------------\r\n */\n\n\n if (item_1 instanceof Adapter) {\n // ... an Adapter, try to add handlers to it\n // ------------------------------------------------------------------\n _this.processAdapters(item_1, configValue);\n } else if (item_1 instanceof EventDispatcher) {\n // ... an EventDispatcher, try to add handlers to it\n // ------------------------------------------------------------------\n _this.processEvents(item_1, configValue);\n } else if (configKey == \"locale\" && $type.isString(configValue)) {\n // ... a locale specified as string, e.g. \"fr_FR\"\n // ------------------------------------------------------------------\n if (window[\"am4lang_\" + configValue]) {\n target[configKey] = window[\"am4lang_\" + configValue];\n }\n } else if (configKey == \"parent\" && $type.isString(configValue)) {\n // ... a parent referred via its it\n // ------------------------------------------------------------------\n var parent_1 = _this.map.getKey(configValue);\n\n if (parent_1) {\n target[configKey] = parent_1;\n } else {\n _this.addDelayedMap(\"parent\", configValue);\n }\n } else if (_this.asIs(configKey)) {\n // ... a special field, just set it to new value\n // ------------------------------------------------------------------\n // (no need to add each indvidual item)\n target[configKey] = configValue;\n } else if (_this.asFunction(configKey) && $type.isString(configValue)) {\n // ... a field indicating function name to look for in registry\n // ------------------------------------------------------------------\n if ($type.hasValue(registry.registeredClasses[configValue])) {\n target[configKey] = registry.registeredClasses[configValue];\n } else {\n throw Error(\"Invalid easing function: \" + configValue);\n }\n } else if (configValue instanceof BaseObject) {\n // ... a BaseObject object, we just going to use it as it is\n // ------------------------------------------------------------------\n target[configKey] = configValue;\n } else if (item_1 instanceof BaseObject) {\n // ... another child BaseObject\n // ------------------------------------------------------------------\n // Let's just pass in config part in and let itself deal with it\n item_1.config = configValue;\n } else if (item_1 instanceof ListTemplate || item_1 instanceof OrderedListTemplate || item_1 instanceof SortedListTemplate) {\n // ... a list with template\n // ------------------------------------------------------------------\n // Let's see what we can do with it\n if ($type.isArray(configValue)) {\n // It's an array.\n // Create a list item for entry, or try to apply properties to an\n // existing entry if possible and it is present.\n if (item_1 instanceof ListTemplate) {\n _this.processListTemplate(configValue, item_1);\n } else {\n _this.processOrderedTemplate(configValue, item_1);\n }\n } else if ($type.isObject(configValue)) {\n // It's a single oject.\n // Treat it as a template.\n if (configValue instanceof BaseObject) {\n // Item is already a BaseObject, no need to process it further\n item_1.template = configValue;\n } else {\n // Now let's find out if the whole object if a template, or we\n // need to get it from `template` key\n var templateValue = void 0;\n\n if ($type.hasValue(configValue.template)) {\n templateValue = configValue.template;\n } else {\n templateValue = configValue;\n }\n\n if (item_1.template instanceof BaseObject) {\n // Template is a BaseObject so we will just let its config\n // deal with the configuration\n item_1.template.config = templateValue;\n } else {\n $object.each(templateValue, function (entryKey, entryValue) {\n var listItem = item_1.template[entryKey];\n\n if (listItem instanceof Adapter) {\n _this.processAdapters(listItem, entryValue);\n } else if (listItem instanceof EventDispatcher) {\n _this.processEvents(listItem, entryValue);\n } else if (listItem instanceof DictionaryTemplate) {\n _this.processDictionaryTemplate(listItem, entryValue);\n } else if (item_1.template[entryKey] instanceof BaseObject) {\n // Template is a BaseObject. Let it deal with its own config.\n item_1.template[entryKey].config = entryValue;\n } else if ($type.isObject(entryValue) && $type.hasValue(entryValue[\"type\"])) {\n listItem = _this.createClassInstance(entryValue[\"type\"]);\n\n if (listItem) {\n if (listItem instanceof BaseObject) {\n listItem.config = entryValue;\n }\n\n item_1.template[entryKey] = listItem;\n } else {\n item_1.template[entryKey] = entryValue;\n }\n } else if (listItem instanceof List) {\n // It's List, process it\n _this.processList(entryValue, listItem);\n } else {\n // Aything else. Just assing and be done with it.\n item_1.template[entryKey] = _this.maybeColorOrPercent(entryValue);\n }\n });\n } // Check maybe there are `values` to insert\n\n\n if ($type.hasValue(configValue.values)) {\n if (item_1 instanceof ListTemplate) {\n _this.processListTemplate(configValue.values, item_1);\n } else {\n _this.processOrderedTemplate(configValue.values, item_1);\n }\n }\n }\n } else {// Something else?\n // Not sure what to do with it on a list - ignore\n }\n } else if (item_1 instanceof List) {\n // ... a list\n // ------------------------------------------------------------------\n if (configKey == \"children\") {\n _this.processList(configValue, item_1, _this);\n } else {\n _this.processList(configValue, item_1);\n }\n } else if (item_1 instanceof DictionaryTemplate) {\n // ... a dictionary with template\n // ------------------------------------------------------------------\n _this.processDictionaryTemplate(item_1, configValue);\n } else if (item_1 instanceof Dictionary) {\n // ... a dictionary\n // ------------------------------------------------------------------\n _this.processDictionary(item_1, configValue);\n } else if (item_1 instanceof Color || item_1 instanceof Percent) {\n // ... it's a Color or Percent\n // ------------------------------------------------------------------\n target[configKey] = _this.maybeColorOrPercent(configValue);\n } else if ($type.isObject(item_1) && $type.isObject(configValue)) {\n // ... a regular object\n // ------------------------------------------------------------------\n $object.copyAllProperties(configValue, item_1);\n } else {\n // ... something else - probably a simple property or object\n // ------------------------------------------------------------------\n // Maybe convert to `Percent` or `Color`?\n configValue = _this.maybeColorOrPercent(configValue); // Assign\n\n target[configKey] = configValue;\n }\n } else if (!_this.isReserved(configKey)) {\n // Doesn't have property set. But we're going to assume JSON config\n // creator knows what he/she is doing and set it anyway.\n target[configKey] = configValue;\n }\n }, this.configOrder); // Any errors?\n\n if (this.processingErrors.length) {\n var errors = this.processingErrors.join(\"\\n\");\n this._processingErrors = [];\n throw Error(errors);\n }\n };\n /**\r\n * Tries to detect if value is color or percent and converts to proper object\r\n * if necessary.\r\n *\r\n * Returns the same source value if no color/percent detected\r\n *\r\n * @param value Source value\r\n * @return Converted value\r\n */\n\n\n BaseObject.prototype.maybeColorOrPercent = function (value) {\n if ($type.isString(value)) {\n if (value.match(/^[\\-]?[0-9.]+\\%$/)) {\n return percent($type.toNumber(value));\n } else if (value.match(/^\\#[0-9abcdef]{3,}$/i)) {\n return color(value);\n }\n }\n\n return value;\n };\n\n BaseObject.prototype.processAdapters = function (item, config) {\n var _this = this;\n\n if ($type.isArray(config)) {\n $array.each(config, function (entry, index) {\n item.add(entry.key, entry.callback, entry.priority || 0, _this);\n });\n } else if ($type.isObject(config)) {\n $object.each(config, function (key, entry) {\n if (!item.has(key, entry)) {\n item.add(key, entry);\n }\n });\n }\n };\n\n BaseObject.prototype.processEvents = function (item, config) {\n var _this = this;\n\n if ($type.isArray(config)) {\n $array.each(config, function (entry, index) {\n item.on(entry.type, entry.callback, _this);\n });\n } else if ($type.isObject(config)) {\n $object.each(config, function (key, entry) {\n if (!item.has(key, entry)) {\n item.on(key, entry);\n }\n });\n }\n };\n /**\r\n * Processes JSON config for a [[DictionaryTemplate]] item.\r\n *\r\n * @todo Description\r\n * @param item Item\r\n * @param config Config\r\n */\n\n\n BaseObject.prototype.processDictionaryTemplate = function (item, config) {\n // We can only process object\n // Not sure what to do with other types - ignore\n if ($type.isObject(config)) {\n // Create an entry for each item, or override properties for\n // existing one.\n $object.each(config, function (entryKey, entryValue) {\n var listItem; // Get existing one, or create a new one\n\n if (entryKey == \"template\") {\n listItem = item.template;\n } else if (item.hasKey(entryKey)) {\n listItem = item.getKey(entryKey);\n } else {\n listItem = item.create(entryKey);\n } // Set data\n\n\n if (listItem instanceof BaseObject) {\n listItem.config = entryValue;\n } else if ($type.isObject(listItem) && $type.isObject(entryValue)) {\n $object.copyAllProperties(entryValue, listItem);\n } else {\n listItem.setKey(entryKey, entryValue);\n }\n });\n }\n };\n /**\r\n * Processes JSON config for a [[Dictionary]] item.\r\n *\r\n * @todo Description\r\n * @param item Item\r\n * @param config Config\r\n */\n\n\n BaseObject.prototype.processDictionary = function (item, config) {\n // We can only process object\n // Not sure what to do with other types - ignore\n if ($type.isObject(config)) {\n // Create an entry for each item, or override properties for\n // existing one.\n // @todo support for non-basic types\n $object.each(config, function (entryKey, entryValue) {\n item.setKey(entryKey, entryValue);\n });\n }\n };\n /**\r\n * Processes [[ListTemplate]].\r\n *\r\n * @param configValue Config value\r\n * @param item Item\r\n */\n\n\n BaseObject.prototype.processListTemplate = function (configValue, item) {\n var _this = this;\n\n $array.each(configValue, function (entry, index) {\n var type = _this.getConfigEntryType(entry);\n\n var listItem;\n\n if (item.hasIndex(index) && !entry[\"forceCreate\"]) {\n listItem = item.getIndex(index);\n } else if (entry instanceof BaseObject) {\n // Item is already a BaseObject, no need to process it further\n item.push(entry);\n return;\n } else if (type) {\n listItem = item.create(type);\n } else {\n listItem = item.create();\n }\n\n if (entry === listItem) {// It's already the same item, do nothing\n } else {\n if ($type.isObject(entry)) {\n // If the list item is BaseObject, we just need to let it\n // deal if its own config\n if (listItem instanceof BaseObject) {\n listItem.config = entry;\n } else if ($type.isObject(listItem) && $type.isObject(entry)) {\n $object.copyAllProperties(entry, listItem);\n } else {\n item.setIndex(item.indexOf(listItem), entry);\n }\n }\n }\n }); // Truncate the list if it contains less items than the config\n // array\n\n while (configValue.length > item.length) {\n item.pop();\n }\n };\n /**\r\n * Processes [[OrdererListTemplate]] or [[SortedListTemplate]].\r\n *\r\n * @param configValue Config value\r\n * @param item Item\r\n */\n\n\n BaseObject.prototype.processOrderedTemplate = function (configValue, item) {\n var _this = this;\n\n $array.each(configValue, function (entry, index) {\n var type = _this.getConfigEntryType(entry);\n\n var listItem;\n\n if (type) {\n listItem = item.create(type);\n } else {\n listItem = item.create();\n }\n\n if ($type.isObject(entry)) {\n // If the list item is BaseObject, we just need to let it\n // deal if its own config\n if (listItem instanceof BaseObject) {\n listItem.config = entry;\n } else if ($type.isObject(listItem) && $type.isObject(entry)) {\n $object.copyAllProperties(entry, listItem);\n } else {\n item.insert(entry);\n }\n }\n });\n };\n /**\r\n * Processes [[List]].\r\n *\r\n * @param configValue Config value\r\n * @param item Item\r\n */\n\n\n BaseObject.prototype.processList = function (configValue, item, parent) {\n var _this = this; // Convert to array if necessary\n\n\n if (!$type.isArray(configValue)) {\n configValue = [configValue];\n } // It's an array\n // Create a list item for entry\n\n\n var itemCount = item.length;\n var extraCount = 0;\n $array.each(configValue, function (entry, index) {\n if ($type.isObject(entry)) {\n // An object.\n //\n // Let's see if we can instantiate a class out of it, or we need\n // to push it into list as it is.\n //\n // If there are items already at the specified index in the list,\n // apply properties rather than create a new one.\n var listItem = void 0;\n\n if (index < itemCount && !entry[\"forceCreate\"]) {\n listItem = item.getIndex(index);\n } else if (entry instanceof BaseObject) {\n // Item is already a BaseObject, no need to process it further\n item.push(entry);\n return;\n } else {\n extraCount++;\n listItem = _this.createEntryInstance(entry);\n\n if (parent) {\n listItem.parent = parent;\n } else {\n item.push(listItem);\n }\n } // If the list item is BaseObject, we just need to let it\n // deal if its own config\n\n\n if (listItem instanceof BaseObject) {\n listItem.config = entry;\n } else if ($type.isObject(listItem) && $type.isObject(entry)) {\n $object.copyAllProperties(entry, listItem);\n }\n } else {\n // Basic value.\n // Just push it into list, or override existing value\n if (item.hasIndex(index)) {\n item.setIndex(index, entry);\n } else {\n item.push(entry);\n }\n }\n }); // Truncate the list if it contains less items than the config\n // array\n\n while (!parent && configValue.length + extraCount < item.length) {\n item.pop();\n }\n };\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\n\n\n BaseObject.prototype.configOrder = function (a, b) {\n if (a == b) {\n return 0;\n } // Language must come first, so it's all set up when the rest of the\n // elements are being instantiated\n else if (a == \"language\") {\n return -1;\n } else if (b == \"language\") {\n return 1;\n } else {\n return 0;\n }\n };\n /**\r\n * Checks if field should be just assigned as is, without any checking when\r\n * processing JSON config.\r\n *\r\n * Extending functions can override this function to do their own checks.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\n\n\n BaseObject.prototype.asIs = function (field) {\n return $array.indexOf([\"locale\"], field) != -1;\n };\n /**\r\n * Checks if field needs to be converted to function, if it is specified\r\n * as string.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n BaseObject.prototype.asFunction = function (field) {\n return false;\n };\n /**\r\n * Creates a relevant class instance if such class definition exists.\r\n *\r\n * @ignore Exclude from docs\r\n * @param className Class name\r\n * @return Instance\r\n */\n\n\n BaseObject.prototype.createClassInstance = function (className) {\n if ($type.hasValue(registry.registeredClasses[className])) {\n return new registry.registeredClasses[className]();\n } else {\n throw Error(\"Invalid type: \\\"\" + className + \"\\\".\");\n }\n };\n /**\r\n * Creates a class instance for a config entry using it's type. (as set in\r\n * `type` property)\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config part\r\n * @return Instance\r\n */\n\n\n BaseObject.prototype.createEntryInstance = function (config) {\n var res;\n\n if ($type.hasValue(config[\"type\"])) {\n res = this.createClassInstance(config[\"type\"]);\n }\n\n if (!res) {\n return config;\n }\n\n return res;\n };\n /**\r\n * Determines config object type.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config part\r\n * @return Type\r\n */\n\n\n BaseObject.prototype.getConfigEntryType = function (config) {\n if ($type.hasValue(config[\"type\"])) {\n if ($type.hasValue(registry.registeredClasses[config[\"type\"]])) {\n return registry.registeredClasses[config[\"type\"]];\n } else {\n throw Error(\"Invalid type: \\\"\" + config[\"type\"] + \"\\\".\");\n }\n }\n\n return;\n };\n /**\r\n * Checks if this element has a property.\r\n *\r\n * @ignore Exclude from docs\r\n * @param prop Property name\r\n * @return Has property?\r\n */\n\n\n BaseObject.prototype.hasProperty = function (prop) {\n return prop in this ? true : false;\n };\n /**\r\n * Checkes whether JSON key is a reserved keyword.\r\n *\r\n * @param key Key\r\n * @return Reserved\r\n */\n\n\n BaseObject.prototype.isReserved = function (key) {\n return [\"type\", \"forceCreate\"].indexOf(key) !== -1;\n };\n\n Object.defineProperty(BaseObject.prototype, \"processingErrors\", {\n /**\r\n * A list of errors that happened during JSON processing.\r\n *\r\n * @return Errors\r\n */\n get: function get() {\n if (!this._processingErrors) {\n this._processingErrors = [];\n }\n\n return this._processingErrors;\n },\n enumerable: true,\n configurable: true\n });\n return BaseObject;\n}();\n\nexport { BaseObject };\n;\n/**\r\n * A version of [[BaseObject]] with events properties and methods.\r\n * Classes that use [[EventDispatcher]] should extend this instead of\r\n * [[BaseObject]] directly.\r\n */\n\nvar BaseObjectEvents =\n/** @class */\nfunction (_super) {\n __extends(BaseObjectEvents, _super);\n /**\r\n * Constructor\r\n */\n\n\n function BaseObjectEvents() {\n var _this = _super.call(this) || this;\n\n _this.className = \"BaseObjectEvents\";\n return _this;\n }\n\n Object.defineProperty(BaseObjectEvents.prototype, \"events\", {\n /**\r\n * An [[EventDispatcher]] instance\r\n */\n get: function get() {\n if (!this._eventDispatcher) {\n this._eventDispatcher = new EventDispatcher();\n\n this._disposers.push(this._eventDispatcher);\n }\n\n return this._eventDispatcher;\n },\n enumerable: true,\n configurable: true\n }); //public set events(value:EventDispatcher>){\n //\tthis._eventDispatcher = value;\n //}\n\n /**\r\n * Dispatches an event using own event dispatcher. Will automatically\r\n * populate event data object with event type and target (this element).\r\n * It also checks if there are any handlers registered for this sepecific\r\n * event.\r\n *\r\n * @param eventType Event type (name)\r\n * @param data Data to pass into event handler(s)\r\n */\n\n BaseObjectEvents.prototype.dispatch = function (eventType, data) {\n // @todo Implement proper type check\n if (this._eventDispatcher) {\n if (this.events.isEnabled(eventType)) {\n if (data) {\n data.type = eventType;\n data.target = data.target || this;\n this.events.dispatch(eventType, {\n type: eventType,\n target: this\n });\n } else {\n this.events.dispatch(eventType, {\n type: eventType,\n target: this\n });\n }\n }\n }\n };\n /**\r\n * Works like `dispatch`, except event is triggered immediately, without\r\n * waiting for the next frame cycle.\r\n *\r\n * @param eventType Event type (name)\r\n * @param data Data to pass into event handler(s)\r\n */\n\n\n BaseObjectEvents.prototype.dispatchImmediately = function (eventType, data) {\n // @todo Implement proper type check\n if (this._eventDispatcher) {\n if (this.events.isEnabled(eventType)) {\n if (data) {\n data.type = eventType;\n data.target = data.target || this;\n this.events.dispatchImmediately(eventType, data);\n } else {\n this.events.dispatchImmediately(eventType, {\n type: eventType,\n target: this\n });\n }\n }\n }\n };\n /**\r\n * Copies all parameters from another [[Sprite]].\r\n *\r\n * @param source Source object\r\n */\n\n\n BaseObjectEvents.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n if (source._eventDispatcher) {\n this.events.copyFrom(source._eventDispatcher);\n }\n };\n\n return BaseObjectEvents;\n}(BaseObject);\n\nexport { BaseObjectEvents };","/**\r\n * A collection of universal utility functions.\r\n */\nimport { Percent } from \"./Percent\";\nimport { isSafari } from \"./Browser\";\nimport * as $math from \"../utils/Math\";\nimport * as $type from \"../utils/Type\";\nimport * as $string from \"./String\";\nimport * as $strings from \"./Strings\";\nimport * as $object from \"./Object\";\nimport * as $array from \"./Array\";\n/**\r\n * ============================================================================\r\n * MISC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Marks a value as being used (e.g. because the value has side effects).\r\n */\n\nexport function used(value) {}\n/**\r\n * Copies all properties of one object to the other, omitting undefined.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n * @todo Maybe consolidate with utils.copy?\r\n */\n\nexport function copyProperties(source, target) {\n $object.each(source, function (key, value) {\n // only if value is set\n if ($type.hasValue(value)) {\n target[key] = value;\n }\n });\n return target;\n}\n/**\r\n * Removes target from url\r\n */\n\nexport function stripHash(url) {\n return /^[^#]*/.exec(url)[0];\n}\nexport function getBaseURI() {\n var url = \"#\"; // Needed until https://bugs.webkit.org/show_bug.cgi?id=189499 is fixed\n\n if (isSafari()) {\n var baseURI = document.baseURI;\n\n if (baseURI) {\n baseURI = stripHash(baseURI);\n var loc = stripHash(location.href);\n\n if (baseURI !== loc) {\n url = loc + url;\n }\n }\n }\n\n return url;\n}\n/**\r\n * Copies all properties of one object to the other, omitting undefined, but only if property in target object doesn't have a value set.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n * @todo Maybe consolidate with utils.copy?\r\n */\n\nexport function softCopyProperties(source, target) {\n $object.each(source, function (key, value) {\n // only if value is set\n if ($type.hasValue(value) && !$type.hasValue(target[key])) {\n target[key] = value;\n }\n });\n return target;\n}\n/**\r\n * Copies all properties of one object to the other.\r\n *\r\n * @param source Source object\r\n * @param recipient Target object\r\n * @return Updated target object\r\n */\n\nexport function copy(source, target) {\n $object.each(source, function (key, value) {\n target[key] = value;\n });\n return target;\n}\n/**\r\n * Checks if value is not empty (undefined or zero-length string).\r\n *\r\n * @param value Value to check\r\n * @return `true` if value is not \"empty\"\r\n */\n\nexport function isNotEmpty(value) {\n return $type.hasValue(value) && value.toString() !== \"\";\n}\n/**\r\n * [relativeToValue description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param percent [description]\r\n * @param full [description]\r\n * @return [description]\r\n */\n\nexport function relativeToValue(percent, full) {\n if ($type.isNumber(percent)) {\n return percent;\n } else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\n return full * percent.value;\n } else {\n return 0;\n }\n}\n/**\r\n * [relativeRadiusToValue description]\r\n *\r\n * Differs from relativeToValue so that if a value is negative, it subtracts\r\n * it from full value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param percent [description]\r\n * @param full [description]\r\n * @param subtractIfNegative [description]\r\n * @return [description]\r\n */\n\nexport function relativeRadiusToValue(percent, full, subtractIfNegative) {\n var value;\n\n if ($type.isNumber(percent)) {\n value = percent;\n\n if (value < 0) {\n if (subtractIfNegative) {\n value = full + value;\n } else {\n value = full - value;\n }\n }\n } else if (percent != null && $type.isNumber(percent.value)) {\n value = full * percent.value;\n }\n\n return value;\n}\n/**\r\n * [valueToRelative description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n * @param full [description]\r\n * @return [description]\r\n */\n\nexport function valueToRelative(value, full) {\n if (value instanceof Percent) {\n return value.value;\n } else {\n return value / full;\n }\n}\n/**\r\n * Returns pixel ratio of the current screen (used on retina displays).\r\n *\r\n * @return Pixel ratio\r\n */\n\nexport function getPixelRatio() {\n var ratio = window.devicePixelRatio || 1;\n return ratio;\n}\n/**\r\n * ============================================================================\r\n * STRING FORMATTING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Converts camelCased text to dashed version:\r\n * (\"thisIsString\" > \"this-is-string\")\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function camelToDashed(str) {\n return str.replace(/\\W+/g, '-').replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\n}\n/**\r\n * Converts tring to uppercase.\r\n *\r\n * @param str String to convert\r\n * @return uppercased string\r\n * @todo Maybe make it better\r\n */\n\nexport function capitalize(str) {\n var arr = str.split(\"\");\n arr[0] = arr[0].toUpperCase();\n return arr.join(\"\");\n}\n/**\r\n * Converts any value into its string representation.\r\n *\r\n * @param value Value\r\n * @return String represantation of the value\r\n */\n\nexport function stringify(value) {\n return JSON.stringify(value);\n}\n/**\r\n * Escapes string so it can safely be used in a Regex.\r\n *\r\n * @param value Unsescaped string\r\n * @return Escaped string\r\n */\n\nexport function escapeForRgex(value) {\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n/**\r\n * Splits the text into multiple lines, respecting maximum character count.\r\n * Prioretizes splitting on spaces and punctuation. Falls back on splitting\r\n * mid-word if there's no other option.\r\n *\r\n * @param text Text\r\n * @param maxChars Maximum number of characters per line\r\n * @return An array of split text\r\n */\n\nexport function splitTextByCharCount(text, maxChars, fullWords, rtl, fullWordFallback) {\n // Maybe the text fits?\n if (text.length <= maxChars) {\n return [text];\n } // Init result\n\n\n var res = []; // Split by words or by charts\n\n if (fullWords) {\n // Split by words first\n // Split by spacing\n var currentIndex = -1; //let tmpText = text.replace(/([,;:!?\\\\\\/\\.]+[\\s]+|[\\s])/g, $strings.PLACEHOLDER + \"$1\" + $strings.PLACEHOLDER);\n\n var tmpText = text.replace(/([,;:!?\\\\\\/]+|[\\s])/g, $strings.PLACEHOLDER + \"$1\" + $strings.PLACEHOLDER);\n var words = tmpText.split($strings.PLACEHOLDER); // Glue end-of-word punctuation to the word itself\n\n for (var i = 1; i < words.length; i++) {\n var word = words[i];\n\n if ((word == \".\" || word == \",\") && words[i - 1].match(/[\\w]+$/)) {\n words[i - 1] += word;\n words[i] = \"\";\n }\n } // Process each word\n\n\n for (var i = 0; i < words.length; i++) {\n // Get word and symbol count\n var word = words[i];\n var wordLength = word.length; // Ignore empty words\n\n if (wordLength === 0) {\n continue;\n } // Check word length\n\n\n if (wordLength > maxChars && (fullWords !== true || fullWordFallback != false)) {\n //if (wordLength > maxChars) {\n // A single word is longer than allowed symbol count\n // Break it up\n if (rtl) {\n word = reverseString(word);\n }\n\n var parts = word.match(new RegExp(\".{1,\" + maxChars + \"}\", \"g\")); // TODO is this correct ?\n\n if (parts) {\n if (rtl) {\n for (var x = 0; x < parts.length; x++) {\n parts[x] = reverseString(parts[x]);\n } //parts.reverse();\n\n }\n\n res = res.concat(parts);\n }\n } else {\n // Init current line\n if (currentIndex === -1) {\n res.push(\"\");\n currentIndex = 0;\n } // Check if we need to break into another line\n\n\n if (res[currentIndex].length + wordLength + 1 > maxChars && res[currentIndex] !== \"\") {\n res.push(\"\");\n currentIndex++;\n } // Add word\n\n\n res[currentIndex] += word;\n } // Update index\n\n\n currentIndex = res.length - 1;\n }\n } else {\n // Splitting by anywhere (living la vida facil)\n var parts = text.match(new RegExp(\".{1,\" + maxChars + \"}\", \"g\"));\n\n if (parts) {\n if (rtl) {\n for (var x = 0; x < parts.length; x++) {\n parts[x] = reverseString(parts[x]);\n }\n }\n\n res = parts;\n }\n } // Do we have only one word that does not fit?\n // Since fullWords is set and we can't split the word, we end up with empty\n // set.\n\n\n if (res.length == 1 && fullWords && fullWordFallback && res[0].length > maxChars) {\n res = [];\n }\n\n return res;\n}\n/**\r\n * Truncates the text to certain character count.\r\n *\r\n * Will add ellipsis if the string is truncated. Optionally, can truncate on\r\n * full words only.\r\n *\r\n * For RTL support, pass in the fifth parameter as `true`.\r\n *\r\n * @param text Input text\r\n * @param maxChars Maximum character count of output\r\n * @param ellipsis Ellipsis string, i.e. \"...\"\r\n * @param fullWords If `true`, will not break mid-word, unless there's a single word and it does not with into `maxChars`\r\n * @param rtl Is this an RTL text?\r\n * @return Truncated text\r\n */\n\nexport function truncateWithEllipsis(text, maxChars, ellipsis, fullWords, rtl) {\n if (text.length <= maxChars) {\n return text;\n } // Calc max chars\n\n\n maxChars -= ellipsis.length;\n\n if (maxChars < 1) {\n maxChars = 1; //ellipsis = \"\";\n } // Get lines\n\n\n var lines = splitTextByCharCount(text, maxChars, fullWords, rtl); // Use first line\n\n return (lines[0] || \"\") + ellipsis;\n}\n/**\r\n * Removes whitespace from beginning and end of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function trim(str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n}\n;\n/**\r\n * Removes whitespace from end of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function rtrim(str) {\n return str.replace(/[\\s\\uFEFF\\xA0]+$/g, \"\");\n}\n;\n/**\r\n * Removes whitespace from beginning of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function ltrim(str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+/g, \"\");\n}\n;\n/**\r\n * Reverses string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function reverseString(str) {\n return str.split(\"\").reverse().join(\"\");\n}\n/**\r\n * Removes quotes from the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\n\nexport function unquote(str) {\n var res = str.trim();\n res = str.replace(/^'(.*)'$/, \"$1\");\n\n if (res == str) {\n res = str.replace(/^\"(.*)\"$/, \"$1\");\n }\n\n return res;\n}\n/**\r\n * Pads a string with additional characters to certain length.\r\n *\r\n * @param value A numeric value\r\n * @param len Result string length in characters\r\n * @param char A character to use for padding\r\n * @return Padded value as string\r\n */\n\nexport function padString(value, len, char) {\n if (len === void 0) {\n len = 0;\n }\n\n if (char === void 0) {\n char = \"0\";\n }\n\n if (typeof value !== \"string\") {\n value = value.toString();\n }\n\n return len > value.length ? Array(len - value.length + 1).join(char) + value : value;\n}\n/**\r\n * Tries to determine format type.\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format string\r\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\r\n */\n\nexport function getFormat(format) {\n // Undefined?\n if (typeof format === \"undefined\") {\n return $strings.STRING;\n } // Cleanup and lowercase format\n\n\n format = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\"); // Remove style tags\n\n format = format.replace(/\\[[^\\]]+\\]/, \"\"); // Trim\n\n format = format.trim(); // Check for any explicit format hints (i.e. /Date)\n\n var hints = format.match(/\\/(date|number|duration)$/);\n\n if (hints) {\n return hints[1];\n } // Check for explicit hints\n\n\n if (format === $strings.NUMBER) {\n return $strings.NUMBER;\n }\n\n if (format === $strings.DATE) {\n return $strings.DATE;\n }\n\n if (format === $strings.DURATION) {\n return $strings.DURATION;\n } // Detect number formatting symbols\n\n\n if (format.match(/[#0]/)) {\n return $strings.NUMBER;\n } // Detect date formatting symbols\n\n\n if (format.match(/[ymwdhnsqaxkzgtei]/)) {\n return $strings.DATE;\n } // Nothing? Let's display as string\n\n\n return $strings.STRING;\n}\n/**\r\n * Cleans up format:\r\n * * Strips out formatter hints\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format\r\n * @return Cleaned format\r\n */\n\nexport function cleanFormat(format) {\n return format.replace(/\\/(date|number|duration)$/i, \"\");\n}\n/**\r\n * Strips all tags from the string.\r\n *\r\n * @param text Source string\r\n * @return String without tags\r\n */\n\nexport function stripTags(text) {\n return text ? text.replace(/<[^>]*>/g, \"\") : text;\n}\n/**\r\n * Removes new lines and tags from a string.\r\n *\r\n * @param text String to conver\r\n * @return Converted string\r\n */\n\nexport function plainText(text) {\n return text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\n}\n/**\r\n * ============================================================================\r\n * TYPE CONVERSION FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Converts numeric value into string. Deals with large or small numbers that\r\n * would otherwise use exponents.\r\n *\r\n * @param value Numeric value\r\n * @return Numeric value as string\r\n */\n\nexport function numberToString(value) {\n // TODO handle Infinity and -Infinity\n if ($type.isNaN(value)) {\n return \"NaN\";\n }\n\n if (value === Infinity) {\n return \"Infinity\";\n }\n\n if (value === -Infinity) {\n return \"-Infinity\";\n } // Negative 0\n\n\n if (value === 0 && 1 / value === -Infinity) {\n return \"-0\";\n } // Preserve negative and deal with absoute values\n\n\n var negative = value < 0;\n value = Math.abs(value); // TODO test this\n\n var parsed = $type.getValue(/^([0-9]+)(?:\\.([0-9]+))?(?:e[\\+\\-]([0-9]+))?$/.exec(\"\" + value));\n var digits = parsed[1];\n var decimals = parsed[2] || \"\";\n var res; // Leave the nummber as it is if it does not use exponents\n\n if (parsed[3] == null) {\n res = decimals === \"\" ? digits : digits + \".\" + decimals;\n } else {\n var exponent = +parsed[3]; // Deal with decimals\n\n if (value < 1) {\n var zeros = exponent - 1;\n res = \"0.\" + $string.repeat(\"0\", zeros) + digits + decimals; // Deal with integers\n } else {\n var zeros = exponent - decimals.length;\n\n if (zeros === 0) {\n res = digits + decimals;\n } else if (zeros < 0) {\n res = digits + decimals.slice(0, zeros) + \".\" + decimals.slice(zeros);\n } else {\n res = digits + decimals + $string.repeat(\"0\", zeros);\n }\n }\n }\n\n return negative ? \"-\" + res : res;\n}\n/**\r\n * Converts anything to Date object.\r\n *\r\n * @param value A value of any type\r\n * @return Date object representing a value\r\n */\n\nexport function anyToDate(value) {\n if ($type.isDate(value)) {\n // TODO maybe don't create a new Date ?\n var date = new Date(value); // This is needed because IE does not copy over milliseconds\n\n date.setMilliseconds(value.getMilliseconds());\n return date;\n } else if ($type.isNumber(value)) {\n return new Date(value);\n } else {\n // Try converting to number (assuming timestamp)\n var num = Number(value);\n\n if (!$type.isNumber(num)) {\n return new Date(value);\n } else {\n return new Date(num);\n }\n }\n}\n/**\r\n * Tries converting any value to a number.\r\n *\r\n * @param value Source value\r\n * @return Number\r\n */\n\nexport function anyToNumber(value) {\n if ($type.isDate(value)) {\n return value.getTime();\n } else if ($type.isNumber(value)) {\n return value;\n } else if ($type.isString(value)) {\n // Try converting to number (assuming timestamp)\n var num = Number(value);\n\n if (!$type.isNumber(num)) {\n // Failing\n return undefined;\n } else {\n return num;\n }\n }\n}\n/**\r\n * ============================================================================\r\n * DATE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns a year day.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year day\r\n * @todo Account for UTC\r\n */\n\nexport function getYearDay(date, utc) {\n if (utc === void 0) {\n utc = false;\n }\n\n var start = new Date(date.getFullYear(), 0, 0);\n var diff = date.getTime() - start.getTime() + (start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;\n var oneDay = 1000 * 60 * 60 * 24;\n return Math.floor(diff / oneDay);\n}\n/**\r\n * Returns week number for a given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number\r\n * @todo Account for UTC\r\n */\n\nexport function getWeek(date, utc) {\n if (utc === void 0) {\n utc = false;\n }\n\n var day = getYearDay(date, utc) - 1;\n var week = Math.floor((day - (date.getDay() || 7) + 10) / 7);\n\n if (week === 0) {\n week = 53;\n } else if (week === 53) {\n week = 1;\n }\n\n return week;\n}\n/**\r\n * Returns a week number in the month.\r\n *\r\n * @param date Source Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number in month\r\n */\n\nexport function getMonthWeek(date, utc) {\n if (utc === void 0) {\n utc = false;\n }\n\n var firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\n var currentWeek = getWeek(date, utc);\n\n if (currentWeek == 1) {\n currentWeek = 53;\n }\n\n return currentWeek - firstWeek + 1;\n}\n/**\r\n * Returns a year day out of the given week number.\r\n *\r\n * @param week Week\r\n * @param year Year\r\n * @param weekday Weekday\r\n * @param utc Assume UTC dates\r\n * @return Day in a year\r\n */\n\nexport function getDayFromWeek(week, year, weekday, utc) {\n if (weekday === void 0) {\n weekday = 1;\n }\n\n if (utc === void 0) {\n utc = false;\n }\n\n var date = new Date(year, 0, 4, 0, 0, 0, 0);\n\n if (utc) {\n date.setUTCFullYear(year);\n }\n\n var day = week * 7 + weekday - ((date.getDay() || 7) + 3);\n return day;\n}\n/**\r\n * Returns 12-hour representation out of the 24-hour hours.\r\n *\r\n * @param hours 24-hour number\r\n * @return 12-hour number\r\n */\n\nexport function get12Hours(hours, base) {\n if (hours > 12) {\n hours -= 12;\n } else if (hours === 0) {\n hours = 12;\n }\n\n return $type.hasValue(base) ? hours + (base - 1) : hours;\n}\n/**\r\n * Returns a string name of the tome zone.\r\n *\r\n * @param date Date object\r\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\r\n * @param savings Include information if it's in daylight savings mode\r\n * @param utc Assume UTC dates\r\n * @return Time zone name\r\n */\n\nexport function getTimeZone(date, long, savings, utc) {\n if (long === void 0) {\n long = false;\n }\n\n if (savings === void 0) {\n savings = false;\n }\n\n if (utc === void 0) {\n utc = false;\n }\n\n if (utc) {\n return long ? \"Coordinated Universal Time\" : \"UTC\";\n }\n\n var wotz = date.toLocaleString(\"UTC\");\n var wtz = date.toLocaleString(\"UTC\", {\n timeZoneName: long ? \"long\" : \"short\"\n }).substr(wotz.length); //wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\n\n if (savings === false) {\n wtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\n }\n\n return wtz;\n}\n/**\r\n * ============================================================================\r\n * NUMBER-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns a random number between `from` and `to`.\r\n *\r\n * @param from From number\r\n * @param to To number\r\n * @return Random number\r\n */\n\nexport function random(from, to) {\n return Math.floor(Math.random() * (to - from)) + from;\n}\n/**\r\n * Fits the number into specific `min` and `max` bounds.\r\n *\r\n * @param value Input value\r\n * @param min Minimum value\r\n * @param max Maximum value\r\n * @return Possibly adjusted value\r\n */\n\nexport function fitNumber(value, min, max) {\n if (value > max) {\n return max;\n } else if (value < min) {\n return min;\n }\n\n return value;\n}\n/**\r\n * Fits the number into specific `min` and `max` bounds.\r\n *\r\n * If the value is does not fit withing specified range, it \"wraps\" around the\r\n * values.\r\n *\r\n * For example, if we have input value 10 with min set at 1 and max set at 8,\r\n * the value will not fit. The remainder that does not fit (2) will be added\r\n * to `min`, resulting in 3.\r\n *\r\n * The output of regular `fitNumber()` would return 8 instead.\r\n *\r\n * @param value Input value\r\n * @param min Minimum value\r\n * @param max Maximum value\r\n * @return Possibly adjusted value\r\n */\n\nexport function fitNumberRelative(value, min, max) {\n var gap = max - min;\n\n if (value > max) {\n value = min + (value - gap * Math.floor(value / gap));\n } else if (value < min) {\n value = min + (value - gap * Math.floor(value / gap));\n }\n\n return value;\n}\n/**\r\n * ============================================================================\r\n * SPRITE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Converts SVG element coordinates to coordinates within specific [[Sprite]].\r\n *\r\n * @param point SVG coordinates\r\n * @param sprite Sprite\r\n * @return Sprite coordinates\r\n */\n\nexport function svgPointToSprite(point, sprite) {\n var x = point.x;\n var y = point.y;\n var sprites = [];\n\n if (sprite) {\n while ($type.hasValue(sprite.parent)) {\n sprites.push(sprite);\n sprite = sprite.parent;\n }\n\n sprites.reverse();\n\n for (var i = 0; i < sprites.length; i++) {\n var sprite_1 = sprites[i];\n var angle = sprite_1.rotation;\n var relativeX = x - sprite_1.pixelX - sprite_1.ex;\n var relativeY = y - sprite_1.pixelY - sprite_1.ey;\n\n if (sprite_1.dx) {\n x -= sprite_1.dx;\n }\n\n if (sprite_1.dy) {\n y -= sprite_1.dy;\n }\n\n var scale = sprite_1.scale; // this handles nonscaling\n\n if (sprite_1.group) {\n scale = sprite_1.group.scale;\n }\n\n x = ($math.cos(-angle) * relativeX - $math.sin(-angle) * relativeY) / scale - sprite_1.pixelPaddingLeft;\n y = ($math.cos(-angle) * relativeY + $math.sin(-angle) * relativeX) / scale - sprite_1.pixelPaddingTop;\n }\n }\n\n return {\n x: x,\n y: y\n };\n}\n/**\r\n * Converts coordinates within [[Sprite]] to coordinates relative to the whole\r\n * SVG element.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @return SVG coordinates\r\n */\n\nexport function spritePointToSvg(point, sprite) {\n var x = point.x;\n var y = point.y;\n\n if (sprite) {\n while ($type.hasValue(sprite.parent)) {\n var angle = sprite.rotation;\n x += sprite.pixelPaddingLeft + sprite.ex;\n y += sprite.pixelPaddingTop + sprite.ey;\n var scale = sprite.scale; // this handles nonscaling\n\n if (sprite.group) {\n scale = sprite.group.scale;\n }\n\n var relativeX = sprite.pixelX + (x * $math.cos(angle) - y * $math.sin(angle)) * scale;\n var relativeY = sprite.pixelY + (x * $math.sin(angle) + y * $math.cos(angle)) * scale;\n\n if (sprite.dx) {\n relativeX += sprite.dx;\n }\n\n if (sprite.dy) {\n relativeY += sprite.dy;\n }\n\n x = relativeX;\n y = relativeY;\n sprite = sprite.parent;\n }\n }\n\n return {\n x: x,\n y: y\n };\n}\n/**\r\n * Converts coordinates of one sprite to another.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @param toSprite Sprite\r\n * @return converted coordinates\r\n */\n\nexport function spritePointToSprite(point, sprite, toSprite) {\n return svgPointToSprite(spritePointToSvg(point, sprite), toSprite);\n}\n/**\r\n * Converts a rectangle expressed in SVG element coordinates to coordinates\r\n * within specific [[Sprite]].\r\n *\r\n * @param rect SVG rectangle\r\n * @param sprite Sprite\r\n * @return Sprite rectangle\r\n */\n\nexport function svgRectToSprite(rect, sprite) {\n var p1 = svgPointToSprite(rect, sprite);\n var p2 = svgPointToSprite({\n x: rect.x + rect.width,\n y: rect.y + rect.height\n }, sprite);\n return {\n x: p1.x,\n y: p1.y,\n width: p2.x - p1.x,\n height: p2.y - p1.y\n };\n}\n/**\r\n * Converts a rectangle expressed in [[Sprite]] coordinates to SVG coordinates.\r\n *\r\n * @param rect Sprite rectangle\r\n * @param sprite Sprite\r\n * @return SVG rectangle\r\n */\n\nexport function spriteRectToSvg(rect, sprite) {\n var p1 = spritePointToSvg(rect, sprite);\n var p2 = spritePointToSvg({\n x: rect.x + rect.width,\n y: rect.y + rect.height\n }, sprite);\n return {\n x: p1.x,\n y: p1.y,\n width: p2.x - p1.x,\n height: p2.y - p1.y\n };\n}\n/**\r\n * Converts global document-wide coordinates to coordinates within SVG element.\r\n *\r\n * @param point Global coordinates\r\n * @param svgContainer SVG element\r\n * @return SVG coordinates\r\n */\n\nexport function documentPointToSvg(point, svgContainer, cssScale) {\n try {\n var bbox = svgContainer.getBoundingClientRect();\n\n if (!$type.isNumber(cssScale)) {\n cssScale = 1;\n }\n\n return {\n \"x\": (point.x - bbox.left) / cssScale,\n \"y\": (point.y - bbox.top) / cssScale\n };\n } catch (e) {\n return point;\n }\n}\n/**\r\n * Converts SVG coordinates to global document-wide coordinates.\r\n *\r\n * @param point SVG coordinates\r\n * @param svgContainer SVG element\r\n * @return Global coordinates\r\n */\n\nexport function svgPointToDocument(point, svgContainer) {\n try {\n var bbox = svgContainer.getBoundingClientRect();\n return {\n \"x\": point.x + bbox.left,\n \"y\": point.y + bbox.top\n };\n } catch (e) {\n return point;\n }\n}\n/**\r\n * Converts document-wide global coordinates to coordinates within specific\r\n * [[Sprite]].\r\n *\r\n * @param point Global coordinates\r\n * @param sprite Sprite\r\n * @return Sprite coordinates\r\n */\n\nexport function documentPointToSprite(point, sprite) {\n if (sprite && sprite.htmlContainer) {\n var svgPoint = documentPointToSvg(point, $type.getValue(sprite.htmlContainer), sprite.svgContainer.cssScale);\n return svgPointToSprite(svgPoint, sprite);\n } else {\n return point;\n }\n}\n/**\r\n * Converts coordinates within [[Sprite]] to global document coordinates.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @return Global coordinates\r\n */\n\nexport function spritePointToDocument(point, sprite) {\n if (sprite && sprite.htmlContainer) {\n var svgPoint = spritePointToSvg(point, sprite);\n return svgPointToDocument(svgPoint, $type.getValue(sprite.htmlContainer));\n } else {\n return point;\n }\n}\n/**\r\n * ============================================================================\r\n * DEPRECATED FUNCTIONS\r\n * @todo Review and remove\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns element's width.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Width (px)\r\n * @deprecated Not used anywhere\r\n */\n\nexport function width(element) {\n var cs = getComputedStyle(element);\n var paddingX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight);\n var borderX = parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth);\n return element.clientWidth - paddingX - borderX;\n}\n/**\r\n * Returns element's height.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Height (px)\r\n * @deprecated Not used anywhere\r\n */\n\nexport function height(element) {\n var cs = getComputedStyle(element);\n var paddingY = parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom);\n var borderY = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth);\n return element.clientHeight - paddingY - borderY;\n}\n/**\r\n * Returns number of decimals\r\n *\r\n * @ignore Exclude from docs\r\n * @param number Input number\r\n * @return Number of decimals\r\n */\n\nexport function decimalPlaces(number) {\n var match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n if (!match) {\n return 0;\n }\n\n return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n}\nvar urlRegexp = /^([a-zA-Z][a-zA-Z0-9\\+\\.\\-]*:)?(?:(\\/\\/)([^\\@]+\\@)?([^\\/\\?\\#\\:]*)(\\:[0-9]+)?)?([^\\?\\#]*)(\\?[^\\#]*)?(\\#.*)?$/;\n/**\r\n * Parses a URL\r\n *\r\n * @ignore Exclude from docs\r\n */\n// TODO test this\n\nexport function parseUrl(url) {\n var match = urlRegexp.exec(url);\n return {\n protocol: match && match[1] || \"\",\n separator: match && match[2] || \"\",\n authority: match && match[3] || \"\",\n domain: match && match[4] || \"\",\n port: match && match[5] || \"\",\n path: match && match[6] || \"\",\n query: match && match[7] || \"\",\n hash: match && match[8] || \"\"\n };\n}\n/**\r\n * Serializes a Url into a string\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport function serializeUrl(url) {\n return url.protocol + url.separator + url.authority + url.domain + url.port + url.path + url.query + url.hash;\n}\n/**\r\n * Checks whether a Url is relative or not\r\n *\r\n * @ignore Exclude from docs\r\n */\n// TODO is this correct ?\n\nfunction isRelativeUrl(url) {\n return url.protocol === \"\" && url.separator === \"\" && url.authority === \"\" && url.domain === \"\" && url.port === \"\";\n}\n/**\r\n * Joins together two URLs, resolving relative URLs correctly\r\n *\r\n * @ignore Exclude from docs\r\n */\n// TODO test this\n\n\nexport function joinUrl(left, right) {\n var parsedLeft = parseUrl(left);\n var parsedRight = parseUrl(right);\n\n if (isRelativeUrl(parsedLeft)) {\n throw new Error(\"Left URL is not absolute\");\n }\n\n if (isRelativeUrl(parsedRight)) {\n // TODO is this correct ?\n if (parsedRight.path !== \"\") {\n if (parsedRight.path[0] === \"/\") {\n parsedLeft.path = parsedRight.path; // TODO is this correct ?\n } else {\n var leftPath = parsedLeft.path.split(/\\//);\n var rightPath = parsedRight.path.split(/\\//); // TODO is this correct ?\n\n if (leftPath.length === 0) {\n if (rightPath.length !== 0) {\n leftPath.push(\"\");\n }\n } else if (leftPath.length > 1) {\n leftPath.pop();\n }\n\n $array.pushAll(leftPath, rightPath);\n parsedLeft.path = leftPath.join(\"/\");\n\n if (parsedLeft.path !== \"\" && parsedLeft.path[0] !== \"/\") {\n throw new Error(\"URL path must start with /\");\n }\n }\n } // TODO is this correct ?\n\n\n parsedLeft.query = parsedRight.query;\n parsedLeft.hash = parsedRight.hash;\n return serializeUrl(parsedLeft);\n } else {\n return serializeUrl(parsedRight);\n }\n}\n/**\r\n * Detects MSIE.\r\n *\r\n * @return Is IE?\r\n */\n\nexport function isIE() {\n return !!window.MSInputMethodContext && !!document.documentMode;\n}","// Also detects iOS\nexport function isSafari() {\n return /apple/i.test(navigator.vendor);\n}\nexport function isInternetExplorer() {\n return /MSIE |Trident\\//.test(navigator.userAgent);\n}","/**\r\n * A collection of String-based constants.\r\n * @hidden\r\n * @ignore Exclude from docs\r\n */\n\n/**\r\n * @ignore Exclude from docs\r\n */\nexport var PX = \"px\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var STRING = \"string\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var NUMBER = \"number\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var DATE = \"date\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var DURATION = \"duration\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var PLACEHOLDER = \"__§§§__\";\n/**\r\n * @ignore Exclude from docs\r\n */\n\nexport var PLACEHOLDER2 = \"__§§§§__\";","/**\r\n * A collection of easing functions\r\n *\r\n * Parts of this collection are taken from D3.js library (https://d3js.org/)\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $math from \"../utils/Math\";\nimport { registry } from \"../Registry\";\n/**\r\n * The functions below are from D3.js library (https://d3js.org/)\r\n *\r\n * ----------------------------------------------------------------------------\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ----------------------------------------------------------------------------\r\n * @hidden\r\n */\n\n/**\r\n * ============================================================================\r\n * LINEAR FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Easing function: \"linear\".\r\n */\n\nexport function linear(t) {\n return +t;\n}\nregistry.registeredClasses[\"ease.linear\"] = linear;\n/**\r\n * Easing function: \"quadIn\".\r\n */\n\nexport function quadIn(t) {\n return t * t;\n}\nregistry.registeredClasses[\"ease.quadIn\"] = quadIn;\n/**\r\n * Easing function: \"quadOut\".\r\n */\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\nregistry.registeredClasses[\"ease.quadOut\"] = quadOut;\n/**\r\n * Easing function: \"quadInOut\".\r\n */\n\nexport function quadInOut(t) {\n t *= 2;\n return (t <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\nregistry.registeredClasses[\"ease.quadInOut\"] = quadInOut;\n/**\r\n * Easing function: \"polyIn\".\r\n */\n\nexport function polyIn(t, e) {\n return Math.pow(t, e);\n}\nregistry.registeredClasses[\"ease.polyIn\"] = polyIn;\n/**\r\n * Easing function: \"polyOut\".\r\n */\n\nexport function polyOut(t, e) {\n return 1 - Math.pow(1 - t, e);\n}\nregistry.registeredClasses[\"ease.polyOut\"] = polyOut;\n/**\r\n * Easing function: \"polyInOut\".\r\n */\n\nexport function polyInOut(t, e) {\n t *= 2;\n return (t <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n}\nregistry.registeredClasses[\"ease.polyInOut\"] = polyInOut;\n/**\r\n * Easing function: \"polyIn3\".\r\n */\n\nexport function polyIn3(t) {\n return polyIn(t, 3);\n}\nregistry.registeredClasses[\"ease.polyIn3\"] = polyIn3;\n/**\r\n * Easing function: \"polyOut3\".\r\n */\n\nexport function polyOut3(t) {\n return polyOut(t, 3);\n}\nregistry.registeredClasses[\"ease.polyOut3\"] = polyOut3;\n/**\r\n * Easing function: \"polyInOut3\".\r\n */\n\nexport function polyInOut3(t) {\n return polyInOut(t, 3);\n}\nregistry.registeredClasses[\"ease.polyInOut3\"] = polyInOut3;\n/**\r\n * ============================================================================\r\n * EXPONENTIAL FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Easing function: \"expIn\".\r\n */\n\nexport function expIn(t) {\n return Math.pow(2, 10 * t - 10);\n}\nregistry.registeredClasses[\"ease.expIn\"] = expIn;\n/**\r\n * Easing function: \"expOut\".\r\n */\n\nexport function expOut(t) {\n return 1 - Math.pow(2, -10 * t);\n}\nregistry.registeredClasses[\"ease.expOut\"] = expOut;\n/**\r\n * Easing function: \"expInOut\".\r\n */\n\nexport function expInOut(t) {\n t *= 2;\n return (t <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\nregistry.registeredClasses[\"ease.expInOut\"] = expInOut;\n/**\r\n * ============================================================================\r\n * SINE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Easing function: \"sinIn\".\r\n */\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * $math.HALFPI);\n}\nregistry.registeredClasses[\"ease.sinIn\"] = sinIn;\n/**\r\n * Easing function: \"sinOut\".\r\n */\n\nexport function sinOut(t) {\n return Math.sin(t * $math.HALFPI);\n}\nregistry.registeredClasses[\"ease.sinOut\"] = sinOut;\n/**\r\n * Easing function: \"sinInOut\".\r\n */\n\nexport function sinInOut(t) {\n return (1 - Math.cos($math.PI * t)) / 2;\n}\nregistry.registeredClasses[\"ease.sinInOut\"] = sinInOut;\n/**\r\n * ============================================================================\r\n * CUBIC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Easing function: \"cubicIn\".\r\n */\n\nexport function cubicIn(t) {\n return t * t * t;\n}\nregistry.registeredClasses[\"ease.cubicIn\"] = cubicIn;\n/**\r\n * Easing function: \"cubicOut\".\r\n */\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\nregistry.registeredClasses[\"ease.cubicOut\"] = cubicOut;\n/**\r\n * Easing function: \"cubicInOut\".\r\n */\n\nexport function cubicInOut(t) {\n t *= 2;\n return (t <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\nregistry.registeredClasses[\"ease.cubicInOut\"] = cubicInOut;\n/**\r\n * ============================================================================\r\n * CIRCLE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Easing function: \"circleIn\".\r\n */\n\nexport function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\nregistry.registeredClasses[\"ease.circleIn\"] = circleIn;\n/**\r\n * Easing function: \"circleOut\".\r\n */\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nregistry.registeredClasses[\"ease.circleOut\"] = circleOut;\n/**\r\n * Easing function: \"circleInOut\".\r\n */\n\nexport function circleInOut(t) {\n t *= 2;\n return (t <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\nregistry.registeredClasses[\"ease.circleInOut\"] = circleInOut;\n/**\r\n * ============================================================================\r\n * BOUNCE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nvar b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n/**\r\n * Easing function: \"bounceIn\".\r\n */\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\nregistry.registeredClasses[\"ease.bounceIn\"] = bounceIn;\n/**\r\n * Easing function: \"bounceOut\".\r\n */\n\nexport function bounceOut(t) {\n t = +t;\n return t < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\nregistry.registeredClasses[\"ease.bounceOut\"] = bounceOut;\n/**\r\n * Easing function: \"bounceInOut\".\r\n */\n\nexport function bounceInOut(t) {\n t *= 2;\n return (t <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\nregistry.registeredClasses[\"ease.bounceInOut\"] = bounceInOut;\n/**\r\n * ============================================================================\r\n * ELASTIC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nvar tau = 2 * Math.PI;\nvar amplitude = 1;\nvar period = 0.3 / tau;\nvar s = Math.asin(1 / amplitude) * period;\n/**\r\n * Easing function: \"elasticIn\".\r\n *\r\n * @function elasticIn\r\n * @param a Amplitude\r\n * @param p period\r\n */\n\nexport function elasticIn(t) {\n return amplitude * Math.pow(2, 10 * --t) * Math.sin((s - t) / period);\n}\nregistry.registeredClasses[\"ease.elasticIn\"] = elasticIn;\n/**\r\n * Easing function: \"elasticOut\".\r\n *\r\n * @function elasticOut\r\n * @param a Amplitude\r\n * @param p period\r\n */\n\nexport function elasticOut(t) {\n return 1 - amplitude * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / period);\n}\nregistry.registeredClasses[\"ease.elasticOut\"] = elasticOut;\n/**\r\n * Easing function: \"elasticInOut\".\r\n *\r\n * @function elasticInOut\r\n * @param a Amplitude\r\n * @param p period\r\n */\n\nexport function elasticInOut(t) {\n t = t * 2 - 1;\n return (t < 0 ? amplitude * Math.pow(2, 10 * t) * Math.sin((s - t) / period) : 2 - amplitude * Math.pow(2, -10 * t) * Math.sin((s + t) / period)) / 2;\n}\nregistry.registeredClasses[\"ease.elasticInOut\"] = elasticInOut;","/**\r\n * Module contains functionality related to [[Sprite]] states.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"./Base\";\nimport { registry } from \"./Registry\";\nimport { Adapter } from \"./utils/Adapter\";\nimport { List, ListDisposer } from \"./utils/List\";\nimport { toColor } from \"./utils/Color\";\nimport { percent } from \"./utils/Percent\";\nimport * as $utils from \"./utils/Utils\";\nimport * as $ease from \"./utils/Ease\";\nimport * as $object from \"./utils/Object\";\nimport * as $type from \"./utils/Type\";\n/**\r\n * Defines a state for [[Sprite]].\r\n *\r\n * A \"state\" is a special object that has all the same properties as the\r\n * [[Sprite]] of the same type, and which can be used to quickly apply a set\r\n * of property values. (set state)\r\n *\r\n * When [[Sprite]] (or any object that extends Sprite) is created it creates a\r\n * \"default\" state. You can modify the \"default\" state so that when the Sprite\r\n * returns to default state certain properties are added.\r\n *\r\n * Default state can be accessed using Sprite's `defaultState` getter.\r\n *\r\n * ```TypeScript\r\n * sprite.defaultState.properties.fillOpacity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * sprite.defaultState.properties.fillOpacity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"defaultState\": {\r\n * \"properties\": {\r\n * \"fillOpacity\": 0.5\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * If Sprite is \"hoverable\", it automatically adds a \"hover\" state, which is\r\n * applied when it has a cursor over it.\r\n *\r\n * ```TypeScript\r\n * let hoverstate = sprite.states.create(\"hover\");\r\n * hoverstate.properties.fillOpacity = 1;\r\n * ```\r\n * ```JavaScript\r\n * var hoverstate = sprite.states.create(\"hover\");\r\n * hoverstate.properties.fillOpacity = 1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"states\": {\r\n * \"hover\": {\r\n * \"properties\": {\r\n * \"fillOpacity\": 0.5\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * The above will automatically apply \"hover\" state when the Sprite is hovered,\r\n * thus will set its `fillOpacity` property to 1, and will reset it to 0.5 when\r\n * it's no longer hovered.\r\n *\r\n * Every object that inherits from [[Sprite]] can and will add their own\r\n * properties to the available list.\r\n *\r\n * User can create their own states, and apply them as needed:\r\n *\r\n * ```TypeScript\r\n * let myCustomState = sprite.states.create(\"mystate\");\r\n * myCustomState.properties.fillOpacity = 0.5;\r\n * myCustomState.properties.strokeOpacity = 0.8;\r\n * sprite.setState(\"mystate\");\r\n * ```\r\n * ```JavaScript\r\n * var myCustomState = sprite.states.create(\"mystate\");\r\n * myCustomState.properties.fillOpacity = 0.5;\r\n * myCustomState.properties.strokeOpacity = 0.8;\r\n * sprite.setState(\"mystate\");\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/states/}\r\n * @important\r\n */\n\nvar SpriteState =\n/** @class */\nfunction (_super) {\n __extends(SpriteState, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SpriteState() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Duration of the transition to this state. 0 means instantenous transition.\r\n * Any number means the [[Sprite]] will transit smoothly to this state,\r\n * animating all animatable properties.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n\n _this.transitionDuration = 0;\n /**\r\n * Easing function to use when transitioning to this state.\r\n *\r\n * @default cubicOut\r\n * @see {@link Ease}\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.transitionEasing = $ease.cubicOut;\n /**\r\n * Collection of properties and their values that should be applied to [[Sprite]]\r\n * when switching to this State.\r\n *\r\n * The property values set on a [[SpriteState]] will override the ones set\r\n * directly on a [[Sprite]].\r\n */\n\n _this.properties = {};\n /**\r\n * A collection of key/value pairs that can be used to bind specific Sprite\r\n * properties to [[DataItem]].\r\n *\r\n * For example: `fill` property can be bound to `myCustomColor` field in\r\n * DataItem. The Sprite will automatically get the value for `fill` from its\r\n * DataItem.\r\n *\r\n * SpriteState-specific binding will override binding set directly on\r\n * [[Sprite]]. I.e. you can make Sprite use different fill color on hover by\r\n * adding a `fill` binding to a different DataItem key for Sprite's \"hover\"\r\n * state object.\r\n *\r\n * @see {@link Sprite}\r\n */\n\n _this.propertyFields = {}; //public propertyFields: Dictionary = new Dictionary();;\n\n /**\r\n * A list of [[Filter]] elements to be applied to the relative [[Sprite]]\r\n * when switching to this State.\r\n *\r\n * @param {List}\r\n */\n\n _this.filters = new List();\n /**\r\n * Identifies if this object is a \"template\" and should not be treated as\r\n * real object that is drawn or actually used in the chart.\r\n */\n\n _this.isTemplate = false;\n _this.className = \"SpriteState\"; // Make filter list disposable\n\n _this._disposers.push(new ListDisposer(_this.filters)); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(SpriteState.prototype, \"adapter\", {\n /**\r\n * Holds Adapter.\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._adapterO) {\n this._adapterO = new Adapter(this); // Decorate adapter with events so that we can apply its settings whenever\n // it is modified\n\n this._adapterO.events.on(\"inserted\", function (ev) {\n _this[ev.newValue.key] = _this[ev.newValue.key];\n }, undefined, false);\n\n this._adapterO.events.on(\"removed\", function (ev) {\n _this[ev.newValue.key] = _this[ev.newValue.key];\n }, undefined, false);\n }\n\n return this._adapterO;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns [[Sprite]] element's property value.\r\n *\r\n * Will check if there are any bindings with [[DataItem]] and if there are\r\n * any method callbacks set up for the specific property.\r\n *\r\n * @param propertyName Property name\r\n * @return Property value\r\n */\n\n SpriteState.prototype.getPropertyValue = function (propertyName) {\n var propValue = this.properties[propertyName];\n var sprite = this.sprite;\n\n if (sprite) {\n var fieldName = this.propertyFields[propertyName];\n\n if ($type.hasValue(fieldName)) {\n if (sprite.dataItem) {\n propValue = sprite.dataItem.dataContext[fieldName];\n }\n\n if (propValue == undefined) {\n propValue = \"__unset\";\n }\n } // Apply adapters\n // If the value itself is undefined, we're going to pass in Sprite's\n // value to adapters\n // @todo get rid of \n\n\n if (!$type.hasValue(propValue)) {\n var spriteValue = sprite.getPropertyValue(propertyName);\n\n if (this._adapterO) {\n propValue = this._adapterO.apply(propertyName, spriteValue);\n } else {\n propValue = spriteValue;\n }\n\n if (propValue == spriteValue) {\n propValue = undefined;\n }\n } else {\n if (this._adapterO) {\n propValue = this._adapterO.apply(propertyName, propValue);\n }\n }\n /*let method = this.propertyMethods.getKey(propertyName);\r\n if (method) {\r\n propValue = method(sprite, propertyName);\r\n }*/\n\n }\n\n return propValue;\n };\n /**\r\n * Copies all property and style values from another [[SpriteState]] object.\r\n *\r\n * @param source Source [[SpriteState]]\r\n */\n\n\n SpriteState.prototype.copyFrom = function (source) {\n if (source && source != this) {\n this.transitionDuration = source.transitionDuration;\n this.transitionEasing = source.transitionEasing;\n $utils.copyProperties(source.properties, this.properties);\n $utils.copyProperties(source.propertyFields, this.propertyFields);\n this.filters.copyFrom(source.filters);\n\n if (source._adapterO) {\n this.adapter.copyFrom(source._adapterO);\n }\n }\n };\n\n Object.defineProperty(SpriteState.prototype, \"allValues\", {\n /**\r\n * Returns all values that should be applied by the SpriteState.\r\n *\r\n * It takes adapters into account.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Properties\r\n * @todo Add adapter values\r\n * @todo proper type this[\"_properties\"]\r\n */\n get: function get() {\n var _this = this; // Init return value\n\n\n var res = {}; // Apply adapters to all values\n\n $object.each(this.properties, function (prop, value) {\n res[prop] = _this.getPropertyValue(prop);\n }); // Cycle through all adapters and add values for missing properties\n\n if (this._adapterO) {\n var keys = this._adapterO.keys();\n\n $object.each(keys, function (_x, prop) {\n var value = _this.getPropertyValue(prop);\n\n res[prop] = value;\n });\n } // Cycle through all property fileds and add values for missing properties\n\n\n var propertyFields = this.propertyFields;\n $object.each(propertyFields, function (prop) {\n var value = _this.getPropertyValue(prop);\n\n res[prop] = value;\n });\n return res;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Resets the State to initial state - no values or Filters applied.\r\n */\n\n SpriteState.prototype.reset = function () {\n this.properties = {};\n this.filters.clear();\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n SpriteState.prototype.processConfig = function (config) {\n if ($type.hasValue(config) && $type.hasValue(config[\"properties\"])) {\n $object.each(config[\"properties\"], function (key, value) {\n if ($type.isString(value)) {\n if (value.match(/^[0-9.\\-]+\\%$/)) {\n config[\"properties\"][key] = percent($type.toNumber(value));\n } else if (value.match(/^\\#[0-9abcdef]{3,}$/i)) {\n config[\"properties\"][key] = toColor(value);\n }\n }\n });\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n SpriteState.prototype.asFunction = function (field) {\n return field == \"transitionEasing\" || _super.prototype.asIs.call(this, field);\n };\n\n return SpriteState;\n}(BaseObject);\n\nexport { SpriteState };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"SpriteState\"] = SpriteState;","import { __extends } from \"tslib\";\nimport { Dictionary } from \"./utils/Dictionary\";\nimport { TargetedEventDispatcher } from \"./utils/EventDispatcher\";\nimport { MultiDisposer, CounterDisposer } from \"./utils/Disposer\";\nimport * as $utils from \"./utils/Utils\";\nimport * as $object from \"./utils/Object\";\n/**\r\n * An [[EventDispatcher]] for [[Sprite]].\r\n *\r\n * @important\r\n */\n\nvar SpriteEventDispatcher =\n/** @class */\nfunction (_super) {\n __extends(SpriteEventDispatcher, _super);\n\n function SpriteEventDispatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * [_interactionEvents description]\r\n *\r\n * @todo Description\r\n */\n\n\n _this._interactionEvents = new Dictionary();\n return _this;\n }\n /**\r\n * [_dispatchSpriteEvent description]\r\n *\r\n * @todo Description\r\n */\n\n\n SpriteEventDispatcher.prototype._dispatchSpriteEvent = function (ev) {\n if (this.target.disabled || this.target.isTemplate) {\n return;\n } // TODO remove this later\n\n\n if (this.target.events.isEnabled(ev.type)) {\n var imev = $object.merge(ev, {\n target: this.target\n });\n this.target.events.dispatchImmediately(imev.type, imev);\n }\n };\n /**\r\n * [_dispatchSpritePointEvent description]\r\n *\r\n * @todo Description\r\n */\n\n\n SpriteEventDispatcher.prototype._dispatchSpritePointEvent = function (ev) {\n if (this.target.disabled || this.target.isTemplate) {\n return;\n } // TODO remove this later\n\n\n if (this.target.events.isEnabled(ev.type)) {\n var imev = $object.merge(ev, {\n target: this.target,\n spritePoint: ev.point ? $utils.documentPointToSprite(ev.point, this.target) : undefined,\n svgPoint: this.target.getSvgPoint(ev.point)\n });\n this.target.events.dispatchImmediately(imev.type, imev);\n }\n };\n /**\r\n * [_addInteractionObjectEvent description]\r\n *\r\n * @todo Description\r\n */\n\n\n SpriteEventDispatcher.prototype._addInteractionObjectEvent = function (type, callback, context, shouldClone) {\n var _this = this;\n\n var key = shouldClone + \"-\" + type;\n\n var counter = this._interactionEvents.insertKeyIfEmpty(key, function () {\n var disposer = _this.target.interactions.events.on(type, callback, context, shouldClone);\n\n return new CounterDisposer(function () {\n _this._interactionEvents.removeKey(key);\n\n disposer.dispose();\n });\n });\n\n return counter.increment();\n };\n /**\r\n * [_on description]\r\n *\r\n * @todo Description\r\n */\n\n\n SpriteEventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {\n var info = _super.prototype._on.call(this, once, type, callback, context, shouldClone, dispatch);\n\n var disposers = [info.disposer];\n /**\r\n * Catching Sprite-related events, converting them to [[SpriteEvent]] and\r\n * triggering them on sprite\r\n */\n\n switch (type) {\n case \"hit\":\n case \"track\":\n case \"doublehit\":\n case \"wheel\":\n case \"wheelup\":\n case \"wheeldown\":\n case \"wheelleft\":\n case \"wheelright\":\n disposers.push(this._addInteractionObjectEvent(type, this._dispatchSpritePointEvent, this, shouldClone));\n break;\n\n case \"rightclick\":\n case \"down\": //case \"hold\":\n\n case \"up\":\n case \"drag\":\n case \"dragged\":\n case \"dragstart\":\n case \"dragstop\":\n case \"over\":\n case \"out\":\n case \"swipe\":\n case \"swipeleft\":\n case \"swiperight\":\n case \"resize\": //case \"rotate\":\n\n case \"focus\":\n case \"blur\":\n case \"toggled\":\n disposers.push(this._addInteractionObjectEvent(type, this._dispatchSpriteEvent, this, shouldClone));\n break;\n }\n /**\r\n * Set functional properties based on events. For example if we add a\r\n * \"drag\" event handler, we want to make the Sprite draggable, even if we\r\n * don't explicitly set \"draggable\"\r\n */\n\n\n switch (type) {\n case \"hit\":\n case \"doublehit\":\n case \"rightclick\":\n case \"down\":\n case \"up\":\n this.target.clickable = true;\n break;\n\n case \"toggled\":\n this.target.togglable = true;\n break;\n\n case \"drag\":\n case \"dragstart\":\n case \"dragstop\":\n this.target.draggable = true;\n break;\n\n case \"track\":\n this.target.trackable = true;\n break;\n\n case \"resize\":\n this.target.resizable = true;\n break;\n\n case \"swipe\":\n case \"swipeleft\":\n case \"swiperight\":\n this.target.swipeable = true;\n break;\n\n case \"wheel\":\n case \"wheelup\":\n case \"wheeldown\":\n case \"wheelleft\":\n case \"wheelright\":\n this.target.wheelable = true;\n break;\n\n case \"over\":\n this.target.hoverable = true;\n\n case \"out\":\n this.target.hoverable = true;\n break;\n\n case \"focus\":\n case \"blur\":\n this.target.focusable = true;\n break;\n }\n\n info.disposer = new MultiDisposer(disposers);\n return info;\n };\n\n return SpriteEventDispatcher;\n}(TargetedEventDispatcher);\n\nexport { SpriteEventDispatcher };","/**\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { color } from \"../utils/Color\";\n/**\r\n * Defines a class that holds default properties for new SVG elements\r\n */\n\nvar SVGDefaults =\n/** @class */\nfunction () {\n function SVGDefaults() {}\n\n SVGDefaults.opacity = 1;\n SVGDefaults.strokeOpacity = 1;\n SVGDefaults.strokeWidth = 1;\n SVGDefaults.fillOpacity = 1;\n SVGDefaults.fill = color(\"#000000\");\n SVGDefaults.stroke = color(\"#000000\");\n SVGDefaults.focusable = undefined;\n SVGDefaults.tabindex = 0;\n return SVGDefaults;\n}();\n\nexport { SVGDefaults };","/**\r\n * Global options.\r\n */\nexport var options = {\n verbose: true,\n commercialLicense: false,\n classNamePrefix: \"amcharts-\",\n autoSetClassName: false,\n minPolylineStep: 0.5,\n onlyShowOnViewport: false,\n queue: false,\n autoDispose: false,\n licenses: [],\n suppressErrors: false,\n suppressWarnings: false,\n animationsEnabled: true,\n nonce: \"\",\n deferredDelay: 100,\n disableHoverOnTransform: \"never\",\n pixelPerfectPrecision: 0\n};","/**\r\n * Animation module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"../Base\";\nimport { SVGDefaults } from \"../defs/SVGDefaults\";\nimport { Disposer } from \"../utils/Disposer\";\nimport { Color } from \"../utils/Color\";\nimport { Percent, percent } from \"../utils/Percent\";\nimport * as $async from \"../utils/AsyncPending\";\nimport * as $ease from \"../utils/Ease\";\nimport * as $colors from \"../utils/Colors\";\nimport * as $math from \"../utils/Math\";\nimport * as $array from \"../utils/Array\";\nimport * as $type from \"../utils/Type\";\nimport { system } from \"../System\";\nimport { options } from \"../Options\";\n/**\r\n * Calls a `callback` function for the `duration` of milliseconds.\r\n *\r\n * @todo Needed?\r\n * @deprecated Not used anywhere\r\n * @ignore Exclude from docs\r\n * @param duration Duration (ms)\r\n * @param callback Callback function\r\n * @return Disposer\r\n */\n\nexport function animate(duration, callback) {\n var disposed = false; // TODO use performance.now() ?\n\n var startTime = Date.now();\n\n function loop(now) {\n if (!disposed) {\n var diff = now - startTime;\n\n if (diff >= duration) {\n callback(1);\n } else {\n $async.nextFrame(loop);\n callback(diff / duration);\n }\n }\n }\n\n $async.nextFrame(loop);\n return new Disposer(function () {\n disposed = true;\n });\n}\n/**\r\n * Returns numeric value accoring to progress between start and end values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Value according to progress\r\n */\n\nfunction getProgressNumber(progress, from, to) {\n return from + (to - from) * progress;\n}\n/**\r\n * Returns [[Percent]] value accoring to progress between start and end\r\n * values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Value according to progress\r\n */\n\n\nfunction getProgressPercent(progress, from, to) {\n return new Percent(getProgressNumber(progress, from.percent, to.percent));\n}\n/**\r\n * Returns color value accoring to progress between start and end values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Color according to progress\r\n */\n\n\nfunction getProgressColor(progress, from, to) {\n var color = new Color($colors.interpolate(from.rgb, to.rgb, progress));\n\n if (from.alpha != to.alpha) {\n color.alpha = from.alpha + (to.alpha - from.alpha) * progress;\n }\n\n return color;\n}\n/**\r\n * [getHybridProperty description]\r\n *\r\n * @todo Description\r\n * @param property [description]\r\n * @param type [description]\r\n * @return [description]\r\n */\n\n\nfunction getHybridProperty(property, type) {\n return type + property.charAt(0).toUpperCase() + property.substr(1);\n}\n\nvar AnimationDisposer =\n/** @class */\nfunction () {\n function AnimationDisposer(array) {\n this._disposer = new Disposer(function () {\n while (array.length !== 0) {\n array[0].dispose();\n }\n });\n }\n\n AnimationDisposer.prototype.isDisposed = function () {\n return this._disposer.isDisposed();\n };\n\n AnimationDisposer.prototype.dispose = function () {\n this._disposer.dispose();\n };\n\n return AnimationDisposer;\n}();\n\nexport { AnimationDisposer };\n/**\r\n * Animation can be used to transition certain properties on an object that\r\n * implements [[IAnimatable]] interface.\r\n *\r\n * @see {@link IAnimationEvents} for a list of available events\r\n */\n\nvar Animation =\n/** @class */\nfunction (_super) {\n __extends(Animation, _super);\n /**\r\n * Constructor\r\n *\r\n * @param object An object animation should run on\r\n * @param animationOptions One or several (array) of animation options\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n */\n\n\n function Animation(object, animationOptions, duration, easing) {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Duration of the animation in milliseconds.\r\n */\n\n\n _this.duration = 0;\n /**\r\n * Easing function to use.\r\n *\r\n * @see {@link Ease}\r\n */\n\n _this.easing = $ease.linear;\n /**\r\n * Contains progress of the current animation: 0 (start) to 1 (end).\r\n */\n\n _this.progress = 0;\n /**\r\n * Indicated how many times animation should loop.\r\n */\n\n _this._loop = 0;\n /**\r\n * Animation is paused.\r\n */\n\n _this._pause = false;\n /**\r\n * Holds reference to timeout for delayed play.\r\n */\n\n _this._delayTimeout = null;\n /**\r\n * Elapsed time in currently playing animation.\r\n */\n\n _this._time = 0;\n _this._isFinished = false;\n _this.className = \"Animation\"; // Override duration if animations disabled system-wide\n\n if (options.animationsEnabled === false) {\n duration = 0;\n } // Set parameters\n\n\n _this.object = object;\n _this.animationOptions = $array.toArray(animationOptions);\n _this.duration = duration;\n\n if (easing) {\n _this.easing = easing;\n } // Run check if there are already animations playing on the same properties\n // and stop them - the last animation takes precedence\n //this.stopSameAnimations();\n\n /*if ($type.hasValue(callback)) {\r\n // TODO don't use .call\r\n this.events.on(\"animationended\", callback, object);\r\n }*/\n // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n } // TODO verify that this is correct\n\n\n Animation.prototype.debug = function () {};\n /**\r\n * Disposes this object, clears up after itself.\r\n */\n\n\n Animation.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n this.pause();\n };\n /**\r\n * Delays animation start by X milliseconds.\r\n *\r\n * @param delay Delay (ms)\r\n * @return Animation\r\n */\n\n\n Animation.prototype.delay = function (delay) {\n var _this = this; //@todo Maybe not use `bind()`\n\n\n if (delay > 0) {\n this.pause(); // This is so that it will get disposed if `this.object` is disposed\n // TODO hacky, figure out a better way\n\n $array.move(this.object.animations, this);\n var id_1 = setTimeout(function () {\n _this._delayTimeout = null;\n\n _this.start();\n }, delay);\n this._delayTimeout = new Disposer(function () {\n clearTimeout(id_1);\n });\n }\n\n return this;\n };\n\n Animation.prototype._start = function () {\n this._isFinished = false; // Clear delay timeout if there was one\n\n if (this._delayTimeout) {\n this.removeDispose(this._delayTimeout);\n this._delayTimeout = null;\n } // Run check if there are already animations playing on the same properties\n // and stop them - the last animation takes precedence\n\n\n this.stopSameAnimations(); // Reset counters\n\n this._pause = false; // Register animation\n\n $array.move(system.animations, this); // Register this animation in object's `animations` list\n\n $array.move(this.object.animations, this);\n system.requestFrame();\n };\n /**\r\n * Starts animation.\r\n *\r\n * @return Animation\r\n */\n\n\n Animation.prototype.start = function () {\n this._start();\n\n this._startTime = Date.now();\n this._time = 0;\n this.staticOptions = []; // Process initial property values\n\n for (var i = this.animationOptions.length - 1; i >= 0; i--) {\n var options_1 = this.animationOptions[i];\n\n if (!$type.hasValue(options_1.from)) {\n if (options_1.childObject) {\n options_1.from = options_1.childObject[options_1.property];\n } else {\n options_1.from = this.object[options_1.property];\n\n if (!$type.hasValue(options_1.from)) {\n options_1.from = SVGDefaults[options_1.property];\n }\n }\n /*if (!$type.hasValue(options.from)) {\r\n throw Error(\"Could not get initial transition value.\");\r\n }*/\n\n }\n\n if (options_1.from == options_1.to) {\n // || options.to == (this.object)[options.property]){ this is not good, as dataItem.value is set to final at once, and we animate workingValue\n $array.remove(this.animationOptions, options_1);\n } else if (!$type.hasValue(options_1.from) || !(options_1.from instanceof Percent) && options_1.to instanceof Percent || options_1.from instanceof Percent && !(options_1.to instanceof Percent)) {\n // Initial value is undefined, treat it as static\n this.staticOptions.push(options_1);\n $array.remove(this.animationOptions, options_1);\n } else {\n // Use different update methods for different value types\n if ($type.isNumber(options_1.to)) {\n // Numeric value\n options_1.updateMethod = getProgressNumber; // Check if initial value is not Percent\n\n if (options_1.from instanceof Percent) {\n // It is. Let's convert it to pixel value\n // @todo Check if we can do this in a less hacky way\n var convertedFrom = this.object[getHybridProperty(options_1.property, \"pixel\")];\n\n if (!isNaN(convertedFrom)) {\n options_1.from = convertedFrom;\n } else {\n this.staticOptions.push(options_1);\n $array.remove(this.animationOptions, options_1);\n }\n } else if (isNaN(options_1.from)) {\n // Static value\n this.staticOptions.push(options_1);\n $array.remove(this.animationOptions, options_1);\n }\n } else {\n // Check if maybe we have a color or percent value\n if (options_1.to instanceof Color) {\n // Yup - set resolved named color\n //options.from = $colors.stringToColor(options.from);\n if (options_1.from) {\n options_1.updateMethod = getProgressColor;\n } else {\n // Static value\n this.staticOptions.push(options_1);\n $array.remove(this.animationOptions, options_1);\n }\n } else if (options_1.to instanceof Percent) {\n // Percent\n options_1.updateMethod = getProgressPercent; // Check if the initial value is maybe in pixels\n\n if (!isNaN(options_1.from)) {\n // It is. Let's convert it\n // @todo Check if we can do this in a less hacky way\n var convertedFrom = this.object[getHybridProperty(options_1.property, \"relative\")];\n\n if (!isNaN(convertedFrom)) {\n options_1.from = percent(convertedFrom * 100);\n }\n }\n } else {\n // Static value\n this.staticOptions.push(options_1);\n $array.remove(this.animationOptions, options_1);\n }\n }\n }\n } // Apply static options (just in case they were reset by previous\n // animation loop)\n\n\n this.applyStaticOptions();\n\n if (this.events.isEnabled(\"animationstarted\")) {\n var event_1 = {\n type: \"animationstarted\",\n target: this,\n progress: this.progress\n };\n this.events.dispatchImmediately(\"animationstarted\", event_1);\n }\n\n this.update(); // If duration is 0, just end animation\n\n if (this.duration === 0) {\n this.end();\n }\n\n return this;\n };\n /**\r\n * Sets loop count for the animation. If parameter is not a valid number the\r\n * animation will keep on looping indefinitely.\r\n *\r\n * @param count Number of times to loop animation\r\n * @return Animation\r\n */\n\n\n Animation.prototype.loop = function (count) {\n if (!$type.isNumber(count)) {\n count = Infinity;\n }\n\n this._loop = count;\n return this;\n };\n /**\r\n * Pauses animation.\r\n *\r\n * @return Animation\r\n */\n\n\n Animation.prototype.pause = function () {\n this._pause = true;\n\n if (this._delayTimeout) {\n this.removeDispose(this._delayTimeout);\n this._delayTimeout = null;\n }\n\n $array.remove(system.animations, this);\n $array.remove(this.object.animations, this);\n return this;\n };\n /**\r\n * Resumes paused animation.\r\n *\r\n * @return Animation\r\n */\n\n\n Animation.prototype.resume = function () {\n this._start();\n\n this._startTime = Date.now() - this._time;\n return this;\n };\n /**\r\n * Jumps to animation end. If animation is set to loop, this will start\r\n * another round of animation from start.\r\n *\r\n * @return Animation\r\n */\n\n\n Animation.prototype.end = function () {\n // Pause and complete the progress\n if (this._loop == 0) {\n this.pause();\n }\n\n this.setProgress(1); // Apply static options\n\n this.applyStaticOptions();\n\n if (this.events.isEnabled(\"animationended\")) {\n var event_2 = {\n type: \"animationended\",\n target: this,\n progress: this.progress\n };\n this.events.dispatchImmediately(\"animationended\", event_2);\n } // Check if we should loop\n\n\n if (this._loop > 0) {\n this._loop--;\n this.start();\n } else {\n this.stop();\n this._isFinished = true;\n }\n\n return this;\n };\n /**\r\n * Stops animation immediately leaving properties in their current values.\r\n */\n\n\n Animation.prototype.kill = function () {\n this.pause();\n this._isFinished = true;\n };\n /**\r\n * Returns indicator if this animation is finished or not\r\n *\r\n * @return Is finished?\r\n */\n\n\n Animation.prototype.isFinished = function () {\n return this._isFinished;\n };\n /**\r\n * Applies static options that can't be animated.\r\n */\n\n\n Animation.prototype.applyStaticOptions = function () {\n var _this = this;\n\n $array.each(this.staticOptions, function (options) {\n if (options.childObject) {\n options.childObject[options.property] = _this.progress == 1 ? options.to : options.from;\n } else {\n _this.object[options.property] = _this.progress == 1 ? options.to : options.from;\n }\n });\n };\n /**\r\n * Stops animation.\r\n *\r\n * When animation is stopped, the properties of the target object will remain\r\n * where they were at the moment when `stop()` was called.\r\n *\r\n * @param skipEvent Do not trigger `animationstopped` event\r\n * @return Animation\r\n */\n\n\n Animation.prototype.stop = function (skipEvent) {\n this.pause();\n\n if (!skipEvent) {\n if (this.events.isEnabled(\"animationstopped\")) {\n var event_3 = {\n type: \"animationstopped\",\n target: this,\n progress: this.progress\n };\n this.events.dispatchImmediately(\"animationstopped\", event_3);\n }\n }\n\n return this;\n };\n /**\r\n * Sets current progress and updates object's numeric and color values.\r\n *\r\n * @param progress Progress (0-1)\r\n */\n\n\n Animation.prototype.setProgress = function (progress) {\n var _this = this;\n\n this._time = this.duration * progress; // just in case we call this from outside\n\n $array.each(this.animationOptions, function (options) {\n if (options.updateMethod && $type.hasValue(options.from)) {\n var value = options.updateMethod(progress, options.from, options.to);\n\n if (options.childObject) {\n options.childObject[options.property] = value;\n } else {\n _this.object[options.property] = value;\n }\n }\n });\n this.progress = progress;\n\n if (this.events.isEnabled(\"animationprogress\")) {\n var event_4 = {\n type: \"animationprogress\",\n target: this,\n progress: this.progress\n };\n this.events.dispatchImmediately(\"animationprogress\", event_4);\n }\n\n system.requestFrame();\n };\n /**\r\n * Tracks and sets progress according to time or frames.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Animation\r\n */\n\n\n Animation.prototype.update = function () {\n if (!this._pause) {\n var progress = void 0;\n this._time = $math.fitToRange(Date.now() - this._startTime, 0, this.duration);\n var timeProgress = this._time / this.duration;\n progress = this.easing(timeProgress);\n\n if (this.duration == 0 || !$type.isNumber(progress) || timeProgress >= 1) {\n progress = 1;\n }\n\n this.setProgress(progress);\n\n if ($math.round(this._time / this.duration, 6) == 1) {\n this.end();\n }\n }\n\n return this;\n };\n\n Object.defineProperty(Animation.prototype, \"delayed\", {\n /**\r\n * Returns `true` if this animation is delayed.\r\n *\r\n * @readonly\r\n * @return [description]\r\n */\n get: function get() {\n return this._delayTimeout ? true : false;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks other animations currently running on the same object and removes\r\n * overlapping options from those other animations that are contained in\r\n * this animation.\r\n *\r\n * This is needed to ensure that no two confurent animations step on each\r\n * other's toes by trying to animate the same property.\r\n */\n\n Animation.prototype.stopSameAnimations = function () {\n var _this = this; // stop animation of the same property\n // TODO make this more efficient\n // TODO don't copy the array\n\n\n $array.each($array.copy(this.object.animations), function (animation) {\n if (animation !== _this && !animation.delayed) {\n var killed_1 = [];\n $array.each(_this.animationOptions, function (newOptions) {\n $array.each(animation.animationOptions, function (oldOptions) {\n if (newOptions.property == oldOptions.property && newOptions.childObject == oldOptions.childObject) {\n killed_1.push(oldOptions);\n\n if (animation.animationOptions.length == 0) {\n animation.kill();\n }\n }\n });\n });\n $array.each(killed_1, function (oldOptions) {\n $array.remove(animation.animationOptions, oldOptions);\n });\n }\n });\n };\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n Animation.prototype.asFunction = function (field) {\n return field == \"easing\" || _super.prototype.asIs.call(this, field);\n };\n\n return Animation;\n}(BaseObjectEvents);\n\nexport { Animation };","/**\r\n * A collection of DOM-related functions.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Disposer } from \"./Disposer\";\nimport { readFrame, writeFrame } from \"./AsyncPending\";\nimport { options } from \"../Options\";\nimport * as $object from \"./Object\";\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\n/**\r\n * SVG namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var SVGNS = \"http://www.w3.org/2000/svg\";\n/**\r\n * XML namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var XMLNS = \"http://www.w3.org/2000/xmlns/\";\n/**\r\n * XLINK namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var XLINK = \"http://www.w3.org/1999/xlink\";\n/**\r\n * Function that adds a disposable event listener directly to a DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dom A DOM element to add event to\r\n * @param type Event type\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\n\nexport function addEventListener(dom, type, listener, options) {\n //@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\n //console.log(type, dom);\n dom.addEventListener(type, listener, options || false);\n return new Disposer(function () {\n dom.removeEventListener(type, listener, options || false);\n });\n}\n/**\r\n * Finds and returns an element reference using following logic:\r\n * * If we pass in an element instance, we just return it back.\r\n * * If we pass in a string, the function looks for an element with such id.\r\n * * If no element with such id is found, we grab the first element with a tag name like this.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el Element definition (reference, or id, or tag name)\r\n * @return Element reference\r\n * @todo Review this function as it seems pretty fuzzy and hacky\r\n */\n\nexport function getElement(el) {\n if ($type.isString(el)) {\n var e = document.getElementById(el);\n\n if (e == null) {\n e = document.getElementsByClassName(el)[0];\n }\n\n if (e instanceof HTMLElement) {\n return e;\n }\n } else if (el instanceof HTMLElement) {\n return el;\n }\n}\n/**\r\n * Adds a class name to an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\n\nexport function addClass(element, className) {\n if (!element) {\n return;\n }\n\n if (element.classList) {\n var classes = className.split(\" \");\n $array.each(classes, function (name) {\n element.classList.add(name);\n });\n } else {\n var currentClassName = element.getAttribute(\"class\");\n\n if (currentClassName) {\n element.setAttribute(\"class\", currentClassName.split(\" \").filter(function (item) {\n return item !== className;\n }).join(\" \") + \" \" + className);\n } else {\n element.setAttribute(\"class\", className);\n } //element.className = element.className.replace(new RegExp(\"^\" + className + \"| \" + className), \"\") + \" \" + className;\n\n }\n}\n/**\r\n * Removes a class name from an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\n\nexport function removeClass(element, className) {\n if (!element) {\n return;\n }\n\n if (element.classList) {\n element.classList.remove(className);\n } else {\n var currentClassName = element.getAttribute(\"class\");\n\n if (currentClassName) {\n element.setAttribute(\"class\", currentClassName.split(\" \").filter(function (item) {\n return item !== className;\n }).join(\" \"));\n } //element.className = element.className.replace(new RegExp(\"^\" + className + \"| \" + className), \"\");\n\n }\n}\n/**\r\n * Sets style property on DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Still needed?\r\n */\n\nexport function setStyle(element, property, value) {\n element.style[property] = value;\n}\n/**\r\n * Gets the computed style value for an element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport function getComputedStyle(element, property) {\n if (element.currentStyle) {\n return element.currentStyle[property];\n }\n\n return document.defaultView.getComputedStyle(element, null).getPropertyValue(property);\n}\n/**\r\n * Removes focus from any element by shifting focus to body.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport function blur() {\n if (document.activeElement && document.activeElement != document.body) {\n if (document.activeElement.blur) {\n document.activeElement.blur();\n } else {\n var input = document.createElement(\"button\");\n input.style.position = \"fixed\";\n input.style.top = \"0px\";\n input.style.left = \"-10000px\";\n document.body.appendChild(input);\n input.focus();\n input.blur();\n document.body.removeChild(input);\n }\n }\n}\n/**\r\n * Tries to focus the element.\r\n *\r\n * @ignore Exlude from docs\r\n * @param element Element to focus\r\n */\n\nexport function focus(element) {\n if (element instanceof HTMLElement) {\n element.focus();\n } else {\n var input = document.createElement(\"input\");\n var fo = document.createElementNS(SVGNS, \"foreignObject\");\n fo.appendChild(input);\n element.appendChild(fo);\n input.focus();\n input.disabled = true;\n fo.remove();\n }\n /*if ((element).focus != undefined) {\r\n (element).focus();\r\n }\r\n else if (element instanceof SVGSVGElement) {\r\n // Not implemented\r\n // @todo implement focus fallback\r\n }*/\n\n}\n/**\r\n * Returns markup for the element including the element tag itself.\r\n * SVG elements do not support `outerHTML` so this functions applies of\r\n * a workaround which creates a new temporary wrapper, clones element and uses\r\n * wrapper's `innerHTML`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element to get full markup for\r\n * @return Markup\r\n * @deprecated Not in use anywhere\r\n */\n\nexport function outerHTML(element) {\n if (element.outerHTML) {\n return element.outerHTML;\n } else {\n var twrap = document.createElement(\"div\");\n var tnode = element.cloneNode(true);\n twrap.appendChild(tnode);\n var content = twrap.innerHTML;\n return content;\n }\n}\n/**\r\n * Checks if element is a valid DOM node.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el Element\r\n * @return `true` if element is a valid DOM node\r\n */\n\nexport function isElement(el) {\n return el instanceof Object && el && el.nodeType === 1;\n}\n/**\r\n * Checks of element `a` contains element `b`.\r\n *\r\n * @param a Aleged ascendant\r\n * @param b Aleged descendant\r\n * @return Contains?\r\n */\n\nexport function contains(a, b) {\n var cursor = b;\n\n while (true) {\n if (a === cursor) {\n return true;\n } else if (cursor.parentNode == null) {\n // TODO better ShadowRoot detection\n if (cursor.host == null) {\n return false;\n } else {\n cursor = cursor.host;\n }\n } else {\n cursor = cursor.parentNode;\n }\n }\n}\n/**\r\n * Returns the shadow root of the element or null\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\n\nexport function getShadowRoot(a) {\n var cursor = a;\n\n while (true) {\n if (cursor.parentNode == null) {\n // TODO better ShadowRoot detection\n if (cursor.host != null) {\n return cursor;\n } else {\n return null;\n }\n } else {\n cursor = cursor.parentNode;\n }\n }\n}\n/**\r\n * Returns the root of the element (either the Document or the ShadowRoot)\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\n\nexport function getRoot(a) {\n // TODO replace with Node.prototype.getRootNode\n var owner = a.ownerDocument;\n var cursor = a;\n\n while (true) {\n if (cursor.parentNode == null) {\n // If the cursor is the document, or it is a ShadowRoot\n // TODO better ShadowRoot detection\n if (cursor === owner || cursor.host != null) {\n return cursor;\n } else {\n return null;\n }\n } else {\n cursor = cursor.parentNode;\n }\n }\n}\n/**\r\n * Gets the true target of the Event.\r\n *\r\n * This is needed to make events work with the shadow DOM.\r\n *\r\n * @param event Event\r\n * @return EventTarget\r\n */\n\nexport function eventTarget(event) {\n if (typeof event.composedPath === \"function\") {\n return event.composedPath()[0];\n } else {\n return event.target;\n }\n}\n/**\r\n * Copies attributes from one element to another.\r\n *\r\n * @ignore Exclude from docs\r\n * @param source Element to copy attributes from\r\n * @param target Element to copy attributes to\r\n */\n\nexport function copyAttributes(source, target) {\n $array.each(source.attributes, function (attr) {\n // TODO what if it's null ?\n if (attr.value != null) {\n target.setAttribute(attr.name, attr.value);\n }\n });\n}\n/**\r\n * [fixPixelPerfect description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param el Element\r\n */\n\nexport function fixPixelPerfect(el) {\n readFrame(function () {\n // sometimes IE doesn't like this\n // TODO figure out a way to remove this\n try {\n var rect = el.getBoundingClientRect();\n var left_1 = rect.left - Math.round(rect.left);\n var top_1 = rect.top - Math.round(rect.top);\n\n if (left_1 !== 0) {\n writeFrame(function () {\n el.style.left = left_1 + \"px\";\n });\n }\n\n if (top_1 !== 0) {\n writeFrame(function () {\n el.style.top = top_1 + \"px\";\n });\n }\n } catch (e) {}\n });\n}\n/**\r\n * [rootStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar rootStylesheet;\n/**\r\n * [getStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\n\nfunction getStylesheet(element) {\n if (element == null) {\n if (!$type.hasValue(rootStylesheet)) {\n // TODO use createElementNS ?\n var e = document.createElement(\"style\");\n e.type = \"text/css\";\n\n if (options.nonce != \"\") {\n e.setAttribute(\"nonce\", options.nonce);\n }\n\n document.head.appendChild(e);\n rootStylesheet = e.sheet;\n }\n\n return rootStylesheet;\n } else {\n // TODO use createElementNS ?\n var e = document.createElement(\"style\");\n e.type = \"text/css\";\n\n if (options.nonce != \"\") {\n e.setAttribute(\"nonce\", options.nonce);\n }\n\n element.appendChild(e);\n return e.sheet;\n }\n}\n/**\r\n * [makeStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param selector [description]\r\n * @return [description]\r\n */\n\n\nfunction appendStylesheet(root, selector) {\n var index = root.cssRules.length;\n root.insertRule(selector + \"{}\", index);\n return root.cssRules[index];\n}\n/**\r\n * Defines a class for a CSS rule.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\n\n\nvar StyleRule =\n/** @class */\nfunction (_super) {\n __extends(StyleRule, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param selector CSS selector\r\n * @param styles An object of style attribute - value pairs\r\n */\n\n\n function StyleRule(element, selector, styles) {\n var _this = this;\n\n var root = getStylesheet(element); // TODO test this\n\n _this = _super.call(this, function () {\n // TODO a bit hacky\n var index = $array.indexOf(root.cssRules, _this._rule);\n\n if (index === -1) {\n throw new Error(\"Could not dispose StyleRule\");\n } else {\n // TODO if it's empty remove it from the DOM ?\n root.deleteRule(index);\n }\n }) || this;\n _this._rule = appendStylesheet(root, selector);\n $object.each(styles, function (key, value) {\n _this.setStyle(key, value);\n });\n return _this;\n }\n\n Object.defineProperty(StyleRule.prototype, \"selector\", {\n /**\r\n * @return CSS selector\r\n */\n get: function get() {\n return this._rule.selectorText;\n },\n\n /**\r\n * A CSS selector text.\r\n *\r\n * E.g.: `.myClass p`\r\n *\r\n * @param selector CSS selector\r\n */\n set: function set(selector) {\n this._rule.selectorText = selector;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets the same style properties with browser-specific prefixes.\r\n *\r\n * @param name Attribute name\r\n * @param value Attribute value\r\n */\n\n StyleRule.prototype._setVendorPrefixName = function (name, value) {\n var style = this._rule.style;\n style.setProperty(\"-webkit-\" + name, value, \"\");\n style.setProperty(\"-moz-\" + name, value, \"\");\n style.setProperty(\"-ms-\" + name, value, \"\");\n style.setProperty(\"-o-\" + name, value, \"\");\n style.setProperty(name, value, \"\");\n };\n /**\r\n * Sets a value for specific style attribute.\r\n *\r\n * @param name Attribute\r\n * @param value Value\r\n */\n\n\n StyleRule.prototype.setStyle = function (name, value) {\n if (name === \"transition\") {\n this._setVendorPrefixName(name, value);\n } else {\n this._rule.style.setProperty(name, value, \"\");\n }\n };\n\n return StyleRule;\n}(Disposer);\n\nexport { StyleRule };\n/**\r\n * An internal counter for unique style ids.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar styleId = 0;\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar StyleClass =\n/** @class */\nfunction (_super) {\n __extends(StyleClass, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param styles An object of style attribute - value pairs\r\n * @param name Class name\r\n */\n\n\n function StyleClass(element, styles, name) {\n var _this = this;\n\n var className = !$type.hasValue(name) // TODO generate the classname randomly\n ? \"__style_\" + ++styleId + \"__\" : name;\n _this = _super.call(this, element, \".\" + className, styles) || this;\n _this._className = className;\n return _this;\n }\n\n Object.defineProperty(StyleClass.prototype, \"className\", {\n /**\r\n * @return Class name\r\n */\n get: function get() {\n return this._className;\n },\n\n /**\r\n * Class name.\r\n *\r\n * @param name Class name\r\n */\n set: function set(name) {\n this._className = name;\n this.selector = \".\" + name;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts the whole class to\r\n * @ignore Exclude from docs\r\n */\n\n StyleClass.prototype.toString = function () {\n return this._className;\n };\n\n return StyleClass;\n}(StyleRule);\n\nexport { StyleClass };\nexport function ready(f) {\n if (document.readyState !== \"loading\") {\n f();\n } else {\n var listener_1 = function listener_1() {\n if (document.readyState !== \"loading\") {\n document.removeEventListener(\"readystatechange\", listener_1);\n f();\n }\n };\n\n document.addEventListener(\"readystatechange\", listener_1);\n }\n}\n/**\r\n * Returns a font fmaily name for the element (directly set or\r\n * computed/inherited).\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Font family\r\n */\n\nexport function findFont(element) {\n // Check if element has styles set\n var font = getComputedStyle(element, \"font-family\");\n\n if (!font) {\n // Completely transparent. Look for a parent\n var parent_1 = element.parentElement || element.parentNode;\n\n if (parent_1) {\n return findFont(parent_1);\n } else {\n return undefined;\n }\n } else {\n return font;\n }\n}\n/**\r\n * Returns a font fmaily name for the element (directly set or\r\n * computed/inherited).\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Font family\r\n */\n\nexport function findFontSize(element) {\n // Check if element has styles set\n var font = getComputedStyle(element, \"font-size\");\n\n if (!font) {\n // Completely transparent. Look for a parent\n var parent_2 = element.parentElement || element.parentNode;\n\n if (parent_2) {\n return findFontSize(parent_2);\n } else {\n return undefined;\n }\n } else {\n return font;\n }\n}\n/**\r\n * Checks whether element is not visible, whether directly or via its\r\n * ascendants.\r\n *\r\n * @param element Target element\r\n * @return Hidden?\r\n */\n\nexport function isHidden(element) {\n return element.offsetParent === null;\n}\n/**\r\n * Checks wthether element is in the current viewport.\r\n *\r\n * @since 2.5.5\r\n * @param el Element\r\n * @return Within viewport?\r\n */\n\nexport function isElementInViewport(el, viewportTarget) {\n // Get position data of the element\n var rect = el.getBoundingClientRect(); // Convert to array\n\n var targets = $type.isArray(viewportTarget) ? viewportTarget : viewportTarget ? [viewportTarget] : []; // Should we measure against specific viewport element?\n\n if (targets.length) {\n for (var i = 0; i < targets.length; i++) {\n var target = targets[i]; // Check if viewport itself is visible\n\n if (!isElementInViewport(target)) {\n return false;\n } // Check if element is visible within the viewport\n\n\n var viewportRect = target.getBoundingClientRect();\n\n if (rect.top >= 0 && rect.left >= 0 && rect.top <= viewportRect.top + viewportRect.height && rect.left <= viewportRect.left + viewportRect.width) {\n return true;\n }\n }\n\n return false;\n }\n\n return rect.top >= 0 && rect.left >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth);\n}","/**\r\n * [[AMElement]] represents any SVG element and related functionality.\r\n */\nimport * as $dom from \"../utils/DOM\";\nimport * as $object from \"../utils/Object\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all SVG elements. Provides low-level DOM functionality.\r\n *\r\n * All visual elements extend this class.\r\n */\n\nvar AMElement =\n/** @class */\nfunction () {\n /**\r\n * Constructor creates a new element or uses the one that was passed in.\r\n *\r\n * @param element Element reference node type\r\n */\n function AMElement(element) {\n /**\r\n * Indicates if the element was already disposed.\r\n */\n this._isDisposed = false;\n /**\r\n * Current X coordinate.\r\n */\n\n this._x = 0;\n /**\r\n * Current Y coordinate.\r\n */\n\n this._y = 0;\n /**\r\n *\r\n */\n\n this._rotationY = 0;\n /**\r\n *\r\n */\n\n this._rotationX = 0;\n /**\r\n * Current rotation.\r\n */\n\n this._rotation = 0;\n /**\r\n * Current scale.\r\n */\n\n this._scale = 1;\n\n if (typeof element === \"string\") {\n this.node = document.createElementNS($dom.SVGNS, element);\n } else {\n this.node = element;\n }\n }\n /**\r\n * Removes element's node from DOM.\r\n */\n\n\n AMElement.prototype.removeNode = function () {\n if (this.node) {\n if (this.node.parentNode) {\n this.node.parentNode.removeChild(this.node);\n }\n }\n };\n\n Object.defineProperty(AMElement.prototype, \"transformString\", {\n /**\r\n * Returns `transform` attribute of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Transform attribute value\r\n */\n get: function get() {\n if (this.node) {\n return this._transformString;\n /*\r\n const value = this.node.getAttribute(\"transform\");\r\n if (value !== null) {\r\n return value;\r\n }*/\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Appply position, rotation and scale properties via elemen's `transform`\r\n * property\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n AMElement.prototype.transform = function () {\n var transfromString = \"translate(\" + this._x + \",\" + this._y + \")\";\n\n if (this._scale != 1) {\n transfromString += (transfromString ? \" \" : \"\") + \"scale(\" + this._scale + \")\";\n }\n\n if (this._rotation != 0) {\n var rotateString = \"rotate(\" + this._rotation + \")\";\n\n if (this._rotationX && this._rotationY) {\n rotateString = \"rotate(\" + this._rotation + \" \" + this._rotationX + \" \" + this._rotationY + \")\";\n }\n\n transfromString += (transfromString ? \" \" : \"\") + rotateString;\n }\n\n this._transformString = transfromString;\n this.node.setAttribute(\"transform\", transfromString);\n };\n /**\r\n * Returns bounding box of the element.\r\n *\r\n * ATTENTION: Bounding box calculations are extremely costly so should be\r\n * used sparingly and cached whenever possible.\r\n *\r\n * @return Bounding rectangle\r\n */\n\n\n AMElement.prototype.getBBox = function () {\n var bbox = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }; // FF would fail if getBBox() is called without node added to parent\n\n if (this.node && this.node.parentNode) {\n try {\n // again for ff. TODO: check if this doesn't slow down\n var svgbbox = this.node.getBBox();\n bbox.x = svgbbox.x;\n bbox.y = svgbbox.y;\n bbox.width = svgbbox.width;\n bbox.height = svgbbox.height;\n } catch (err) {}\n }\n\n return bbox;\n };\n /**\r\n * Moves the element to new coordinates.\r\n *\r\n * @param x Target X\r\n * @param y Target Y\r\n */\n\n\n AMElement.prototype.moveTo = function (point) {\n if (point) {\n var x = point.x;\n var y = point.y;\n\n if (this._x != x || this._y != y) {\n this._x = x;\n this._y = y;\n this.transform();\n }\n }\n };\n\n Object.defineProperty(AMElement.prototype, \"content\", {\n /**\r\n * Returns element's contents as SVG markup.\r\n *\r\n * @return Contents\r\n */\n get: function get() {\n // @todo Do not use `innerHTML` as this is not reliable and will not work on all browsers\n return this.node.innerHTML || \"\";\n },\n\n /**\r\n * Element's SVG contents.\r\n *\r\n * @param value Contents\r\n */\n set: function set(value) {\n // @todo Do not use `innerHTML` as this is not reliable and will not work on all browsers\n this.node.innerHTML = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"textContent\", {\n /**\r\n * @return Text contents\r\n */\n get: function get() {\n return this.node.textContent || \"\";\n },\n\n /**\r\n * Text contents of the SVG element.\r\n *\r\n * @param value Text contents\r\n */\n set: function set(value) {\n this.node.textContent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"x\", {\n /**\r\n * @return X coordinate (px)\r\n */\n get: function get() {\n return this._x;\n },\n\n /**\r\n * Element's X position in pixels.\r\n *\r\n * @param value X coordinate (px)\r\n */\n set: function set(value) {\n if (this._x != value) {\n this._x = value;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"y\", {\n /**\r\n * @return Y coordinate (px)\r\n */\n get: function get() {\n return this._y;\n },\n\n /**\r\n * Element's Y position in pixels.\r\n *\r\n * @param value Y coordinate (px)\r\n */\n set: function set(value) {\n if (this._y != value) {\n this._y = value;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"rotation\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this._rotation;\n },\n\n /**\r\n * Element's rotation in degrees.\r\n *\r\n * @param value Rotation\r\n */\n set: function set(angle) {\n if (this._rotation != angle) {\n this._rotation = angle;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"rotationX\", {\n /**\r\n * @ignore\r\n */\n get: function get() {\n return this._rotationX;\n },\n\n /**\r\n * @ignore\r\n */\n set: function set(x) {\n if (this._rotationX != x) {\n this._rotationX = x;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"rotationY\", {\n /**\r\n * @ignore\r\n */\n get: function get() {\n return this._rotationY;\n },\n\n /**\r\n * @ignore\r\n */\n set: function set(y) {\n if (this._rotationY != y) {\n this._rotationY = y;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AMElement.prototype, \"scale\", {\n /**\r\n * @return Scale\r\n */\n get: function get() {\n return this._scale;\n },\n\n /**\r\n * Element's scale where 1 is original size.\r\n *\r\n * Setting to 0.5 will reduce element's size by 50%, 2 will make element\r\n * twice as large, etc.\r\n *\r\n * @param value Scale\r\n */\n set: function set(value) {\n if (this._scale != value) {\n this._scale = value;\n this.transform();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Removes an attribute from element.\r\n *\r\n * @param attribute Attribute to remove\r\n */\n\n AMElement.prototype.removeAttr = function (attribute) {\n this.node.removeAttribute(attribute);\n };\n /**\r\n * Sets a set of attributes on a element.\r\n *\r\n * @param attributes An object with attribute names (key) and values\r\n * @return The same element\r\n */\n\n\n AMElement.prototype.attr = function (attributes) {\n var _this = this;\n\n $object.each(attributes, function (attributeName, attributeValue) {\n if (!$type.hasValue(attributeValue)) {\n _this.node.removeAttribute(attributeName);\n } else {\n // this is for performance testing\n //if(attributeValue == this.node.getAttribute(attributeName)){\n //\tconsole.log(attributeName, attributeValue)\n //}\n _this.node.setAttribute(attributeName, attributeValue);\n }\n });\n return this;\n };\n /**\r\n * Returns a value of a node attribute.\r\n *\r\n * @param attribute Attribute name\r\n * @return Attribute value\r\n */\n\n\n AMElement.prototype.getAttr = function (attribute) {\n return this.node.getAttribute(attribute);\n };\n /**\r\n * Sets a single attribute of the element's node using namesspace.\r\n *\r\n * @param ns Namespace\r\n * @param attribute Attribute\r\n * @param value Value\r\n * @return The same element\r\n */\n\n\n AMElement.prototype.attrNS = function (ns, attribute, value) {\n this.node.setAttributeNS(ns, attribute, value);\n return this;\n };\n /**\r\n * Returns a namespaced attribute value from node.\r\n *\r\n * @param ns Namespace\r\n * @param attribute Attribute\r\n * @return Attribute value\r\n */\n\n\n AMElement.prototype.getAttrNS = function (ns, attribute) {\n return this.node.getAttributeNS(ns, attribute);\n };\n /**\r\n * Removes `style` attribute from node.\r\n *\r\n * @param attribute Attribute to remove\r\n */\n\n\n AMElement.prototype.removeStyle = function (attribute) {\n // @todo Review because it's a bit messy and maybe not needed (pratically not used)\n this.node.style[attribute] = null;\n delete this.node.style[attribute];\n };\n /**\r\n * Returns style attribute value.\r\n *\r\n * @param attribute Style attribute value\r\n * @return Attribute value\r\n */\n\n\n AMElement.prototype.getStyle = function (attribute) {\n // @todo Review because it's a bit messy and maybe not needed (pratically not used)\n return this.node.style[attribute];\n };\n /**\r\n * Adds style attributes to element's node.\r\n *\r\n * @param attributes Object containing attribute: value pairs\r\n * @return The same element\r\n */\n\n\n AMElement.prototype.addStyle = function (attributes) {\n var _this = this; // @todo Review because it's a bit messy and maybe not needed (pratically not used)\n\n\n $object.each(attributes, function (attributeName, attributeValue) {\n if (!$type.hasValue(attributeValue)) {\n _this.removeStyle(attributeName);\n } else {\n _this.node.style[attributeName] = attributeValue;\n }\n });\n return this;\n };\n /**\r\n * Adds a class to element.\r\n *\r\n * @param name Class name\r\n */\n\n\n AMElement.prototype.addClass = function (name) {\n $dom.addClass(this.node, name);\n };\n /**\r\n * Removes a class from element.\r\n *\r\n * @param name Class name\r\n */\n\n\n AMElement.prototype.removeClass = function (name) {\n $dom.removeClass(this.node, name);\n };\n /**\r\n * Sets a class name on element.\r\n *\r\n * @param name Class name\r\n */\n\n\n AMElement.prototype.setClass = function (name) {\n this.node.setAttribute(\"class\", name);\n };\n /**\r\n * Removes all element's child nodes, basically leaving it empty.\r\n */\n\n\n AMElement.prototype.removeChildNodes = function () {\n // remove all children\n while (this.node.childNodes.length > 0) {\n this.node.removeChild(this.node.firstChild);\n }\n };\n /**\r\n * Was this element already been disposed?\r\n *\r\n * @return Disposed?\r\n */\n\n\n AMElement.prototype.isDisposed = function () {\n return this._isDisposed;\n };\n /**\r\n * Disposes element.\r\n */\n\n\n AMElement.prototype.dispose = function () {\n this.removeNode();\n };\n\n return AMElement;\n}();\n\nexport { AMElement };","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { AMElement } from \"./AMElement\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates an SVG `` element.\r\n *\r\n * SVG groups are used for elements that need more elements just one.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g} About `` element\r\n */\n\nvar Group =\n/** @class */\nfunction (_super) {\n __extends(Group, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param elementName Element type (should be \"g\")\r\n */\n\n\n function Group(elementName) {\n return _super.call(this, elementName) || this;\n }\n /**\r\n * Adds an element to group.\r\n *\r\n * This will manipulate DOM. `element` will be physically moved into group.\r\n *\r\n * @param element Element\r\n */\n\n\n Group.prototype.add = function (element) {\n if (element) {\n this.node.appendChild(element.node);\n }\n };\n /**\r\n * Adds an element to group.\r\n *\r\n * This will manipulate DOM. `element` will be physically moved into group.\r\n *\r\n * @param element Element\r\n */\n\n\n Group.prototype.addToBack = function (element) {\n if (element) {\n var first = this.node.childNodes[0];\n\n if (first) {\n if (first != element.node) {\n this.node.insertBefore(element.node, first);\n }\n } else {\n this.node.appendChild(element.node);\n }\n }\n };\n /**\r\n * Removes the `element` from group.\r\n *\r\n * Please note that this will not dispose the element itself, it will just\r\n * remove it from the group.\r\n *\r\n * @param element Element\r\n */\n\n\n Group.prototype.removeElement = function (element) {\n // todo: not sure about the speed, need to investigate, maybe it's faster to check if node is a child\n if (element) {\n try {\n if (element.node && element.node.parentNode == this.node) {\n this.node.removeChild(element.node);\n }\n } catch (err) {}\n }\n };\n /**\r\n * Checks if this group already has the child element added\r\n *\r\n * @param element\r\n * @return {boolean}\r\n */\n\n\n Group.prototype.hasChild = function (element) {\n for (var i = 0; i < this.node.childNodes.length; i++) {\n if (this.node.childNodes[i] == element.node) {\n return true;\n }\n }\n\n return false;\n };\n\n Object.defineProperty(Group.prototype, \"content\", {\n /**\r\n * @return SVG markup\r\n */\n get: function get() {\n return this.node.innerHTML;\n },\n\n /**\r\n * Content of the group element.\r\n *\r\n * Can be used to add a lot of proprietary SVG markup into group.\r\n *\r\n * @param value SVG markup\r\n */\n set: function set(value) {\n this.node.innerHTML = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Removes all children from the group.\r\n */\n\n Group.prototype.removeChildren = function () {\n if (this.node.childNodes) {\n while (this.node.childNodes.length > 0) {\n var childNode = this.node.firstChild;\n\n if (childNode && childNode.parentNode) {\n childNode.parentNode.removeChild(childNode);\n }\n }\n }\n };\n\n return Group;\n}(AMElement);\n\nexport { Group };","/**\r\n * This module contains a version of ColorSet that can (and should) be used for\r\n * coloring UI elements.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { registry } from \"../Registry\";\nimport { color } from \"./Color\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This module contains a version of ColorSet that can (and should) be used for\r\n * coloring UI elements.\r\n *\r\n * The main difference from the basic [[ColorSet]] is that instead of sequenced\r\n * colors, it uses a concept of named colors.\r\n *\r\n * This way, every element in the UI can extract an exact color theme author\r\n * meant for the specific purpose, like strokes, backgrounds, etc.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\n\nvar InterfaceColorSet =\n/** @class */\nfunction (_super) {\n __extends(InterfaceColorSet, _super);\n /**\r\n * Constructor\r\n */\n\n\n function InterfaceColorSet() {\n var _this = _super.call(this) || this;\n /**\r\n * Maps the list of purposes (like \"stroke\") to an index of color of the\r\n * color set.\r\n */\n\n\n _this._purposes = {\n stroke: color(\"#e5e5e5\"),\n fill: color(\"#f3f3f3\"),\n primaryButton: color(\"#6794dc\"),\n primaryButtonHover: color(\"#6771dc\"),\n primaryButtonDown: color(\"#68dc75\"),\n primaryButtonActive: color(\"#68dc75\"),\n primaryButtonText: color(\"#FFFFFF\"),\n primaryButtonStroke: color(\"#FFFFFF\"),\n secondaryButton: color(\"#d9d9d9\"),\n secondaryButtonHover: color(\"#d9d9d9\").brighten(-0.25),\n secondaryButtonDown: color(\"#d9d9d9\").brighten(-0.35),\n secondaryButtonActive: color(\"#d9d9d9\").brighten(0.35),\n secondaryButtonText: color(\"#000000\"),\n secondaryButtonStroke: color(\"#FFFFFF\"),\n grid: color(\"#000000\"),\n background: color(\"#ffffff\"),\n alternativeBackground: color(\"#000000\"),\n text: color(\"#000000\"),\n alternativeText: color(\"#FFFFFF\"),\n disabledBackground: color(\"#999999\"),\n positive: color(\"#67dc75\"),\n negative: color(\"#dc6788\")\n };\n _this.className = \"InterfaceColorSet\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n InterfaceColorSet.prototype.debug = function () {};\n /**\r\n * Returns a color to be used for the specific purpose.\r\n *\r\n * ```TypeScript\r\n * let uicolors = new am4core.InterfaceColorSet();\r\n * console.log(uicolors.getFor(\"stroke\"));\r\n * ```\r\n * ```JavaScript\r\n * var uicolors = new am4core.InterfaceColorSet();\r\n * console.log(uicolors.getFor(\"stroke\"));\r\n * ```\r\n *\r\n * @param purpose Color use purpuse\r\n * @return Color\r\n */\n\n\n InterfaceColorSet.prototype.getFor = function (purpose) {\n return this._purposes[purpose];\n };\n /**\r\n * Sets color to be used for the specific purpose.\r\n *\r\n * @param purpose Color use purpose\r\n * @param color Color\r\n */\n\n\n InterfaceColorSet.prototype.setFor = function (purpose, color) {\n this._purposes[purpose] = color;\n };\n\n return InterfaceColorSet;\n}(BaseObject);\n\nexport { InterfaceColorSet };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"InterfaceColorSet\"] = InterfaceColorSet;","import { StyleRule } from \"../utils/DOM\";\nimport { Dictionary } from \"../utils/Dictionary\";\nimport { MultiDisposer, CounterDisposer } from \"../utils/Disposer\";\nimport { InterfaceColorSet } from \"../utils/InterfaceColorSet\";\nvar rules = new Dictionary();\n/**\r\n * Default CSS for Popup.\r\n *\r\n * @ignore Exclude from docs\r\n * @param prefix Prefix for CSS classes\r\n * @return Disposer for the CSS definition\r\n */\n\nexport default function (element, prefix) {\n if (!prefix) {\n prefix = \"ampopup\";\n }\n\n var cs = new InterfaceColorSet();\n var fg = cs.getFor(\"text\");\n var bg = cs.getFor(\"background\");\n bg.alpha = 0.8;\n var abg = cs.getFor(\"alternativeBackground\");\n abg.alpha = 0.05;\n var counter = rules.insertKeyIfEmpty(prefix, function () {\n var disposer = new MultiDisposer([new StyleRule(element, \".\" + prefix, {\n //\"width\": \"100%\",\n //\"height\": \"100%\",\n \"overflow\": \"visible\",\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"left\": \"0\",\n \"z-index\": \"2000\"\n }), new StyleRule(element, \".\" + prefix + \"-curtain\", {\n \"width\": \"100%\",\n \"height\": \"100%\",\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"left\": \"0\",\n \"z-index\": \"2001\",\n \"background-color\": bg.hex,\n \"opacity\": \"0.5\"\n }), new StyleRule(element, \".\" + prefix + \"-header\", {\n \"display\": \"block\",\n \"width\": \"100%\",\n \"min-height\": \"1.8em\",\n \"background\": abg.rgba\n }), new StyleRule(element, \".\" + prefix + \"-title\", {\n \"font-weight\": \"bold\",\n \"font-size\": \"110%\",\n \"padding\": \"0.5em 1.2em 0.5em 1em\"\n }), new StyleRule(element, \".\" + prefix + \"-content\", {\n /*\"width\": \"100%\",\r\n \"height\": \"100%\",*/\n // \"padding\": \"2em 1em 1em 1em\",\n \"background\": bg.hex,\n \"background-color\": bg.rgba,\n \"color\": fg.hex,\n \"display\": \"inline-block\",\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"left\": \"0\",\n \"max-width\": \"90%\",\n \"max-height\": \"90%\",\n \"overflow\": \"auto\",\n \"z-index\": \"2002\"\n }), new StyleRule(element, \".\" + prefix + \"-inside\", {\n \"padding\": \"1em\"\n }), new StyleRule(element, \".\" + prefix + \"-close\", {\n \"display\": \"block\",\n \"position\": \"absolute\",\n \"top\": \"0.3em\",\n \"right\": \"0.3em\",\n \"background-color\": \"rgb(100, 100, 100)\",\n \"background\": \"rgba(100, 100, 100, 0.1) url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmVyc2lvbj0iMSIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQ0NS4yIDEwOS4ybC00Mi40LTQyLjRMMjU2IDIxMy42IDEwOS4yIDY2LjhsLTQyLjQgNDIuNEwyMTMuNiAyNTYgNjYuOCA0MDIuOGw0Mi40IDQyLjRMMjU2IDI5OC40bDE0Ni44IDE0Ni44IDQyLjQtNDIuNEwyOTguNCAyNTYiLz48L3N2Zz4=) no-repeat center\",\n \"background-size\": \"80%\",\n \"width\": \"1.2em\",\n \"height\": \"1.2em\",\n \"cursor\": \"pointer\"\n })]);\n return new CounterDisposer(function () {\n rules.removeKey(prefix);\n disposer.dispose();\n });\n });\n return counter.increment();\n}","import { __extends } from \"tslib\";\nimport { TargetedEventDispatcher } from \"../utils/EventDispatcher\";\nimport { MultiDisposer, CounterDisposer } from \"../utils/Disposer\";\n/**\r\n * Represents an Event Dispatcher for [[InteractionObject]].\r\n *\r\n * Besides regular [[EventDispatcher]] functionality it adds new events with\r\n * direct application to DOM nodes. Primarily used to handle keyboard events,\r\n * but can turn into something else moving forward.\r\n */\n\nvar InteractionObjectEventDispatcher =\n/** @class */\nfunction (_super) {\n __extends(InteractionObjectEventDispatcher, _super);\n\n function InteractionObjectEventDispatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Holds a list of Disposers for DOM events added.\r\n */\n\n\n _this._domEvents = {};\n return _this;\n }\n /**\r\n * Adds a DOM event and returns Disposer.\r\n *\r\n * @return Disposer\r\n */\n\n\n InteractionObjectEventDispatcher.prototype._addDOMEvent = function (type, key, listener, context) {\n var _this = this;\n\n if (!this._domEvents[type]) {\n var callback_1 = function callback_1(e) {\n listener.call(context, key, e);\n };\n\n this.target.element.addEventListener(type, callback_1, false);\n this._domEvents[type] = new CounterDisposer(function () {\n delete _this._domEvents[type];\n\n _this.target.element.removeEventListener(type, callback_1, false);\n });\n }\n\n return this._domEvents[type].increment();\n };\n\n InteractionObjectEventDispatcher.prototype._dispatchKeyboardEvent = function (key, ev) {\n // TODO use this.dispatchImmediately ?\n if (this.target.events.isEnabled(key)) {\n this.target.events.dispatchImmediately(key, {\n type: key,\n target: this.target,\n event: ev\n });\n }\n };\n\n InteractionObjectEventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {\n var info = _super.prototype._on.call(this, once, type, callback, context, shouldClone, dispatch);\n\n var disposers = [info.disposer];\n\n switch (type) {\n case \"hit\":\n case \"doublehit\":\n case \"rightclick\":\n case \"down\":\n case \"up\":\n this.target.clickable = true;\n break;\n\n case \"drag\":\n case \"dragstart\":\n case \"dragstop\":\n this.target.draggable = true;\n break;\n\n case \"track\":\n this.target.trackable = true;\n break;\n\n case \"resize\":\n this.target.resizable = true;\n break;\n\n case \"swipe\":\n case \"swipeleft\":\n case \"swiperight\":\n this.target.swipeable = true;\n break;\n\n case \"wheel\":\n case \"wheelup\":\n case \"wheeldown\":\n case \"wheelleft\":\n case \"wheelright\":\n this.target.wheelable = true;\n break;\n\n case \"over\":\n case \"out\":\n this.target.hoverable = true;\n break;\n\n case \"focus\":\n case \"blur\":\n case \"focusin\":\n case \"focusout\":\n this.target.focusable = true;\n break;\n\n case \"keydown\":\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\n break;\n\n case \"keyup\":\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\n break;\n\n case \"keypress\":\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\n break;\n\n case \"input\":\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\n break;\n }\n\n info.disposer = new MultiDisposer(disposers);\n return info;\n };\n\n return InteractionObjectEventDispatcher;\n}(TargetedEventDispatcher);\n\nexport { InteractionObjectEventDispatcher };","/**\r\n * Interaction Object module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { InteractionObjectEventDispatcher } from \"./InteractionObjectEvents\";\nimport { BaseObjectEvents } from \"../Base\";\nimport { List } from \"../utils/List\";\nimport { Dictionary, DictionaryDisposer } from \"../utils/Dictionary\";\nimport { getInteraction } from \"./Interaction\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * Re-exports\r\n */\n\nexport { InteractionObjectEventDispatcher };\n/**\r\n * Interaction object represents an object that is subject for any kind of\r\n * interaction with it with any input devices: mouse, touch or keyboard.\r\n *\r\n * Any DOM element can be wrapped into an Internaction object which in turn\r\n * enables attaching various interaction events to it, such as: hit, drag,\r\n * swipe, etc.\r\n *\r\n * To create an [[InteractionObject]] out of a [[Sprite]], use:\r\n * `interaction.getInteractionFromSprite(sprite: Sprite)`\r\n *\r\n * To create an [[InteractionObject]] out of a a regular element:\r\n * `interaction.getInteraction(element: HTMLElement)`\r\n */\n\nvar InteractionObject =\n/** @class */\nfunction (_super) {\n __extends(InteractionObject, _super);\n /**\r\n * Constructor\r\n */\n\n\n function InteractionObject(element) {\n var _this = _super.call(this) || this;\n /**\r\n * @ignore\r\n * An [[EventDispatcher]] instance which holds events for this object\r\n */\n\n\n _this._eventDispatcher = new InteractionObjectEventDispatcher(_this);\n /**\r\n * Collection of Disposers for various events. (so that those get disposed\r\n * when the whole InteractionObject is disposed)\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.eventDisposers = new Dictionary();\n /**\r\n * A [[Dictionary]] that holds temporarily replaced original style values for\r\n * HTML element, so that they can be restored when the functionality that\r\n * replaced them is done.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.replacedStyles = new Dictionary();\n _this._clickable = false;\n _this._contextMenuDisabled = false;\n _this._hoverable = false;\n _this._trackable = false;\n _this._draggable = false;\n _this._swipeable = false;\n _this._resizable = false;\n _this._wheelable = false;\n _this._inert = false;\n /**\r\n * Is element currently hovered?\r\n */\n\n _this._isHover = false;\n /**\r\n * Was this element hovered via pointer or is it just \"pretenting\" to be\r\n * hovered.\r\n *\r\n * @ignore\r\n */\n\n _this.isRealHover = false;\n /**\r\n * Is the element hovered by touch pointer?\r\n */\n\n _this._isHoverByTouch = false;\n /**\r\n * Has element got any pointers currently pressing down on it?\r\n */\n\n _this._isDown = false;\n /**\r\n * Does element have focus?\r\n */\n\n _this._isFocused = false;\n /**\r\n * Is element currently protected from touch interactions?\r\n */\n\n _this._isTouchProtected = false;\n /**\r\n * Options used for inertia functionality.\r\n */\n\n _this._inertiaOptions = new Dictionary();\n /**\r\n * A collection of different inertia types, currently playing out.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.inertias = new Dictionary();\n /**\r\n * Click/tap options.\r\n */\n\n _this._hitOptions = {};\n /**\r\n * Hover options.\r\n */\n\n _this._hoverOptions = {};\n /**\r\n * Swipe gesture options.\r\n */\n\n _this._swipeOptions = {};\n /**\r\n * Keyboard options.\r\n */\n\n _this._keyboardOptions = {};\n /**\r\n * Mouse options.\r\n */\n\n _this._mouseOptions = {};\n /**\r\n * Cursor options.\r\n */\n\n _this._cursorOptions = {\n \"defaultStyle\": [{\n \"property\": \"cursor\",\n \"value\": \"default\"\n }]\n };\n\n _this._disposers.push(_this._eventDispatcher);\n\n _this._element = element;\n _this.className = \"InteractionObject\";\n\n _this._disposers.push(new DictionaryDisposer(_this.inertias));\n\n _this._disposers.push(new DictionaryDisposer(_this.eventDisposers));\n\n _this.applyTheme();\n\n return _this;\n }\n\n ;\n Object.defineProperty(InteractionObject.prototype, \"events\", {\n /**\r\n * An [[EventDispatcher]] instance which holds events for this object\r\n */\n get: function get() {\n return this._eventDispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"isHover\", {\n /**\r\n * @return Hovered?\r\n */\n get: function get() {\n return this._isHover;\n },\n\n /**\r\n * Indicates if this element is currently hovered.\r\n *\r\n * @param value Hovered?\r\n */\n set: function set(value) {\n if (this.isHover != value) {\n this._isHover = value;\n\n if (value) {\n getInteraction().overObjects.moveValue(this);\n } else {\n this.isRealHover = false;\n getInteraction().overObjects.removeValue(this);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"isHoverByTouch\", {\n /**\r\n * @return Hovered?\r\n */\n get: function get() {\n return this._isHoverByTouch;\n },\n\n /**\r\n * Indicates if this element is currently hovered.\r\n *\r\n * @param value Hovered?\r\n */\n set: function set(value) {\n if (this.isHoverByTouch != value) {\n this._isHoverByTouch = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"overPointers\", {\n /**\r\n * A list of pointers currently over the element.\r\n *\r\n * @see {@link Pointer}\r\n * @return List if pointers currently hovering the element\r\n */\n get: function get() {\n if (!this._overPointers) {\n this._overPointers = new List();\n }\n\n return this._overPointers;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"isDown\", {\n /**\r\n * @return Has down pointers?\r\n */\n get: function get() {\n return this._isDown;\n },\n\n /**\r\n * Indicates if this element has currently any pointers pressing on it.\r\n *\r\n * @param value Has down pointers?\r\n */\n set: function set(value) {\n if (this.isDown != value) {\n this._isDown = value;\n\n if (value) {\n getInteraction().downObjects.moveValue(this);\n } else {\n getInteraction().downObjects.removeValue(this);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"downPointers\", {\n /**\r\n * A list of pointers currently pressing down on this element.\r\n *\r\n * @see {@link Pointer}\r\n * @return List of down pointers\r\n */\n get: function get() {\n if (!this._downPointers) {\n this._downPointers = new List();\n }\n\n return this._downPointers;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"isFocused\", {\n /**\r\n * @return Focused?\r\n */\n get: function get() {\n return this._isFocused;\n },\n\n /**\r\n * Indicates if this element is currently focused.\r\n *\r\n * @param value Focused?\r\n */\n set: function set(value) {\n if (this.isFocused != value) {\n this._isFocused = value;\n\n if (value) {\n getInteraction().focusedObject = this;\n } else {\n getInteraction().focusedObject = undefined;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"isTouchProtected\", {\n /**\r\n * @ignore\r\n * @return Touch protected?\r\n */\n get: function get() {\n return this._isTouchProtected;\n },\n\n /**\r\n * Indicates if this element is currently being protected from touch actions.\r\n *\r\n * @ignore\r\n * @param value Touch protected?\r\n */\n set: function set(value) {\n if (this._isTouchProtected != value) {\n this._isTouchProtected = value;\n\n if (value) {\n getInteraction().unprepElement(this);\n } else if (this.draggable || this.swipeable || this.trackable || this.resizable) {\n getInteraction().prepElement(this);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"clickable\", {\n /**\r\n * @return Clickable?\r\n */\n get: function get() {\n return this._clickable;\n },\n\n /**\r\n * Is element clickable? Clickable elements will generate \"hit\" events when\r\n * clicked or tapped.\r\n *\r\n * @param value Clickable?\r\n */\n set: function set(value) {\n if (this._clickable !== value) {\n this._clickable = value;\n getInteraction().processClickable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"contextMenuDisabled\", {\n /**\r\n * @return Context menu disabled?\r\n */\n get: function get() {\n return this._contextMenuDisabled;\n },\n\n /**\r\n * Should element prevent context menu to be displayed, e.g. when\r\n * right-clicked?\r\n *\r\n * @default false\r\n * @param value Context menu disabled?\r\n */\n set: function set(value) {\n if (this._contextMenuDisabled !== value) {\n this._contextMenuDisabled = value;\n getInteraction().processContextMenu(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"hoverable\", {\n /**\r\n * @return Hoverable?\r\n */\n get: function get() {\n return this._hoverable;\n },\n\n /**\r\n * Indicates if element should generate hover events.\r\n *\r\n * @param value Hoverable?\r\n */\n set: function set(value) {\n if (this._hoverable !== value) {\n this._hoverable = value;\n getInteraction().processHoverable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"trackable\", {\n /**\r\n * @return Track pointer?\r\n */\n get: function get() {\n return this._trackable;\n },\n\n /**\r\n * Indicates if pointer movement over element should be tracked.\r\n *\r\n * @param value Track pointer?\r\n */\n set: function set(value) {\n if (this._trackable !== value) {\n this._trackable = value;\n getInteraction().processTrackable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"draggable\", {\n /**\r\n * @return Draggable?\r\n */\n get: function get() {\n return this._draggable;\n },\n\n /**\r\n * Indicates if element can be dragged. (moved)\r\n *\r\n * @param value Draggable?\r\n */\n set: function set(value) {\n if (this._draggable !== value) {\n this._draggable = value;\n getInteraction().processDraggable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"swipeable\", {\n /**\r\n * @return Track swipe?\r\n */\n get: function get() {\n return this._swipeable;\n },\n\n /**\r\n * Indicates whether element should react to swipe gesture.\r\n *\r\n * @param value Track swipe?\r\n */\n set: function set(value) {\n if (this._swipeable !== value) {\n this._swipeable = value;\n getInteraction().processSwipeable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"resizable\", {\n /**\r\n * @return Resizeble?\r\n */\n get: function get() {\n return this._resizable;\n },\n\n /**\r\n * Indicates if element can be resized.\r\n *\r\n * @param value Resizeable?\r\n */\n set: function set(value) {\n if (this._resizable !== value) {\n this._resizable = value;\n getInteraction().processResizable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"wheelable\", {\n /**\r\n * @return Track wheel?\r\n */\n get: function get() {\n return this._wheelable;\n },\n\n /**\r\n * Indicates whether track moouse wheel rotation over element.\r\n *\r\n * @param value Track wheel?\r\n */\n set: function set(value) {\n if (this._wheelable !== value) {\n this._wheelable = value;\n getInteraction().processWheelable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"inert\", {\n /**\r\n * @return Inert?\r\n */\n get: function get() {\n return this._inert;\n },\n\n /**\r\n * Indicates if element is inert, i.e. if it should carry movement momentum\r\n * after it is dragged and released.\r\n *\r\n * @param value Inert?\r\n */\n set: function set(value) {\n if (this._inert !== value) {\n this._inert = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"focusable\", {\n /**\r\n * @return Focusable?\r\n */\n get: function get() {\n return this._focusable;\n },\n\n /**\r\n * Indicates if element can gain focus.\r\n *\r\n * @param value Focusable?\r\n */\n set: function set(value) {\n if (this._focusable !== value) {\n this._focusable = value;\n\n if (this._focusable && this.tabindex == -1) {\n this._tabindex = 1;\n }\n\n getInteraction().processFocusable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"tabindex\", {\n /**\r\n * @return Tab index\r\n */\n get: function get() {\n return $type.getValueDefault(this._tabindex, -1);\n },\n\n /**\r\n * Element's tab index.\r\n *\r\n * @param value Tab index\r\n */\n set: function set(value) {\n if (this._tabindex !== value) {\n this._tabindex = value;\n\n if (value > -1) {\n this.focusable = true;\n }\n\n getInteraction().processFocusable(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"element\", {\n /**\r\n * @return Element\r\n */\n get: function get() {\n return this._element;\n },\n\n /**\r\n * A DOM element associated with this element.\r\n *\r\n * @param element Element\r\n */\n set: function set(element) {\n this._element = element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"originalPosition\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Position.\r\n */\n get: function get() {\n return this._originalPosition || {\n x: 0,\n y: 0\n };\n },\n\n /**\r\n * Element's original position.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Position\r\n */\n set: function set(value) {\n this._originalPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"originalScale\", {\n /**\r\n * @return Scale\r\n */\n get: function get() {\n return $type.getValueDefault(this._originalScale, 1);\n },\n\n /**\r\n * Element's original scale.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Scale\r\n */\n set: function set(value) {\n if (this._originalScale !== value) {\n this._originalScale = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"originalAngle\", {\n /**\r\n * @return Angle\r\n */\n get: function get() {\n return $type.getValueDefault(this._originalAngle, 0);\n },\n\n /**\r\n * Element's original angle.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Angle\r\n */\n set: function set(value) {\n if (this._originalAngle !== value) {\n this._originalAngle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"inertiaOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"inertiaOptions\", this._inertiaOptions);\n } else {\n return this._inertiaOptions;\n }\n },\n\n /**\r\n * Inertia options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._inertiaOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"hitOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"hitOptions\", this._hitOptions);\n } else {\n return this._hitOptions;\n }\n },\n\n /**\r\n * Hit options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._hitOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"hoverOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"hoverOptions\", this._hoverOptions);\n } else {\n return this._hoverOptions;\n }\n },\n\n /**\r\n * Hover options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._hoverOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"swipeOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"swipeOptions\", this._swipeOptions);\n } else {\n return this._swipeOptions;\n }\n },\n\n /**\r\n * Swipe options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._swipeOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"keyboardOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"keyboardOptions\", this._keyboardOptions);\n } else {\n return this._keyboardOptions;\n }\n },\n\n /**\r\n * Keyboard options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._keyboardOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"mouseOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"mouseOptions\", this._mouseOptions);\n } else {\n return this._mouseOptions;\n }\n },\n\n /**\r\n * Mouse options.\r\n *\r\n * Enables controlling options related to the mouse, for example sensitivity\r\n * of its mouse wheel.\r\n *\r\n * E.g. the below will reduce chart's wheel-zoom speed to half its default\r\n * speed:\r\n *\r\n * ```TypeScript\r\n * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"plotContainer\": {\r\n * \"mouseOptions\": {\r\n * \"sensitivity\": 0.5\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @since 4.5.14\r\n * @param value Options\r\n */\n set: function set(value) {\n this._mouseOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(InteractionObject.prototype, \"cursorOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n if (this.sprite && this.sprite._adapterO) {\n return this.sprite._adapterO.apply(\"cursorOptions\", this._cursorOptions);\n } else {\n return this._cursorOptions;\n }\n },\n\n /**\r\n * Cursor options.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._cursorOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all properties and related assets from another object of the same\r\n * type.\r\n *\r\n * @param source Source object\r\n */\n\n InteractionObject.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.inertiaOptions = source.inertiaOptions;\n this.hitOptions = source.hitOptions;\n this.hoverOptions = source.hoverOptions;\n this.swipeOptions = source.swipeOptions;\n this.keyboardOptions = source.keyboardOptions;\n this.cursorOptions = source.cursorOptions;\n this.contextMenuDisabled = source.contextMenuDisabled;\n getInteraction().applyCursorOverStyle(this);\n };\n /**\r\n * @ignore Exclude from docs\r\n */\n\n\n InteractionObject.prototype.setEventDisposer = function (key, value, f) {\n var disposer = this.eventDisposers.getKey(key);\n\n if (value) {\n if (disposer == null) {\n this.eventDisposers.setKey(key, f());\n }\n } else {\n if (disposer != null) {\n disposer.dispose();\n this.eventDisposers.removeKey(key);\n }\n }\n };\n /**\r\n * Disposes object.\r\n */\n\n\n InteractionObject.prototype.dispose = function () {\n _super.prototype.dispose.call(this); // Remove from all interaction registries\n\n\n var interaction = getInteraction();\n interaction.overObjects.removeValue(this);\n interaction.downObjects.removeValue(this);\n interaction.trackedObjects.removeValue(this);\n interaction.transformedObjects.removeValue(this); // Unlock document wheel\n\n if (this.isHover && this.wheelable) {\n interaction.unlockWheel();\n }\n\n if (interaction.focusedObject === this) {\n interaction.focusedObject = undefined;\n }\n };\n\n return InteractionObject;\n}(BaseObjectEvents);\n\nexport { InteractionObject };","/**\r\n * Functionality related simulating of dragging of elements using keyboard.\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { getInteraction } from \"./Interaction\";\nimport { system } from \"../System\";\nimport * as $array from \"../utils/Array\";\n/**\r\n * [[InteractionKeyboardObject]] is used to simulate dragging of the `draggable`\r\n * element using keyboard arrows.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar InteractionKeyboardObject =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param io An InteractionObject\r\n */\n function InteractionKeyboardObject(io, ev) {\n /**\r\n * Indicates if this object has already been deleted. Any\r\n * destruction/disposal code should take this into account when deciding\r\n * wheter to run potentially costly disposal operations if they already have\r\n * been run.\r\n */\n this._disposed = false;\n /**\r\n * Indicates direction of current horizontal movement.\r\n *\r\n * 0 - not moving horizontally\r\n * 1 - moving right\r\n * -1 - moving left\r\n */\n\n this.directionX = 0;\n /**\r\n * Indicates direction of current vertical movement.\r\n *\r\n * 0 - not moving vertically\r\n * 1 - moving down\r\n * -1 - moving up\r\n */\n\n this.directionY = 0;\n this.interaction = io;\n this.keyboardEvent = ev;\n this._startedOn = new Date().getTime();\n getInteraction().processDragStart(io);\n system.animations.push(this);\n this.update();\n }\n /**\r\n * It's an update method which is called by the system if\r\n * [[InteractionObject]] is used as animation.\r\n *\r\n * This will update coordinates of the element based on the movement\r\n * directions.\r\n */\n\n\n InteractionKeyboardObject.prototype.update = function () {\n // Init and get settings\n var io = this.interaction;\n var speed = getInteraction().getKeyboardOption(io, \"speed\"),\n accelleration = getInteraction().getKeyboardOption(io, \"accelleration\"),\n accellerationDelay = getInteraction().getKeyboardOption(io, \"accellerationDelay\"),\n shift = {\n x: 0,\n y: 0\n }; // If SHIFT key is pressed we slash speed by half and disable accelleration\n\n if (this.keyboardEvent.shiftKey) {\n speed *= 0.5;\n accelleration = 1;\n } // If CTRL is pressed we increase speed by x2\n else if (this.keyboardEvent.ctrlKey) {\n speed *= 2;\n } // Get elapsed time\n\n\n var ms = new Date().getTime() - this._startedOn;\n\n var accelleratedMs = ms - accellerationDelay; // Add accellerated movement\n\n if (accelleration > 0 && accelleratedMs > 0) {\n var accellerationFactor = ms / accellerationDelay;\n ms = accellerationDelay;\n shift.x += this.directionX * (speed * accelleration * accellerationFactor * accelleratedMs);\n shift.y += this.directionY * (speed * accelleration * accellerationFactor * accelleratedMs);\n } // Calculate position\n\n\n shift.x += this.directionX * (speed * ms);\n shift.y += this.directionY * (speed * ms); // Simulate move on Interaction\n\n getInteraction().handleTransformMove(io, shift, {\n x: 0,\n y: 0\n }, this.keyboardEvent, true, false);\n };\n /**\r\n * Returns if this object has been already been disposed.\r\n *\r\n * @return Is disposed?\r\n */\n\n\n InteractionKeyboardObject.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Disposes this object. Removes from system animations.\r\n */\n\n\n InteractionKeyboardObject.prototype.dispose = function () {\n if (!this._disposed) {\n getInteraction().processDragStop(this.interaction);\n $array.remove(system.animations, this);\n }\n };\n\n return InteractionKeyboardObject;\n}();\n\nexport { InteractionKeyboardObject };","/**\r\n * Functionality related to inertia\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { getInteraction } from \"./Interaction\";\nimport { AnimationDisposer } from \"../utils/Animation\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * A point of inertia is to simulate gradually drecreasing motion even after\r\n * actual interaction by user, that caused it, has already ended.\r\n *\r\n * [[Inertia]] object will continue triggering the same [[Sprite]] handlers\r\n * as if the interaction was still happening, gradually reducing\r\n * shift/angle/scale values until full stop.\r\n *\r\n * Basically, from the target element's point of view, while inertia is\r\n * playing, it is still being interacted with by user, albeit with a\r\n * decreasing speed.\r\n */\n\nvar Inertia =\n/** @class */\nfunction (_super) {\n __extends(Inertia, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Inertia(interaction, type, point, startPoint) {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * List of animations currently playing.\r\n */\n\n\n _this.animations = [];\n _this.className = \"Inertia\";\n _this.interaction = interaction;\n _this.type = type;\n _this.point = point;\n _this.startPoint = startPoint; // Make animations disposable\n\n _this._disposers.push(new AnimationDisposer(_this.animations));\n\n return _this;\n }\n\n Object.defineProperty(Inertia.prototype, \"x\", {\n /**\r\n * Returns current X coordinate.\r\n *\r\n * @return X\r\n */\n get: function get() {\n return this.point.x;\n },\n\n /**\r\n * Sets current X coordinate.\r\n *\r\n * Will trigger \"drag\" event for the target element.\r\n *\r\n * @param value X\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n this.point.x = value;\n this.handleMove();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Inertia.prototype, \"y\", {\n /**\r\n * Returns current Y coordinate.\r\n *\r\n * @return Y\r\n */\n get: function get() {\n return this.point.y;\n },\n\n /**\r\n * Sets current Y coordinate.\r\n *\r\n * Will trigger \"drag\" event for the target element.\r\n *\r\n * @param value Y\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n this.point.y = value;\n this.handleMove();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Simulates dragging of element.\r\n */\n\n Inertia.prototype.handleMove = function () {\n // Prepare {InteractionEvent} object\n if (this.interaction.events.isEnabled(\"drag\")) {\n var imev = {\n type: \"drag\",\n target: this.interaction,\n shift: {\n x: this.x - this.startPoint.x,\n y: this.y - this.startPoint.y\n },\n startPoint: this.startPoint,\n point: {\n x: this.x,\n y: this.y\n },\n touch: false\n }; // Call handler\n\n this.interaction.events.dispatchImmediately(\"drag\", imev);\n }\n };\n /**\r\n * Finishes up the inertia animation. (removes reference to this animation\r\n * object)\r\n */\n\n\n Inertia.prototype.done = function () {\n // Remove inertia animation from the object\n this.interaction.inertias.removeKey(this.type); // Move ended\n\n if (this.type === \"move\") {\n getInteraction().processDragStop(this.interaction);\n } // Destroy\n\n\n this.dispose();\n };\n\n return Inertia;\n}(BaseObject);\n\nexport { Inertia };","/**\r\n * A collection of keyboard-related utilities accessible via `keyboard`\r\n * instance.\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $type from \"./Type\";\n/**\r\n * A class that represents collection of keyboard-related utilities.\r\n *\r\n * Do not instantiate this class directly, but rather use `keyboard` variable.\r\n */\n\nvar Keyboard =\n/** @class */\nfunction () {\n function Keyboard() {}\n /**\r\n * Returns a named key based on information contained in the event or\r\n * \"other\".\r\n *\r\n * @param ev A keyboard event\r\n * @return Keyboard named key\r\n */\n\n\n Keyboard.prototype.getEventKey = function (ev) {\n // Get the key code\n var code = ev.keyCode || ev.which,\n key; // Map to internal key\n\n switch (code) {\n case 38:\n key = \"up\";\n break;\n\n case 40:\n key = \"down\";\n break;\n\n case 37:\n key = \"left\";\n break;\n\n case 39:\n key = \"right\";\n break;\n\n case 13:\n key = \"enter\";\n break;\n\n case 27:\n key = \"esc\";\n break;\n\n case 36:\n key = \"home\";\n break;\n\n case 35:\n key = \"end\";\n break;\n\n case 9:\n key = \"tab\";\n break;\n\n case 17:\n key = \"ctrl\";\n break;\n\n case 18:\n key = \"alt\";\n break;\n\n case 16:\n key = \"shift\";\n break;\n\n case 32:\n key = \"space\";\n break;\n\n case 36:\n key = \"home\";\n break;\n\n case 35:\n key = \"end\";\n break;\n\n case 33:\n key = \"pgup\";\n break;\n\n case 34:\n key = \"pgdn\";\n break;\n\n case 45:\n key = \"ins\";\n break;\n\n case 46:\n key = \"del\";\n break;\n\n case 107:\n key = \"plus\";\n break;\n\n case 109:\n key = \"minus\";\n break;\n\n default:\n key = \"other\";\n break;\n }\n\n return key;\n };\n /**\r\n * Checks if event key is one or more of the selected named keys.\r\n *\r\n * @param ev Keyboard event\r\n * @param key Named key or array of keys\r\n * @return Is event key one of the list?\r\n */\n\n\n Keyboard.prototype.isKey = function (ev, key) {\n var eventKey = this.getEventKey(ev);\n\n if ($type.isString(key)) {\n key = [key];\n }\n\n return key.indexOf(eventKey) !== -1;\n };\n /**\r\n * Returns `true` if shift key was presset at the moment of the event.\r\n *\r\n * @param ev Event object\r\n * @return Was shift pressed?\r\n */\n\n\n Keyboard.prototype.shiftKey = function (ev) {\n return ev.shiftKey;\n };\n /**\r\n * Returns `true` if ctrl key was presset at the moment of the event.\r\n *\r\n * @param ev Event object\r\n * @return Was ctrl pressed?\r\n */\n\n\n Keyboard.prototype.ctrlKey = function (ev) {\n return ev.ctrlKey;\n };\n /**\r\n * Returns `true` if alt key was presset at the moment of the event\r\n * @param ev Event object\r\n * @return Was alt pressed?\r\n */\n\n\n Keyboard.prototype.altKey = function (ev) {\n return ev.altKey;\n };\n /**\r\n * Returns `true` if meta key was presset at the moment of the event\r\n * @param ev Event object\r\n * @return Was meta pressed?\r\n */\n\n\n Keyboard.prototype.metaKey = function (ev) {\n return ev.metaKey;\n };\n\n return Keyboard;\n}();\n\nexport { Keyboard };\n/**\r\n * A single [[Keyboard]] instance to be reused across all elements so that\r\n * they don't need to instantiate their own.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var keyboard = new Keyboard();","import * as $type from \"../utils/Type\";\n/**\r\n * Maps time period names to their numeric representations in milliseconds.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var timeUnitDurations = {\n millisecond: 1,\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 86400000,\n week: 604800000,\n month: 2592000000,\n year: 31536000000\n};\n/**\r\n * Returns the next time unit that goes after source `unit`.\r\n *\r\n * E.g. \"hour\" is the next unit after \"minute\", etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Source time unit\r\n * @return Next time unit\r\n */\n\nexport function getNextUnit(unit) {\n switch (unit) {\n case \"year\":\n return;\n\n case \"month\":\n return \"year\";\n\n case \"week\":\n return \"month\";\n\n case \"day\":\n return \"month\";\n // not a mistake\n\n case \"hour\":\n return \"day\";\n\n case \"minute\":\n return \"hour\";\n\n case \"second\":\n return \"minute\";\n\n case \"millisecond\":\n return \"second\";\n }\n}\n/**\r\n * Returns number of milliseconds in the `count` of time `unit`.\r\n *\r\n * Available units: \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\",\r\n * \"month\", and \"year\".\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Time unit\r\n * @param count Number of units\r\n * @return Milliseconds\r\n */\n\nexport function getDuration(unit, count) {\n if (!$type.hasValue(count)) {\n count = 1;\n }\n\n return timeUnitDurations[unit] * count;\n}\n/**\r\n * Returns current `Date` object.\r\n *\r\n * @return Current date\r\n */\n\nexport function now() {\n return new Date();\n}\n/**\r\n * Returns current timestamp.\r\n *\r\n * @return Current timestamp\r\n */\n\nexport function getTime() {\n return now().getTime();\n}\n/**\r\n * Returns a copy of the `Date` object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @return Copy\r\n */\n\nexport function copy(date) {\n return new Date(date.getTime()); // todo: check if this is ok. new Date(date) used to strip milliseconds on FF in v3\n}\n/**\r\n * Checks if the `unit` part of two `Date` objects do not match. Two dates\r\n * represent a \"range\" of time, rather the same time date.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dateOne Date 1\r\n * @param dateTwo Date 2\r\n * @param unit Time unit to check\r\n * @return Range?\r\n */\n\nexport function checkChange(dateOne, dateTwo, unit, utc) {\n dateOne = new Date(dateOne.getTime());\n dateTwo = new Date(dateTwo.getTime());\n var timeZoneOffset1 = 0;\n var timeZoneOffset2 = 0;\n\n if (!utc && unit != \"millisecond\") {\n timeZoneOffset1 = dateOne.getTimezoneOffset();\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() - timeZoneOffset1);\n timeZoneOffset2 = dateTwo.getTimezoneOffset();\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() - timeZoneOffset2);\n }\n\n var changed = false;\n\n switch (unit) {\n case \"year\":\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\n changed = true;\n }\n\n break;\n\n case \"month\":\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\n changed = true;\n } else if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\n changed = true;\n }\n\n break;\n\n case \"day\":\n if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\n changed = true;\n } else if (dateOne.getUTCDate() != dateTwo.getUTCDate()) {\n changed = true;\n }\n\n break;\n\n case \"hour\":\n if (dateOne.getUTCHours() != dateTwo.getUTCHours()) {\n changed = true;\n }\n\n break;\n\n case \"minute\":\n if (dateOne.getUTCMinutes() != dateTwo.getUTCMinutes()) {\n changed = true;\n }\n\n break;\n\n case \"second\":\n if (dateOne.getUTCSeconds() != dateTwo.getUTCSeconds()) {\n changed = true;\n }\n\n break;\n\n case \"millisecond\":\n if (dateOne.getTime() != dateTwo.getTime()) {\n changed = true;\n }\n\n break;\n }\n\n if (changed) {\n return true;\n }\n\n var nextUnit = getNextUnit(unit);\n\n if (nextUnit) {\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() + timeZoneOffset1);\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() + timeZoneOffset2);\n return checkChange(dateOne, dateTwo, nextUnit, utc);\n } else {\n return false;\n }\n}\n/**\r\n * Adds `count` of time `unit` to the source date. Returns a modified `Date` object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to add\r\n * @return Modified date\r\n */\n\nexport function add(date, unit, count, utc) {\n var timeZoneOffset = 0;\n\n if (!utc && unit != \"millisecond\") {\n timeZoneOffset = date.getTimezoneOffset();\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\n }\n\n switch (unit) {\n case \"day\":\n var day = date.getUTCDate();\n date.setUTCDate(day + count);\n break;\n\n case \"second\":\n var seconds = date.getUTCSeconds();\n date.setUTCSeconds(seconds + count);\n break;\n\n case \"millisecond\":\n var milliseconds = date.getUTCMilliseconds();\n date.setUTCMilliseconds(milliseconds + count);\n break;\n\n case \"hour\":\n var hours = date.getUTCHours();\n date.setUTCHours(hours + count);\n break;\n\n case \"minute\":\n var minutes = date.getUTCMinutes();\n date.setUTCMinutes(minutes + count);\n break;\n\n case \"year\":\n var year = date.getUTCFullYear();\n date.setUTCFullYear(year + count);\n break;\n\n case \"month\":\n var month = date.getUTCMonth();\n date.setUTCMonth(month + count);\n break;\n\n case \"week\":\n var wday = date.getUTCDate();\n date.setUTCDate(wday + count * 7);\n break;\n }\n\n if (!utc && unit != \"millisecond\") {\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\n\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\n var newTimeZoneOffset = date.getTimezoneOffset();\n\n if (newTimeZoneOffset != timeZoneOffset) {\n var diff = newTimeZoneOffset - timeZoneOffset;\n date.setUTCMinutes(date.getUTCMinutes() + diff); // solves issues if newe time falls back to old time zone\n\n if (date.getTimezoneOffset() != newTimeZoneOffset) {\n date.setUTCMinutes(date.getUTCMinutes() - diff);\n }\n }\n }\n }\n\n return date;\n}\n/**\r\n * \"Rounds\" the date to specific time unit.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to round to\r\n * @param firstDateOfWeek First day of week\r\n * @param roundMinutes Minutes to round to (some timezones use non-whole hour)\r\n * @param timezone Use specific named timezone when rounding\r\n * @return New date\r\n */\n\nexport function round(date, unit, count, firstDateOfWeek, utc, firstDate, roundMinutes, timezone) {\n if (roundMinutes === void 0) {\n roundMinutes = 0;\n }\n\n if (!$type.isNumber(count)) {\n count = 1;\n }\n\n var timeZoneOffset = 0;\n\n if (timezone && [\"day\", \"month\", \"week\", \"year\"].indexOf(unit) != -1) {\n date = setTimezone(date, timezone);\n }\n\n if (!utc && unit != \"millisecond\") {\n timeZoneOffset = date.getTimezoneOffset();\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\n }\n\n switch (unit) {\n case \"day\":\n var day = date.getUTCDate();\n\n if (count > 1) {\n //\tday = Math.floor(day / count) * count;\n if (firstDate) {\n firstDate = round(firstDate, \"day\", 1);\n var difference = date.getTime() - firstDate.getTime();\n var unitCount = Math.floor(difference / getDuration(\"day\") / count);\n var duration = getDuration(\"day\", unitCount * count);\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\n }\n } else {\n date.setUTCDate(day);\n }\n\n date.setUTCHours(0, 0, 0, 0);\n break;\n\n case \"second\":\n var seconds = date.getUTCSeconds();\n\n if (count > 1) {\n seconds = Math.floor(seconds / count) * count;\n }\n\n date.setUTCSeconds(seconds, 0);\n break;\n\n case \"millisecond\":\n if (count == 1) {\n return date; // much better for perf!\n }\n\n var milliseconds = date.getUTCMilliseconds();\n milliseconds = Math.floor(milliseconds / count) * count;\n date.setUTCMilliseconds(milliseconds);\n break;\n\n case \"hour\":\n var hours = date.getUTCHours();\n\n if (count > 1) {\n hours = Math.floor(hours / count) * count;\n }\n\n date.setUTCHours(hours, roundMinutes, 0, 0);\n break;\n\n case \"minute\":\n var minutes = date.getUTCMinutes();\n milliseconds = date.getUTCMilliseconds();\n\n if (count > 1) {\n minutes = Math.floor(minutes / count) * count;\n }\n\n date.setUTCMinutes(minutes, 0, 0);\n break;\n\n case \"month\":\n var month = date.getUTCMonth();\n\n if (count > 1) {\n month = Math.floor(month / count) * count;\n }\n\n date.setUTCMonth(month, 1);\n date.setUTCHours(0, roundMinutes, 0, 0);\n break;\n\n case \"year\":\n var year = date.getUTCFullYear();\n\n if (count > 1) {\n year = Math.floor(year / count) * count;\n }\n\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, roundMinutes, 0, 0); //let nonUTCDateY = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n //timeZoneOffset = nonUTCDateY.getTimezoneOffset();\n\n break;\n\n case \"week\":\n var wday = date.getUTCDate();\n var weekDay = date.getUTCDay();\n\n if (!$type.isNumber(firstDateOfWeek)) {\n firstDateOfWeek = 1;\n } // todo: rounding when count is not 1\n\n\n if (weekDay >= firstDateOfWeek) {\n wday = wday - weekDay + firstDateOfWeek;\n } else {\n wday = wday - (7 + weekDay) + firstDateOfWeek;\n }\n\n date.setUTCDate(wday);\n date.setUTCHours(0, roundMinutes, 0, 0);\n break;\n }\n\n if (!utc && unit != \"millisecond\") {\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\n\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\n var newTimeZoneOffset = date.getTimezoneOffset();\n\n if (newTimeZoneOffset != timeZoneOffset) {\n var diff = newTimeZoneOffset - timeZoneOffset;\n date.setUTCMinutes(date.getUTCMinutes() + diff);\n }\n }\n }\n\n return date;\n}\n/**\r\n * Returns a new `Date` object which corresponds to the source date in a\r\n * specific timezone.\r\n *\r\n * @since 4.10.1\r\n * @param date Source date\r\n * @param timezone Timezone identifier\r\n * @return Recalculated new Date\r\n */\n\nexport function setTimezone(date, timezone) {\n var d = new Date(date.toLocaleString(\"en-US\", {\n timeZone: timezone\n }));\n return d;\n}\n/**\r\n * Returns minute fraction of the set timezone.\r\n *\r\n * @since 4.10.12\r\n * @param timezone Timezone identifier\r\n * @return Minutes\r\n */\n\nexport function getTimezoneMinutes(timezone) {\n var d = new Date();\n d.setHours(0, 0, 0, 0);\n var d2 = setTimezone(d, timezone);\n return d2.getMinutes();\n}","/**\r\n * Interaction manages all aspects of user interaction - mouse move,\r\n * click, hover, drag events, touch gestures.\r\n *\r\n * [[InteractionObject]] elements that want to use certain events, must attach event\r\n * listeners to Interaction instance.\r\n *\r\n * Interaction itself will not modify [[InteractionObject]] elements, it will be up to\r\n * those elements to handle interaction information received via event triggers.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"../Base\";\nimport { List } from \"../utils/List\";\nimport { Animation } from \"../utils/Animation\";\nimport { MultiDisposer } from \"../utils/Disposer\";\nimport { InteractionObject } from \"./InteractionObject\";\nimport { InteractionKeyboardObject } from \"./InteractionKeyboardObject\";\nimport { Dictionary } from \"../utils/Dictionary\";\nimport { Inertia } from \"./Inertia\";\nimport { addEventListener } from \"../utils/DOM\";\nimport { keyboard } from \"../utils/Keyboard\";\nimport { system } from \"./../System\";\nimport { options } from \"./../Options\";\nimport * as $ease from \"../utils/Ease\";\nimport * as $math from \"../utils/Math\";\nimport * as $array from \"../utils/Array\";\nimport * as $dom from \"../utils/DOM\";\nimport * as $iter from \"../utils/Iterator\";\nimport * as $type from \"../utils/Type\";\nimport * as $time from \"../utils/Time\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n* Interaction manages all aspects of user interaction - mouse move,\r\n* click, hover, drag events, touch gestures.\r\n*\r\n* [[InteractionObject]] elements that want to use certain events, must attach event\r\n* listeners to Interaction instance.\r\n*\r\n* Interaction itself will not modify [[InteractionObject]] elements, it will be up to\r\n* those elements to handle interaction information received via event triggers.\r\n*\r\n* @see {@link IInteractionEvents} for a list of available events\r\n*/\n\nvar Interaction =\n/** @class */\nfunction (_super) {\n __extends(Interaction, _super);\n /**\r\n * Constructor. Sets up universal document-wide move events to handle stuff\r\n * outside particular chart container.\r\n */\n\n\n function Interaction() {\n var _this = // Call super\n _super.call(this) || this;\n /**\r\n * An indicator of global events were already initialized.\r\n */\n\n\n _this._globalEventsAdded = false;\n /**\r\n * Holds which mouse event listeners to use.\r\n */\n\n _this._pointerEvents = {\n \"pointerdown\": \"mousedown\",\n \"pointerup\": \"mouseup\",\n \"pointermove\": \"mousemove\",\n \"pointercancel\": \"mouseup\",\n \"pointerover\": \"mouseover\",\n \"pointerout\": \"mouseout\",\n \"wheel\": \"wheel\"\n };\n /**\r\n * Indicates if Interaction should use only \"pointer\" type events, like\r\n * \"pointermove\", available in all modern browsers, ignoring \"legacy\"\r\n * events, like \"touchmove\".\r\n */\n\n _this._usePointerEventsOnly = false;\n /**\r\n * Use only touch events (for touch only devices such as tablets and phones)\r\n */\n\n _this._useTouchEventsOnly = false;\n /**\r\n * Add special hover events. Normally, touch device tap will also simulate\r\n * hover event. On some devices (ahem iOS) we want to prevent that so that\r\n * over/out events are not duplicated.\r\n */\n\n _this._addHoverEvents = true;\n /**\r\n * Indicates if passive mode options is supported by this browser.\r\n */\n\n _this._passiveSupported = false;\n /**\r\n * Holds list of delayed events\r\n */\n\n _this._delayedEvents = {\n out: []\n };\n /**\r\n * List of objects that current have a pointer hovered over them.\r\n */\n\n _this.overObjects = new List();\n /**\r\n * List of objects that currently has a pressed pointer.\r\n */\n\n _this.downObjects = new List();\n /**\r\n * List of objects that need mouse position to be reported to them.\r\n */\n\n _this.trackedObjects = new List();\n /**\r\n * List of objects that are currently being dragged.\r\n */\n\n _this.transformedObjects = new List();\n /**\r\n * Holds all known pointers.\r\n */\n\n _this.pointers = new Dictionary();\n /**\r\n * Inertia options that need to be applied to after element drag, if it's\r\n * `inert = true`.\r\n *\r\n * This is just a default, which can and probably will be overridden by\r\n * actual elements.\r\n */\n\n _this.inertiaOptions = new Dictionary();\n /**\r\n * Default options for click events. These can be overridden in\r\n * [[InteractionObject]].\r\n */\n\n _this.hitOptions = {\n \"doubleHitTime\": 300,\n //\"delayFirstHit\": false,\n \"hitTolerance\": 10,\n \"noFocus\": true\n };\n /**\r\n * Default options for hover events. These can be overridden in\r\n * [[InteractionObject]].\r\n */\n\n _this.hoverOptions = {\n \"touchOutBehavior\": \"leave\",\n \"touchOutDelay\": 1000\n };\n /**\r\n * Default options for detecting a swipe gesture. These can be overridden in\r\n * [[InteractionObject]].\r\n */\n\n _this.swipeOptions = {\n \"time\": 500,\n \"verticalThreshold\": 75,\n \"horizontalThreshold\": 30\n };\n /**\r\n * Default options for keyboard operations. These can be overridden in\r\n * [[InteractionObject]].\r\n */\n\n _this.keyboardOptions = {\n \"speed\": 0.1,\n \"accelleration\": 1.2,\n \"accellerationDelay\": 2000\n };\n /**\r\n * Default options for keyboard operations. These can be overridden in\r\n * [[InteractionObject]].\r\n *\r\n * @since 4.5.14\r\n */\n\n _this.mouseOptions = {\n \"sensitivity\": 1\n }; // Set class name\n\n _this.className = \"Interaction\"; // Create InteractionObject for \n\n _this.body = _this.getInteraction(document.body);\n\n _this._disposers.push(_this.body); // Detect browser capabilities and determine what event listeners to use\n\n\n if (window.hasOwnProperty(\"PointerEvent\")) {\n // IE10+/Edge without touch controls enabled\n _this._pointerEvents.pointerdown = \"pointerdown\";\n _this._pointerEvents.pointerup = \"pointerup\";\n _this._pointerEvents.pointermove = \"pointermove\";\n _this._pointerEvents.pointercancel = \"pointercancel\";\n _this._pointerEvents.pointerover = \"pointerover\";\n _this._pointerEvents.pointerout = \"pointerout\"; //this._usePointerEventsOnly = true;\n } else if (window.hasOwnProperty(\"MSPointerEvent\")) {\n // IE9\n _this._pointerEvents.pointerdown = \"MSPointerDown\";\n _this._pointerEvents.pointerup = \"MSPointerUp\";\n _this._pointerEvents.pointermove = \"MSPointerMove\";\n _this._pointerEvents.pointercancel = \"MSPointerUp\";\n _this._pointerEvents.pointerover = \"MSPointerOver\";\n _this._pointerEvents.pointerout = \"MSPointerOut\"; //this._usePointerEventsOnly = true;\n } else if (typeof matchMedia !== \"undefined\" && matchMedia('(pointer:fine)').matches) {\n // This is only for Safari as it does not support PointerEvent\n // Do nothing and let it use regular `mouse*` events\n // Hi Apple ;)\n // Additionally disable hover events for iOS devices\n if ('ontouchstart' in window) {\n _this._addHoverEvents = false;\n _this._useTouchEventsOnly = true;\n }\n } else if (window.navigator.userAgent.match(/MSIE /)) {\n // Oh looky, an MSIE that does not support PointerEvent. Hi granpa IE9!\n _this._usePointerEventsOnly = true;\n } else if (_this.fullFF()) {\n // Old FF, let's use regular events.\n // (Newer FFs would be detected by the PointerEvent availability check)\n _this._usePointerEventsOnly = true;\n } else {\n // Uses defaults for normal browsers\n // We also assume that this must be a touch device that does not have\n // any pointer events\n _this._useTouchEventsOnly = true;\n } // Detect if device has a mouse\n // This is turning out to be not reliable\n // @todo remove\n\n /*if (!window.navigator.msPointerEnabled && (typeof matchMedia !== \"undefined\") && !matchMedia('(pointer:fine)').matches && !this.fullFF()) {\r\n this._useTouchEventsOnly = true;\r\n }*/\n // Detect proper mouse wheel events\n\n\n if (\"onwheel\" in document.createElement(\"div\")) {\n // Modern browsers\n _this._pointerEvents.wheel = \"wheel\";\n } else if ($type.hasValue(document.onmousewheel)) {\n // Webkit and IE support at least \"mousewheel\"\n _this._pointerEvents.wheel = \"mousewheel\";\n } // Set up default inertia options\n\n\n _this.inertiaOptions.setKey(\"move\", {\n \"time\": 100,\n \"duration\": 500,\n \"factor\": 1,\n \"easing\": $ease.polyOut3\n });\n\n _this.inertiaOptions.setKey(\"resize\", {\n \"time\": 100,\n \"duration\": 500,\n \"factor\": 1,\n \"easing\": $ease.polyOut3\n }); // Set the passive mode support\n\n\n _this._passiveSupported = Interaction.passiveSupported; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * This is a nasty detection for Firefox. The reason why we have is that\r\n * Firefox ESR version does not support matchMedia correctly.\r\n *\r\n * On iOS, Firefox uses different userAgent, so we don't have to detect iOS.\r\n *\r\n * @return Full Firefox?\r\n */\n\n\n Interaction.prototype.fullFF = function () {\n return window.navigator.userAgent.match(/Firefox/) && !window.navigator.userAgent.match(/Android/);\n };\n\n Interaction.prototype.debug = function () {};\n /**\r\n * ==========================================================================\r\n * Processing\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Sets up global events.\r\n *\r\n * We need this so that we can track drag movement beyond chart's container.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.addGlobalEvents = function () {\n var _this = this;\n\n if (!this._globalEventsAdded) {\n if (!this._useTouchEventsOnly) {\n this._disposers.push(addEventListener(document, this._pointerEvents.pointerdown, function (ev) {\n _this.handleGlobalPointerDown(ev);\n }));\n\n this._disposers.push(addEventListener(document, this._pointerEvents.pointermove, function (ev) {\n _this.handleGlobalPointerMove(ev);\n }));\n\n this._disposers.push(addEventListener(document, this._pointerEvents.pointerup, function (ev) {\n _this.handleGlobalPointerUp(ev);\n }));\n\n this._disposers.push(addEventListener(document, this._pointerEvents.pointercancel, function (ev) {\n _this.handleGlobalPointerUp(ev, true);\n }));\n\n this._disposers.push(addEventListener(document, \"mouseenter\", function (ev) {\n if (!$type.hasValue(ev.relatedTarget) && (ev.buttons == 0 || ev.which == 0)) {\n _this.handleDocumentLeave(ev);\n }\n }));\n } // No need to duplicate events for hubrid systems that support both\n // pointer events and touch events. Touch events are need only for\n // some touch-only systems, like Mobile Safari.\n\n\n if (!this._usePointerEventsOnly) {\n this._disposers.push(addEventListener(document, \"touchstart\", function (ev) {\n _this.handleGlobalTouchStart(ev);\n }));\n\n this._disposers.push(addEventListener(document, \"touchmove\", function (ev) {\n _this.handleGlobalTouchMove(ev);\n }));\n\n this._disposers.push(addEventListener(document, \"touchend\", function (ev) {\n _this.handleGlobalTouchEnd(ev);\n }));\n }\n\n this._disposers.push(addEventListener(document, \"keydown\", function (ev) {\n _this.handleGlobalKeyDown(ev);\n }));\n\n this._disposers.push(addEventListener(document, \"keyup\", function (ev) {\n _this.handleGlobalKeyUp(ev);\n }));\n\n this._globalEventsAdded = true;\n }\n };\n /**\r\n * Sets if [[InteractionObject]] is clickable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\n\n\n Interaction.prototype.processClickable = function (io) {\n // Add or remove touch events\n this.processTouchable(io);\n };\n /**\r\n * Sets if [[InteractionObject]] will display context menu when right-clicked.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\n\n\n Interaction.prototype.processContextMenu = function (io) {\n if (io.contextMenuDisabled) {\n if (!io.eventDisposers.hasKey(\"contextMenuDisabled\")) {\n io.eventDisposers.setKey(\"contextMenuDisabled\", addEventListener(io.element, \"contextmenu\", function (e) {\n e.preventDefault();\n }));\n }\n } else {\n if (io.eventDisposers.hasKey(\"contextMenuDisabled\")) {\n io.eventDisposers.getKey(\"contextMenuDisabled\").dispose();\n }\n }\n };\n /**\r\n * Sets if [[InteractionObject]] is hoverable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\n\n\n Interaction.prototype.processHoverable = function (io) {\n var _this = this;\n\n if (io.hoverable || io.trackable) {\n // Add global events\n this.addGlobalEvents(); // Add hover styles\n\n this.applyCursorOverStyle(io); // Add local events\n\n if (!io.eventDisposers.hasKey(\"hoverable\") && this._addHoverEvents) {\n io.eventDisposers.setKey(\"hoverable\", new MultiDisposer([addEventListener(io.element, this._pointerEvents.pointerout, function (e) {\n return _this.handlePointerOut(io, e);\n }), addEventListener(io.element, this._pointerEvents.pointerover, function (e) {\n return _this.handlePointerOver(io, e);\n })]));\n }\n\n if (io.trackable) {//sprite.addEventListener(\"touchmove\", this.handleTouchMove, false, this);\n }\n } else {\n var disposer = io.eventDisposers.getKey(\"hoverable\");\n\n if (disposer != null) {\n disposer.dispose();\n io.eventDisposers.removeKey(\"hoverable\");\n }\n } // Add or remove touch events\n\n\n this.processTouchable(io);\n };\n /**\r\n * Sets up [[InteractionObject]] as movable. Movable can be any\r\n * transformation, e.g. drag, swipe, resize, track.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processMovable = function (io) {\n // Add unified events\n if (io.draggable || io.swipeable || io.trackable || io.resizable) {\n // Prep the element\n if (!this.isGlobalElement(io) && !io.isTouchProtected) {\n this.prepElement(io);\n } // Add hover styles\n\n\n this.applyCursorOverStyle(io);\n } // Add or remove touch events\n\n\n this.processTouchable(io);\n };\n /**\r\n * Checks if [[InteractionObject]] is trackable and sets relative events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processTrackable = function (io) {\n this.processHoverable(io);\n this.processMovable(io);\n\n if (io.trackable) {\n this.trackedObjects.moveValue(io);\n } else {\n this.trackedObjects.removeValue(io);\n }\n };\n /**\r\n * Checks if [[InteractionObject]] is draggable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processDraggable = function (io) {\n this.processMovable(io);\n };\n /**\r\n * Checks if [[InteractionObject]] is swipeable and sets relative events.\r\n *\r\n * A swipe event is triggered when a horizontal drag of 75px or more (and\r\n * less than 30px vertically) occurs within 700 milliseconds. This can be\r\n * overridden in sprites [[swipeOptions]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processSwipeable = function (io) {\n this.processMovable(io);\n };\n /**\r\n * Checks if [[InteractionObject]] is resizable and attaches required events\r\n * to it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processResizable = function (io) {\n this.processMovable(io);\n };\n /**\r\n * Checks if [[InteractionObject]] is supposed to capture mouse wheel events\r\n * and prepares it to catch those events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processWheelable = function (io) {\n var _this = this;\n\n if (io.wheelable) {\n //io.hoverable = true;\n if (!io.eventDisposers.hasKey(\"wheelable\")) {\n io.eventDisposers.setKey(\"wheelable\", new MultiDisposer([addEventListener(io.element, this._pointerEvents.wheel, function (e) {\n return _this.handleMouseWheel(io, e);\n }, this._passiveSupported ? {\n passive: false\n } : false), io.events.on(\"out\", function (e) {\n if (io.wheelable) {\n _this.unlockWheel();\n }\n }), io.events.on(\"over\", function (e) {\n //console.log(\"whelab over\")\n if (io.wheelable) {\n _this.lockWheel();\n }\n })]));\n }\n } else {\n var disposer = io.eventDisposers.getKey(\"wheelable\");\n\n if (disposer != null) {\n disposer.dispose();\n io.eventDisposers.removeKey(\"wheelable\");\n }\n }\n };\n /**\r\n * Checks if [[InteractionObject]] is focusable. A focusable element is an\r\n * element that will be highlighted when users presses TAB key. If the\r\n * element is focusable, this function will attach relative focus/blur\r\n * events to it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processFocusable = function (io) {\n var _this = this;\n\n if (io.focusable === true && io.tabindex > -1 && !this._useTouchEventsOnly) {\n if (!io.eventDisposers.hasKey(\"focusable\")) {\n io.eventDisposers.setKey(\"focusable\", new MultiDisposer([addEventListener(io.element, \"focus\", function (e) {\n return _this.handleFocus(io, e);\n }), addEventListener(io.element, \"blur\", function (e) {\n return _this.handleBlur(io, e);\n }), addEventListener(io.element, this._pointerEvents.pointerdown, function (e) {\n return _this.handleFocusBlur(io, e);\n }), addEventListener(io.element, \"touchstart\", function (e) {\n return _this.handleFocusBlur(io, e);\n }, this._passiveSupported ? {\n passive: false\n } : false)]));\n }\n } else {\n var disposer = io.eventDisposers.getKey(\"focusable\");\n\n if (disposer != null) {\n disposer.dispose();\n io.eventDisposers.removeKey(\"focusable\");\n }\n }\n };\n /**\r\n * Checks if [[InteractionObject]] is \"touchable\". It means any interaction\r\n * whatsoever: mouse click, touch screen tap, swipe, drag, resize, etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.processTouchable = function (io) {\n var _this = this; // Add unified events\n\n\n if (io.clickable || io.hoverable || io.trackable || io.draggable || io.swipeable || io.resizable) {\n // Add global events\n this.addGlobalEvents(); // Add local events\n\n if (!io.eventDisposers.hasKey(\"touchable\")) {\n if (!this._useTouchEventsOnly && !this._usePointerEventsOnly) {\n io.eventDisposers.setKey(\"touchable\", new MultiDisposer([addEventListener(io.element, this._pointerEvents.pointerdown, function (e) {\n return _this.handlePointerDown(io, e);\n }), addEventListener(io.element, \"touchstart\", function (e) {\n return _this.handleTouchDown(io, e);\n }, this._passiveSupported ? {\n passive: false\n } : false)]));\n } else if (!this._useTouchEventsOnly) {\n io.eventDisposers.setKey(\"touchable\", addEventListener(io.element, this._pointerEvents.pointerdown, function (e) {\n return _this.handlePointerDown(io, e);\n }));\n } else if (!this._usePointerEventsOnly) {\n io.eventDisposers.setKey(\"touchable\", addEventListener(io.element, \"touchstart\", function (e) {\n return _this.handleTouchDown(io, e);\n }, this._passiveSupported ? {\n passive: false\n } : false));\n }\n }\n } else {\n var disposer = io.eventDisposers.getKey(\"touchable\");\n\n if (disposer != null) {\n disposer.dispose();\n io.eventDisposers.removeKey(\"touchable\");\n }\n }\n };\n /**\r\n * ==========================================================================\r\n * Non-pointer events\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Dispatches \"focus\" event when element gains focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleFocus = function (io, ev) {\n if (!io.focusable) {\n ev.preventDefault();\n return;\n }\n\n io.isFocused = true;\n\n if (io.events.isEnabled(\"focus\") && !system.isPaused) {\n var imev = {\n type: \"focus\",\n target: io,\n event: ev\n };\n io.events.dispatchImmediately(\"focus\", imev);\n }\n };\n /**\r\n * Used by regular click events to prevent focus if \"noFocus\" is set.\r\n *\r\n * This should not be called by \"focus\" handlers.\r\n *\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleFocusBlur = function (io, ev) {\n if (io.focusable !== false && this.getHitOption(io, \"noFocus\")) {\n io.events.once(\"focus\", function () {\n io.events.disableType(\"blur\");\n $dom.blur();\n\n if (io.sprite) {\n io.sprite.handleBlur();\n }\n\n io.events.enableType(\"blur\");\n });\n }\n };\n /**\r\n * Dispatches \"blur\" event when element loses focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleBlur = function (io, ev) {\n if (!io.focusable) {\n ev.preventDefault();\n return;\n }\n\n io.isFocused = false;\n\n if (io.events.isEnabled(\"blur\") && !system.isPaused) {\n var imev = {\n type: \"blur\",\n target: io,\n event: ev\n };\n io.events.dispatchImmediately(\"blur\", imev);\n }\n };\n /**\r\n * ==========================================================================\r\n * Global keyboard-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Checks if there is an item that has currently focus and that they key is\r\n * one of the directional keys. If both of the conditions are true, it\r\n * creates an object to simulate movement of dragable element with keyboard.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev An original keyboard event\r\n */\n\n\n Interaction.prototype.handleGlobalKeyDown = function (ev) {\n if (this.focusedObject) {\n if (keyboard.isKey(ev, \"esc\")) {\n // ESC removes focus\n $dom.blur();\n } else if (this.focusedObject.draggable && keyboard.isKey(ev, [\"up\", \"down\", \"left\", \"right\"])) {\n // Prevent scrolling of the document\n ev.preventDefault(); // Get focused object\n\n var io = this.focusedObject; // Get particular key\n\n var disposerKey = \"interactionKeyboardObject\"; // If such disposer already exists we know the event is going on so we\n // just move on\n\n if (io.eventDisposers.hasKey(disposerKey)) {\n return;\n } // Create a keyboard mover\n\n\n var ko = new InteractionKeyboardObject(io, ev);\n io.eventDisposers.setKey(disposerKey, ko);\n\n switch (keyboard.getEventKey(ev)) {\n case \"up\":\n ko.directionY = -1;\n break;\n\n case \"down\":\n ko.directionY = 1;\n break;\n\n case \"left\":\n ko.directionX = -1;\n break;\n\n case \"right\":\n ko.directionX = 1;\n break;\n }\n }\n }\n };\n /**\r\n * Dispatches related events when the keyboard key is realeasd.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev An original keyboard event\r\n */\n\n\n Interaction.prototype.handleGlobalKeyUp = function (ev) {\n var disposerKey = \"interactionKeyboardObject\";\n\n if (this.focusedObject) {\n var disposer = this.focusedObject.eventDisposers.getKey(disposerKey);\n\n if (disposer != null) {\n // Prevent scrolling of the document\n ev.preventDefault(); // Dispose stuff\n\n disposer.dispose();\n this.focusedObject.eventDisposers.removeKey(disposerKey);\n } // Does focused object have \"hit\" event?\n\n\n if (keyboard.isKey(ev, \"enter\") && this.focusedObject.sprite && !this.focusedObject.sprite.events.isEnabled(\"toggled\")) {\n if (this.focusedObject.sprite.events.isEnabled(\"hit\")) {\n this.focusedObject.dispatchImmediately(\"hit\");\n } else if (this.focusedObject.sprite.showTooltipOn == \"hit\") {\n this.focusedObject.dispatchImmediately(\"up\");\n }\n }\n }\n };\n /**\r\n * ==========================================================================\r\n * Global pointer-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Handler for a global \"pointermove\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalPointerMove = function (ev) {\n // Get pointer\n var pointer = this.getPointer(ev); // Update current point position\n\n pointer.point = this.getPointerPoint(ev); // Prepare and fire global event\n\n if (this.events.isEnabled(\"track\") && !system.isPaused) {\n var imev = {\n type: \"track\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"track\", imev);\n } // Track\n\n\n this.addBreadCrumb(pointer, pointer.point); // Process further\n\n this.handleGlobalMove(pointer, ev);\n };\n /**\r\n * Handler for a global \"pointerdown\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalPointerDown = function (ev) {\n // Remove delayed hovers\n this.processDelayed(); // Get pointer\n\n var pointer = this.getPointer(ev); // Prepare and fire global event\n\n if (this.events.isEnabled(\"down\") && !system.isPaused) {\n var imev = {\n type: \"down\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"down\", imev);\n }\n };\n /**\r\n * Prevents touch action from firing.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event\r\n */\n\n\n Interaction.prototype.preventTouchAction = function (ev) {\n if (!ev.defaultPrevented) {\n ev.preventDefault();\n }\n };\n /**\r\n * Handler for a global \"pointerup\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalPointerUp = function (ev, cancelled) {\n if (cancelled === void 0) {\n cancelled = false;\n } // Get pointer\n\n\n var pointer = this.getPointer(ev); // Prepare and fire global event\n\n if (this.events.isEnabled(\"up\") && !system.isPaused) {\n var imev = {\n type: \"up\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"up\", imev);\n } // Process further\n\n\n this.handleGlobalUp(pointer, ev, cancelled);\n };\n /**\r\n * ==========================================================================\r\n * Global touch-related even handlers\r\n * ==========================================================================\r\n */\n\n /**\r\n * Handler for a global \"touchmove\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalTouchMove = function (ev) {\n // Process each changed touch point\n for (var i = 0; i < ev.changedTouches.length; i++) {\n // Get pointer\n var pointer = this.getPointer(ev.changedTouches[i]); // Update current point position\n\n pointer.point = this.getPointerPoint(ev.changedTouches[i]); // Prepare and fire global event\n\n if (this.events.isEnabled(\"track\") && !system.isPaused) {\n var imev = {\n type: \"track\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"track\", imev);\n } // Track\n\n\n this.addBreadCrumb(pointer, pointer.point); // Process further\n\n this.handleGlobalMove(pointer, ev);\n }\n };\n /**\r\n * Handler for a global \"touchstart\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalTouchStart = function (ev) {\n // Remove delayed hovers\n this.processDelayed(); // Process each changed touch point\n\n for (var i = 0; i < ev.changedTouches.length; i++) {\n // Get pointer\n var pointer = this.getPointer(ev.changedTouches[i]); // Prepare and fire global event\n\n if (!this._usePointerEventsOnly && this.events.isEnabled(\"down\") && !system.isPaused) {\n var imev = {\n type: \"down\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"down\", imev);\n }\n }\n };\n /**\r\n * Handler for a global \"touchend\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n\n Interaction.prototype.handleGlobalTouchEnd = function (ev) {\n // Process each changed touch point\n for (var i = 0; i < ev.changedTouches.length; i++) {\n // Get pointer\n var pointer = this.getPointer(ev.changedTouches[i]); // Prepare and fire global event\n\n if (this.events.isEnabled(\"up\") && !system.isPaused) {\n var imev = {\n type: \"up\",\n target: this,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n this.events.dispatchImmediately(\"up\", imev);\n } // Handle element-related events\n\n\n this.handleGlobalUp(pointer, ev);\n }\n };\n /**\r\n * ==========================================================================\r\n * Element-specific pointer-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Handles event when pointer is over [[InteractionObject]] and button is\r\n * pressed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handlePointerDown = function (io, ev) {\n // Stop further propagation so we don't get multiple triggers on hybrid\n // devices (both mouse and touch capabilities)\n //ev.preventDefault();\n //ev.stopPropagation();\n //if (ev.defaultPrevented) {\n //}\n // Get pointer\n var pointer = this.getPointer(ev); // Ignore if it's anything but mouse's primary button\n\n if (!pointer.touch && ev.which != 1 && ev.which != 3) {\n return;\n } // Set mouse button\n\n\n pointer.button = ev.which; // Reset pointer\n\n this.resetPointer(pointer, ev); // Process down\n\n this.handleDown(io, pointer, ev);\n };\n /**\r\n * Handles event when [[InteractionObject]] is hovered by a mouse pointer.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handlePointerOver = function (io, ev) {\n // Get pointer\n var pointer = this.getPointer(ev); // Process down\n\n this.handleOver(io, pointer, ev);\n };\n /**\r\n * Handles event when [[InteractionObject]] loses hover from a mouse pointer.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handlePointerOut = function (io, ev) {\n // Get pointer\n var pointer = this.getPointer(ev); // Process down\n\n this.handleOut(io, pointer, ev);\n };\n /**\r\n * Handles event when mouse wheel is crolled over the [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n * @todo Investigate more-cross browser stuff https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n */\n\n\n Interaction.prototype.handleMouseWheel = function (io, ev) {\n // Get pointer\n var pointer = this.getPointer(ev); // Update current point position\n\n pointer.point = this.getPointerPoint(ev); // Init delta values\n\n var deltaX = 0,\n deltaY = 0; // Set up modifier\n // This is needed because FireFox reports wheel deltas in \"lines\" instead\n // of pixels so we have to approximate pixel value\n\n var mod = 1;\n\n if (ev.deltaMode == 1) {\n mod = 50;\n } // Adjust configurable sensitivity\n\n\n mod *= this.getMouseOption(io, \"sensitivity\"); // Calculate deltas\n\n if (ev instanceof WheelEvent) {\n deltaX = Math.round(-1 * ev.wheelDeltaX || ev.deltaX * mod);\n deltaY = Math.round(-1 * ev.wheelDeltaY || ev.deltaY * mod);\n } else {\n throw new Error(\"Invalid event type\");\n } // Handle the event\n\n\n this.handleWheel(io, pointer, deltaX, deltaY, ev);\n };\n /**\r\n * ==========================================================================\r\n * Element-specific touch-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Handles an event when an [[InteractionObject]] is touched on a touch\r\n * device.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleTouchDown = function (io, ev) {\n // Stop further propagation so we don't get multiple triggers on hybrid\n // devices (both mouse and touch capabilities)\n //this.maybePreventDefault(io, ev);\n //return;\n // Process each changed touch point\n for (var i = 0; i < ev.changedTouches.length; i++) {\n // Get pointer\n var pointer = this.getPointer(ev.changedTouches[i]);\n this.maybePreventDefault(io, ev, pointer); // Reset pointer\n\n this.resetPointer(pointer, ev.changedTouches[i]); // Process down\n\n this.handleDown(io, pointer, ev);\n }\n };\n /**\r\n * ==========================================================================\r\n * Universal handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Handles click/tap. Checks for doublehit.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleHit = function (io, pointer, ev) {\n // Check if this is a double-hit\n var now = $time.getTime();\n\n if (io.lastHit && io.lastHit >= now - this.getHitOption(io, \"doubleHitTime\")) {\n // Yup - it's a double-hit\n // Cancel the hit\n //clearTimeout(io.lastHitPointer.hitTimeout);\n // If it happened too fast it probably means that hybrid device just\n // generated two events for the same tap\n if (now - io.lastHit < 100) {\n // Ignore\n return;\n } // Clear last hit\n\n\n io.lastHit = undefined;\n io.lastHitPointer = undefined; // Dispatch event\n\n if (io.events.isEnabled(\"doublehit\") && !system.isPaused) {\n var imev = {\n type: \"doublehit\",\n target: io,\n point: pointer.point,\n event: ev,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"doublehit\", imev);\n }\n } else {\n // Log last hit\n io.lastHit = now;\n io.lastHitPointer = pointer;\n\n if (pointer.button === 3) {\n // Execute HIT now\n if (io.events.isEnabled(\"rightclick\") && !system.isPaused) {\n var imev = {\n type: \"rightclick\",\n target: io,\n event: ev\n };\n io.events.dispatchImmediately(\"rightclick\", imev);\n }\n } else {\n if (io.events.isEnabled(\"hit\") && !system.isPaused) {\n var imev = {\n type: \"hit\",\n target: io,\n event: ev,\n point: pointer.point,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"hit\", imev);\n }\n }\n }\n };\n /**\r\n * Handles pointer hovering over [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param soft Invoked by helper function\r\n */\n\n\n Interaction.prototype.handleOver = function (io, pointer, ev, soft) {\n if (soft === void 0) {\n soft = false;\n }\n\n if (!io.hoverable) {\n return;\n }\n\n var hoversPaused = false;\n\n if (this.shouldCancelHovers(pointer) && this.areTransformed() && this.moved(pointer, this.getHitOption(io, \"hitTolerance\"))) {\n hoversPaused = true;\n this.cancelAllHovers(ev);\n } // Remove any delayed outs\n\n\n this.processDelayed(); // Add pointer\n\n io.overPointers.moveValue(pointer); // Check if object is not yet hovered\n\n if (!io.isRealHover) {\n // Set element as hovered\n if (!hoversPaused) {\n io.isHover = true;\n io.isRealHover = true;\n this.overObjects.moveValue(io);\n } // Generate body track event. This is needed so that if element loads\n // under unmoved mouse cursor, we still need all the actions that are\n // required to happen to kick in.\n\n\n this.handleTrack(this.body, pointer, ev, true); // Event\n\n if (io.events.isEnabled(\"over\") && !system.isPaused && !hoversPaused) {\n var imev = {\n type: \"over\",\n target: io,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"over\", imev);\n }\n }\n };\n /**\r\n * Handles when [[InteractionObject]] is no longer hovered.\r\n *\r\n * If `soft = true`, this means that method is being invoked by some other\r\n * code, not hard \"out\" function, like `handleUp` which implies we need to\r\n * run additional checks before unhovering the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param soft Invoked by helper function\r\n * @param force Force imediate out\r\n */\n\n\n Interaction.prototype.handleOut = function (io, pointer, ev, soft, force) {\n var _this = this;\n\n if (soft === void 0) {\n soft = false;\n }\n\n if (force === void 0) {\n force = false;\n }\n\n if (!io.hoverable) {\n return;\n } // Remove pointer\n\n\n io.overPointers.removeValue(pointer); // Check if element is still hovered\n\n if (io.isHover && (!io.hasDelayedOut || force)) {\n // Should we run additional checks?\n if (soft && io.overPointers.length) {\n // There are still pointers hovering - don't do anything else and\n // wait until either no over pointers are there or we get a hard out\n // event.\n return;\n } // Should we delay \"out\" if this is happening on a touch device?\n\n\n if (pointer && pointer.touch && !force && !this.old(pointer)) {\n // This is a touch pointer, and it hasn't moved, let's pretend\n // the object is still hovered, and act as per \"behavior\" setting\n var behavior = this.getHoverOption(io, \"touchOutBehavior\");\n\n if (behavior == \"leave\") {\n // Set to \"leave\", so we do not execute any \"out\" event.\n // It will be handled by any other interaction that happens\n // afterwards.\n this._delayedEvents.out.push({\n type: \"out\",\n io: io,\n pointer: pointer,\n event: ev,\n keepUntil: $time.getTime() + 500\n });\n\n io.hasDelayedOut = true;\n return;\n } else if (behavior == \"delay\" && this.getHoverOption(io, \"touchOutDelay\")) {\n this._delayedEvents.out.push({\n type: \"out\",\n io: io,\n pointer: pointer,\n event: ev,\n keepUntil: $time.getTime() + 500,\n timeout: this.setTimeout(function () {\n _this.handleOut(io, pointer, ev, true);\n }, this.getHoverOption(io, \"touchOutDelay\"))\n });\n\n return;\n } else {// Nothing for \"remove\" - that's how it works \"out-of-the-box\"\n }\n } // Set element as not hovered\n\n\n io.isHover = false;\n this.overObjects.removeValue(io); // Invoke event\n\n if (!io.isDisposed() && io.events.isEnabled(\"out\") && !system.isPaused) {\n var imev = {\n type: \"out\",\n target: io,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"out\", imev);\n } // Reset object from lefover delayed outs, pointers\n\n\n io.overPointers.clear();\n io.hasDelayedOut = false; // @todo (clean delayed)\n }\n };\n /**\r\n * Processes dalyed events, such as \"out\" event that was initiated for\r\n * elements by touch.\r\n */\n\n\n Interaction.prototype.processDelayed = function () {\n var delayedEvent;\n\n while (true) {\n delayedEvent = this._delayedEvents.out.pop();\n\n if (!delayedEvent) {\n break;\n }\n\n if (delayedEvent.timeout) {\n delayedEvent.timeout.dispose();\n }\n\n this.handleOut(delayedEvent.io, delayedEvent.pointer, delayedEvent.event, false, true);\n }\n };\n /**\r\n * Performs tasks on pointer down.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleDown = function (io, pointer, ev) {\n // Need to prevent default event from happening on transformable objects\n this.maybePreventDefault(io, ev, pointer); // Stop inertia animations if they're currently being played out\n\n if (io.inert) {\n this.stopInertia(io);\n } // Trigger hover because some touch devices won't trigger over events\n // on their own\n\n\n this.handleOver(io, pointer, ev, true); // Add pointer to list\n\n io.downPointers.moveValue(pointer); // Apply styles if necessary\n\n this.applyCursorDownStyle(io, pointer); // Check if object is already down\n\n if (!io.isDown) {\n // Lose focus if needed\n if (io.focusable !== false && this.getHitOption(io, \"noFocus\") && this.focusedObject) {\n $dom.blur();\n } // Set object as hovered\n\n\n io.isDown = true;\n this.downObjects.moveValue(io); // Prep object for dragging and/or resizing\n\n if (io.draggable) {\n this.processDragStart(io, pointer, ev);\n }\n\n if (io.resizable) {\n this.processResizeStart(io, pointer, ev);\n }\n } // Dispatch \"down\" event\n\n\n if (io.events.isEnabled(\"down\") && !system.isPaused) {\n var imev = {\n type: \"down\",\n target: io,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"down\", imev);\n }\n };\n /**\r\n * Performs tasks on pointer up.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleGlobalUp = function (pointer, ev, cancelled) {\n var _this = this;\n\n if (cancelled === void 0) {\n cancelled = false;\n }\n\n var sorted = this.downObjects.values.slice();\n sorted.sort(function (x, y) {\n if (x && y) {\n var pos = x.element.compareDocumentPosition(y.element);\n\n if (pos & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return 1;\n } else if (pos & Node.DOCUMENT_POSITION_CONTAINS) {\n return -1;\n } else {\n return 0;\n }\n } else {\n return 0;\n }\n }); // Process all down objects\n\n $array.each(sorted, function (io) {\n // Check if this particular pointer is pressing down\n // on object\n if (io && io.downPointers.contains(pointer)) {\n _this.handleUp(io, pointer, ev, cancelled);\n }\n });\n };\n /**\r\n * Simulates all pointers being up once mouse leaves document area.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleDocumentLeave = function (ev) {\n var _this = this; // Process all down objects\n\n\n $iter.each(this.downObjects.backwards().iterator(), function (io) {\n io.downPointers.each(function (pointer) {\n _this.handleUp(io, pointer, ev);\n });\n });\n };\n /**\r\n * Handles when [[InteractionObject]] is no longer hovered.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleUp = function (io, pointer, ev, cancelled) {\n if (cancelled === void 0) {\n cancelled = false;\n } // Restore cursor style\n\n\n this.restoreCursorDownStyle(io, pointer); // Remove pointer from the list\n\n io.downPointers.removeValue(pointer); // Trigger out because some touch devices won't trigger out events\n // on their own\n\n if (pointer.touch || this._useTouchEventsOnly) {\n this.handleOut(io, pointer, ev, true);\n } // Check if object still down\n\n\n if (io.isDown) {\n // Check if there are no other pointers hovering this element\n if (io.downPointers.length == 0) {\n // Set element as no longer down\n io.isDown = false;\n this.downObjects.removeValue(io);\n } // Dispatch \"up\" event\n\n\n if (io.events.isEnabled(\"up\") && !system.isPaused) {\n var imev = {\n type: \"up\",\n target: io,\n event: ev,\n pointer: pointer,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"up\", imev);\n } // Check if this was not a cancelled event.\n // If event was canelled (which might happen if gesture resulted in\n // navigation or page scroll) there's no point in triggering hit and\n // other actions.\n\n\n if (!cancelled) {\n // Handle swiping-related stuff\n if (io.swipeable && this.swiped(io, pointer)) {\n // Swiped - nothing else should happen\n this.handleSwipe(io, pointer, ev);\n } else {\n // Check if it maybe a click\n if (io.clickable && !this.moved(pointer, this.getHitOption(io, \"hitTolerance\"))) {\n this.handleHit(io, pointer, ev);\n } // Handle inertia\n\n\n if (io.inert && this.moved(pointer, this.getHitOption(io, \"hitTolerance\"))) {\n this.handleInertia(io, pointer);\n } else if (io.draggable) {\n this.processDragStop(io, pointer, ev);\n }\n\n if (io.resizable) {\n this.processResizeStop(io, pointer, ev);\n }\n }\n }\n }\n };\n /**\r\n * Checks if event needs to be prevented on draggable and such items, so that\r\n * touch gestures like navigation and scroll do not kick in.\r\n *\r\n * @param io Object\r\n * @param ev Event\r\n */\n\n\n Interaction.prototype.maybePreventDefault = function (io, ev, pointer) {\n if ($type.hasValue(ev) && (io.draggable || io.swipeable || io.trackable || io.resizable) && !this.isGlobalElement(io) && ev.cancelable !== false && (!io.isTouchProtected || !pointer || !pointer.touch)) {\n ev.preventDefault();\n }\n };\n /**\r\n * Cancels all hovers on all currently hovered objects.\r\n *\r\n * @param pointer Pointer\r\n * @param ev Event\r\n */\n\n\n Interaction.prototype.cancelAllHovers = function (ev) {\n var _this = this; //this.overObjects.each((io) => {\n\n\n $iter.each(this.overObjects.backwards().iterator(), function (io) {\n if (io) {\n var pointer = io.overPointers.getIndex(0);\n\n _this.handleOut(io, pointer, ev, true, true);\n }\n });\n };\n /**\r\n * Checks if hovers should be cancelled on transform as per global options.\r\n * @param pointer Pointer\r\n * @return Cancel?\r\n */\n\n\n Interaction.prototype.shouldCancelHovers = function (pointer) {\n return options.disableHoverOnTransform == \"always\" || options.disableHoverOnTransform == \"touch\" && pointer.touch;\n };\n /**\r\n * Handles pointer move.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleGlobalMove = function (pointer, ev) {\n var _this = this; // Process hovered elements\n // We check if the element became unhovered without reporting the mouseout\n // event. (it happens in some cases)\n\n\n if (!pointer.touch) {\n var target_1 = $dom.eventTarget(pointer.lastEvent);\n $iter.each(this.overObjects.backwards().iterator(), function (io) {\n // Is this pointer relevant to element?\n if (io && io.overPointers.contains(pointer) && io.hoverable) {\n // Check if the element is still hovered\n var reset = false;\n\n if (io.element && pointer.lastEvent) {\n if (!$dom.contains(io.element, target_1)) {\n reset = true;\n }\n } else {\n reset = true;\n }\n\n if (reset) {\n _this.handleOut(io, pointer, ev, true);\n }\n }\n });\n } // Process down elements\n\n\n $iter.each(this.transformedObjects.backwards().iterator(), function (io) {\n // Is this pointer relevant to element?\n if (io.downPointers.contains(pointer) && // Swipe still happening?\n !(io.swipeable && _this.swiping(io, pointer)) && (io.draggable || io.resizable)) {\n _this.handleTransform(io, ev);\n }\n }); // Process tracked elements\n\n $iter.each(this.trackedObjects.backwards().iterator(), function (io) {\n // Is this pointer relevant to element?\n if (!io.overPointers.contains(pointer)) {\n _this.handleTrack(io, pointer, ev);\n }\n });\n };\n /**\r\n * Handles reporting of pointer movement.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param skipCheck Sould we skip check if cursor actually moved\r\n */\n\n\n Interaction.prototype.handleTrack = function (io, pointer, ev, skipCheck) {\n if (skipCheck === void 0) {\n skipCheck = false;\n } // Do nothing if the cursor did not actually move\n\n\n if (!skipCheck && !this.moved(pointer, 0)) {\n return;\n } // Initiate TRACK event\n\n\n if (io.events.isEnabled(\"track\") && !system.isPaused) {\n var imev = {\n type: \"track\",\n target: io,\n event: ev,\n point: pointer.point,\n pointer: pointer,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"track\", imev);\n }\n };\n /**\r\n * Handles swipe action.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleSwipe = function (io, pointer, ev) {\n // We pass in InteractionEvent with shift in mouse coordinates\n // between when the drag started and ended\n if (io.events.isEnabled(\"swipe\") && !system.isPaused) {\n var imev = {\n type: \"swipe\",\n target: io,\n event: ev,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"swipe\", imev);\n }\n\n if (pointer.startPoint.x < pointer.point.x) {\n if (io.events.isEnabled(\"swiperight\") && !system.isPaused) {\n var imev = {\n type: \"swiperight\",\n target: io,\n event: ev,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"swiperight\", imev);\n }\n } else {\n if (io.events.isEnabled(\"swipeleft\") && !system.isPaused) {\n var imev = {\n type: \"swipeleft\",\n target: io,\n event: ev,\n touch: pointer.touch\n };\n io.events.dispatchImmediately(\"swipeleft\", imev);\n }\n }\n };\n /**\r\n * Handles event triggering for wheel rotation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param deltaX Horizontal shift\r\n * @param deltaY Vertical shift\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleWheel = function (io, pointer, deltaX, deltaY, ev) {\n var shift = {\n x: deltaX,\n y: deltaY\n }; // Trigger generic WHEEL event\n\n if (io.events.isEnabled(\"wheel\") && !system.isPaused) {\n io.events.dispatchImmediately(\"wheel\", {\n type: \"wheel\",\n target: io,\n event: ev,\n point: pointer.point,\n shift: shift\n });\n } // Trigger direction-specific events\n // Horizontal\n\n\n if (deltaX < 0) {\n if (io.events.isEnabled(\"wheelleft\") && !system.isPaused) {\n io.events.dispatchImmediately(\"wheelleft\", {\n type: \"wheelleft\",\n target: io,\n event: ev,\n point: pointer.point,\n shift: shift\n });\n }\n } else if (deltaX > 0) {\n if (io.events.isEnabled(\"swiperight\") && !system.isPaused) {\n io.events.dispatchImmediately(\"wheelright\", {\n type: \"wheelright\",\n target: io,\n event: ev,\n point: pointer.point,\n shift: shift\n });\n } // Vertical\n\n } else if (deltaY < 0) {\n if (io.events.isEnabled(\"wheelup\") && !system.isPaused) {\n io.events.dispatchImmediately(\"wheelup\", {\n type: \"wheelup\",\n target: io,\n event: ev,\n point: pointer.point,\n shift: shift\n });\n }\n } else if (deltaY > 0) {\n if (io.events.isEnabled(\"wheeldown\") && !system.isPaused) {\n io.events.dispatchImmediately(\"wheeldown\", {\n type: \"wheeldown\",\n target: io,\n event: ev,\n point: pointer.point,\n shift: shift\n });\n }\n }\n };\n /**\r\n * Initiates inertia checking sub-routines for different movement types:\r\n * drag, resize.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite\r\n * @param pointer\r\n */\n\n\n Interaction.prototype.handleInertia = function (io, pointer) {\n if (io.draggable && io.downPointers.length === 0) {\n this.handleMoveInertia(io, pointer);\n }\n\n if (io.resizable && io.downPointers.length > 1) {\n this.handleResizeInertia(io, pointer);\n }\n };\n /**\r\n * Continues moving the element to simulate the effect of inertia. Happens\r\n * when `inert` and `draggable` object is dragged and then released.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.handleMoveInertia = function (io, pointer) {\n var interaction = io;\n var type = \"move\";\n var point = {\n \"x\": pointer.point.x,\n \"y\": pointer.point.y\n };\n var startPoint = {\n \"x\": pointer.startPoint.x,\n \"y\": pointer.startPoint.y\n }; // Init inertia object\n\n var inertia = new Inertia(interaction, type, point, startPoint); // Get inertia data\n\n var ref = this.getTrailPoint(pointer, $time.getTime() - this.getInertiaOption(io, \"move\", \"time\"));\n\n if (typeof ref === \"undefined\") {\n this.processDragStop(io, pointer, pointer.lastUpEvent);\n return;\n } // Init animation options\n\n\n var factor = this.getInertiaOption(io, \"move\", \"factor\");\n var animationOptions = [{\n \"to\": pointer.point.x + (pointer.point.x - ref.point.x) * factor,\n \"property\": \"x\"\n }, {\n \"to\": pointer.point.y + (pointer.point.y - ref.point.y) * factor,\n \"property\": \"y\"\n }]; // Start animation\n\n var animation = new Animation(inertia, animationOptions, this.getInertiaOption(io, \"move\", \"duration\"), this.getInertiaOption(io, \"move\", \"easing\")).start();\n\n this._disposers.push(animation.events.on(\"animationended\", function (ev) {\n inertia.done();\n })); // Add inertia object\n\n\n io.inertias.setKey(\"move\", inertia);\n };\n /**\r\n * Continues resizing of a `resizable` element after it is resized and\r\n * released.\r\n *\r\n * **NOTE:** this is is just a placeholder function. No actual fucntionality\r\n * is implemented, yet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.handleResizeInertia = function (io, pointer) {// Some day, folks. Some day...\n };\n /**\r\n * Recalculates element's position and size based on position of\r\n * all its related pointers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.handleTransform = function (io, ev) {\n // Get primary pointer and its respective points\n var pointer1 = io.downPointers.getIndex(0);\n var point1 = null;\n var startPoint1 = null;\n\n if (pointer1) {\n point1 = pointer1.point;\n startPoint1 = pointer1.startPoint;\n } // Init secondary pointer\n\n\n var pointer2;\n var point2;\n var startPoint2; // Use center of the sprite to simulate \"second\" point of touch\n\n point2 = {\n \"x\": io.originalPosition.x,\n \"y\": io.originalPosition.y\n };\n startPoint2 = point2; // Determine if it's a sinngle pointer or multi\n\n var singlePoint = true;\n\n for (var i = 1; i < io.downPointers.length; i++) {\n // Get pointer\n var nextPointer = io.downPointers.getIndex(i); // Doublecheck if it's not the same pointer by comparing original position\n\n if (startPoint1.x != nextPointer.startPoint.x && startPoint1.y != nextPointer.startPoint.y) {\n // Several pointers down\n singlePoint = false; // Get second pointer\n\n pointer2 = nextPointer;\n point2 = pointer2.point;\n startPoint2 = pointer2.startPoint; // Stop looking\n\n break;\n }\n } // Primary touch point moved?\n\n\n var pointer1Moved = pointer1 && this.moved(pointer1, 0); // Report DRAG_START if necessary\n\n if (io.draggable && pointer1 && pointer1.dragStartEvents && pointer1.dragStartEvents.length && pointer1Moved) {\n if (io.events.isEnabled(\"dragstart\") && !system.isPaused) {\n io.events.dispatchImmediately(\"dragstart\", pointer1.dragStartEvents.shift());\n } //delete pointer1.dragStartEvents;\n\n } // Determine what we do in order of superiority\n\n\n if (singlePoint && io.draggable) {\n // We have only one pointer and the Sprite is draggable\n // There's nothing else to be done - just move it\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved, pointer1.touch);\n\n if (this.shouldCancelHovers(pointer1) && this.moved(pointer1, this.getHitOption(io, \"hitTolerance\"))) {\n this.cancelAllHovers(ev);\n }\n } else {\n // Check if second touch point moved\n var pointer2Moved = pointer2 && this.moved(pointer2, 0);\n\n if (this.shouldCancelHovers(pointer1) && this.moved(pointer1, this.getHitOption(io, \"hitTolerance\")) || this.shouldCancelHovers(pointer2) && this.moved(pointer2, this.getHitOption(io, \"hitTolerance\"))) {\n this.cancelAllHovers(ev);\n }\n\n if (io.draggable && io.resizable) {\n //this.handleTransformAll(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved);\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved && pointer2Moved, pointer1.touch);\n this.handleTransformResize(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved, pointer1.touch);\n } else {\n if (io.draggable) {\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved, pointer1.touch);\n }\n\n if (io.resizable && (!singlePoint || ev.ctrlKey)) {\n this.handleTransformResize(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved, pointer1.touch);\n }\n }\n }\n };\n /**\r\n * Handles movement of the dragged element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param point Current point of the pointer\r\n * @param startPoint Starting point of the pointer\r\n * @param ev Original event\r\n * @param pointerMoved Did pointer move?\r\n */\n\n\n Interaction.prototype.handleTransformMove = function (io, point, startPoint, ev, pointerMoved, touch) {\n if (pointerMoved) {\n if (io.events.isEnabled(\"drag\") && !system.isPaused && (!io.isTouchProtected || !touch)) {\n var imev = {\n type: \"drag\",\n target: io,\n event: ev,\n shift: {\n \"x\": point.x - startPoint.x,\n \"y\": point.y - startPoint.y\n },\n startPoint: startPoint,\n point: point,\n touch: touch\n };\n io.events.dispatchImmediately(\"drag\", imev);\n }\n }\n };\n /**\r\n * Handles resizing of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param point1 Current position of reference point #1\r\n * @param startPoint1 Original position of reference point #1\r\n * @param point2 Current position of reference point #2\r\n * @param startPoint2 Original position of reference point #2\r\n * @param ev Original event\r\n * @param pointerMoved Did pointer move?\r\n */\n\n\n Interaction.prototype.handleTransformResize = function (io, point1, startPoint1, point2, startPoint2, ev, pointerMoved, touch) {\n if (io.events.isEnabled(\"resize\") && !system.isPaused && (!io.isTouchProtected || !touch)) {\n var imev = {\n type: \"resize\",\n target: io,\n event: ev,\n scale: $math.getScale(point1, startPoint1, point2, startPoint2),\n startPoint1: startPoint1,\n point1: point1,\n startPoint2: startPoint2,\n point2: point2,\n touch: touch\n };\n io.events.dispatchImmediately(\"resize\", imev);\n }\n };\n /**\r\n * Handles all the preparations of the element when it starts to be dragged.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.processDragStart = function (io, pointer, ev) {\n // Add to draggedObjects\n this.transformedObjects.moveValue(io);\n\n if (this.shouldCancelHovers(pointer)) {\n this.cancelAllHovers(ev);\n } // Report \"dragstart\"\n\n\n var imev = {\n type: \"dragstart\",\n target: io,\n event: ev,\n touch: pointer ? pointer.touch : false\n }; // Log object that we are starting to drag, so we can check against and\n // avoid hovers on other objects that might be in the path of movement.\n\n if (pointer) {\n pointer.dragTarget = io; //pointer.startPoint = pointer.point;\n }\n /**\r\n * If pointer is set we will not fire the event until the pointer has\r\n * actually moved. If it's not set we don't have to wait for anything, so we\r\n * just fire off the event right away.\r\n */\n\n\n if (pointer && pointer.dragStartEvents) {\n pointer.dragStartEvents.push(imev);\n } else {\n if (!system.isPaused) {\n io.dispatchImmediately(\"dragstart\", imev);\n }\n }\n };\n /**\r\n * Finishes up element drag operation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.processDragStop = function (io, pointer, ev) {\n // Pointer set?\n if (!pointer) {\n pointer = this.getDragPointer(io);\n } // Unset drag object\n\n\n if (pointer) {\n pointer.dragTarget = undefined;\n } // Removed from transformedObjects\n\n\n this.transformedObjects.removeValue(io); // Unlock document\n //this.unlockDocument();\n // Report dragstop\n\n if (!pointer || this.moved(pointer, 0)) {\n if (io.events.isEnabled(\"dragstop\") && !system.isPaused) {\n var imev = {\n type: \"dragstop\",\n target: io,\n touch: pointer ? pointer.touch : false\n };\n io.events.dispatchImmediately(\"dragstop\", imev);\n }\n }\n };\n /**\r\n * Handles all the preparations of the element when it starts to be resized.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.processResizeStart = function (io, pointer, ev) {\n // Add to draggedObjects\n this.transformedObjects.moveValue(io);\n };\n /**\r\n * Finishes up element drag operation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\n\n\n Interaction.prototype.processResizeStop = function (io, pointer, ev) {\n // Removed from transformedObjects\n this.transformedObjects.removeValue(io);\n };\n /**\r\n * ==========================================================================\r\n * Controls for InteractionObjects initiating directly\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Manually triggers drag start on the element. Could be useful in cases\r\n * where tracking or dragging one element can also influence dragging another\r\n * element.\r\n *\r\n * Passing in `pointer` reference is advisable. If not passed in it will try\r\n * to determine which pointer to attach to. However, it's better to specify\r\n * it explicitly.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.dragStart = function (io, pointer) {\n if (!pointer) {\n pointer = this.getDragPointer(io);\n }\n\n if (pointer) {\n this.handleDown(io, pointer, pointer.lastDownEvent);\n }\n };\n /**\r\n * Manually ends drag on the element.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.dragStop = function (io, pointer, cancelled) {\n if (!pointer) {\n pointer = this.getDragPointer(io);\n }\n\n if (pointer && !cancelled) {\n this.handleGlobalUp(pointer, pointer.lastUpEvent, cancelled);\n }\n };\n /**\r\n * This method uses a fuzzy logic to find the pointer to be used for dragging.\r\n * Beware that this is not a rock-solid solution. If there are a few objects\r\n * being dragged at the same time, you may get unexepected results.\r\n *\r\n * @param io InteractionObject to get pointers from\r\n * @return Pointer currently being used for dragging\r\n */\n\n\n Interaction.prototype.getDragPointer = function (io) {\n if (io) {\n // InteractionObject is supplied\n // Use it's first down pointer\n return io.downPointers.getIndex(0);\n } else if (this.transformedObjects.length) {\n // Use first dragged object\n return this.getDragPointer(this.transformedObjects.getIndex(0));\n } else {\n return undefined;\n }\n };\n /**\r\n * ==========================================================================\r\n * Utils\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns pointer id for the given event object.\r\n *\r\n * @param ev Event\r\n * @return Pointer ID\r\n */\n\n\n Interaction.prototype.getPointerId = function (ev) {\n var id = \"\";\n\n if ($type.hasValue(ev.identifier)) {\n id = \"\" + ev.identifier;\n } else if ($type.hasValue(ev.pointerId)) {\n id = \"\" + ev.pointerId;\n } else {\n id = \"m\";\n }\n\n return id.replace(\"-\", \"\");\n };\n /**\r\n * Returns a cursor position of the event.\r\n *\r\n * @param ev Original event\r\n * @return Event point\r\n */\n\n\n Interaction.prototype.getPointerPoint = function (ev) {\n return {\n \"x\": ev.clientX,\n \"y\": ev.clientY\n };\n };\n /**\r\n * Returns [[Pointer]] object that is associated with the Event.\r\n *\r\n * If no such [[Pointer]] object exists, it is created.\r\n *\r\n * @param ev Event\r\n * @return Pointer\r\n */\n\n\n Interaction.prototype.getPointer = function (ev) {\n // Get pointer id\n var id = this.getPointerId(ev); // Get current coordinates\n\n var point = this.getPointerPoint(ev); // Look for the pointer in the Dictionary if it maybe already exists\n\n var pointer;\n\n if (this.pointers.hasKey(id)) {\n // We already have such pointer\n pointer = this.pointers.getKey(id); // We need this, because Edge reuses pointer ids across touch and mouse\n\n pointer.touch = this.isPointerTouch(ev); // Reset pointer\n //pointer.point = point;\n } else {\n // Init pointer\n pointer = {\n \"id\": id,\n //\"touch\": !(ev instanceof MouseEvent) || ((ev).pointerType && (ev).pointerType != \"pointer\"),\n //\"touch\": !(ev instanceof MouseEvent) || ((ev).pointerType && (ev).pointerType != \"mouse\"),\n \"touch\": this.isPointerTouch(ev),\n \"startPoint\": point,\n \"startTime\": $time.getTime(),\n \"point\": point,\n \"track\": [],\n \"swipeCanceled\": false,\n \"dragStartEvents\": []\n }; // Add first breadcrumb\n\n this.addBreadCrumb(pointer, point); // Add for re-use later\n\n this.pointers.setKey(id, pointer);\n } // Log last event\n\n\n pointer.lastEvent = ev;\n this.lastPointer = pointer;\n return pointer;\n };\n /**\r\n * Determines if pointer event originated from a touch pointer or mouse.\r\n *\r\n * @param ev Original event\r\n * @return Touch pointer?\r\n */\n\n\n Interaction.prototype.isPointerTouch = function (ev) {\n if (typeof Touch !== \"undefined\" && ev instanceof Touch) {\n return true;\n } else if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && $type.hasValue(ev.pointerType)) {\n switch (ev.pointerType) {\n case \"touch\":\n case \"pen\":\n case 2:\n return true;\n\n case \"mouse\":\n case 4:\n return false;\n\n default:\n return !(ev instanceof MouseEvent);\n }\n } else if ($type.hasValue(ev.type)) {\n if (ev.type.match(/^mouse/)) {\n return false;\n }\n }\n\n return true;\n };\n /**\r\n * Resets the poiner to original state, i.e. cleans movement information,\r\n * starting point, etc.\r\n *\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.resetPointer = function (pointer, ev) {\n // Get current coordinates\n var point = this.getPointerPoint(ev);\n ;\n pointer.startTime = $time.getTime();\n pointer.startPoint = {\n x: point.x,\n y: point.y\n };\n pointer.point = {\n x: point.x,\n y: point.y\n };\n pointer.track = [];\n pointer.swipeCanceled = false; //clearTimeout(pointer.swipeTimeout);\n //clearTimeout(pointer.holdTimeout);\n };\n /**\r\n * Adds a \"breadcrumb\" point to the [[Pointer]] to log its movement path.\r\n *\r\n * @param pointer Pointer\r\n * @param point Point coordinates\r\n */\n\n\n Interaction.prototype.addBreadCrumb = function (pointer, point) {\n pointer.track.push({\n \"timestamp\": $time.getTime(),\n \"point\": point\n });\n };\n /**\r\n * Prepares the document for various touch-related operations.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.lockDocument = function () {\n this.prepElement(this.body);\n };\n /**\r\n * Restores document functionality.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.unlockDocument = function () {\n if (this.transformedObjects.length == 0) {\n this.restoreAllStyles(this.body);\n }\n };\n /**\r\n * Lock element (disable all touch)\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.lockElement = function (io) {\n this.prepElement(io);\n };\n /**\r\n * Restores element's functionality.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.unlockElement = function (io) {\n this.restoreAllStyles(io);\n };\n /**\r\n * Locks document's wheel scroll.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.lockWheel = function () {\n window.addEventListener(this._pointerEvents.wheel, this.wheelLockEvent, this._passiveSupported ? {\n passive: false\n } : false);\n };\n /**\r\n * Unlocks document's wheel scroll.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Interaction.prototype.unlockWheel = function () {\n window.removeEventListener(this._pointerEvents.wheel, this.wheelLockEvent);\n };\n /**\r\n * Checks if top element at pointer's position belongs to the SVG.\r\n *\r\n * @ignore Exlude from docs\r\n * @param pointer Pointer\r\n * @param svg The element\r\n * @param id A unique identifier of the object that is checking for locality\r\n * @return Belongs to SVG\r\n */\n\n\n Interaction.prototype.isLocalElement = function (pointer, svg, id) {\n var cached = this.getCache(\"local_pointer_\" + pointer.id);\n\n if ($type.hasValue(cached)) {\n return cached;\n }\n\n var doc = $dom.getRoot(svg) || document;\n\n if (doc.elementFromPoint) {\n var target = doc.elementFromPoint(pointer.point.x, pointer.point.y);\n var local = target && $dom.contains(svg, target);\n this.setCache(\"local_pointer_\" + pointer.id + \"_\" + id, local, 100);\n return local;\n }\n\n return false;\n };\n /**\r\n * A function that cancels mouse wheel scroll.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n * @return Returns `false` to cancel\r\n */\n\n\n Interaction.prototype.wheelLockEvent = function (ev) {\n ev.preventDefault();\n return false;\n };\n /**\r\n * Applies a set of styles to an element. Stores the original styles so they\r\n * can be restored later.\r\n *\r\n * @ignore\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.prepElement = function (io) {\n var el = io.element;\n\n if (el) {\n // Define possible props\n var props = [\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\", \"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\", \"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\", \"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\", \"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\", \"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"];\n\n for (var i = 0; i < props.length; i++) {\n if (props[i] in el.style) {\n this.setTemporaryStyle(io, props[i], \"none\");\n }\n } // Remove iOS-specific selection;\n\n\n this.setTemporaryStyle(io, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\"); //this.setTemporaryStyle(io, \"webkitOverflowScrolling\", \"none\");\n }\n };\n /**\r\n * Restores replaced styles\r\n *\r\n * @ignore\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.unprepElement = function (io) {\n var el = io.element;\n\n if (el) {\n // Define possible props\n var props = [\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\", \"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\", \"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\", \"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\", \"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\", \"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"];\n\n for (var i = 0; i < props.length; i++) {\n if (props[i] in el.style) {\n this.restoreStyle(io, props[i]);\n }\n } // Remove iOS-specific selection;\n\n\n this.restoreStyle(io, \"tapHighlightColor\"); //this.restoreStyle(io, \"webkitOverflowScrolling\");\n }\n };\n /**\r\n * Returns an option associated with hit events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getHitOption = function (io, option) {\n var res = io.hitOptions[option];\n\n if (typeof res === \"undefined\") {\n res = this.hitOptions[option];\n }\n\n return res;\n };\n /**\r\n * Returns an option associated with hover events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getHoverOption = function (io, option) {\n var res = io.hoverOptions[option];\n\n if (typeof res === \"undefined\") {\n res = this.hoverOptions[option];\n }\n\n return res;\n };\n /**\r\n * Returns an option associated with swipe events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getSwipeOption = function (io, option) {\n var res = io.swipeOptions[option];\n\n if (typeof res === \"undefined\") {\n res = this.swipeOptions[option];\n }\n\n return res;\n };\n /**\r\n * Returns an option for keyboard.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getKeyboardOption = function (io, option) {\n var res = io.keyboardOptions[option];\n\n if (typeof res === \"undefined\") {\n res = this.keyboardOptions[option];\n }\n\n return res;\n };\n /**\r\n * Returns an option for mouse.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getMouseOption = function (io, option) {\n var res = io.mouseOptions[option];\n\n if (typeof res === \"undefined\") {\n res = this.mouseOptions[option];\n }\n\n return res;\n };\n /**\r\n * Returns an option associated with inertia.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param type Inertia type\r\n * @param option Option key\r\n * @return Option value\r\n */\n\n\n Interaction.prototype.getInertiaOption = function (io, type, option) {\n var options = io.inertiaOptions.getKey(type);\n var res;\n\n if (options && $type.hasValue(options[option])) {\n res = options[option];\n } else {\n res = this.inertiaOptions.getKey(type)[option];\n }\n\n return res;\n };\n /**\r\n * Stops currently going on inertia. Useful if inertia is currently being\r\n * animated and the object is being interacted with.\r\n *\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.stopInertia = function (io) {\n var x;\n var inertias = [\"move\", \"resize\"];\n\n for (var i = 0; i < inertias.length; i++) {\n x = inertias[i];\n\n if (io.inertias.hasKey(x)) {\n var inertia = io.inertias.getKey(x);\n\n if (inertia) {\n inertia.dispose(); //io.inertiaAnimations.removeKey(x);\n //this.processDragStop(io);\n\n continue;\n }\n }\n }\n };\n /**\r\n * Check if swiping is currently being performed on an object.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer to check\r\n * @return `true` if swiping\r\n */\n\n\n Interaction.prototype.swiping = function (io, pointer) {\n var now = $time.getTime();\n\n if (pointer.swipeCanceled || !io.swipeable) {\n return false;\n } else if (Math.abs(pointer.startPoint.y - pointer.point.y) < this.getSwipeOption(io, \"verticalThreshold\") && pointer.startTime > now - this.getSwipeOption(io, \"time\")) {\n return true;\n } else {\n return false;\n }\n };\n /**\r\n * Returns `true` if a successfull swipe action was performed on an element.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @return Swiped?\r\n */\n\n\n Interaction.prototype.swiped = function (io, pointer) {\n var now = $time.getTime();\n\n if (pointer.swipeCanceled) {\n return false;\n } else if (Math.abs(pointer.startPoint.x - pointer.point.x) > this.getSwipeOption(io, \"horizontalThreshold\") && Math.abs(pointer.startPoint.y - pointer.point.y) < this.getSwipeOption(io, \"verticalThreshold\") && pointer.startTime > now - this.getSwipeOption(io, \"time\")) {\n return true;\n } else {\n return false;\n }\n };\n /**\r\n * Applies style to mouse cursor based on its stage in relation to\r\n * [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param Element\r\n */\n\n\n Interaction.prototype.applyCursorOverStyle = function (io) {\n // Get sprite's cursor ooptions\n var options = io.cursorOptions;\n\n if (!$type.hasValue(options.overStyle)) {\n return;\n } // Apply cursor down styles\n\n\n for (var i = 0; i < options.overStyle.length; i++) {\n $dom.setStyle(io.element, options.overStyle[i].property, options.overStyle[i].value);\n }\n };\n /**\r\n * Applies style to mouse cursor based on its stage in relation to\r\n * [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.applyCursorDownStyle = function (io, pointer) {\n // Not applicable for touch pointers since they don't display a cursor\n if (pointer && pointer.touch) {\n return;\n }\n\n var downStyle = io.cursorOptions.downStyle; // Is down?\n\n if (io.downPointers.contains(pointer) && $type.hasValue(downStyle)) {\n // Apply cursor down styles\n for (var i = 0; i < downStyle.length; i++) {\n this.setTemporaryStyle(this.body, downStyle[i].property, downStyle[i].value);\n this.setTemporaryStyle(io, downStyle[i].property, downStyle[i].value);\n }\n }\n };\n /**\r\n * Restores original cursor style for the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\n\n\n Interaction.prototype.restoreCursorDownStyle = function (io, pointer) {\n // Not applicable for touch pointers since they don't display a cursor\n if (pointer && pointer.touch) {\n return;\n }\n\n var downStyle = io.cursorOptions.downStyle; // Is down?\n\n if (io.downPointers.contains(pointer) && $type.hasValue(downStyle)) {\n // Apply cursor down styles\n for (var i = 0; i < downStyle.length; i++) {\n this.restoreStyle(this.body, downStyle[i].property);\n this.restoreStyle(io, downStyle[i].property);\n }\n }\n };\n /**\r\n * Sets style on the body of the document.\r\n *\r\n * @ignore Exclude from docs\r\n * @param style Style definitions\r\n */\n\n\n Interaction.prototype.setGlobalStyle = function (style) {\n var body = getInteraction().body;\n var styles = $type.isArray(style) ? style : [style];\n\n for (var i = 0; i < styles.length; i++) {\n this.setTemporaryStyle(body, styles[i].property, styles[i].value);\n }\n };\n /**\r\n * Restores style on the body of the document.\r\n *\r\n * @ignore Exclude from docs\r\n * @param style Style definitions\r\n */\n\n\n Interaction.prototype.restoreGlobalStyle = function (style) {\n var body = getInteraction().body;\n var styles = $type.isArray(style) ? style : [style];\n\n for (var i = 0; i < styles.length; i++) {\n this.restoreStyle(body, styles[i].property);\n }\n };\n /**\r\n * Checks if element is a non-cahrt element.\r\n *\r\n * @param io InteractionObject\r\n * @return Global element?\r\n */\n\n\n Interaction.prototype.isGlobalElement = function (io) {\n return document.body === io.element;\n };\n /**\r\n * Checks if pointer has moved since it was created.\r\n *\r\n * @param pointer Pointer\r\n * @param tolerance Tolerance in pixels\r\n * @param minTime Minimum time required for the pointer to be down to be considered moved\r\n * @return `true` if the pointer has moved\r\n */\n\n\n Interaction.prototype.moved = function (pointer, tolerance, minTime) {\n /*// If there was more time, we don't care if cursor actually moved\r\n let duration = $time.getTime() - pointer.startTime;\r\n if ($type.hasValue(minTime) && (minTime > duration)) {\r\n return false;\r\n }*/\n if (minTime === void 0) {\n minTime = 300;\n } // That was quick measure shift\n\n\n var shift = this.getShift(pointer);\n return Math.abs(shift.x) > tolerance || Math.abs(shift.y) > tolerance;\n };\n /**\r\n * Returns if pointer is \"old\", meaning it has been pressing for more than\r\n * X milliseconds.\r\n *\r\n * @ignore\r\n * @param pointer Pointer\r\n * @param minTime Minimum time to consider pointer old\r\n * @return {boolean}\r\n */\n\n\n Interaction.prototype.old = function (pointer, minTime) {\n if (minTime === void 0) {\n minTime = 300;\n }\n\n return $time.getTime() - pointer.startTime > minTime;\n };\n /**\r\n * Returns total a shift in pointers coordinates between its original\r\n * position and now.\r\n *\r\n * @param pointer Pointer\r\n * @return Shift in coordinates (x/y)\r\n */\n\n\n Interaction.prototype.getShift = function (pointer) {\n return {\n \"x\": pointer.startPoint.x - pointer.point.x,\n \"y\": pointer.startPoint.y - pointer.point.y\n };\n };\n /**\r\n * Returns a point from [[Pointer]]'s move history at a certain timetamp.\r\n *\r\n * @param pointer Pointer\r\n * @param timestamp Timestamp\r\n * @return Point\r\n */\n\n\n Interaction.prototype.getTrailPoint = function (pointer, timestamp) {\n var res;\n\n for (var i = 0; i < pointer.track.length; i++) {\n if (pointer.track[i].timestamp >= timestamp) {\n res = pointer.track[i];\n break;\n }\n }\n\n return res;\n };\n /**\r\n * Checks if same pointer already exists in the list.\r\n *\r\n * @param list List to check agains\r\n * @param pointer Pointer\r\n * @return Exists?\r\n */\n\n\n Interaction.prototype.pointerExists = function (list, pointer) {\n var exists = false;\n list.each(function (item) {\n if (item == pointer) {\n return;\n }\n\n exists = item.point.x == pointer.point.x && item.point.y == pointer.point.y;\n });\n return exists;\n };\n /**\r\n * Returns an [[InteractionObject]] representation of a DOM element.\r\n *\r\n * You can use this on any HTML or SVG element, to add interactive features\r\n * to it.\r\n *\r\n * @param element Element\r\n * @return InteractionObject\r\n */\n\n\n Interaction.prototype.getInteraction = function (element) {\n return new InteractionObject(element);\n };\n /**\r\n * Sets a style property on an element. Stores original value to be restored\r\n * later with [[restoreStyle]].\r\n *\r\n * @see {@link restoreStyle}\r\n * @param io Element\r\n * @param property Property\r\n * @param value Value\r\n */\n\n\n Interaction.prototype.setTemporaryStyle = function (io, property, value) {\n // Get element\n //let el = io.element.tagName == \"g\" ? io.element.parentNode : io.element;\n var el = io.element; // Save original property if it is set and hasn't been saved before already\n\n if ($type.hasValue(el.style[property]) && !io.replacedStyles.hasKey(property)) {\n io.replacedStyles.setKey(property, el.style[property]);\n } // Replace with the new one\n\n\n $dom.setStyle(el, property, value);\n };\n /**\r\n * Restores specific style on an element.\r\n *\r\n * @param io Element\r\n * @param property Style property\r\n */\n\n\n Interaction.prototype.restoreStyle = function (io, property) {\n // Reset style\n if (io.replacedStyles.hasKey(property)) {\n io.element.style[property] = io.replacedStyles.getKey(property);\n io.replacedStyles.removeKey(property);\n } else {\n delete io.element.style[property];\n }\n };\n /**\r\n * Restore temporarily reset styles on an element.\r\n *\r\n * @param io Element\r\n */\n\n\n Interaction.prototype.restoreAllStyles = function (io) {\n $iter.each(io.replacedStyles.iterator(), function (a) {\n var key = a[0];\n var value = a[1];\n io.element.style[key] = value;\n io.replacedStyles.removeKey(key);\n });\n };\n /**\r\n * Disposes this object and cleans up after itself.\r\n */\n\n\n Interaction.prototype.dispose = function () {\n if (!this.isDisposed()) {\n _super.prototype.dispose.call(this);\n\n this.restoreAllStyles(this.body);\n this.unlockWheel();\n }\n }; // @ts-ignore Used for debugging\n\n\n Interaction.prototype.log = function (text, ev, io) {\n var show = true;\n\n if (show) {\n // Touchlist?\n if (ev.changedTouches) {\n for (var i = 0; i < ev.changedTouches.length; i++) {\n this.logTouch(text, ev.type, ev.changedTouches[i]);\n }\n\n return;\n } // Get type\n\n\n var type = \"\";\n\n if (ev.pointerType) {\n switch (ev.pointerType) {\n case 2:\n type = \"touch\";\n break;\n\n case 4:\n type = \"mouse\";\n break;\n\n default:\n type = ev.pointerType;\n break;\n }\n } else if (typeof TouchEvent != \"undefined\" && ev instanceof TouchEvent) {\n type = \"touch\";\n } else if (ev.type.match(/^mouse/)) {\n type = \"mouse\";\n } else {\n type = \"???\";\n } // Get ID\n\n\n var id = \"\";\n\n if ($type.hasValue(ev.identifier)) {\n id = ev.identifier;\n } else if ($type.hasValue(ev.pointerId)) {\n id = ev.pointerId;\n } else {\n id = \"???\";\n }\n\n if (io) {\n console.log(text + \" (\" + io.uid + \") \" + ev.type + \" \" + type + \" \" + id);\n } else {\n console.log(text + \" \" + ev.type + \" \" + type + \" \" + id);\n }\n }\n };\n /**\r\n * Checks whether there are currently any objects being transformed (dragged\r\n * or resized).\r\n *\r\n * If `except` is set, that object will be ignored.\r\n *\r\n * @since 4.9.3\r\n * @param except Ignore this object(s)\r\n * @return Objects are being transformed\r\n */\n\n\n Interaction.prototype.areTransformed = function (except) {\n var count = this.transformedObjects.length;\n\n if (except) {\n var ex = $type.isArray(except) ? except : [except];\n\n for (var i = 0; i < ex.length; i++) {\n if (this.transformedObjects.contains(ex[i])) {\n count--;\n }\n }\n }\n\n return count > 0;\n };\n /**\r\n * Log.\r\n */\n\n\n Interaction.prototype.logTouch = function (text, type, ev) {\n console.log(text + \" \" + type + \" \" + \"touch\" + \" \" + ev.identifier);\n };\n\n Object.defineProperty(Interaction, \"passiveSupported\", {\n /**\r\n * Indicates if passive mode options is supported by this browser.\r\n */\n get: function get() {\n var _this = this;\n\n if (this._passiveSupported == null) {\n // Check for passive mode support\n try {\n var options_1 = Object.defineProperty({}, \"passive\", {\n get: function get() {\n _this._passiveSupported = true;\n }\n });\n window.addEventListener(\"test\", options_1, options_1);\n window.removeEventListener(\"test\", options_1, options_1);\n } catch (err) {\n this._passiveSupported = false;\n }\n }\n\n return this._passiveSupported;\n },\n enumerable: true,\n configurable: true\n });\n return Interaction;\n}(BaseObjectEvents);\n\nexport { Interaction };\nvar interaction = null;\n/**\r\n * Returns a single unified global instance of [[Interaction]].\r\n *\r\n * All code should use this function, rather than create their own instances\r\n * of [[Interaction]].\r\n */\n\nexport function getInteraction() {\n if (interaction == null) {\n interaction = new Interaction();\n }\n\n return interaction;\n}","/**\r\n * Popup class is used to display information over chart area.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport popupCSS from \"./PopupCSS\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { BaseObjectEvents } from \"../Base\";\nimport { getInteraction } from \"../interaction/Interaction\";\nimport { keyboard } from \"../utils/Keyboard\";\nimport { MultiDisposer } from \"../utils/Disposer\";\nimport { getShadowRoot } from \"../utils/DOM\";\nimport * as $type from \"../utils/Type\";\nimport * as $object from \"../utils/Object\";\n/**\r\n * Shows an HTML popup which covers window or a chart area.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/popups-and-modals/} For examples and docs on Popups and Modals.\r\n * @todo Positioning over whole window\r\n */\n\nvar Popup =\n/** @class */\nfunction (_super) {\n __extends(Popup, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Popup() {\n var _this = _super.call(this) || this;\n /**\r\n * Adapter.\r\n */\n\n\n _this.adapter = new Adapter(_this);\n /**\r\n * Holds references to various HTML elements, Popup consists of.\r\n */\n\n _this._elements = {};\n /**\r\n * Holdes Interaction objects for various Popup's elements.\r\n */\n\n _this._IOs = {};\n /**\r\n * Contents of popup window.\r\n */\n\n _this._content = \"\";\n /**\r\n * Title of the popup window.\r\n */\n\n _this._title = \"\";\n /**\r\n * Prefix to apply to class names for popup elements.\r\n */\n\n _this._classPrefix = \"ampopup\";\n /**\r\n * If set to `true` [[Popup]] will use default styles.\r\n */\n\n _this._defaultStyles = true;\n /**\r\n * If set to `true` [[Popup]] will dim out all chart content behind it by\r\n * showing a semi-transparent fill. (curtain)\r\n */\n\n _this._showCurtain = false;\n /**\r\n * Indicates whether popup can be dragged.\r\n */\n\n _this._draggable = true;\n /**\r\n * Horizontal position of the content window.\r\n */\n\n _this._align = \"center\";\n /**\r\n * Resize popup as images are being loaded.\r\n */\n\n _this._dynamicResize = true;\n /**\r\n * Vertical position of the content window.\r\n */\n\n _this._verticalAlign = \"middle\";\n /**\r\n * Shift in position of the element. (used for dragging)\r\n */\n\n _this._shift = {\n x: 0,\n y: 0\n };\n /**\r\n * Temporary shift in position of the element. (used for dragging)\r\n */\n\n _this._tempShift = {\n x: 0,\n y: 0\n };\n /**\r\n * A title for screen readers. It is very highly recommended to set that title\r\n * so that people using screen reader tools can get an immediate summary of\r\n * the information in the popup.\r\n */\n\n _this._readerTitle = \"\";\n /**\r\n * Is popup closable?\r\n */\n\n _this._closable = true;\n /**\r\n * Was CSS already loaded?\r\n */\n\n _this._cssLoaded = false;\n /**\r\n * If set to other than \"none\" will try to re-adjust the position of the\r\n * popop to fit within chart container or browser window.\r\n *\r\n * @ignore Feature not yet implemented\r\n * @todo Implement\r\n */\n\n _this._fitTo = \"window\";\n /**\r\n * Identifies if this object is a \"template\" and should not be treated as\r\n * real object that is drawn or actually used in the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.isTemplate = false;\n /**\r\n * Indicates if the element was already sized and should not be measured for\r\n * size again, saving some precious resources.\r\n */\n\n _this._sized = false;\n _this.className = \"Popup\";\n return _this;\n }\n /**\r\n * Shows popup window.\r\n */\n\n\n Popup.prototype.open = function () {\n if (this.container) {\n if (this._elements.wrapper) {\n this.container.appendChild(this._elements.wrapper);\n }\n\n if (this._elements.curtain) {\n this.container.appendChild(this._elements.curtain);\n this.showCurtain = this.showCurtain;\n }\n\n this.positionElement();\n this.dispatchImmediately(\"opened\");\n }\n };\n /**\r\n * Hides popup window.\r\n */\n\n\n Popup.prototype.close = function () {\n if (this._elements.wrapper) {\n if (this._elements.wrapper.parentElement) {\n this._elements.wrapper.parentElement.removeChild(this._elements.wrapper);\n }\n }\n\n if (this._elements.curtain) {\n if (this._elements.curtain.parentElement) {\n this._elements.curtain.parentElement.removeChild(this._elements.curtain);\n }\n }\n\n this.dispatchImmediately(\"closed\");\n this.releasePointers();\n };\n /**\r\n * Destroy (dispose) popup.\r\n */\n\n\n Popup.prototype.dispose = function () {\n this.close();\n\n _super.prototype.dispose.call(this);\n };\n /**\r\n * Positions content element in the center of popup based on its actual size.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Popup.prototype.positionElement = function (forceResize) {\n var _this = this;\n\n if (forceResize === void 0) {\n forceResize = true;\n }\n\n if (!this._elements.wrapper) {\n return;\n }\n\n setTimeout(function () {\n if (!_this._elements.wrapper) {\n return;\n }\n\n if (forceResize || !_this._sized) {\n _this._elements.wrapper.style.opacity = \"0.01\";\n _this._elements.wrapper.style.left = \"0\";\n _this._elements.wrapper.style.top = \"0\";\n _this._elements.wrapper.style.margin = \"0 0 0 0\";\n _this._elements.wrapper.style.width = \"\";\n _this._elements.wrapper.style.height = \"\";\n\n var bbox = _this._elements.wrapper.getBoundingClientRect();\n\n _this._elements.wrapper.style.width = bbox.width + \"px\";\n _this._elements.wrapper.style.height = bbox.height + \"px\";\n _this._sized = true;\n } // Check for any images that are not yet loaded\n\n\n if (_this.dynamicResize) {\n var images = _this._elements.wrapper.getElementsByTagName(\"img\");\n\n for (var i = 0; i < images.length; i++) {\n var image = images[i];\n\n if (!image.complete) {\n // Resize popup once again when image is loaded\n image.addEventListener(\"load\", function () {\n _this.positionElement(true);\n }); // Do this for one image only as it will be checked again next time\n // anyway\n\n break;\n }\n }\n }\n\n setTimeout(function () {\n if (!_this._elements.wrapper) {\n return;\n }\n\n var bbox;\n\n if ((forceResize || !_this._sized) && _this._bbox) {\n bbox = _this._bbox;\n } else {\n bbox = _this._elements.wrapper.getBoundingClientRect();\n _this._elements.wrapper.style.opacity = \"\";\n } // Set horizontal positioning\n\n\n switch (_this.align) {\n case \"left\":\n _this._elements.wrapper.style.left = \"0\";\n _this._elements.wrapper.style.right = \"auto\";\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\n break;\n\n case \"center\":\n _this._elements.wrapper.style.left = \"50%\";\n _this._elements.wrapper.style.right = \"auto\";\n _this._elements.wrapper.style.marginLeft = _this.toStyle(Math.round(-bbox.width / 2) + (_this._shift.x + _this._tempShift.x));\n break;\n\n case \"right\":\n _this._elements.wrapper.style.left = \"auto\";\n _this._elements.wrapper.style.right = \"0\";\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\n break;\n\n default:\n _this._elements.wrapper.style.left = _this.toStyle(_this.left) || \"auto\";\n _this._elements.wrapper.style.right = _this.toStyle(_this.right) || \"auto\";\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\n break;\n } // Set vertical positioning\n\n\n switch (_this.verticalAlign) {\n case \"top\":\n _this._elements.wrapper.style.top = \"0\";\n _this._elements.wrapper.style.bottom = \"auto\";\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\n break;\n\n case \"middle\":\n _this._elements.wrapper.style.top = \"50%\";\n _this._elements.wrapper.style.bottom = \"auto\";\n _this._elements.wrapper.style.marginTop = _this.toStyle(Math.round(-bbox.height / 2) + (_this._shift.y + _this._tempShift.y));\n break;\n\n case \"bottom\":\n _this._elements.wrapper.style.top = \"auto\";\n _this._elements.wrapper.style.bottom = \"0\";\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\n break;\n\n default:\n _this._elements.wrapper.style.top = _this.toStyle(_this.top) || \"auto\";\n _this._elements.wrapper.style.bottom = _this.toStyle(_this.bottom) || \"auto\";\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\n break;\n }\n }, 1);\n }, 1);\n };\n\n Popup.prototype.setupDragging = function () {\n var _this = this;\n\n if (this.draggable) {\n if (!this._IOs.header.events.has(\"drag\")) {\n this._IOs.header.events.on(\"drag\", function (ev) {\n _this._tempShift.x = ev.shift.x;\n _this._tempShift.y = ev.shift.y;\n\n _this.positionElement(false);\n });\n }\n\n if (!this._IOs.header.events.has(\"dragstop\")) {\n this._IOs.header.events.on(\"dragstop\", function (ev) {\n _this._shift.x += _this._tempShift.x;\n _this._shift.y += _this._tempShift.y;\n _this._tempShift.x = 0;\n _this._tempShift.y = 0;\n\n _this.positionElement(false);\n });\n }\n } else {\n if (this._IOs.header) {\n getInteraction().unprepElement(this._IOs.header);\n\n if (this._IOs.header.events.has(\"drag\")) {\n this._IOs.header.events.off(\"drag\");\n }\n\n if (this._IOs.header.events.has(\"dragstop\")) {\n this._IOs.header.events.off(\"dragstop\");\n }\n }\n }\n };\n\n Popup.prototype.toStyle = function (value) {\n if (!$type.hasValue(value)) {\n return null;\n } else if ($type.isNumber(value)) {\n return \"\" + value + \"px\";\n } else {\n return value.toString();\n }\n };\n\n Object.defineProperty(Popup.prototype, \"classPrefix\", {\n /**\r\n * A prefix that is applied to class names of various popup elements.\r\n *\r\n * @return Class name prefix\r\n */\n get: function get() {\n return this.adapter.apply(\"classPrefix\", this._classPrefix);\n },\n\n /**\r\n * @param value Class name prefix\r\n */\n set: function set(value) {\n this._classPrefix = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"classPrefixRaw\", {\n /**\r\n * Returns raw prefix (without adapters applied).\r\n *\r\n * @ignore Exclude from docs\r\n * @return Class name prefix\r\n */\n get: function get() {\n return this._classPrefix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"content\", {\n /**\r\n * @return Popup content\r\n */\n get: function get() {\n return this.adapter.apply(\"content\", this._content);\n },\n\n /**\r\n * Popup content.\r\n *\r\n * Popup content can be any valid HTML, including CSS.\r\n *\r\n * @param value Popup content\r\n */\n set: function set(value) {\n if (this._content != value) {\n this._content = value;\n\n if (!this._elements.content) {\n this.createContentElement();\n }\n\n this._elements.content.innerHTML = value;\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Popup.prototype.getClassNames = function () {\n return this.adapter.apply(\"classNames\", {\n wrapperClass: this.classPrefix + \"\",\n headerClass: this.classPrefix + \"-header\",\n titleClass: this.classPrefix + \"-title\",\n contentClass: this.classPrefix + \"-content\",\n insideClass: this.classPrefix + \"-inside\",\n curtainClass: this.classPrefix + \"-curtain\",\n closeClass: this.classPrefix + \"-close\"\n });\n };\n /**\r\n * Creates content element.\r\n */\n\n\n Popup.prototype.createContentElement = function () {\n // Check if it's created already\n if (this._elements.wrapper) {\n return;\n } // Get class names for popup elements\n\n\n var classNames = this.getClassNames(); // Create content element\n\n var wrapper = document.createElement(\"div\");\n wrapper.className = classNames.contentClass;\n wrapper.style.opacity = \"0.01\"; // Create close button\n\n var close = document.createElement(\"a\");\n close.className = classNames.closeClass; // header title\n\n var header = document.createElement(\"div\");\n header.className = classNames.headerClass; // Content title\n\n var title = document.createElement(\"div\");\n title.innerHTML = this.title;\n title.className = classNames.titleClass;\n\n if (!this.title) {\n title.style.display = \"none\";\n } // Content div\n\n\n var content = document.createElement(\"div\");\n content.className = classNames.insideClass;\n content.innerHTML = this.content; // Set up events for content\n\n this._IOs.wrapper = getInteraction().getInteraction(wrapper);\n this._IOs.header = getInteraction().getInteraction(header);\n\n this._disposers.push(this._IOs.wrapper); // Set hover/out events\n\n\n this._IOs.wrapper.events.on(\"over\", this.disablePointers, this);\n\n this._IOs.wrapper.events.on(\"out\", this.releasePointers, this); // Create an InteractionObject for close\n\n\n this._IOs.close = getInteraction().getInteraction(close);\n\n this._disposers.push(this._IOs.close); // Hide close for now\n\n\n close.style.visibility = \"hidden\"; // Add accessible stuff\n\n wrapper.setAttribute(\"role\", \"dialog\"); // Add to wrapper\n\n header.appendChild(close);\n header.appendChild(title);\n wrapper.appendChild(header);\n wrapper.appendChild(content);\n this.container.appendChild(wrapper); // Save for later access\n\n this._elements.wrapper = wrapper;\n this._elements.header = header;\n this._elements.content = content;\n this._elements.title = title;\n this._elements.close = close; // Load CSS\n\n if (this.defaultStyles) {\n this.loadDefaultCSS();\n } // Create curtain as well\n\n\n this.createCurtainElement(); // Apply events\n\n this.applyEvents();\n this.applyReaderSettings(); // Draggable?\n\n this.setupDragging();\n };\n\n Object.defineProperty(Popup.prototype, \"title\", {\n /**\r\n * @return Popup title\r\n */\n get: function get() {\n return this.adapter.apply(\"title\", this._title);\n },\n\n /**\r\n * Popup title.\r\n *\r\n * Popup title can be any valid HTML, including CSS.\r\n *\r\n * @param value Popup title\r\n */\n set: function set(value) {\n if (this._title != value) {\n this._title = value;\n\n if (!this._elements.content) {\n this.createContentElement();\n }\n\n this._elements.title.innerHTML = value;\n this.positionElement();\n this.applyReaderSettings();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"readerTitle\", {\n /**\r\n * @return Popup content\r\n */\n get: function get() {\n return this.adapter.apply(\"readerTitle\", this._readerTitle != \"\" ? this._readerTitle : this.title);\n },\n\n /**\r\n * A title for screen readers. It is very highly recommended to set that title\r\n * so that people using screen reader tools can get an immediate summary of\r\n * the information in the popup.\r\n *\r\n * @param value Reader title\r\n */\n set: function set(value) {\n if (this._readerTitle != value) {\n this._readerTitle = value;\n this.applyReaderSettings();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"closable\", {\n /**\r\n * @return Closable?\r\n */\n get: function get() {\n return this.adapter.apply(\"closable\", this._closable);\n },\n\n /**\r\n * Is popup closable?\r\n *\r\n * If it is, it can be closed in a number of ways, e.g. by hitting ESC key,\r\n * clicking curtain, or clicking the close button.\r\n *\r\n * If it is not closable, the only way to close it is via `close()` call.\r\n *\r\n * @param value Closable?\r\n */\n set: function set(value) {\n if (value !== this._closable) {\n this._closable = value;\n this.applyEvents();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"fitTo\", {\n /**\r\n * @ignore\r\n * @todo Implement\r\n * @return Fit option\r\n */\n get: function get() {\n return this.adapter.apply(\"fitTo\", this._fitTo);\n },\n\n /**\r\n * If set to other than \"none\" will try to re-adjust the position of the\r\n * popop to fit within chart container or browser window.\r\n *\r\n * @ignore\r\n * @todo Implement\r\n * @default \"window\"\r\n * @param value Fit option\r\n */\n set: function set(value) {\n if (value != this._fitTo) {\n this._fitTo = value;\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"defaultStyles\", {\n /**\r\n * @return Use default CSS?\r\n */\n get: function get() {\n return this.adapter.apply(\"defaultStyles\", this._defaultStyles);\n },\n\n /**\r\n * Should popup use default CSS?\r\n *\r\n * If default CSS is disabled, an external CSS should handle the look of the\r\n * popup, since it will look quite out of place otherwise.\r\n *\r\n * @default true\r\n * @param Use default CSS?\r\n */\n set: function set(value) {\n if (this._defaultStyles != value) {\n this._defaultStyles = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"showCurtain\", {\n /**\r\n * @return Show curtain?\r\n */\n get: function get() {\n return this.adapter.apply(\"showCurtain\", this._showCurtain);\n },\n\n /**\r\n * Should popup use dim out all content behind it?\r\n *\r\n * @default false\r\n * @param Show curtain?\r\n */\n set: function set(value) {\n if (this._showCurtain != value) {\n this._showCurtain = value;\n\n if (this._elements.curtain) {\n this._elements.curtain.style.display = value ? \"block\" : \"none\";\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates curtain element.\r\n */\n\n Popup.prototype.createCurtainElement = function () {\n // Get class names for popup elements\n var classNames = this.getClassNames(); // Create the curtain\n\n var curtain = document.createElement(\"div\");\n curtain.className = classNames.curtainClass; // Append curtain to wrapper\n\n this.container.appendChild(curtain); // Create an InteractionObject for curtain because we might need to\n // set interactions on it\n\n this._IOs.curtain = getInteraction().getInteraction(curtain); // Add Curtain IO to disposers\n\n this._disposers.push(this._IOs.curtain); // Set events to disable underlying interactivity\n\n\n this._IOs.curtain.events.on(\"over\", this.disablePointers, this);\n\n this._IOs.curtain.events.on(\"out\", this.releasePointers, this); // Hide it?\n\n\n curtain.style.display = this.showCurtain ? \"block\" : \"none\"; // Save for later\n\n this._elements.curtain = curtain;\n };\n\n Object.defineProperty(Popup.prototype, \"draggable\", {\n /**\r\n * @return Show curtain?\r\n */\n get: function get() {\n return this.adapter.apply(\"draggable\", this._draggable);\n },\n\n /**\r\n * Can the popup be dragged with a pointer?\r\n *\r\n * @default false\r\n * @param Show curtain?\r\n */\n set: function set(value) {\n if (this._draggable != value) {\n this._draggable = value;\n this.setupDragging();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"dynamicResize\", {\n /**\r\n * @return Resize dynamically?\r\n */\n get: function get() {\n return this.adapter.apply(\"dynamicResize\", this._dynamicResize);\n },\n\n /**\r\n * Resize popup as images are being loaded.\r\n *\r\n * @default true\r\n * @since 4.9.17\r\n * @param Resize dynamically?\r\n */\n set: function set(value) {\n if (this._dynamicResize != value) {\n this._dynamicResize = value;\n this.positionElement(true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"align\", {\n /**\r\n * @return Horizontal position\r\n */\n get: function get() {\n return this.adapter.apply(\"align\", this._align);\n },\n\n /**\r\n * Horizontal positioning of the content window.\r\n *\r\n * Available options: \"left\", \"center\" (default), \"right\", and \"none\".\r\n *\r\n * @default \"center\"\r\n * @param Horizontal position\r\n */\n set: function set(value) {\n if (this._align != value) {\n this._align = value;\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"verticalAlign\", {\n /**\r\n * @return Vertical position\r\n */\n get: function get() {\n return this.adapter.apply(\"verticalAlign\", this._verticalAlign);\n },\n\n /**\r\n * Vertical positioning of the content window.\r\n *\r\n * Available options: \"top\", \"middle\" (default), \"bottom\", and \"none\".\r\n *\r\n * @default \"middle\"\r\n * @param Vertical position\r\n */\n set: function set(value) {\n if (this._verticalAlign != value) {\n this._verticalAlign = value;\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"left\", {\n /**\r\n * @return Left\r\n */\n get: function get() {\n return this.adapter.apply(\"left\", this._left);\n },\n\n /**\r\n * \"left\" coordinate of a non-aligned (`align = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `align` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Left\r\n */\n set: function set(value) {\n if (this.left != value) {\n this._left = value;\n this._align = \"none\";\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"right\", {\n /**\r\n * @return Right\r\n */\n get: function get() {\n return this.adapter.apply(\"right\", this._right);\n },\n\n /**\r\n * \"right\" coordinate of a non-aligned (`align = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `align` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Right\r\n */\n set: function set(value) {\n if (this.right != value) {\n this._right = value;\n this._align = \"none\";\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"top\", {\n /**\r\n * @return Top\r\n */\n get: function get() {\n return this.adapter.apply(\"top\", this._top);\n },\n\n /**\r\n * \"top\" coordinate of a non-aligned (`verticalAlign = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `verticalAlign` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Top\r\n */\n set: function set(value) {\n if (this.top != value) {\n this._top = value;\n this._verticalAlign = \"none\";\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"bottom\", {\n /**\r\n * @return Bottom\r\n */\n get: function get() {\n return this.adapter.apply(\"bottom\", this._bottom);\n },\n\n /**\r\n * \"bottom\" coordinate of a non-aligned (`verticalAlign = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `verticalAlign` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Bottom\r\n */\n set: function set(value) {\n if (this.bottom != value) {\n this._bottom = value;\n this._verticalAlign = \"none\";\n this.positionElement();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Popup.prototype, \"elements\", {\n /**\r\n * Returns an object with references to various elements of the Popup.\r\n *\r\n * * `wrapper`\r\n * * `title`\r\n * * `content`\r\n * * `close`\r\n * * `curtain`\r\n */\n get: function get() {\n return this._elements;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Loads popup CSS.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Popup.prototype.loadDefaultCSS = function () {\n if (!this._cssLoaded) {\n this._disposers.push(popupCSS(getShadowRoot(this.container), this.classPrefix));\n\n $object.each(this._elements, function (key, el) {\n el.style.display = \"\";\n });\n this._cssLoaded = true;\n }\n };\n /**\r\n * If popup is closable, this method adds various events to popup elements.\r\n */\n\n\n Popup.prototype.applyEvents = function () {\n var _this = this;\n\n if (this._IOs.close) {\n if (this.closable) {\n this._IOs.close.element.style.visibility = \"visible\";\n var disposers = [getInteraction().body.events.on(\"keyup\", function (ev) {\n if (keyboard.isKey(ev.event, \"esc\") && _this.closable) {\n _this.close();\n }\n }), this._IOs.close.events.on(\"hit\", function (ev) {\n _this.close();\n })];\n disposers.push(this._IOs.curtain.events.on(\"hit\", function (ev) {\n if (_this.showCurtain && _this.closable) {\n _this.close();\n }\n }));\n\n this._disposers.push(new MultiDisposer(disposers));\n } else {\n this._IOs.close.element.style.visibility = \"hidden\";\n }\n }\n };\n /**\r\n * Disables interactivity on parent chart.\r\n */\n\n\n Popup.prototype.disablePointers = function () {\n if (this.sprite) {\n this._spriteInteractionsEnabled = this.sprite.interactionsEnabled;\n this.sprite.interactionsEnabled = false;\n }\n };\n /**\r\n * Releases temporarily disabled pointers on parent chart.\r\n */\n\n\n Popup.prototype.releasePointers = function () {\n if ($type.hasValue(this._spriteInteractionsEnabled)) {\n this.sprite.interactionsEnabled = this._spriteInteractionsEnabled;\n this._spriteInteractionsEnabled = undefined;\n }\n };\n /**\r\n * Sets screen reader related settings.\r\n */\n\n\n Popup.prototype.applyReaderSettings = function () {\n this.elements.wrapper.setAttribute(\"aria-label\", this.readerTitle);\n };\n /**\r\n * Copies all properties and related data from different element.\r\n *\r\n * @param object Source element\r\n */\n\n\n Popup.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.container = source.container;\n this.sprite = source.sprite;\n this.classPrefix = source.classPrefixRaw;\n this.content = source.content;\n this.title = source.title;\n this.readerTitle = source.readerTitle;\n this.defaultStyles = source.defaultStyles;\n this.showCurtain = source.showCurtain;\n this.align = source.align;\n this.verticalAlign = source.verticalAlign;\n this.left = source.left;\n this.right = source.right;\n this.top = source.top;\n this.bottom = source.bottom;\n this.adapter.copyFrom(source.adapter);\n };\n\n return Popup;\n}(BaseObjectEvents);\n\nexport { Popup };","/**\r\n * Modal class is used to display information over chart area.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Popup } from \"./Popup\";\nimport { Adapter } from \"../utils/Adapter\";\n/**\r\n * Shows an HTML modal which covers window or a chart area.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/popups-and-modals/} For examples and docs on Popups and Modals.\r\n */\n\nvar Modal =\n/** @class */\nfunction (_super) {\n __extends(Modal, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Modal() {\n var _this = _super.call(this) || this;\n /**\r\n * Adapter.\r\n */\n\n\n _this.adapter = new Adapter(_this);\n _this.className = \"Modal\";\n _this.showCurtain = true;\n _this.draggable = false;\n return _this;\n }\n\n return Modal;\n}(Popup);\n\nexport { Modal };","import { __read, __spread } from \"tslib\";\nimport { options } from \"../Options\";\n/**\r\n * Outputs string to console if `verbose` is `true`.\r\n */\n\nexport function log() {\n var messages = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n\n if (options.verbose) {\n if (console) {\n console.log.apply(console, __spread(messages));\n }\n }\n}\n/**\r\n * Outputs a warning to the console.\r\n */\n\nexport function warn() {\n var messages = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n\n if (!options.suppressWarnings) {\n if (console) {\n console.warn.apply(console, __spread(messages));\n }\n }\n}","import * as $array from \"./Array\";\nimport * as $log from \"./Log\";\n\nvar Native =\n/** @class */\nfunction () {\n function Native() {\n var _this = this;\n\n this._targets = [];\n this._observer = new ResizeObserver(function (entries) {\n $array.each(entries, function (entry) {\n $array.each(_this._targets, function (x) {\n if (x.target === entry.target) {\n x.callback();\n }\n });\n });\n });\n }\n\n Native.prototype.addTarget = function (target, callback) {\n this._observer.observe(target, {\n box: \"content-box\"\n });\n\n this._targets.push({\n target: target,\n callback: callback\n });\n };\n\n Native.prototype.removeTarget = function (target) {\n this._observer.unobserve(target);\n\n $array.keepIf(this._targets, function (x) {\n return x.target !== target;\n });\n };\n\n return Native;\n}();\n\nvar Raf =\n/** @class */\nfunction () {\n function Raf() {\n this._targets = [];\n }\n\n Raf.prototype.addTarget = function (target, callback) {\n var _this = this;\n\n if (this._targets.length === 0) {\n var lastTime_1 = null;\n\n var loop_1 = function loop_1() {\n var currentTime = Date.now();\n\n if (lastTime_1 === null || currentTime > lastTime_1 + Raf.delay) {\n lastTime_1 = currentTime;\n $array.each(_this._targets, function (x) {\n var newSize = x.target.getBoundingClientRect();\n\n if (newSize.width !== x.size.width || newSize.height !== x.size.height) {\n x.size = newSize;\n x.callback();\n }\n });\n }\n\n _this._timer = requestAnimationFrame(loop_1);\n };\n\n this._timer = requestAnimationFrame(loop_1);\n }\n\n var size = target.getBoundingClientRect();\n\n this._targets.push({\n target: target,\n callback: callback,\n size: size\n });\n };\n\n Raf.prototype.removeTarget = function (target) {\n $array.keepIf(this._targets, function (x) {\n return x.target !== target;\n });\n\n if (this._targets.length === 0) {\n cancelAnimationFrame(this._timer);\n }\n };\n\n Raf.delay = 200;\n return Raf;\n}();\n\nvar observer = null;\n\nfunction makeSensor() {\n if (observer === null) {\n if (typeof ResizeObserver !== \"undefined\") {\n observer = new Native();\n } else {\n observer = new Raf();\n }\n }\n\n return observer;\n}\n\nvar ResizeSensor =\n/** @class */\nfunction () {\n function ResizeSensor(element, callback) {\n this._disposed = false;\n this._sensor = makeSensor();\n this._element = element;\n\n this._sensor.addTarget(element, callback);\n }\n\n ResizeSensor.prototype.isDisposed = function () {\n return this._disposed;\n };\n\n ResizeSensor.prototype.dispose = function () {\n if (!this._disposed) {\n this._disposed = true;\n\n this._sensor.removeTarget(this._element);\n }\n };\n\n Object.defineProperty(ResizeSensor.prototype, \"sensor\", {\n get: function get() {\n return this._sensor;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Deprecated: do not use.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n ResizeSensor.prototype.reset = function () {\n $log.warn(\"resizeSensor.reset() is no longer needed and can be removed\");\n };\n\n return ResizeSensor;\n}();\n\nexport { ResizeSensor };","/**\r\n * This functionality is related to the HTML wrapper that houses `` tag.\r\n */\nimport { Popup } from \"../elements/Popup\";\nimport { Modal } from \"../elements/Modal\";\nimport { ListTemplate, ListDisposer } from \"../utils/List\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $dom from \"../utils/DOM\";\nimport * as $array from \"../utils/Array\";\nimport * as $type from \"../utils/Type\";\nimport { ResizeSensor } from \"../utils/ResizeSensor\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A array of all SVG Containers (one SVG container per chart instance).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport var svgContainers = [];\n/**\r\n * A class used to create an HTML wrapper for the SVG contents.\r\n */\n\nvar SVGContainer =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n *\r\n * * Creates an HTML wrapper for SVG\r\n */\n function SVGContainer(htmlElement, ghost) {\n var _this = this;\n /**\r\n * Indicates if this object has already been deleted. Any\r\n * destruction/disposal code should take this into account when deciding\r\n * wheter to run potentially costly disposal operations if they already have\r\n * been run.\r\n */\n\n\n this._disposed = false;\n /**\r\n * If this component is in a separate HTML container, `autoResize` means the\r\n * module will constantly measure container's size and adopt contents to it.\r\n */\n\n this.autoResize = true;\n /**\r\n * Holds list of references to [[Sprite]] objects that should not be exported\r\n * when exporting chart to an image.\r\n *\r\n * @ignore\r\n */\n\n this.nonExportableSprites = [];\n /**\r\n * List of objects that need to be disposed when this one is disposed.\r\n */\n\n this._disposers = [];\n this.cssScale = 1; // This is needed so that it won't resize while printing, so that way printing works correctly.\n\n this._printing = false; // Log parent HTML element\n\n this.htmlElement = htmlElement;\n\n if (!ghost) {\n this._printing = false;\n this.initSensor();\n\n this._disposers.push($dom.addEventListener(window, \"beforeprint\", function () {\n _this._printing = true;\n }));\n\n this._disposers.push($dom.addEventListener(window, \"afterprint\", function () {\n _this._printing = false;\n }));\n } // Adds to containers array\n\n\n svgContainers.push(this);\n /**\r\n * Create child div for the container - it will have svg node\r\n * It might seem that this container is not necessay, however having it solves\r\n * a problems with mouse position detection and some other.\r\n */\n\n var svgContainer = document.createElement(\"div\");\n var style = svgContainer.style;\n style.width = \"100%\";\n style.height = \"100%\";\n style.position = \"relative\";\n htmlElement.appendChild(svgContainer);\n this.SVGContainer = svgContainer;\n }\n /**\r\n * (Re)Initializes a resize sensor.\r\n */\n\n\n SVGContainer.prototype.initSensor = function () {\n var _this = this;\n\n if (this.resizeSensor) {\n this.resizeSensor.dispose();\n }\n\n var callback = function callback() {\n if (_this.autoResize && !_this._printing) {\n _this.measure();\n }\n };\n\n this.resizeSensor = new ResizeSensor(this.htmlElement, callback);\n\n this._disposers.push(this.resizeSensor);\n };\n /**\r\n * Measures size of parent HTML element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n SVGContainer.prototype.measure = function () {\n var width = $utils.width(this.htmlElement);\n var height = $utils.height(this.htmlElement);\n var container = this.container;\n\n if (container) {\n if (this.width != width || this.height != height) {\n this.width = width;\n this.height = height;\n\n if (width > 0) {\n container.maxWidth = width;\n }\n\n if (height > 0) {\n container.maxHeight = height;\n }\n\n $dom.fixPixelPerfect(this.SVGContainer);\n }\n\n if (!container.maxWidth) {\n container.maxWidth = 0;\n }\n\n if (!container.maxHeight) {\n container.maxHeight = 0;\n }\n\n this.cssScale = 1;\n this.checkTransform(this.htmlElement);\n }\n };\n\n Object.defineProperty(SVGContainer.prototype, \"container\", {\n /**\r\n * @return Container\r\n */\n get: function get() {\n return this._container;\n },\n\n /**\r\n * A [[Container]] element which is placed into container.\r\n *\r\n * @param container Container\r\n */\n set: function set(container) {\n this._container = container;\n this.measure();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns if this object has been already been disposed.\r\n *\r\n * @return Is disposed?\r\n */\n\n SVGContainer.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Removes this container from SVG container list in system, which\r\n * effectively disables size change monitoring for it.\r\n */\n\n\n SVGContainer.prototype.dispose = function () {\n if (!this._disposed) {\n $array.remove(svgContainers, this);\n }\n\n $array.each(this._disposers, function (item) {\n item.dispose();\n });\n };\n\n Object.defineProperty(SVGContainer.prototype, \"hideOverflow\", {\n /**\r\n * Indicates if chart container should have its style set\r\n * to `overflow: hidden`.\r\n *\r\n * Normally, we don't want that, so that certain elements, such as tooltips,\r\n * would be able to go outside chart area.\r\n *\r\n * There is one issue though. Some browsers ignore SVG masks and would\r\n * display scrollbars if chart elements, that go outside chart area extend\r\n * outside window.\r\n *\r\n * This is especially true for [[MapChart]], which can have its elements\r\n * extend very widely when zoomed in. Even if those parts are not visible\r\n * because of SVG masks, some browsers might still display window scrollbars.\r\n *\r\n * This is why we set this setting to `true` in [[MapChart]].\r\n *\r\n * Other charts use default of `false`.\r\n */\n set: function set(value) {\n if (value) {\n this.SVGContainer.style.overflow = \"hidden\";\n } else {\n this.SVGContainer.style.overflow = \"\";\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SVGContainer.prototype, \"modal\", {\n /**\r\n * ==========================================================================\r\n * MODAL/POPUP RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns a [[Modal]] instance, associated with this chart.\r\n * (elements top parent)\r\n *\r\n * Accessing modal does not make it appear. To make a modal appear, use\r\n * `showModal()` method.\r\n *\r\n * @see {@link Modal} for more information about using Modal windows\r\n * @return Modal instance\r\n */\n get: function get() {\n if (!$type.hasValue(this._modal)) {\n // Create new modal\n this._modal = new Modal();\n this._modal.container = this.SVGContainer; // Add to disposers\n\n this._disposers.push(this._modal);\n }\n\n return this._modal;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Opens a modal window with specific content (`text` parameter) and,\r\n * optionally, `title`.\r\n *\r\n * The `text` parameter can contain HTML content.\r\n *\r\n * @see {@link Modal} for more information about using Modal windows\r\n * @param text Modal contents\r\n * @param title Title for the modal window\r\n */\n\n SVGContainer.prototype.openModal = function (text, title) {\n // Hide previous modal\n this.closeModal(); // Create modal\n\n var modal = this.modal;\n modal.content = text;\n modal.readerTitle = title || \"\";\n modal.title = title || \"\";\n modal.open();\n return modal;\n };\n /**\r\n * Hides modal window if there is one currently open.\r\n */\n\n\n SVGContainer.prototype.closeModal = function () {\n if (this._modal) {\n this.modal.close();\n }\n };\n\n Object.defineProperty(SVGContainer.prototype, \"popups\", {\n /**\r\n * A list of popups for this chart.\r\n *\r\n * @return Popups\r\n */\n get: function get() {\n if (!$type.hasValue(this._popups)) {\n // Create popup template\n var popupTemplate = new Popup();\n popupTemplate.container = this.SVGContainer; // Create the list\n\n this._popups = new ListTemplate(popupTemplate); // Add to disposers\n\n this._disposers.push(new ListDisposer(this._popups));\n\n this._disposers.push(this._popups.template);\n }\n\n return this._popups;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates, opens, and returns a new [[Popup]] window.\r\n *\r\n * `text` can be any valid HTML.\r\n *\r\n * `title` is currently not supported.\r\n *\r\n * @param text Popup contents\r\n * @param title Popup title\r\n * @return Popup instance\r\n */\n\n SVGContainer.prototype.openPopup = function (text, title) {\n var popup = this.popups.create();\n popup.content = text;\n\n if ($type.hasValue(title)) {\n popup.title = title;\n }\n\n popup.open();\n return popup;\n };\n /**\r\n * Closes all currently open popup windows\r\n */\n\n\n SVGContainer.prototype.closeAllPopups = function () {\n this.popups.each(function (popup) {\n popup.close();\n });\n };\n\n Object.defineProperty(SVGContainer.prototype, \"readerAlertElement\", {\n /**\r\n * ==========================================================================\r\n * ACCESSIBILITY STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * A `
` element used as as placeholder to trigger screen alerts.\r\n *\r\n * @sunce 4.9.2\r\n * @return Element\r\n */\n get: function get() {\n if (!$type.hasValue(this._readerAlertElement)) {\n // Create element\n var div = document.createElement(\"div\");\n div.setAttribute(\"role\", \"alert\");\n div.style.zIndex = \"-100000\";\n div.style.opacity = \"0\";\n div.style.position = \"absolute\";\n div.style.top = \"0\";\n this.SVGContainer.appendChild(div);\n this._readerAlertElement = div;\n }\n\n return this._readerAlertElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Triggers screen reader read out a message.\r\n *\r\n * @since 4.9.2\r\n * @param text Alert text\r\n */\n\n SVGContainer.prototype.readerAlert = function (text) {\n this.readerAlertElement.innerHTML = text;\n };\n /**\r\n * ==========================================================================\r\n * OTHER STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n\n SVGContainer.prototype.checkTransform = function (div) {\n if (window.getComputedStyle) {\n if (div && div.style) {\n var style = window.getComputedStyle(div, null);\n\n if (style) {\n var matrix = style.getPropertyValue(\"-webkit-transform\") || style.getPropertyValue(\"-moz-transform\") || style.getPropertyValue(\"-ms-transform\") || style.getPropertyValue(\"-o-transform\") || style.getPropertyValue(\"transform\");\n\n if (matrix && matrix !== \"none\") {\n var values = matrix.split('(')[1].split(')')[0].split(',');\n var a = Number(values[0]);\n var b = Number(values[1]);\n var scale = Math.sqrt(a * a + b * b);\n\n if (!isNaN(scale)) {\n this.cssScale *= scale;\n }\n }\n }\n }\n\n if (div.parentNode && div.parentNode instanceof HTMLElement) {\n this.checkTransform(div.parentNode);\n }\n }\n };\n\n return SVGContainer;\n}();\n\nexport { SVGContainer };","/**\r\n * Paper class just like the white sheet of pressed fiber it draws its name\r\n * inspiration from is used as a starting point to start a drawing.\r\n *\r\n * Before we can start adding elements (drawing) we need to take out a new sheet\r\n * of paper, or in this instance create a blank SVG element.\r\n *\r\n * This class creates such element, as well as implements methods needed to\r\n * start adding elements to it.\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { AMElement } from \"./AMElement\";\nimport { Group } from \"./Group\";\nimport { SVGContainer } from \"./SVGContainer\";\nimport * as $dom from \"../utils/DOM\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Paper class which when instantiated will create an SVG element as well as\r\n * some of the sub-elements like ``, ``.\r\n *\r\n * Use its methods like `addGroup` and `append` to add elements to the paper.\r\n */\n\nvar Paper =\n/** @class */\nfunction () {\n /**\r\n * Creates main `` container and related elements.\r\n *\r\n * @param container A reference to HTML element to create `` in\r\n */\n function Paper(container, id) {\n // Store container reference\n this.container = container;\n this.id = id; // Create SVG element\n\n var svg = document.createElementNS($dom.SVGNS, \"svg\");\n svg.setAttribute(\"version\", \"1.1\");\n svg.setAttributeNS($dom.XMLNS, \"xmlns\", $dom.SVGNS);\n svg.setAttributeNS($dom.XMLNS, \"xmlns:xlink\", $dom.XLINK);\n svg.setAttribute(\"role\", \"group\");\n this.container.appendChild(svg); // Add description\n //let desc: SVGElement = document.createElementNS($dom.SVGNS, \"desc\");\n //desc.appendChild(document.createTextNode(\"JavaScript chart by amCharts\"));\n //svg.appendChild(desc);\n // Add defs\n\n this.defs = document.createElementNS($dom.SVGNS, \"defs\");\n svg.appendChild(this.defs); // Set width and height to fit container\n\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.overflow = \"visible\"; // Store variable\n\n this.svg = svg;\n }\n /**\r\n * Creates and returns a new element. Does not attach it to Paper yet.\r\n *\r\n * @param elementName Element name\r\n * @return New element\r\n */\n\n\n Paper.prototype.add = function (elementName) {\n return new AMElement(elementName);\n };\n /**\r\n * Creates and returns a new Group element. Does not attach it to Paper.\r\n *\r\n * @param groupName Element name\r\n * @return New Group\r\n */\n\n\n Paper.prototype.addGroup = function (groupName) {\n return new Group(groupName);\n };\n /**\r\n * Appends an element to Paper.\r\n *\r\n * @param element Element to append\r\n */\n\n\n Paper.prototype.append = function (element) {\n if (element) {\n this.svg.appendChild(element.node);\n }\n };\n /**\r\n * Appends an element to `` block of the Paper.\r\n *\r\n * @param element Element\r\n */\n\n\n Paper.prototype.appendDef = function (element) {\n if (element) {\n this.defs.appendChild(element.node);\n }\n };\n /**\r\n * Creates and returns new `` element. Does not append it to\r\n * Paper.\r\n *\r\n * @return A foreignObject element\r\n */\n\n\n Paper.prototype.foreignObject = function () {\n var element = new AMElement(\"foreignObject\"); //this.append(element);\n\n return element;\n };\n /**\r\n * Checks if browser supports `` elements.\r\n *\r\n * @return Supports `foreignObject`?\r\n */\n\n\n Paper.prototype.supportsForeignObject = function () {\n return document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#Extensibility\", \"1.1\");\n };\n\n return Paper;\n}();\n\nexport { Paper };\nvar ghostPaper = null;\n/**\r\n * A [[Paper]] instance to create elements, that are not yet ready to be\r\n * placed in visible DOM.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nexport function getGhostPaper() {\n if (ghostPaper === null) {\n // ghost is used to draw elements while real paper is not yet created or Sprite doesn't know parent yet\n var ghostDiv = document.createElement(\"div\");\n ghostDiv.hidden = true;\n ghostDiv.style.width = \"1px\";\n ghostDiv.style.height = \"1px\";\n ghostDiv.style.position = \"absolute\";\n ghostDiv.style.zIndex = \"-1000000\";\n document.body.appendChild(ghostDiv);\n var ghostSvgContainer = new SVGContainer(ghostDiv, true);\n ghostPaper = new Paper(ghostSvgContainer.SVGContainer, \"ghost\");\n }\n\n return ghostPaper;\n}","/**\r\n * Pattern module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../../Base\";\nimport { getGhostPaper } from \"../Paper\";\nimport { List, ListDisposer } from \"../../utils/List\";\nimport { Animation, AnimationDisposer } from \"../../utils/Animation\";\nimport { registry } from \"../../Registry\";\nimport { InterfaceColorSet } from \"../../utils/InterfaceColorSet\";\nimport * as $iter from \"../../utils/Iterator\";\nimport * as $object from \"../../utils/Object\";\nimport * as $type from \"../../utils/Type\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Base class to define patterns.\r\n */\n\nvar Pattern =\n/** @class */\nfunction (_super) {\n __extends(Pattern, _super); //public propertyValues = new Dictionary();\n\n /**\r\n * Constructor\r\n */\n\n\n function Pattern() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * List of elements the pattern consists of.\r\n */\n\n\n _this._elements = new List();\n /**\r\n * A storage for Filter property/value pairs.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link PatternProperties}\r\n */\n\n _this.properties = {};\n _this.className = \"Pattern\"; // Set defaults\n\n _this.width = 10;\n _this.height = 10;\n _this.x = 0;\n _this.y = 0;\n _this.patternUnits = \"userSpaceOnUse\";\n var interfaceColors = new InterfaceColorSet();\n _this.backgroundFill = interfaceColors.getFor(\"background\");\n _this.backgroundOpacity = 0;\n _this.fillOpacity = 1;\n _this.fill = interfaceColors.getFor(\"alternativeBackground\");\n _this.stroke = interfaceColors.getFor(\"alternativeBackground\");\n _this.strokeOpacity = 1;\n _this.strokeWidth = 1;\n _this.shapeRendering = \"crispEdges\";\n _this.rotation = 0; // Create main group to store pattern elements inelements\n\n _this.element = _this.paper.addGroup(\"pattern\");\n _this.id = \"pattern-\" + registry.getUniqueId();\n\n _this.element.attr({\n \"id\": _this.id\n });\n\n _this._disposers.push(_this.element); // Make elements disposable\n\n\n _this._disposers.push(new ListDisposer(_this._elements)); // Request again to trigger getter/setter code\n\n\n _this.patternUnits = _this.patternUnits;\n _this.width = _this.width;\n _this.height = _this.height; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the pattern.\r\n */\n\n\n Pattern.prototype.draw = function () {\n var _this = this;\n\n var patternElement = this.element;\n\n if (patternElement) {\n patternElement.removeChildNodes();\n var background = this.paper.add(\"rect\");\n background.attr({\n \"width\": this.width,\n \"height\": this.height,\n \"shape-rendering\": \"crispEdges\",\n \"fill\": this.backgroundFill.hex,\n \"fill-opacity\": this.backgroundOpacity,\n \"stroke\": this.backgroundFill.hex,\n \"stroke-opacity\": 0\n });\n patternElement.add(background);\n patternElement.attr({\n \"x\": this.x,\n \"y\": this.y,\n \"width\": this.width,\n \"height\": this.height,\n \"stroke\": this.stroke.hex,\n \"fill\": this.fill.hex,\n \"fill-opacity\": this.fillOpacity,\n \"stroke-opacity\": this.strokeOpacity,\n \"stroke-width\": this.strokeWidth,\n \"shape-rendering\": this.shapeRendering,\n \"patternUnits\": this.patternUnits,\n \"stroke-dasharray\": this.strokeDasharray\n });\n $iter.each(this._elements.iterator(), function (element) {\n element.rotation = _this.rotation;\n element.rotationX = _this.properties[\"rotationX\"];\n element.rotationY = _this.properties[\"rotationY\"];\n\n _this.element.add(element);\n });\n }\n };\n /**\r\n * Animate pattern properties.\r\n *\r\n * @see {@link Animation}\r\n * @param animationOptions Animation options\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation instance\r\n */\n\n\n Pattern.prototype.animate = function (animationOptions, duration, easing) {\n return new Animation(this, animationOptions, duration, easing).start();\n };\n /**\r\n * Adds an element to the pattern.\r\n *\r\n * @param element Element\r\n */\n\n\n Pattern.prototype.addElement = function (element) {\n this._elements.push(element);\n\n this._disposers.push(element);\n };\n /**\r\n * Remove an element from the pattern.\r\n *\r\n * @param element Element\r\n */\n\n\n Pattern.prototype.removeElement = function (element) {\n this._elements.removeValue(element);\n\n this.removeDispose(element);\n };\n\n Object.defineProperty(Pattern.prototype, \"elements\", {\n /**\r\n * Returns the list of SVG elements comprising the pattern.\r\n *\r\n * @return Pattern elements\r\n */\n get: function get() {\n return this._elements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"fillOpacity\", {\n /**\r\n * @return Opacity (0-1)\r\n */\n get: function get() {\n return this.properties[\"fillOpacity\"];\n },\n\n /**\r\n * Pattern fill opacity. (0-1)\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n this.properties[\"fillOpacity\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"fill\", {\n /**\r\n * @return Fill color\r\n */\n get: function get() {\n return this.properties[\"fill\"];\n },\n\n /**\r\n * Fill color of the pattern.\r\n *\r\n * @param value Fill color\r\n */\n set: function set(value) {\n this.properties[\"fill\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"backgroundFill\", {\n /**\r\n * @return Background color\r\n */\n get: function get() {\n return this.properties[\"backgroundFill\"];\n },\n\n /**\r\n * Pattern background fill color.\r\n *\r\n * @param value Background color\r\n */\n set: function set(value) {\n this.properties[\"backgroundFill\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"backgroundOpacity\", {\n /**\r\n * @return Background opacity (0-1)\r\n */\n get: function get() {\n return this.properties[\"backgroundOpacity\"];\n },\n\n /**\r\n * Pattern backgorund opacity. (0-1)\r\n *\r\n * @param value Background opacity (0-1)\r\n */\n set: function set(value) {\n this.properties[\"backgroundOpacity\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"stroke\", {\n /**\r\n * @return Color\r\n */\n get: function get() {\n return this.properties[\"stroke\"];\n },\n\n /**\r\n * Pattern stroke (border) color.\r\n *\r\n * @param value Color\r\n */\n set: function set(value) {\n this.properties[\"stroke\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"strokeOpacity\", {\n /**\r\n * @return Opacity (0-1)\r\n */\n get: function get() {\n return this.properties[\"strokeOpacity\"];\n },\n\n /**\r\n * Pattern stroke opacity. (0-1)\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n this.properties[\"strokeOpacity\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"strokeWidth\", {\n /**\r\n * @return Stroke thickness (px)\r\n */\n get: function get() {\n return this.properties[\"strokeWidth\"];\n },\n\n /**\r\n * Pattern stroke thickness in pixels.\r\n *\r\n * @param value Stroke thickness (px)\r\n */\n set: function set(value) {\n this.properties[\"strokeWidth\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"shapeRendering\", {\n get: function get() {\n return this.properties[\"shapeRendering\"];\n },\n\n /**\r\n * Shape rendering\r\n * @param value [description]\r\n */\n set: function set(value) {\n this.properties[\"shapeRendering\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"rotation\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this.properties[\"rotation\"];\n },\n\n /**\r\n * Pattern rotation in degrees.\r\n *\r\n * @param value Rotation\r\n */\n set: function set(value) {\n this.properties[\"rotation\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"patternUnits\", {\n /**\r\n * @return Units\r\n */\n get: function get() {\n return this.properties[\"patternUnits\"];\n },\n\n /**\r\n * Pattern measuring units.\r\n *\r\n * Available options: \"userSpaceOnUse\" | \"objectBoundingBox\".\r\n *\r\n * @param value Units\r\n */\n set: function set(value) {\n this.properties[\"patternUnits\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"width\", {\n /**\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.properties[\"width\"];\n },\n\n /**\r\n * Pattern width in pixels.\r\n *\r\n * @param value Width (px)\r\n */\n set: function set(value) {\n this.properties[\"width\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"height\", {\n /**\r\n * @return Height (px)\r\n */\n get: function get() {\n return this.properties[\"height\"];\n },\n\n /**\r\n * Pattern height in pixels.\r\n *\r\n * @param value Height (px)\r\n */\n set: function set(value) {\n this.properties[\"height\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"x\", {\n /**\r\n * @return X (px)\r\n */\n get: function get() {\n return this.properties[\"x\"];\n },\n\n /**\r\n * X position. (pixels)\r\n *\r\n * @param value X (px)\r\n */\n set: function set(value) {\n this.properties[\"x\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"y\", {\n /**\r\n * @return Y (px)\r\n */\n get: function get() {\n return this.properties[\"y\"];\n },\n\n /**\r\n * Y position (px).\r\n *\r\n * @param value Y (px)\r\n */\n set: function set(value) {\n this.properties[\"y\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"paper\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Paper\r\n */\n get: function get() {\n if (this._paper) {\n return this._paper;\n }\n\n return getGhostPaper();\n },\n\n /**\r\n * [[Paper]] instance to draw pattern in.\r\n *\r\n * @ignore Exclude from docs\r\n * @param paper Paper\r\n */\n set: function set(paper) {\n if (this._paper != paper) {\n this._paper = paper;\n this.draw();\n paper.appendDef(this.element);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies properties from another Pattern instance.\r\n *\r\n * @param source Source pattern\r\n */\n\n Pattern.prototype.copyFrom = function (source) {\n var _this = this;\n\n _super.prototype.copyFrom.call(this, source);\n\n $object.each(source.properties, function (key, value) {\n _this[key] = value;\n });\n };\n\n Object.defineProperty(Pattern.prototype, \"animations\", {\n /**\r\n * A list of animations currently running on the patter.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Animation list\r\n */\n get: function get() {\n if (!this._animations) {\n this._animations = [];\n\n this._disposers.push(new AnimationDisposer(this._animations));\n }\n\n return this._animations;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Pattern.prototype, \"strokeDasharray\", {\n /**\r\n * @return `stroke-dasharray`\r\n */\n get: function get() {\n return this.properties[\"strokeDashArray\"];\n },\n\n /**\r\n * A `stroke-dasharray` for the stroke (outline).\r\n *\r\n * \"Dasharray\" allows setting rules to make lines dashed, dotted, etc.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray} for more info on `stroke-dasharray`\r\n * @param value `stroke-dasharray`\r\n */\n set: function set(value) {\n this.properties[\"strokeDashArray\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n Pattern.prototype.processConfig = function (config) {\n if (config) {\n // Set up series\n if ($type.hasValue(config.elements) && $type.isArray(config.elements)) {\n for (var i = 0, len = config.elements.length; i < len; i++) {\n var element = config.elements[i];\n\n if ($type.hasValue(element[\"type\"])) {\n var sprite = this.createEntryInstance(element);\n\n if (sprite instanceof BaseObject) {\n sprite.config = element;\n }\n\n this.addElement($type.hasValue(element[\"typeProperty\"]) ? sprite[element[\"typeProperty\"]] : sprite.element);\n }\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return Pattern;\n}(BaseObject);\n\nexport { Pattern };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Pattern\"] = Pattern;","/**\r\n * Contains code and logic for generating linear gradients.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../../Base\";\nimport { List } from \"../../utils/List\";\nimport { getGhostPaper } from \"../Paper\";\nimport { registry } from \"../../Registry\";\nimport * as $iter from \"../../utils/Iterator\";\nimport * as $math from \"../../utils/Math\";\nimport * as $type from \"../../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Linear gradient class.\r\n */\n\nvar LinearGradient =\n/** @class */\nfunction (_super) {\n __extends(LinearGradient, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function LinearGradient() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * List of colors switch definitions in a gradient.\r\n */\n\n\n _this._stops = new List();\n /**\r\n * Gradient direction.\r\n */\n\n _this._rotation = 0;\n _this.className = \"LinearGradient\";\n\n _this._stops.events.on(\"setIndex\", _this.validate, _this);\n\n _this._stops.events.on(\"inserted\", _this.validate, _this); // Create element\n\n\n _this.element = _this.paper.addGroup(\"linearGradient\");\n _this.id = \"gradient-\" + registry.getUniqueId();\n\n _this.element.attr({\n \"id\": _this.id\n });\n\n _this._disposers.push(_this.element); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws gradient.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n LinearGradient.prototype.validate = function () {\n var _this = this;\n\n var rotation = (this._rotation + 90) * $math.RADIANS;\n var x1 = Math.round(50 + Math.sin(rotation + Math.PI) * 50) + '%';\n var y1 = Math.round(50 + Math.cos(rotation) * 50) + '%';\n var x2 = Math.round(50 + Math.sin(rotation) * 50) + '%';\n var y2 = Math.round(50 + Math.cos(rotation + Math.PI) * 50) + '%';\n var gradientElement = this.element;\n gradientElement.removeChildNodes();\n gradientElement.attr({\n \"x1\": x1,\n \"x2\": x2,\n \"y1\": y1,\n \"y2\": y2\n });\n $iter.each($iter.indexed(this._stops.iterator()), function (a) {\n var i = a[0];\n var stop = a[1];\n var offset = stop.offset;\n\n if (!$type.isNumber(offset)) {\n offset = i / (_this._stops.length - 1);\n }\n\n var gradientStop = _this.paper.add(\"stop\");\n\n if ($type.hasValue(stop.color)) {\n gradientStop.attr({\n \"stop-color\": stop.color.toString()\n });\n }\n\n if ($type.isNumber(stop.opacity)) {\n gradientStop.attr({\n \"stop-opacity\": stop.opacity\n });\n }\n\n if ($type.isNumber(offset)) {\n gradientStop.attr({\n \"offset\": offset\n });\n }\n\n gradientElement.add(gradientStop);\n });\n };\n /**\r\n * Clears the gradient.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n LinearGradient.prototype.clear = function () {\n this._stops.clear();\n };\n /**\r\n * Adds a color step to the gradient.\r\n *\r\n * @param color Color (hex code or named color)\r\n * @param opacity Opacity (value from 0 to 1; 0 completely transaprent, 1 fully opaque)\r\n * @param offset Position of color in the gradient (value 0 to 1; 0 meaning start of the gradient and 1 end)\r\n */\n\n\n LinearGradient.prototype.addColor = function (color, opacity, offset) {\n this._stops.push({\n color: color,\n opacity: opacity,\n offset: offset\n });\n };\n\n Object.defineProperty(LinearGradient.prototype, \"stops\", {\n /**\r\n * A list of color stops in the gradient.\r\n *\r\n * @return Stops\r\n */\n get: function get() {\n return this._stops;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinearGradient.prototype, \"paper\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Paper\r\n */\n get: function get() {\n if (this._paper) {\n return this._paper;\n }\n\n return getGhostPaper();\n },\n\n /**\r\n * [[Paper]] instace to use for the gradient.\r\n *\r\n * @ignore Exclude from docs\r\n * @param paper Paper\r\n */\n set: function set(paper) {\n if (this._paper != paper) {\n this._paper = paper;\n this.validate();\n paper.appendDef(this.element);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinearGradient.prototype, \"rotation\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this._rotation;\n },\n\n /**\r\n * Rotation (direction) of the gradient in degrees.\r\n *\r\n * @param value Rotation\r\n */\n set: function set(value) {\n //this.element.attr({ \"gradientTransform\": \"rotate(\" + value + \" 10 100)\" });\n this._rotation = value;\n this.validate();\n },\n enumerable: true,\n configurable: true\n });\n\n LinearGradient.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.stops.copyFrom(source.stops);\n this._rotation = source.rotation;\n };\n\n Object.defineProperty(LinearGradient.prototype, \"gradientUnits\", {\n /**\r\n * Which units are used when drawing gradient filter.\r\n *\r\n * Use `\"userSpaceOnUse\"` when applying gradient on a perfectly straight line.\r\n *\r\n * @since 4.9.17\r\n * @default objectBoundingBox\r\n * @param value Filter units\r\n */\n set: function set(value) {\n this.element.attr({\n gradientUnits: value\n });\n },\n enumerable: true,\n configurable: true\n });\n return LinearGradient;\n}(BaseObject);\n\nexport { LinearGradient };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"LinearGradient\"] = LinearGradient;","/**\r\n * Contains code and logic for generating radial gradients.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../../Base\";\nimport { List } from \"../../utils/List\";\nimport { getGhostPaper } from \"../Paper\";\nimport { registry } from \"../../Registry\";\nimport * as $iter from \"../../utils/Iterator\";\nimport * as $type from \"../../utils/Type\";\nimport { Percent } from \"../../utils/Percent\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Radial gradient class.\r\n */\n\nvar RadialGradient =\n/** @class */\nfunction (_super) {\n __extends(RadialGradient, _super);\n /**\r\n * Constructor\r\n */\n\n\n function RadialGradient() {\n var _this = _super.call(this) || this;\n /**\r\n * List of colors switch definitions in a gradient.\r\n */\n\n\n _this._stops = new List();\n _this.element = _this.paper.addGroup(\"radialGradient\");\n _this.id = \"gradient-\" + registry.getUniqueId();\n\n _this.element.attr({\n \"id\": _this.id\n });\n\n _this._disposers.push(_this.element);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws gradient.\r\n */\n\n\n RadialGradient.prototype.draw = function () {\n var _this = this;\n\n var gradientElement = this.element;\n\n if ($type.isNumber(this.cx)) {\n var value = this.cx;\n\n if (value instanceof Percent) {\n value = value.percent + \"%\";\n }\n\n gradientElement.attr({\n \"cx\": value\n });\n }\n\n if ($type.isNumber(this.cy)) {\n var value = this.cy;\n\n if (value instanceof Percent) {\n value = value.percent + \"%\";\n }\n\n gradientElement.attr({\n \"cy\": value\n });\n }\n\n if (this.fx) {\n var value = this.fx;\n\n if (value instanceof Percent) {\n value = value.percent + \"%\";\n }\n\n gradientElement.attr({\n \"fx\": value\n });\n }\n\n if (this.fy) {\n var value = this.fy;\n\n if (value instanceof Percent) {\n value = value.percent + \"%\";\n }\n\n gradientElement.attr({\n \"fy\": value\n });\n }\n\n gradientElement.removeChildNodes();\n $iter.each($iter.indexed(this._stops.iterator()), function (a) {\n var i = a[0];\n var stop = a[1];\n var offset = stop.offset;\n\n if (!$type.isNumber(offset)) {\n offset = i / (_this._stops.length - 1);\n }\n\n var gradientStop = _this.paper.add(\"stop\");\n\n if ($type.hasValue(stop.color)) {\n gradientStop.attr({\n \"stop-color\": stop.color.toString()\n });\n }\n\n if ($type.isNumber(stop.opacity)) {\n gradientStop.attr({\n \"stop-opacity\": stop.opacity\n });\n }\n\n if ($type.isNumber(offset)) {\n gradientStop.attr({\n \"offset\": offset\n });\n }\n\n gradientElement.add(gradientStop);\n });\n };\n /**\r\n * Adds a color step to the gradient.\r\n *\r\n * @param color Color (hex code or named color)\r\n * @param opacity Opacity (value from 0 to 1; 0 completely transaprent, 1 fully opaque)\r\n * @param offset Position of color in the gradient (value 0 to 1; 0 meaning start of the gradient and 1 end)\r\n */\n\n\n RadialGradient.prototype.addColor = function (color, opacity, offset) {\n this._stops.push({\n color: color,\n opacity: opacity,\n offset: offset\n });\n\n this.draw();\n };\n\n Object.defineProperty(RadialGradient.prototype, \"paper\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Paper\r\n */\n get: function get() {\n if (this._paper) {\n return this._paper;\n }\n\n return getGhostPaper();\n },\n\n /**\r\n * A [[Paper]] instace to use for the gradient.\r\n *\r\n * @ignore Exclude from docs\r\n * @param paper Paper\r\n */\n set: function set(paper) {\n if (this._paper != paper) {\n this._paper = paper;\n this.draw();\n paper.appendDef(this.element);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RadialGradient.prototype, \"cx\", {\n get: function get() {\n return this._cx;\n },\n\n /**\r\n * Center x coordinate of the gradient, can be set as number or Percent\r\n *\r\n * @param point Center point\r\n */\n set: function set(value) {\n this._cx = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RadialGradient.prototype, \"cy\", {\n get: function get() {\n return this._cy;\n },\n\n /**\r\n * Center y coordinate of the gradient, can be set as number or Percent\r\n *\r\n * @param point Center point\r\n */\n set: function set(value) {\n this._cy = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RadialGradient.prototype, \"fx\", {\n get: function get() {\n return this._fx;\n },\n\n /**\r\n * y coordinate of the focal point of a gradient, can be set in pixels or as Percent\r\n *\r\n * @param point Center point\r\n */\n set: function set(value) {\n this._fx = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RadialGradient.prototype, \"fy\", {\n get: function get() {\n return this._fy;\n },\n\n /**\r\n * y coordinate of the focal point of a gradient, can be set in pixels or as Percent\r\n *\r\n * @param point Center point\r\n */\n set: function set(value) {\n this._fy = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n\n RadialGradient.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.stops.copyFrom(source.stops);\n this.cx = source.cx;\n this.cy = source.cy;\n this.fx = source.fx;\n this.fy = source.fy;\n };\n\n Object.defineProperty(RadialGradient.prototype, \"stops\", {\n /**\r\n * A list of color stops in the gradient.\r\n *\r\n * @return Stops\r\n */\n get: function get() {\n return this._stops;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Clears the gradient.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n RadialGradient.prototype.clear = function () {\n this._stops.clear();\n };\n\n return RadialGradient;\n}(BaseObject);\n\nexport { RadialGradient };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"RadialGradient\"] = RadialGradient;","/**\r\n * Mouse-related functionality\r\n */\n\n/**\r\n * Defines static methods that hold style list for various mouse cursor styles,\r\n * maintaining browser compatibility.\r\n */\nvar MouseCursorStyle =\n/** @class */\nfunction () {\n function MouseCursorStyle() {}\n /**\r\n * Styles for \"grab\" mouse cursor.\r\n */\n\n\n MouseCursorStyle.grab = [{\n \"property\": \"cursor\",\n \"value\": \"move\"\n }, {\n \"property\": \"cursor\",\n \"value\": \"grab\"\n }, {\n \"property\": \"cursor\",\n \"value\": \"-webkit-grab\"\n }];\n /**\r\n * Styles for \"grabbing\" mouse cursor.\r\n */\n\n MouseCursorStyle.grabbing = [{\n \"property\": \"cursor\",\n \"value\": \"move\"\n }, {\n \"property\": \"cursor\",\n \"value\": \"grabbing\"\n }, {\n \"property\": \"cursor\",\n \"value\": \"-webkit-grabbing\"\n }];\n /**\r\n * Styles for \"pointer\" mouse cursor. (usually used for links)\r\n */\n\n MouseCursorStyle.pointer = [{\n \"property\": \"cursor\",\n \"value\": \"pointer\"\n }];\n /**\r\n * Styles for default mouse cursor. (browser determines style)\r\n */\n\n MouseCursorStyle.default = [{\n \"property\": \"cursor\",\n \"value\": \"default\"\n }];\n /**\r\n * Styles for horizontal bi-directional resize mouse cursor.\r\n */\n\n MouseCursorStyle.horizontalResize = [{\n \"property\": \"cursor\",\n \"value\": \"ew-resize\"\n }];\n /**\r\n * Styles for vertical bi-directional mouse cursor.\r\n */\n\n MouseCursorStyle.verticalResize = [{\n \"property\": \"cursor\",\n \"value\": \"ns-resize\"\n }];\n /**\r\n * Styles for \"no-allowed\" cursor.\r\n * @since 4.7.15\r\n */\n\n MouseCursorStyle.notAllowed = [{\n \"property\": \"cursor\",\n \"value\": \"not-allowed\"\n }];\n /**\r\n * Styles for \"text\" cursor.\r\n * @since 4.9.12\r\n */\n\n MouseCursorStyle.text = [{\n \"property\": \"cursor\",\n \"value\": \"text\"\n }];\n return MouseCursorStyle;\n}();\n\nexport { MouseCursorStyle };","/**\r\n * Handles formatting of pseudo-markup in text.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { AMElement } from \"../rendering/AMElement\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { registry } from \"../Registry\";\nimport * as $strings from \"../utils/Strings\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * Handles formatting of pseudo-markdown in text.\r\n *\r\n * @todo Encode < > in output\r\n * @todo Add more adapters\r\n * @important\r\n */\n\nvar TextFormatter =\n/** @class */\nfunction (_super) {\n __extends(TextFormatter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function TextFormatter() {\n var _this = _super.call(this) || this;\n /**\r\n * Adapter.\r\n */\n\n\n _this.adapter = new Adapter(_this);\n _this.className = \"TextFormatter\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n TextFormatter.prototype.debug = function () {};\n /**\r\n * Formats the text according to specifications passed in.\r\n *\r\n * @param text Text to format\r\n * @param output Output format (svg, html)\r\n * @return Formatted text\r\n */\n\n\n TextFormatter.prototype.format = function (text, output) {\n // Apply default\n if (!$type.hasValue(output)) {\n output = \"svg\";\n } // Init return value\n\n\n var formatted = \"\"; // Replace double (escaped) square spaces with remporary codes\n\n text = this.escape(text); // Divvy up the string by style tags\n\n var styles = text.match(/\\[([^\\]]*?)\\]/gm);\n\n if (!styles) {\n // Nothing to do here - no formatting elements\n return this.wrap(text, \"\", output);\n } // Get pure text - no style tags\n\n\n var texts = text.split(/\\[[^\\[\\]]*\\]/); // Go through each of the texts and wrap it in style tags\n\n for (var i = 0, len = texts.length; i < len; i++) {\n // Get text bit\n var t = texts[i]; // Check if string is empty\n\n if (t === \"\") {\n continue;\n } // Run through an adapter\n\n\n t = this.adapter.apply(\"chunk\", t); // Get related style\n\n var s = \"\";\n\n if (i > 0) {\n s = styles[i - 1].replace('[', '').replace(']', '');\n } // Wrap text in tag\n\n\n formatted += this.wrap(t, s, output);\n } // Replace placeholders back\n\n\n formatted = this.unescape(formatted); // Return result\n\n return this.cleanUp(formatted);\n };\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\n\n\n TextFormatter.prototype.escape = function (text) {\n return text.replace(/\\[\\[/g, registry.getPlaceholder(\"1\")).replace(/([^\\/\\]]{1})\\]\\]/g, \"$1\" + registry.getPlaceholder(\"2\")).replace(/\\]\\]/g, registry.getPlaceholder(\"2\")).replace(/\\{\\{/g, registry.getPlaceholder(\"3\")).replace(/\\}\\}/g, registry.getPlaceholder(\"4\")).replace(/\\'\\'/g, registry.getPlaceholder(\"5\"));\n };\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\n\n\n TextFormatter.prototype.unescape = function (text) {\n return text.replace(new RegExp(registry.getPlaceholder(\"1\"), \"g\"), \"[[\").replace(new RegExp(registry.getPlaceholder(\"2\"), \"g\"), \"]]\").replace(new RegExp(registry.getPlaceholder(\"3\"), \"g\"), \"{{\").replace(new RegExp(registry.getPlaceholder(\"4\"), \"g\"), \"}}\").replace(new RegExp(registry.getPlaceholder(\"5\"), \"g\"), \"''\");\n };\n /**\r\n * Cleans up the text text for leftover double square brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Cleaned up text\r\n */\n\n\n TextFormatter.prototype.cleanUp = function (text) {\n return text.replace(/\\[\\[/g, \"[\").replace(/\\]\\]/g, \"]\").replace(/\\{\\{/g, \"{\").replace(/\\}\\}/g, \"}\").replace(/\\'\\'/g, \"'\");\n };\n /**\r\n * Wraps text into corresponding tags.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Styles\r\n * @param output Format to output in (svg, html)\r\n * @return Formatted string\r\n */\n\n\n TextFormatter.prototype.wrap = function (text, style, output) {\n if (style === \"\" || style === \"/\") {\n //return text;\n style = \"\";\n }\n\n switch (output) {\n case \"html\":\n return this.wrapHtml(text, this.translateStyleShortcuts(style));\n\n default:\n return this.wrapSvg(text, this.translateStyleShortcuts(style));\n }\n };\n /**\r\n * Wraps text in styled SVG tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Style property\r\n * @return Formatted tag\r\n */\n\n\n TextFormatter.prototype.wrapSvg = function (text, style) {\n if (style === \"\") {\n return \"\" + text + \"\";\n } else {\n return \"\" + text + \"\";\n }\n };\n /**\r\n * Returns an SVG `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text\r\n * @param style Style\r\n * @return Element\r\n */\n\n\n TextFormatter.prototype.getSvgElement = function (text, style) {\n var element = new AMElement(\"tspan\");\n element.textContent = text;\n\n if (style) {\n element.node.setAttribute(\"style\", style);\n }\n\n return element;\n };\n /**\r\n * Wraps text in HTML tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Style property\r\n * @return Formatted tag\r\n * @todo Translate SVG styles into HTML ones\r\n */\n\n\n TextFormatter.prototype.wrapHtml = function (text, style) {\n if (style === \"\") {\n return \"\" + text + \"\";\n } else {\n return \"\" + text + \"\";\n }\n };\n /**\r\n * Returns an HTML `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text/HTML\r\n * @param style Style definition\r\n * @return HTML element\r\n */\n\n\n TextFormatter.prototype.getHtmlElement = function (text, style) {\n var element = document.createElement(\"span\");\n element.innerHTML = text;\n\n if (style) {\n element.setAttribute(\"style\", style);\n }\n\n return element;\n };\n /**\r\n * Trabslates SVG CSS into HTML CSS.\r\n *\r\n * @ignore Exclude from docs\r\n * @param style SVG CSS\r\n * @return HTML CSS\r\n * @todo Implement actual translation\r\n */\n\n\n TextFormatter.prototype.styleSvgToHtml = function (style) {\n style = style.replace(/fill:/, \"color:\");\n return style;\n };\n /**\r\n * Translates style shortcuts into full styles, i.e.:\r\n * \"bold\" => \"font-weight: bold\"\r\n * \"#f00\" => \"fill: #f00\"\r\n *\r\n * @ignore Exclude from docs\r\n * @param style Untranslated style\r\n * @return Translated style\r\n * @todo Implement actual translation\r\n */\n\n\n TextFormatter.prototype.translateStyleShortcuts = function (style) {\n if (style == \"\" || style == \"[ ]\") {\n return \"\";\n }\n\n var cached = registry.getCache(\"translateStyleShortcuts_\" + style);\n\n if (cached) {\n return cached;\n } // Pre-process quoted text\n\n\n var q = style.match(/('[^']*')|(\"[^\"]*\")/gi);\n\n if (q) {\n for (var i = 0; i < q.length; i++) {\n style = style.replace(q[i], q[i].replace(/['\"]*/g, \"\").replace(/[ ]+/g, \"+\"));\n }\n } // Get style parts\n\n\n var b = style.match(/([\\w\\-]*:[\\s]?[^;\\s\\]]*)|(\\#[\\w]{1,6})|([\\w]+)|(\\/)/gi); // Empty?\n\n if (!b) {\n return style;\n } // Check each part\n\n\n for (var i = 0; i < b.length; i++) {\n if (b[i].match(/^bold$/i)) {\n // Bold\n b[i] = \"font-weight:\" + b[i];\n } else if (b[i] == \"/\") {\n // Just closing tag\n // Do nothing\n b[i] = \"\";\n } else if (!b[i].match(/:/)) {\n // Color\n b[i] = \"fill:\" + b[i];\n } else {\n b[i] = b[i].replace(/\\+/g, \" \");\n }\n }\n\n var res = b.join(';');\n registry.setCache(\"translateStyleShortcuts_\" + style, res);\n return res;\n };\n /**\r\n * Splits string into chunks. (style blocks, quoted blocks, regular blocks)\r\n *\r\n * If the second parameter `quotedBlocks` is set to `true` this method will\r\n * also single out text blocks enclosed within single quotes that no\r\n * formatting should be applied to, and they should be displayed as is.\r\n *\r\n * Default for the above is `false`, so that you can use single quote in text\r\n * without escaping it.\r\n *\r\n * If enabled, single quotes can be escaped by doubling it - adding two\r\n * single quotes, which will be replaced by a one single quote in the final\r\n * output.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to chunk\r\n * @param quotedBlocks Use quoted blocks\r\n * @param noFormatting Formatting blocks will be treated as regular text\r\n * @return Array of string chunks\r\n */\n\n\n TextFormatter.prototype.chunk = function (text, quotedBlocks, noFormatting) {\n if (quotedBlocks === void 0) {\n quotedBlocks = false;\n }\n\n if (noFormatting === void 0) {\n noFormatting = false;\n } // Init result\n\n\n var res = []; // Replace double (escaped) square spaces and quotes with temporary codes\n\n text = this.escape(text); // Deal with style blocks\n\n var chunks = quotedBlocks ? text.split(\"'\") : [text];\n\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i]; // Empty?\n\n if (chunk === \"\") {\n continue;\n }\n\n if (i % 2 === 0) {\n // Text outside quotes\n // Parse for style blocks which are \"text\" chunks, the rest chunks are\n // \"value\"\n chunk = chunk.replace(/\\]\\[/g, \"]\" + $strings.PLACEHOLDER + \"[\");\n chunk = chunk.replace(/\\[\\]/g, \"[ ]\");\n var chunks2 = chunk.split(/[\\[\\]]+/);\n\n for (var i2 = 0; i2 < chunks2.length; i2++) {\n var chunk2 = this.cleanUp(this.unescape(chunks2[i2])); // Placeholder?\n\n if (chunk2 === $strings.PLACEHOLDER) {\n continue;\n } // Empty?\n\n\n if (chunk2 === \"\") {\n continue;\n } // Block or value\n\n\n if (i2 % 2 === 0) {\n res.push({\n \"type\": \"value\",\n \"text\": this.adapter.apply(\"chunk\", chunk2)\n });\n } else {\n res.push({\n \"type\": noFormatting ? \"value\" : \"format\",\n \"text\": \"[\" + chunk2 + \"]\"\n });\n }\n }\n } else {\n // A text within doublequotes\n // All chunks are \"text\"\n var chunks2 = chunk.split(/[\\[\\]]+/);\n\n for (var i2 = 0; i2 < chunks2.length; i2++) {\n var chunk2 = this.cleanUp(this.unescape(chunks2[i2])); // Empty?\n\n if (chunk2 === \"\") {\n continue;\n } // Block or text\n\n\n if (i2 % 2 === 0) {\n res.push({\n \"type\": \"text\",\n \"text\": chunk2\n });\n } else if (this.isImage(chunk2)) {\n res.push({\n \"type\": \"image\",\n \"text\": \"[\" + chunk2 + \"]\"\n });\n } else {\n res.push({\n \"type\": \"format\",\n \"text\": \"[\" + chunk2 + \"]\"\n });\n }\n }\n }\n }\n\n return res;\n };\n /**\r\n * Checks if supplied format contains image information and should be\r\n * formatted as such.\r\n * I.e.: `[img: myImage.png]`\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Format\r\n * @return `true` if it is an image\r\n */\n\n\n TextFormatter.prototype.isImage = function (text) {\n return text.match(/img[ ]?:/) ? true : false;\n };\n\n return TextFormatter;\n}(BaseObject);\n\nexport { TextFormatter };\nvar formatter;\n/**\r\n * Returns the global instance of [[TextFormatter]].\r\n *\r\n * All classes and instances should reuse this universal text formatter,\r\n * rather than create their own instance of it.\r\n */\n\nexport function getTextFormatter() {\n if (formatter == null) {\n formatter = new TextFormatter();\n }\n\n return formatter;\n}\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"TextFormatter\"] = TextFormatter;","/**\r\n * amCharts 4 locale\r\n *\r\n * Locale: en\r\n * Language: International English\r\n * Author: Martynas Majeris\r\n *\r\n * Follow instructions in [on this page](https://www.amcharts.com/docs/v4/tutorials/creating-translations/) to make corrections or add new translations.\r\n *\r\n * ---\r\n * Edit but leave the header section above this line. You can remove any\r\n * subsequent comment sections.\r\n * ---\r\n *\r\n * Use this file as a template to create translations. Leave the key part in\r\n * English intact. Fill the value with a translation.\r\n *\r\n * Empty string means no translation, so default \"International English\"\r\n * will be used.\r\n *\r\n * If you need the translation to literally be an empty string, use `null`\r\n * instead.\r\n *\r\n * IMPORTANT:\r\n * When translating make good effort to keep the translation length\r\n * at least the same chartcount as the English, especially for short prompts.\r\n *\r\n * Having significantly longer prompts may distort the actual charts.\r\n *\r\n * NOTE:\r\n * Some prompts - like months or weekdays - come in two versions: full and\r\n * shortened.\r\n *\r\n * If there's no official shortened version of these in your language, and it\r\n * would not be possible to invent such short versions that don't seem weird\r\n * to native speakers of that language, fill those with the same as full\r\n * version.\r\n *\r\n * PLACEHOLDERS:\r\n * Some prompts have placeholders like \"%1\". Those will be replaced by actual\r\n * values during translation and should be retained in the translated prompts.\r\n *\r\n * Placeholder positions may be changed to better suit structure of the\r\n * sentence.\r\n *\r\n * For example \"From %1 to %2\", when actually used will replace \"%1\" with an\r\n * actual value representing range start, and \"%2\" will be replaced by end\r\n * value.\r\n *\r\n * E.g. in a Scrollbar for Value axis \"From %1 to %2\" will become\r\n * \"From 100 to 200\". You may translate \"From\" and \"to\", as well as re-arrange\r\n * the order of the prompt itself, but make sure the \"%1\" and \"%2\" remain, in\r\n * places where they will make sense.\r\n *\r\n * Save the file as language_LOCALE, i.e. `en_GB.ts`, `fr_FR.ts`, etc.\r\n */\nexport default {\n // Number formatting options.\n // \n // Please check with the local standards which separator is accepted to be\n // used for separating decimals, and which for thousands.\n \"_decimalSeparator\": \".\",\n \"_thousandSeparator\": \",\",\n // Suffixes for numbers\n // When formatting numbers, big or small numers might be reformatted to\n // shorter version, by applying a suffix.\n // \n // For example, 1000000 might become \"1m\".\n // Or 1024 might become \"1KB\" if we're formatting byte numbers.\n // \n // This section defines such suffixes for all such cases.\n \"_big_number_suffix_3\": \"k\",\n \"_big_number_suffix_6\": \"M\",\n \"_big_number_suffix_9\": \"G\",\n \"_big_number_suffix_12\": \"T\",\n \"_big_number_suffix_15\": \"P\",\n \"_big_number_suffix_18\": \"E\",\n \"_big_number_suffix_21\": \"Z\",\n \"_big_number_suffix_24\": \"Y\",\n \"_small_number_suffix_3\": \"m\",\n \"_small_number_suffix_6\": \"μ\",\n \"_small_number_suffix_9\": \"n\",\n \"_small_number_suffix_12\": \"p\",\n \"_small_number_suffix_15\": \"f\",\n \"_small_number_suffix_18\": \"a\",\n \"_small_number_suffix_21\": \"z\",\n \"_small_number_suffix_24\": \"y\",\n \"_byte_suffix_B\": \"B\",\n \"_byte_suffix_KB\": \"KB\",\n \"_byte_suffix_MB\": \"MB\",\n \"_byte_suffix_GB\": \"GB\",\n \"_byte_suffix_TB\": \"TB\",\n \"_byte_suffix_PB\": \"PB\",\n // Default date formats for various periods.\n // \n // This should reflect official or de facto formatting universally accepted\n // in the country translation is being made for\n // Available format codes here:\n // https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Format_codes\n // \n // This will be used when formatting date/time for particular granularity,\n // e.g. \"_date_hour\" will be shown whenever we need to show time as hours.\n // \n // \"date\" is used as in default date format when showing standalone dates.\n \"_date\": \"yyyy-MM-dd\",\n \"_date_millisecond\": \"mm:ss SSS\",\n \"_date_second\": \"HH:mm:ss\",\n \"_date_minute\": \"HH:mm\",\n \"_date_hour\": \"HH:mm\",\n \"_date_day\": \"MMM dd\",\n \"_date_week\": \"ww\",\n \"_date_month\": \"MMM\",\n \"_date_year\": \"yyyy\",\n // Default duration formats for various base units.\n // \n // This will be used by DurationFormatter to format numeric values into\n // duration.\n // \n // Notice how each duration unit comes in several versions. This is to ensure\n // that each base unit is shown correctly.\n // \n // For example, if we have baseUnit set to \"second\", meaning our duration is\n // in seconds.\n // \n // If we pass in `50` to formatter, it will know that we have just 50 seconds\n // (less than a minute) so it will use format in `\"_duration_second\"` (\"ss\"),\n // and the formatted result will be in like `\"50\"`.\n // \n // If we pass in `70`, which is more than a minute, the formatter will switch\n // to `\"_duration_second_minute\"` (\"mm:ss\"), resulting in \"01:10\" formatted\n // text.\n // \n // Available codes here:\n // https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/#Available_Codes\n \"_duration_millisecond\": \"SSS\",\n \"_duration_millisecond_second\": \"ss.SSS\",\n \"_duration_millisecond_minute\": \"mm:ss SSS\",\n \"_duration_millisecond_hour\": \"hh:mm:ss SSS\",\n \"_duration_millisecond_day\": \"d'd' mm:ss SSS\",\n \"_duration_millisecond_week\": \"d'd' mm:ss SSS\",\n \"_duration_millisecond_month\": \"M'm' dd'd' mm:ss SSS\",\n \"_duration_millisecond_year\": \"y'y' MM'm' dd'd' mm:ss SSS\",\n \"_duration_second\": \"ss\",\n \"_duration_second_minute\": \"mm:ss\",\n \"_duration_second_hour\": \"hh:mm:ss\",\n \"_duration_second_day\": \"d'd' hh:mm:ss\",\n \"_duration_second_week\": \"d'd' hh:mm:ss\",\n \"_duration_second_month\": \"M'm' dd'd' hh:mm:ss\",\n \"_duration_second_year\": \"y'y' MM'm' dd'd' hh:mm:ss\",\n \"_duration_minute\": \"mm\",\n \"_duration_minute_hour\": \"hh:mm\",\n \"_duration_minute_day\": \"d'd' hh:mm\",\n \"_duration_minute_week\": \"d'd' hh:mm\",\n \"_duration_minute_month\": \"M'm' dd'd' hh:mm\",\n \"_duration_minute_year\": \"y'y' MM'm' dd'd' hh:mm\",\n \"_duration_hour\": \"hh'h'\",\n \"_duration_hour_day\": \"d'd' hh'h'\",\n \"_duration_hour_week\": \"d'd' hh'h'\",\n \"_duration_hour_month\": \"M'm' dd'd' hh'h'\",\n \"_duration_hour_year\": \"y'y' MM'm' dd'd' hh'h'\",\n \"_duration_day\": \"d'd'\",\n \"_duration_day_week\": \"d'd'\",\n \"_duration_day_month\": \"M'm' dd'd'\",\n \"_duration_day_year\": \"y'y' MM'm' dd'd'\",\n \"_duration_week\": \"w'w'\",\n \"_duration_week_month\": \"w'w'\",\n \"_duration_week_year\": \"w'w'\",\n \"_duration_month\": \"M'm'\",\n \"_duration_month_year\": \"y'y' MM'm'\",\n \"_duration_year\": \"y'y'\",\n // Era translations\n \"_era_ad\": \"AD\",\n \"_era_bc\": \"BC\",\n // Day part, used in 12-hour formats, e.g. 5 P.M.\n // Please note that these come in 3 variants:\n // * one letter (e.g. \"A\")\n // * two letters (e.g. \"AM\")\n // * two letters with dots (e.g. \"A.M.\")\n // \n // All three need to to be translated even if they are all the same. Some\n // users might use one, some the other.\n \"A\": \"\",\n \"P\": \"\",\n \"AM\": \"\",\n \"PM\": \"\",\n \"A.M.\": \"\",\n \"P.M.\": \"\",\n // Date-related stuff.\n // \n // When translating months, if there's a difference, use the form which is\n // best for a full date, e.g. as you would use it in \"2018 January 1\".\n // \n // Note that May is listed twice. This is because in English May is the same\n // in both long and short forms, while in other languages it may not be the\n // case. Translate \"May\" to full word, while \"May(short)\" to shortened\n // version.\n // \n // Should month names and weekdays be capitalized or not?\n // \n // Rule of thumb is this: if the names should always be capitalized,\n // regardless of name position within date (\"January\", \"21st January 2018\",\n // etc.) use capitalized names. Otherwise enter all lowercase.\n // \n // The date formatter will automatically capitalize names if they are the\n // first (or only) word in resulting date.\n \"January\": \"\",\n \"February\": \"\",\n \"March\": \"\",\n \"April\": \"\",\n \"May\": \"\",\n \"June\": \"\",\n \"July\": \"\",\n \"August\": \"\",\n \"September\": \"\",\n \"October\": \"\",\n \"November\": \"\",\n \"December\": \"\",\n \"Jan\": \"\",\n \"Feb\": \"\",\n \"Mar\": \"\",\n \"Apr\": \"\",\n \"May(short)\": \"May\",\n \"Jun\": \"\",\n \"Jul\": \"\",\n \"Aug\": \"\",\n \"Sep\": \"\",\n \"Oct\": \"\",\n \"Nov\": \"\",\n \"Dec\": \"\",\n // Weekdays.\n \"Sunday\": \"\",\n \"Monday\": \"\",\n \"Tuesday\": \"\",\n \"Wednesday\": \"\",\n \"Thursday\": \"\",\n \"Friday\": \"\",\n \"Saturday\": \"\",\n \"Sun\": \"\",\n \"Mon\": \"\",\n \"Tue\": \"\",\n \"Wed\": \"\",\n \"Thu\": \"\",\n \"Fri\": \"\",\n \"Sat\": \"\",\n // Date ordinal function.\n // \n // This is used when adding number ordinal when formatting days in dates.\n // \n // E.g. \"January 1st\", \"February 2nd\".\n // \n // The function accepts day number, and returns a string to be added to the\n // day, like in default English translation, if we pass in 2, we will receive\n // \"nd\" back.\n \"_dateOrd\": function _dateOrd(day) {\n var res = \"th\";\n\n if (day < 11 || day > 13) {\n switch (day % 10) {\n case 1:\n res = \"st\";\n break;\n\n case 2:\n res = \"nd\";\n break;\n\n case 3:\n res = \"rd\";\n break;\n }\n }\n\n return res;\n },\n // Various chart controls.\n // Shown as a tooltip on zoom out button.\n \"Zoom Out\": \"\",\n // Timeline buttons\n \"Play\": \"\",\n \"Stop\": \"\",\n // Chart's Legend screen reader title.\n \"Legend\": \"\",\n // Legend's item screen reader indicator.\n \"Click, tap or press ENTER to toggle\": \"\",\n // Shown when the chart is busy loading something.\n \"Loading\": \"\",\n // Shown as the first button in the breadcrumb navigation, e.g.:\n // Home > First level > ...\n \"Home\": \"\",\n // Chart types.\n // Those are used as default screen reader titles for the main chart element\n // unless developer has set some more descriptive title.\n \"Chart\": \"\",\n \"Serial chart\": \"\",\n \"X/Y chart\": \"\",\n \"Pie chart\": \"\",\n \"Gauge chart\": \"\",\n \"Radar chart\": \"\",\n \"Sankey diagram\": \"\",\n \"Flow diagram\": \"\",\n \"Chord diagram\": \"\",\n \"TreeMap chart\": \"\",\n \"Force directed tree\": \"\",\n \"Sliced chart\": \"\",\n // Series types.\n // Used to name series by type for screen readers if they do not have their\n // name set.\n \"Series\": \"\",\n \"Candlestick Series\": \"\",\n \"OHLC Series\": \"\",\n \"Column Series\": \"\",\n \"Line Series\": \"\",\n \"Pie Slice Series\": \"\",\n \"Funnel Series\": \"\",\n \"Pyramid Series\": \"\",\n \"X/Y Series\": \"\",\n // Map-related stuff.\n \"Map\": \"\",\n \"Press ENTER to zoom in\": \"\",\n \"Press ENTER to zoom out\": \"\",\n \"Use arrow keys to zoom in and out\": \"\",\n \"Use plus and minus keys on your keyboard to zoom in and out\": \"\",\n // Export-related stuff.\n // These prompts are used in Export menu labels.\n // \n // \"Export\" is the top-level menu item.\n // \n // \"Image\", \"Data\", \"Print\" as second-level indicating type of export\n // operation.\n // \n // Leave actual format untranslated, unless you absolutely know that they\n // would convey more meaning in some other way.\n \"Export\": \"\",\n \"Image\": \"\",\n \"Data\": \"\",\n \"Print\": \"\",\n \"Press ENTER or use arrow keys to navigate\": \"\",\n \"Click, tap or press ENTER to open\": \"\",\n \"Click, tap or press ENTER to print.\": \"\",\n \"Click, tap or press ENTER to export as %1.\": \"\",\n 'To save the image, right-click this link and choose \"Save picture as...\"': \"\",\n 'To save the image, right-click thumbnail on the left and choose \"Save picture as...\"': \"\",\n \"(Press ESC to close this message)\": \"\",\n \"Image Export Complete\": \"\",\n \"Export operation took longer than expected. Something might have gone wrong.\": \"\",\n \"Saved from\": \"\",\n \"PNG\": \"\",\n \"JPG\": \"\",\n \"GIF\": \"\",\n \"SVG\": \"\",\n \"PDF\": \"\",\n \"JSON\": \"\",\n \"CSV\": \"\",\n \"XLSX\": \"\",\n // Scrollbar-related stuff.\n // \n // Scrollbar is a control which can zoom and pan the axes on the chart.\n // \n // Each scrollbar has two grips: left or right (for horizontal scrollbar) or\n // upper and lower (for vertical one).\n // \n // Prompts change in relation to whether Scrollbar is vertical or horizontal.\n // \n // The final section is used to indicate the current range of selection.\n \"Use TAB to select grip buttons or left and right arrows to change selection\": \"\",\n \"Use left and right arrows to move selection\": \"\",\n \"Use left and right arrows to move left selection\": \"\",\n \"Use left and right arrows to move right selection\": \"\",\n \"Use TAB select grip buttons or up and down arrows to change selection\": \"\",\n \"Use up and down arrows to move selection\": \"\",\n \"Use up and down arrows to move lower selection\": \"\",\n \"Use up and down arrows to move upper selection\": \"\",\n \"From %1 to %2\": \"\",\n \"From %1\": \"\",\n \"To %1\": \"\",\n // Data loader-related.\n \"No parser available for file: %1\": \"\",\n \"Error parsing file: %1\": \"\",\n \"Unable to load file: %1\": \"\",\n \"Invalid date\": \"\",\n // Common actions\n \"Close\": \"\",\n \"Minimize\": \"\"\n};","/**\r\n * Language module contains everything related to language-specific operations:\r\n * * Translating prompts\r\n * * Translating functions\r\n * * Date format localizations\r\n */\nimport { __extends, __read, __spread } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"../Base\";\nimport { Adapter } from \"./Adapter\";\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\nimport en from \"../../../lang/en\";\nimport { options } from \"../Options\";\n;\n;\n/**\r\n * Handles all language-related tasks, like loading and storing translations,\r\n * translating prompts, lists of prompts and even functions.\r\n *\r\n * Almost every object in amCharts4 universe will have a `language` property,\r\n * which can be accessed for prompt translation.\r\n *\r\n * @see {@link ILanguageAdapters} for a list of available Adapters\r\n * @todo Make prompt keys case-insensitive\r\n * @important\r\n */\n\nvar Language =\n/** @class */\nfunction (_super) {\n __extends(Language, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Language() {\n var _this = _super.call(this) || this;\n /**\r\n * Adapter.\r\n */\n\n\n _this.adapter = new Adapter(_this);\n /**\r\n * Current locale.\r\n */\n\n _this._locale = en;\n /**\r\n * Default locale. A locale to fall back to if none is specified, or\r\n * if there's no translation for the prompt for the current language.\r\n */\n\n _this._defaultLocale = en;\n _this.className = \"Language\"; // Set default language if necessary\n\n if ($type.hasValue(options.defaultLocale)) {\n _this.locale = options.defaultLocale;\n }\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns locale that is currently used.\r\n *\r\n * @param locale Force locale. Will use current language if not set.\r\n * @return Locale\r\n */\n\n\n Language.prototype.getLocale = function (locale) {\n if (locale == null) {\n locale = this._locale;\n }\n\n return this.adapter.apply(\"locale\", {\n locale: locale\n }).locale;\n };\n /**\r\n * Returns the translation of the string.\r\n *\r\n * If the translation is empty, it will return untranslated prompt.\r\n *\r\n * Third parameter and up are strings that can be used to replace \"%X\"\r\n * placeholders in prompt.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Results in \"This is a first translation test\"\r\n * chart.language.translate(\"This is a %1 translation %2\", null, \"first\", \"test\");\r\n * ```\r\n * ```JavaScriptScript\r\n * // Results in \"This is a first translation test\"\r\n * chart.language.translate(\"This is a %1 translation %2\", null, \"first\", \"test\");\r\n * ```\r\n *\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param rest Parameters to replace in string\r\n * @return Translation\r\n */\n\n\n Language.prototype.translate = function (prompt, locale) {\n var rest = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n } // Get langauge\n\n\n locale = this.getLocale(locale); // Init translation\n\n var translation = prompt; // Get translations for the locale\n\n var translations = this.getTranslations(locale);\n var value = translations[prompt]; // Try to look for the translation\n\n if (value === null) {\n value = \"\";\n } else if ($type.hasValue(value)) {\n // It might be an empty string\n if (value) {\n translation = value;\n }\n } else if (locale !== this._defaultLocale) {\n // Try to look in default language\n return this.translate.apply(this, __spread([prompt, this._defaultLocale], rest));\n } // Replace %1, %2, etc params\n\n\n if (rest.length) {\n for (var len = rest.length, i = 0; i < len; ++i) {\n translation = translation.split(\"%\" + (i + 1)).join(rest[i]);\n }\n } // Return the translation\n\n\n return this.adapter.apply(\"translate\", {\n translation: translation,\n locale: locale\n }).translation;\n };\n /**\r\n * Non-type-checked translation.\r\n *\r\n * Can be used by plugins and other code that may have their own non-standard\r\n * translation prompts.\r\n *\r\n * @since 4.5.5\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param rest Parameters to replace in string\r\n * @return Translation\r\n */\n\n\n Language.prototype.translateAny = function (prompt, locale) {\n var rest = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n\n return this.translate.apply(this, __spread([prompt, locale], rest));\n };\n /**\r\n * Sets a prompt translation.\r\n *\r\n * @since 4.9.35\r\n * @param prompt Prompt in English\r\n * @param translation Translation\r\n * @param locale Locale\r\n */\n\n\n Language.prototype.setTranslationAny = function (prompt, translation, locale) {\n var localeTarget = locale || this.locale;\n localeTarget[prompt] = translation;\n };\n /**\r\n * Translates prompt.\r\n *\r\n * If translation is empty, it will return empty string, which is a different\r\n * behavior than that of regular `translate`.\r\n *\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param ...rest Parameters to replace in string\r\n * @return Translation\r\n */\n\n\n Language.prototype.translateEmpty = function (prompt, locale) {\n var rest = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n\n var translation = this.translate.apply(this, __spread([prompt, locale], rest));\n return translation == prompt ? \"\" : translation;\n };\n /**\r\n * Translates a function.\r\n *\r\n * This method will return a function reference, but will not run it. It's\r\n * up to the caller script to run the function.\r\n *\r\n * @param prompt A function id to translate\r\n * @param locale Force translation into specific locale. e.g. fr_FR\r\n * @return A language-specific version of the function\r\n * @todo Apply adapter\r\n */\n\n\n Language.prototype.translateFunc = function (prompt, locale) {\n // Get langauge\n locale = this.getLocale(locale); // Get translations for the locale\n\n var translations = this.getTranslations(locale);\n var value = translations[prompt]; // Try to look for the translation\n\n if (value != null) {\n return value;\n } // Try to look in default language\n\n\n if (locale !== this._defaultLocale) {\n return this.translateFunc(prompt, this._defaultLocale);\n } // Fail - return empty function\n\n\n return function () {\n return \"\";\n };\n };\n /**\r\n * Translates a list of prompts in one go.\r\n *\r\n * @param list An array of strings to translate\r\n * @param locale Force translation into specific locale. e.g. fr_FR\r\n * @return An array of translated strings in the same order as source list\r\n */\n\n\n Language.prototype.translateAll = function (list, locale) {\n var _this = this; // Translate all items in the list\n\n\n if (!this.isDefault()) {\n return $array.map(list, function (x) {\n return _this.translate(x, locale);\n });\n } else {\n return list;\n }\n };\n /**\r\n * Returns `true` if the currently selected locale is a default locale.\r\n *\r\n * @return `true` if locale is default; `false` if it is not.\r\n */\n\n\n Language.prototype.isDefault = function () {\n return this._defaultLocale === this._locale;\n };\n\n Object.defineProperty(Language.prototype, \"locale\", {\n /**\r\n * @return Locale definition\r\n */\n get: function get() {\n return this._locale;\n },\n\n /**\r\n * Current locale.\r\n *\r\n * @param value Locale definition (translations)\r\n */\n set: function set(value) {\n if (this._locale != value) {\n this._locale = value;\n\n if (this.events.isEnabled(\"localechanged\")) {\n var event_1 = {\n type: \"localechanged\",\n locale: value,\n target: this\n };\n this.events.dispatchImmediately(\"localechanged\", event_1);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns translations for a given locale.\r\n *\r\n * @ignore\r\n * @deprecated\r\n * @param locale Locale\r\n * @return Translations\r\n */\n\n Language.prototype.getTranslations = function (locale) {\n return this.adapter.apply(\"translations\", {\n translations: locale,\n locale: locale\n }).translations;\n };\n\n return Language;\n}(BaseObjectEvents);\n\nexport { Language };","/**\r\n * Number formatting-related functionality.\r\n */\nimport { __extends } from \"tslib\";\nimport { Language } from \"../utils/Language\";\nimport { BaseObject } from \"../Base\";\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\nimport { registry } from \"../Registry\";\nimport * as $strings from \"../utils/Strings\";\nimport * as $object from \"../utils/Object\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * NumberFormatter class. Formats numbers according to specified formats.\r\n *\r\n * @todo Apply translations to suffixes/prefixes\r\n */\n\nvar NumberFormatter =\n/** @class */\nfunction (_super) {\n __extends(NumberFormatter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function NumberFormatter() {\n var _this = _super.call(this) || this;\n /**\r\n * A base value for negative numbers. Will treat all numbers below this value\r\n * as negative numbers.\r\n */\n\n\n _this._negativeBase = 0;\n /**\r\n * Holds number format.\r\n *\r\n * @default #,###.#####\r\n */\n\n _this._numberFormat = \"#,###.#####\";\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\n\n _this._outputFormat = \"svg\";\n /**\r\n * Any number smaller than this will be considered \"small\" number, which will\r\n * trigger special formatting if \"a\" format modifier is used.\r\n */\n\n _this._smallNumberThreshold = 1.00;\n _this._forceLTR = false;\n _this.className = \"NumberFormatter\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n NumberFormatter.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n if (this.language) {\n this.language.dispose();\n }\n };\n\n Object.defineProperty(NumberFormatter.prototype, \"language\", {\n /**\r\n * @return Language\r\n */\n get: function get() {\n if (!this._language) {\n if (this.sprite) {\n this._language = this.sprite.language;\n } else {\n this._language = new Language();\n }\n }\n\n return this._language;\n },\n\n /**\r\n * A reference to [[Language]] instance.\r\n *\r\n * Formatter will use language to translate various items, like number\r\n * suffixes, etc.\r\n *\r\n * @param value Language\r\n */\n set: function set(value) {\n this._language = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Formats the number according to specific format.\r\n *\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @return Formatted number\r\n */\n\n NumberFormatter.prototype.format = function (value, format, precision) {\n // no format passed in or \"Number\"\n if (typeof format === \"undefined\" || $type.isString(format) && format.toLowerCase() === \"number\") {\n format = this._numberFormat;\n } // Init return value\n\n\n var formatted; // Cast to number just in case\n // TODO: maybe use better casting\n\n var source = Number(value); // Is it a built-in format or Intl.NumberFormatOptions\n\n if ($type.isObject(format)) {\n try {\n if (this.intlLocales) {\n return new Intl.NumberFormat(this.intlLocales, format).format(source);\n } else {\n return new Intl.NumberFormat(undefined, format).format(source);\n }\n } catch (e) {\n return \"Invalid\";\n }\n } else {\n // Clean format\n format = $utils.cleanFormat(format); // Get format info (it will also deal with parser caching)\n\n var info = this.parseFormat(format, this.language); // format and replace the number\n\n var details = void 0;\n\n if (source > this._negativeBase) {\n details = info.positive;\n } else if (source < this._negativeBase) {\n details = info.negative;\n } else {\n details = info.zero;\n } // Adjust precision\n\n\n if ($type.hasValue(precision) && !details.mod) {\n details = $object.clone(details);\n details.decimals.active = source == 0 ? 0 : precision;\n } // Format\n\n\n formatted = details.template.split($strings.PLACEHOLDER).join(this.applyFormat(source, details));\n }\n\n if (this.forceLTR) {\n formatted = \"‎\" + formatted;\n }\n\n return formatted;\n };\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param language Language\r\n */\n\n\n NumberFormatter.prototype.parseFormat = function (format, language) {\n var _this = this; // Check cache\n\n\n var cached = this.getCache(format);\n\n if ($type.hasValue(cached)) {\n return cached;\n } // init format parse info holder\n\n\n var info = {\n \"positive\": {\n \"thousands\": {\n \"active\": -1,\n \"passive\": -1,\n \"interval\": -1,\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\n },\n \"decimals\": {\n \"active\": -1,\n \"passive\": -1,\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\n },\n \"template\": \"\",\n \"source\": \"\",\n \"parsed\": false\n },\n \"negative\": {\n \"thousands\": {\n \"active\": -1,\n \"passive\": -1,\n \"interval\": -1,\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\n },\n \"decimals\": {\n \"active\": -1,\n \"passive\": -1,\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\n },\n \"template\": \"\",\n \"source\": \"\",\n \"parsed\": false\n },\n \"zero\": {\n \"thousands\": {\n \"active\": -1,\n \"passive\": -1,\n \"interval\": -1,\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\n },\n \"decimals\": {\n \"active\": -1,\n \"passive\": -1,\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\n },\n \"template\": \"\",\n \"source\": \"\",\n \"parsed\": false\n }\n }; // Escape double vertical bars (that mean display one vertical bar)\n\n format = format.replace(\"||\", $strings.PLACEHOLDER2); // Split it up and deal with different formats\n\n var parts = format.split(\"|\");\n info.positive.source = parts[0];\n\n if (typeof parts[2] === \"undefined\") {\n info.zero = info.positive;\n } else {\n info.zero.source = parts[2];\n }\n\n if (typeof parts[1] === \"undefined\") {\n info.negative = info.positive;\n } else {\n info.negative.source = parts[1];\n } // Parse each\n\n\n $object.each(info, function (part, item) {\n // Already parsed\n if (item.parsed) {\n return;\n } // Check cached\n\n\n if (typeof _this.getCache(item.source) !== \"undefined\") {\n info[part] = _this.getCache(item.source);\n return;\n } // Begin parsing\n\n\n var partFormat = item.source; // Just \"Number\"?\n\n if (partFormat.toLowerCase() === \"number\") {\n partFormat = $type.isString(_this._numberFormat) ? _this._numberFormat : \"#,###.#####\";\n } // Let TextFormatter split into chunks\n\n\n var chunks = getTextFormatter().chunk(partFormat, true);\n\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i]; // replace back double vertical bar\n\n chunk.text = chunk.text.replace($strings.PLACEHOLDER2, \"|\");\n\n if (chunk.type === \"value\") {\n // Parse format\n // Look for codes\n var matches = chunk.text.match(/[#0.,]+[ ]?[abesABES%!]?[abesABES‰!]?/);\n\n if (matches) {\n if (matches === null || matches[0] === \"\") {\n // no codes here - assume string\n // nothing to do here\n item.template += chunk.text;\n } else {\n // look for the format modifiers at the end\n var mods = matches[0].match(/[abesABES%‰!]{2}|[abesABES%‰]{1}$/);\n\n if (mods) {\n item.mod = mods[0].toLowerCase();\n item.modSpacing = matches[0].match(/[ ]{1}[abesABES%‰!]{1}$/) ? true : false;\n } // break the format up\n\n\n var a = matches[0].split(\".\"); // Deal with thousands\n\n if (a[0] === \"\") {// No directives for thousands\n // Leave default settings (no formatting)\n } else {\n // Counts\n item.thousands.active = (a[0].match(/0/g) || []).length;\n item.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active; // Separator interval\n\n var b = a[0].split(\",\");\n\n if (b.length === 1) {// No thousands separators\n // Do nothing\n } else {\n // Use length fo the last chunk as thousands length\n item.thousands.interval = $type.getValue(b.pop()).length;\n\n if (item.thousands.interval === 0) {\n item.thousands.interval = -1;\n }\n }\n } // Deal with decimals\n\n\n if (typeof a[1] === \"undefined\") {// No directives for decimals\n // Leave at defaults (no formatting)\n } else {\n // Counts\n item.decimals.active = (a[1].match(/0/g) || []).length;\n item.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\n } // Add special code to template\n\n\n item.template += chunk.text.split(matches[0]).join($strings.PLACEHOLDER);\n }\n }\n } else {\n // Quoted string - take it as it is\n item.template += chunk.text;\n }\n } // Apply style formatting\n //item.template = getTextFormatter().format(item.template, this.outputFormat);\n // Save cache\n\n\n _this.setCache(item.source, item); // Mark this as parsed\n\n\n item.parsed = true;\n }); // Save cache (the whole thing)\n\n this.setCache(format, info);\n return info;\n };\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by parseFormat()\r\n * @return Formatted number\r\n */\n\n\n NumberFormatter.prototype.applyFormat = function (value, details) {\n // Use absolute values\n var negative = value < 0;\n value = Math.abs(value); // Recalculate according to modifier\n\n var prefix = \"\",\n suffix = \"\";\n var mods = details.mod ? details.mod.split(\"\") : [];\n\n if (mods.indexOf(\"b\") !== -1) {\n var a_1 = this.applyPrefix(value, this.bytePrefixes, mods.indexOf(\"!\") !== -1);\n value = a_1[0];\n prefix = a_1[1];\n suffix = a_1[2];\n\n if (details.modSpacing) {\n suffix = \" \" + suffix;\n }\n } else if (mods.indexOf(\"a\") !== -1) {\n var a_2 = this.applyPrefix(value, value < this.smallNumberThreshold ? this.smallNumberPrefixes : this.bigNumberPrefixes, mods.indexOf(\"!\") !== -1);\n value = a_2[0];\n prefix = a_2[1];\n suffix = a_2[2];\n\n if (details.modSpacing) {\n suffix = \" \" + suffix;\n }\n } else if (mods.indexOf(\"%\") !== -1) {\n var ol = $math.min(value.toString().length + 2, 21);\n value *= 100;\n value = parseFloat(value.toPrecision(ol));\n suffix = \"%\";\n } else if (mods.indexOf(\"‰\") !== -1) {\n var ol = $math.min(value.toString().length + 3, 21);\n value *= 1000;\n value = parseFloat(value.toPrecision(ol));\n suffix = \"‰\";\n } // Round to passive\n\n\n if (mods.indexOf(\"e\") !== -1) {\n // convert the value to exponential\n var exp = void 0;\n\n if (details.decimals.passive >= 0) {\n exp = value.toExponential(details.decimals.passive).split(\"e\");\n } else {\n exp = value.toExponential().split(\"e\");\n }\n\n value = Number(exp[0]);\n suffix = \"e\" + exp[1];\n\n if (details.modSpacing) {\n suffix = \" \" + suffix;\n }\n } else if (details.decimals.passive === 0) {\n value = Math.round(value);\n } else if (details.decimals.passive > 0) {\n var d = Math.pow(10, details.decimals.passive);\n value = Math.round(value * d) / d;\n } // Init return value\n\n\n var res = \"\"; // Calc integer and decimal parts\n\n var a = $utils.numberToString(value).split(\".\"); // Format integers\n\n var ints = a[0]; // Pad integers to active length\n\n if (ints.length < details.thousands.active) {\n ints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\n } // Insert thousands separators\n\n\n if (details.thousands.interval > 0) {\n var ip = [];\n var intsr = ints.split(\"\").reverse().join(\"\");\n\n for (var i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\n var c = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\n\n if (c !== \"\") {\n ip.unshift(c);\n }\n }\n\n ints = ip.join(details.thousands.separator);\n } // Add integers\n\n\n res += ints; // Add decimals\n\n if (a.length === 1) {\n a.push(\"\");\n }\n\n var decs = a[1]; // Fill zeros?\n\n if (decs.length < details.decimals.active) {\n decs += Array(details.decimals.active - decs.length + 1).join(\"0\");\n }\n\n if (decs !== \"\") {\n res += details.decimals.separator + decs;\n } // Can't have empty return value\n\n\n if (res === \"\") {\n res = \"0\";\n } // Add minus sign back\n\n\n if (value !== 0 && negative && mods.indexOf(\"s\") === -1) {\n res = \"-\" + res;\n } // Add suffixes/prefixes\n\n\n if (prefix) {\n res = prefix + res;\n }\n\n if (suffix) {\n res += suffix;\n }\n\n return res;\n };\n /**\r\n * Chooses appropriate prefix and suffix based on the passed in rules.\r\n *\r\n * @param value Value\r\n * @param prefixes Prefix array\r\n * @param force Force application of a first prefix (@sice 4.5.4)\r\n * @return Result\r\n */\n\n\n NumberFormatter.prototype.applyPrefix = function (value, prefixes, force) {\n if (force === void 0) {\n force = false;\n }\n\n var newvalue = value;\n var prefix = \"\";\n var suffix = \"\";\n var applied = false;\n var k = 1;\n\n for (var i = 0, len = prefixes.length; i < len; i++) {\n if (prefixes[i].number <= value) {\n if (prefixes[i].number === 0) {\n newvalue = 0;\n } else {\n newvalue = value / prefixes[i].number;\n k = prefixes[i].number;\n }\n\n prefix = prefixes[i].prefix;\n suffix = prefixes[i].suffix;\n applied = true;\n }\n }\n\n if (!applied && force && prefixes.length && value != 0) {\n // Prefix was not applied. Use the first prefix.\n newvalue = value / prefixes[0].number;\n prefix = prefixes[0].prefix;\n suffix = prefixes[0].suffix;\n applied = true;\n }\n\n if (applied) {\n newvalue = parseFloat(newvalue.toPrecision($math.min(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length, 21)));\n }\n\n return [newvalue, prefix, suffix];\n };\n /**\r\n * Invalidates the parent [[Sprite]] object.\r\n */\n\n\n NumberFormatter.prototype.invalidateSprite = function () {\n if (this.sprite) {\n this.sprite.invalidate();\n }\n };\n\n Object.defineProperty(NumberFormatter.prototype, \"numberFormat\", {\n /**\r\n * @return A format to use for number formatting\r\n */\n get: function get() {\n return this._numberFormat;\n },\n\n /**\r\n * Number format.\r\n *\r\n * @default \"#,###.#####\"\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param format A format to use for number formatting\r\n */\n set: function set(format) {\n this._numberFormat = format;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"intlLocales\", {\n /**\r\n * @return Date format\r\n */\n get: function get() {\n return this._intlLocales;\n },\n\n /**\r\n * Locales if you are using date formats in `Intl.NumberFormatOptions` syntax.\r\n *\r\n * @see (@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) about using Intl for number formatting\r\n * @param value Locales\r\n */\n set: function set(value) {\n this._intlLocales = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"negativeBase\", {\n /**\r\n * @return A format to use for number formatting\r\n */\n get: function get() {\n return this._negativeBase;\n },\n\n /**\r\n * Negative base for negative numbers.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param format A format to use for number formatting\r\n */\n set: function set(value) {\n this._negativeBase = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"bigNumberPrefixes\", {\n /**\r\n * @return Prefixes for big numbers\r\n */\n get: function get() {\n if (!$type.hasValue(this._bigNumberPrefixes)) {\n this._bigNumberPrefixes = [{\n \"number\": 1e+3,\n \"suffix\": this.language.translate(\"_big_number_suffix_3\")\n }, {\n \"number\": 1e+6,\n \"suffix\": this.language.translate(\"_big_number_suffix_6\")\n }, {\n \"number\": 1e+9,\n \"suffix\": this.language.translate(\"_big_number_suffix_9\")\n }, {\n \"number\": 1e+12,\n \"suffix\": this.language.translate(\"_big_number_suffix_12\")\n }, {\n \"number\": 1e+15,\n \"suffix\": this.language.translate(\"_big_number_suffix_15\")\n }, {\n \"number\": 1e+18,\n \"suffix\": this.language.translate(\"_big_number_suffix_18\")\n }, {\n \"number\": 1e+21,\n \"suffix\": this.language.translate(\"_big_number_suffix_21\")\n }, {\n \"number\": 1e+24,\n \"suffix\": this.language.translate(\"_big_number_suffix_24\")\n }];\n }\n\n return this._bigNumberPrefixes;\n },\n\n /**\r\n * Prefixes for big numbers.\r\n *\r\n * It's an array of objects of number/prefix pairs.\r\n *\r\n * ```JSON\r\n * [\r\n * { \"number\": 1e+3, \"suffix\": \"K\" },\r\n * { \"number\": 1e+6, \"suffix\": \"M\" },\r\n * { \"number\": 1e+9, \"suffix\": \"G\" },\r\n * { \"number\": 1e+12, \"suffix\": \"T\" },\r\n * { \"number\": 1e+15, \"suffix\": \"P\" },\r\n * { \"number\": 1e+18, \"suffix\": \"E\" },\r\n * { \"number\": 1e+21, \"suffix\": \"Z\" },\r\n * { \"number\": 1e+24, \"suffix\": \"Y\" }\r\n * ]\r\n * ```\r\n *\r\n * If the number is bigger than the `number` ir will be converted to the\r\n * appropriate bigger number with prefix.\r\n *\r\n * E.g. as per above `1500` will be converted to `1.5K`.\r\n *\r\n * Please note that for this transformation to be enabled, you need to\r\n * enable it specific modifier in your format setting.\r\n *\r\n * The modifier for big/small number modification is \"a\":\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00a\")}\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for big numbers\r\n */\n set: function set(prefixes) {\n this._bigNumberPrefixes = prefixes;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"smallNumberPrefixes\", {\n /**\r\n * @return Prefixes for small numbers\r\n */\n get: function get() {\n if (!$type.hasValue(this._smallNumberPrefixes)) {\n this._smallNumberPrefixes = [{\n \"number\": 1e-24,\n \"suffix\": this.language.translate(\"_small_number_suffix_24\")\n }, {\n \"number\": 1e-21,\n \"suffix\": this.language.translate(\"_small_number_suffix_21\")\n }, {\n \"number\": 1e-18,\n \"suffix\": this.language.translate(\"_small_number_suffix_18\")\n }, {\n \"number\": 1e-15,\n \"suffix\": this.language.translate(\"_small_number_suffix_15\")\n }, {\n \"number\": 1e-12,\n \"suffix\": this.language.translate(\"_small_number_suffix_12\")\n }, {\n \"number\": 1e-9,\n \"suffix\": this.language.translate(\"_small_number_suffix_9\")\n }, {\n \"number\": 1e-6,\n \"suffix\": this.language.translate(\"_small_number_suffix_6\")\n }, {\n \"number\": 1e-3,\n \"suffix\": this.language.translate(\"_small_number_suffix_3\")\n }];\n }\n\n return this._smallNumberPrefixes;\n },\n\n /**\r\n * Prefixes for big numbers.\r\n *\r\n * It's an array of objects of number/prefix pairs.\r\n *\r\n * ```JSON\r\n * [\r\n * { \"number\": 1e-24, \"suffix\": \"y\" },\r\n * { \"number\": 1e-21, \"suffix\": \"z\" },\r\n * { \"number\": 1e-18, \"suffix\": \"a\" },\r\n * { \"number\": 1e-15, \"suffix\": \"f\" },\r\n * { \"number\": 1e-12, \"suffix\": \"p\" },\r\n * { \"number\": 1e-9, \"suffix\": \"n\" },\r\n * { \"number\": 1e-6, \"suffix\": \"μ\" },\r\n * { \"number\": 1e-3, \"suffix\": \"m\" }\r\n * ]\r\n * ```\r\n *\r\n * If the number is smaller than the `number` ir will be converted to the\r\n * appropriate smaller number with prefix.\r\n *\r\n * E.g. as per above `0.0015` will be converted to `1.5m`.\r\n *\r\n * Please note that for this transformation to be enabled, you need to\r\n * enable it specific modifier in your format setting.\r\n *\r\n * The modifier for big/small number modification is \"a\":\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00a\")}\r\n * ```\r\n *\r\n * IMPORTANT: The order of the suffixes is important. The list must start\r\n * from the smallest number and work towards bigger ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for small numbers\r\n */\n set: function set(prefixes) {\n this._smallNumberPrefixes = prefixes;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"smallNumberThreshold\", {\n /**\r\n * @return Small number threshold\r\n */\n get: function get() {\n return this._smallNumberThreshold;\n },\n\n /**\r\n * Any number smaller than this will be considered \"small\" number, which will\r\n * trigger special formatting if \"a\" format modifier is used.\r\n *\r\n * @since 4.6.8\r\n * @param value Small number threshold\r\n */\n set: function set(value) {\n this._smallNumberThreshold = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"bytePrefixes\", {\n /**\r\n * @return Prefixes for byte-size formatting\r\n */\n get: function get() {\n if (!$type.hasValue(this._bytePrefixes)) {\n this._bytePrefixes = [{\n \"number\": 1,\n suffix: this.language.translate(\"_byte_suffix_B\")\n }, {\n \"number\": 1024,\n suffix: this.language.translate(\"_byte_suffix_KB\")\n }, {\n \"number\": 1048576,\n suffix: this.language.translate(\"_byte_suffix_MB\")\n }, {\n \"number\": 1073741824,\n suffix: this.language.translate(\"_byte_suffix_GB\")\n }, {\n \"number\": 1099511627776,\n suffix: this.language.translate(\"_byte_suffix_TB\")\n }, {\n \"number\": 1125899906842624,\n suffix: this.language.translate(\"_byte_suffix_PB\")\n }];\n }\n\n return this._bytePrefixes;\n },\n\n /**\r\n * Basically the same as `bigNumberPrefixes`, except base for calculation\r\n * is not thousand but byte (1024).\r\n *\r\n * The modifier is \"b\".\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00b\")}\r\n * ```\r\n *\r\n * The above `2048` will change to `2K`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for byte-size formatting\r\n */\n set: function set(prefixes) {\n this._bytePrefixes = prefixes;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"outputFormat\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Output format\r\n */\n get: function get() {\n return this._outputFormat;\n },\n\n /**\r\n * Ooutput format: \"svg\" or \"html\".\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Output format\r\n */\n set: function set(outputFormat) {\n this._outputFormat = outputFormat.toLowerCase();\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberFormatter.prototype, \"forceLTR\", {\n get: function get() {\n return this._forceLTR;\n },\n set: function set(value) {\n this._forceLTR = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\n\n NumberFormatter.prototype.escape = function (text) {\n return text.replace(\"||\", $strings.PLACEHOLDER2);\n };\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\n\n\n NumberFormatter.prototype.unescape = function (text) {\n return text.replace($strings.PLACEHOLDER2, \"|\");\n };\n\n return NumberFormatter;\n}(BaseObject);\n\nexport { NumberFormatter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"NumberFormatter\"] = NumberFormatter;","/**\r\n * Handles date and time formatting\r\n */\nimport { __extends } from \"tslib\";\nimport { Language } from \"../utils/Language\";\nimport { BaseObject } from \"../Base\";\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\nimport { registry } from \"../Registry\";\nimport * as $strings from \"../utils/Strings\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\nimport * as $time from \"../utils/Time\";\n/**\r\n * Handles date and time formatting.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/} Tutorial on date/time formatting\r\n * @todo Better type casting of passed in date?\r\n * @todo Quarter support?\r\n * @todo When parsing named months make the search case-insensitive\r\n * @todo Escape a.m./p.m. properly when used in RegEx\r\n */\n\nvar DateFormatter =\n/** @class */\nfunction (_super) {\n __extends(DateFormatter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function DateFormatter() {\n var _this = _super.call(this) || this;\n /**\r\n * Date format.\r\n */\n\n\n _this._dateFormat = \"yyyy-MM-dd\";\n /**\r\n * Input date format.\r\n */\n\n _this._inputDateFormat = \"yyyy-MM-dd\";\n /**\r\n * Assume UTC time zone.\r\n */\n\n _this._utc = false;\n /**\r\n * If `timezone` is set, this will hold minute fraction of the timezone.\r\n *\r\n * @readonly\r\n * @ignore\r\n */\n\n _this.timezoneMinutes = 0;\n /**\r\n * First day of week.\r\n *\r\n * 0 - Sunday\r\n * 1 - Monday\r\n *\r\n * Etc.\r\n */\n\n _this._firstDayOfWeek = 1;\n /**\r\n * A list of month names.\r\n */\n\n _this.months = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n /**\r\n * A list of short month names.\r\n */\n\n _this.monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May(short)\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n /**\r\n * A list of weekday names.\r\n */\n\n _this.weekdays = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n /**\r\n * A list of short weekday names.\r\n */\n\n _this.weekdaysShort = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\n\n _this._outputFormat = \"svg\";\n /**\r\n * Should the first letter of the formatted date be capitalized?\r\n *\r\n * @default true\r\n */\n\n _this.capitalize = true;\n _this.className = \"DateFormatter\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(DateFormatter.prototype, \"language\", {\n /**\r\n * @return Language\r\n */\n get: function get() {\n return this._language;\n },\n\n /**\r\n * A reference to [[Language]] object.\r\n *\r\n * @param value Language\r\n */\n set: function set(value) {\n this._language = value;\n this.dateFormat = this._language.translate(\"_date\");\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Formats the date value according to specified format.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/} Tutorial on date/time formatting\r\n * @param source Date value\r\n * @param format Format\r\n * @return Formatted date string\r\n */\n\n DateFormatter.prototype.format = function (source, format, applyTimezone) {\n // No language?\n if (!this.language) {\n if (this.sprite) {\n this.language = this.sprite.language;\n } else {\n this.language = new Language();\n }\n } // No format passed in or it's empty\n\n\n if (typeof format === \"undefined\" || format === \"\") {\n format = this._dateFormat;\n } // Init return value\n\n\n var formatted; // Do casting if required\n // This will take care of timestamps as well as Date objects\n\n var date;\n\n if ($type.isString(source)) {\n // If it's a string, let's try parsing it using our own functionality\n date = this.parse(source);\n } else {\n date = $utils.anyToDate(source);\n } // Is it a built-in format or Intl.DateTimeFormat\n\n\n if ($type.isObject(format)) {\n try {\n if (this.intlLocales) {\n return new Intl.DateTimeFormat(this.intlLocales, format).format(date);\n } else {\n return new Intl.DateTimeFormat(undefined, format).format(date);\n }\n } catch (e) {\n return \"Invalid\";\n }\n } else {\n // Clean format\n format = $utils.cleanFormat(format); // get format info (it will also deal with parser caching)\n\n var info = this.parseFormat(format); // Should we apply custom time zone?\n\n if ($type.hasValue(this.timezoneOffset)) {\n date.setMinutes(date.getMinutes() + date.getTimezoneOffset() - this.timezoneOffset);\n } else if ($type.hasValue(this.timezone) && applyTimezone !== false) {\n date = $time.setTimezone(date, this.timezone);\n } // Check if it's a valid date\n\n\n if (!$type.isNumber(date.getTime())) {\n return this.language.translate(\"Invalid date\");\n } // Apply format\n\n\n formatted = this.applyFormat(date, info, this.language); // Capitalize\n\n if (this.capitalize) {\n formatted = formatted.replace(/^.{1}/, formatted.substr(0, 1).toUpperCase());\n }\n } // We're done\n\n\n return formatted;\n };\n /**\r\n * Parses format into structured infromation.\r\n *\r\n * @param format Format template\r\n */\n\n\n DateFormatter.prototype.parseFormat = function (format) {\n // Check cache\n var cached = this.getCache(format);\n\n if ($type.hasValue(cached)) {\n return cached;\n } // Init format parse info holder\n\n\n var info = {\n \"template\": \"\",\n \"parts\": []\n }; // Let TextFormatter split into chunks\n\n var chunks = getTextFormatter().chunk(format, true);\n\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i];\n\n if (chunk.type === \"value\") {\n // Just \"Date\"?\n if (chunk.text.match(/^date$/i) && $type.isString(this._dateFormat)) {\n chunk.text = this._dateFormat;\n } // Find all possible parts\n\n\n var matches = chunk.text.match(/G|yyyy|yyy|yy|y|YYYY|YYY|YY|Y|u|q|MMMMM|MMMM|MMM|MM|M|ww|w|W|dd|d|DDD|DD|D|F|g|EEEEE|EEEE|EEE|EE|E|eeeee|eeee|eee|ee|e|aaa|aa|a|hh|h|HH|H|KK|K|kk|k|mm|m|ss|s|SSS|SS|S|A|zzzz|zzz|zz|z|ZZ|Z|t|x|nnn|nn|n|i|I/g); // Found?\n\n if (matches) {\n // Populate template\n for (var x = 0; x < matches.length; x++) {\n info.parts.push(matches[x]);\n chunk.text = chunk.text.replace(matches[x], $strings.PLACEHOLDER);\n }\n }\n } // Apply to template\n\n\n info.template += chunk.text;\n } // Apply style formatting\n //info.template = getTextFormatter().format(info.template, this.outputFormat);\n // Save cache\n\n\n this.setCache(format, info);\n return info;\n };\n /**\r\n * Applies format to Date.\r\n *\r\n * @param date Date object\r\n * @param info Parsed format information\r\n * @param language Language\r\n * @return Formatted date string\r\n */\n\n\n DateFormatter.prototype.applyFormat = function (date, info, language) {\n // Init return value\n var res = info.template; // Get values\n\n var fullYear,\n month,\n weekday,\n day,\n hours,\n minutes,\n seconds,\n milliseconds,\n offset = date.getTimezoneOffset(),\n timestamp = date.getTime();\n\n if (this.utc) {\n fullYear = date.getUTCFullYear();\n month = date.getUTCMonth();\n weekday = date.getUTCDay();\n day = date.getUTCDate();\n hours = date.getUTCHours();\n minutes = date.getUTCMinutes();\n seconds = date.getUTCSeconds();\n milliseconds = date.getUTCMilliseconds();\n } else {\n fullYear = date.getFullYear();\n month = date.getMonth();\n weekday = date.getDay();\n day = date.getDate();\n hours = date.getHours();\n minutes = date.getMinutes();\n seconds = date.getSeconds();\n milliseconds = date.getMilliseconds();\n } // Go through each part and format/replace it in template\n\n\n for (var i = 0, len = info.parts.length; i < len; i++) {\n var value = \"\";\n\n switch (info.parts[i]) {\n case \"G\":\n value = language.translate(fullYear < 0 ? \"_era_bc\" : \"_era_ad\");\n break;\n\n case \"yyyy\":\n value = Math.abs(fullYear).toString();\n\n if (fullYear < 0) {\n value += language.translate(\"_era_bc\");\n }\n\n break;\n\n case \"yyy\":\n case \"yy\":\n case \"y\":\n value = Math.abs(fullYear).toString().substr(-info.parts[i].length);\n\n if (fullYear < 0) {\n value += language.translate(\"_era_bc\");\n }\n\n break;\n\n case \"YYYY\":\n case \"YYY\":\n case \"YY\":\n case \"Y\":\n var week = $utils.getWeek(date);\n var year = fullYear;\n\n if (week == 1 && weekday > 4) {\n year--;\n }\n\n if (info.parts[i] == \"YYYY\") {\n value = Math.abs(year).toString();\n } else {\n value = Math.abs(year).toString().substr(-info.parts[i].length);\n }\n\n if (year < 0) {\n value += language.translate(\"_era_bc\");\n }\n\n break;\n\n case \"u\":\n // @todo\n break;\n\n case \"q\":\n value = \"\" + Math.ceil((date.getMonth() + 1) / 3);\n break;\n\n case \"MMMMM\":\n value = language.translate(this.months[month]).substr(0, 1);\n break;\n\n case \"MMMM\":\n value = language.translate(this.months[month]);\n break;\n\n case \"MMM\":\n value = language.translate(this.monthsShort[month]);\n break;\n\n case \"MM\":\n value = $utils.padString(month + 1, 2, \"0\");\n break;\n\n case \"M\":\n value = (month + 1).toString();\n break;\n\n case \"ww\":\n value = $utils.padString($utils.getWeek(date, this.utc), 2, \"0\");\n break;\n\n case \"w\":\n value = $utils.getWeek(date, this.utc).toString();\n break;\n\n case \"W\":\n value = $utils.getMonthWeek(date, this.utc).toString();\n break;\n\n case \"dd\":\n value = $utils.padString(day, 2, \"0\");\n break;\n\n case \"d\":\n value = day.toString();\n break;\n\n case \"DD\":\n case \"DDD\":\n value = $utils.padString($utils.getYearDay(date, this.utc).toString(), info.parts[i].length, \"0\");\n break;\n\n case \"D\":\n value = $utils.getYearDay(date, this.utc).toString();\n break;\n\n case \"F\":\n // @todo\n break;\n\n case \"g\":\n // @todo\n break;\n\n case \"t\":\n value = language.translateFunc(\"_dateOrd\").call(this, day);\n break;\n\n case \"E\":\n value = (weekday || 7).toString();\n break;\n\n case \"EE\":\n value = $utils.padString((weekday || 7).toString(), 2, \"0\");\n break;\n\n case \"EEE\":\n case \"eee\":\n value = language.translate(this.weekdaysShort[weekday]);\n break;\n\n case \"EEEE\":\n case \"eeee\":\n value = language.translate(this.weekdays[weekday]);\n break;\n\n case \"EEEEE\":\n case \"eeeee\":\n value = language.translate(this.weekdays[weekday]).substr(0, 1);\n break;\n\n case \"e\":\n case \"ee\":\n value = (weekday - this.firstDayOfWeek + 1).toString();\n\n if (info.parts[i] == \"ee\") {\n value = $utils.padString(value, 2, \"0\");\n }\n\n break;\n\n case \"a\":\n if (hours >= 12) {\n value = language.translate(\"PM\");\n } else {\n value = language.translate(\"AM\");\n }\n\n break;\n\n case \"aa\":\n if (hours >= 12) {\n value = language.translate(\"P.M.\");\n } else {\n value = language.translate(\"A.M.\");\n }\n\n break;\n\n case \"aaa\":\n if (hours >= 12) {\n value = language.translate(\"P\");\n } else {\n value = language.translate(\"A\");\n }\n\n break;\n\n case \"h\":\n value = $utils.get12Hours(hours).toString();\n break;\n\n case \"hh\":\n value = $utils.padString($utils.get12Hours(hours), 2, \"0\");\n break;\n\n case \"H\":\n value = hours.toString();\n break;\n\n case \"HH\":\n value = $utils.padString(hours, 2, \"0\");\n break;\n\n case \"K\":\n value = $utils.get12Hours(hours, 0).toString();\n break;\n\n case \"KK\":\n value = $utils.padString($utils.get12Hours(hours, 0), 2, \"0\");\n break;\n\n case \"k\":\n value = (hours + 1).toString();\n break;\n\n case \"kk\":\n value = $utils.padString(hours + 1, 2, \"0\");\n break;\n\n case \"m\":\n value = minutes.toString();\n break;\n\n case \"mm\":\n value = $utils.padString(minutes, 2, \"0\");\n break;\n\n case \"s\":\n value = seconds.toString();\n break;\n\n case \"ss\":\n value = $utils.padString(seconds, 2, \"0\");\n break;\n\n case \"S\":\n case \"SS\":\n case \"SSS\":\n value = Math.round(milliseconds / 1000 * Math.pow(10, info.parts[i].length)).toString();\n break;\n\n case \"x\":\n value = timestamp.toString();\n break;\n\n case \"n\":\n case \"nn\":\n case \"nnn\":\n value = $utils.padString(milliseconds, info.parts[i].length, \"0\");\n break;\n\n case \"z\":\n value = $utils.getTimeZone(date, false, false, this.utc);\n break;\n\n case \"zz\":\n value = $utils.getTimeZone(date, true, false, this.utc);\n break;\n\n case \"zzz\":\n value = $utils.getTimeZone(date, false, true, this.utc);\n break;\n\n case \"zzzz\":\n value = $utils.getTimeZone(date, true, true, this.utc);\n break;\n\n case \"Z\":\n case \"ZZ\":\n var tz = Math.abs(offset) / 60;\n var tzh = Math.floor(tz);\n var tzm = tz * 60 - tzh * 60;\n\n if (this.utc) {\n tzh = 0;\n tzm = 0;\n }\n\n if (info.parts[i] == \"Z\") {\n value = \"GMT\";\n value += offset > 0 ? \"-\" : \"+\";\n value += $utils.padString(tzh, 2) + \":\" + $utils.padString(tzm, 2);\n } else {\n value = offset > 0 ? \"-\" : \"+\";\n value += $utils.padString(tzh, 2) + $utils.padString(tzm, 2);\n }\n\n break;\n\n case \"i\":\n value = date.toISOString();\n break;\n\n case \"I\":\n value = date.toUTCString();\n break;\n }\n\n res = res.replace($strings.PLACEHOLDER, value);\n }\n\n return res;\n };\n /**\r\n * Parses any input value into Date object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Parsing_Dates} Tutorial on date/time parsing\r\n * @param source Source value\r\n * @param format Source format\r\n * @return Date object\r\n */\n\n\n DateFormatter.prototype.parse = function (source, format) {\n // Format set?\n if (!$type.hasValue(format)) {\n format = this.inputDateFormat;\n } // Is it already a Date\n\n\n if (source instanceof Date) {\n return source;\n } // Is it a numeric timestamp\n\n\n if (typeof source === \"number\") {\n return new Date(source);\n } // No? Let's check if it's string, and try converting to it if nec\n\n\n if (typeof source !== \"string\") {\n source = source.toString();\n } // no language?\n\n\n if (!this.language) {\n if (this.sprite) {\n this.language = this.sprite.language;\n } else {\n this.language = new Language();\n }\n } // Init return value\n\n\n var res; // Init RegEx for parsing\n\n var reg = \"\"; // Clean format\n\n format = $utils.cleanFormat(format); // Clip format to length of the source string\n\n format = format.substr(0, source.length); // Parse format\n\n var info = this.parseFormat(format); // Init parsed items holder\n\n var parsedIndexes = {\n \"year\": -1,\n \"year3\": -1,\n \"year2\": -1,\n \"year1\": -1,\n \"month\": -1,\n \"monthShort\": -1,\n \"monthLong\": -1,\n \"weekdayShort\": -1,\n \"weekdayLong\": -1,\n \"day\": -1,\n \"yearDay\": -1,\n \"week\": -1,\n \"hourBase0\": -1,\n \"hour12Base0\": -1,\n \"hourBase1\": -1,\n \"hour12Base1\": -1,\n \"minute\": -1,\n \"second\": -1,\n \"millisecond\": -1,\n \"millisecondDigits\": -1,\n \"am\": -1,\n \"zone\": -1,\n \"timestamp\": -1,\n \"iso\": -1\n }; // Init values\n\n var resValues = {\n \"year\": 1970,\n \"month\": 0,\n \"day\": 1,\n \"hour\": 0,\n \"minute\": 0,\n \"second\": 0,\n \"millisecond\": 0,\n \"timestamp\": null,\n \"offset\": 0,\n \"utc\": this.utc\n }; // Index adjuster\n\n var indexAdjust = 0,\n index = 0; // Iterate through all of the parts\n\n for (var i = 0; i < info.parts.length; i++) {\n // Set current match index\n index = i + indexAdjust + 1;\n\n switch (info.parts[i]) {\n case \"yyyy\":\n case \"YYYY\":\n reg += \"([0-9]{4})\";\n parsedIndexes.year = index;\n break;\n\n case \"yyy\":\n case \"YYY\":\n reg += \"([0-9]{3})\";\n parsedIndexes.year3 = index;\n break;\n\n case \"yy\":\n case \"YY\":\n reg += \"([0-9]{2})\";\n parsedIndexes.year2 = index;\n break;\n\n case \"y\":\n case \"Y\":\n reg += \"([0-9]{1})\";\n parsedIndexes.year1 = index;\n break;\n\n case \"MMMM\":\n reg += \"(\" + this.getStringList(this.months).join(\"|\") + \")\";\n parsedIndexes.monthLong = index;\n break;\n\n case \"MMM\":\n reg += \"(\" + this.getStringList(this.monthsShort).join(\"|\") + \")\";\n parsedIndexes.monthShort = index;\n break;\n\n case \"MM\":\n case \"M\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.month = index;\n break;\n\n case \"ww\":\n case \"w\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.week = index;\n break;\n\n case \"dd\":\n case \"d\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.day = index;\n break;\n\n case \"DDD\":\n case \"DD\":\n case \"D\":\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n parsedIndexes.yearDay = index;\n break;\n\n case \"dddd\":\n reg += \"(\" + this.getStringList(this.weekdays).join(\"|\") + \")\";\n parsedIndexes.weekdayLong = index;\n break;\n\n case \"ddd\":\n reg += \"(\" + this.getStringList(this.weekdaysShort).join(\"|\") + \")\";\n parsedIndexes.weekdayShort = index;\n break;\n\n case \"aaa\":\n case \"aa\":\n case \"a\":\n // TODO: fix (escape regex)\n reg += \"(\" + this.getStringList([\"AM\", \"PM\", \"A\\.M\\.\", \"P\\.M\\.\", \"A\", \"P\"]).join(\"|\") + \")\";\n parsedIndexes.am = index;\n break;\n\n case \"hh\":\n case \"h\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.hour12Base1 = index;\n break;\n\n case \"HH\":\n case \"H\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.hourBase0 = index;\n break;\n\n case \"KK\":\n case \"K\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.hour12Base0 = index;\n break;\n\n case \"kk\":\n case \"k\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.hourBase1 = index;\n break;\n\n case \"mm\":\n case \"m\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.minute = index;\n break;\n\n case \"ss\":\n case \"s\":\n reg += \"([0-9]{2}|[0-9]{1})\";\n parsedIndexes.second = index;\n break;\n\n case \"SSS\":\n case \"SS\":\n case \"S\":\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n parsedIndexes.millisecond = index;\n parsedIndexes.millisecondDigits = info.parts[i].length;\n break;\n\n case \"nnn\":\n case \"nn\":\n case \"n\":\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n parsedIndexes.millisecond = index;\n break;\n\n case \"x\":\n reg += \"([0-9]{1,})\";\n parsedIndexes.timestamp = index;\n break;\n\n case \"Z\":\n reg += \"GMT([-+]+[0-9]{2}:[0-9]{2})\";\n parsedIndexes.zone = index;\n break;\n\n case \"ZZ\":\n reg += \"([\\\\-+]+[0-9]{2}[0-9]{2})\";\n parsedIndexes.zone = index;\n break;\n\n case \"i\":\n reg += \"([0-9]{4})-?([0-9]{2})-?([0-9]{2})T?([0-9]{2}):?([0-9]{2}):?([0-9]{2})\\.?([0-9]{0,3})([zZ]|[+\\-][0-9]{2}:?[0-9]{2}|$)\";\n parsedIndexes.iso = index;\n indexAdjust += 7;\n break;\n\n case \"G\":\n case \"YYYY\":\n case \"YYY\":\n case \"YY\":\n case \"Y\":\n case \"MMMMM\":\n case \"W\":\n case \"EEEEE\":\n case \"EEEE\":\n case \"EEE\":\n case \"EE\":\n case \"E\":\n case \"eeeee\":\n case \"eeee\":\n case \"eee\":\n case \"ee\":\n case \"e\":\n case \"zzzz\":\n case \"zzz\":\n case \"zz\":\n case \"z\":\n case \"t\":\n // Ignore\n indexAdjust--;\n break;\n }\n\n reg += \"[^0-9]*\";\n } // Try matching\n\n\n var regex = new RegExp(reg);\n var matches = source.match(regex);\n\n if (matches) {\n // Populate the date object\n // Full year\n if (parsedIndexes.year > -1) {\n resValues.year = parseInt(matches[parsedIndexes.year]);\n } // 3-digit year\n\n\n if (parsedIndexes.year3 > -1) {\n var val = parseInt(matches[parsedIndexes.year3]);\n val += 1000;\n resValues.year = val;\n } // 2-digit year\n\n\n if (parsedIndexes.year2 > -1) {\n var val = parseInt(matches[parsedIndexes.year2]);\n\n if (val > 50) {\n val += 1000;\n } else {\n val += 2000;\n }\n\n resValues.year = val;\n } // 1-digit year\n\n\n if (parsedIndexes.year1 > -1) {\n var val = parseInt(matches[parsedIndexes.year1]);\n val = Math.floor(new Date().getFullYear() / 10) * 10 + val;\n resValues.year = val;\n } // Full month\n\n\n if (parsedIndexes.monthLong > -1) {\n resValues.month = this.resolveMonth(matches[parsedIndexes.monthLong]);\n } // Short month\n\n\n if (parsedIndexes.monthShort > -1) {\n resValues.month = this.resolveShortMonth(matches[parsedIndexes.monthShort]);\n } // Numeric month\n\n\n if (parsedIndexes.month > -1) {\n resValues.month = parseInt(matches[parsedIndexes.month]) - 1;\n } // Weekday\n // @todo\n // Week\n\n\n if (parsedIndexes.week > -1 && parsedIndexes.day === -1) {\n // We parse weeks ONLY if day is not explicitly set\n // TODO: this needs work\n // (but maybe later - I can hardly imagine anyone passing their dates in weeks)\n resValues.month = 0;\n resValues.day = $utils.getDayFromWeek(parseInt(matches[parsedIndexes.week]), resValues.year, 1, this.utc);\n } // Day\n\n\n if (parsedIndexes.day > -1) {\n resValues.day = parseInt(matches[parsedIndexes.day]);\n } // Year day\n\n\n if (parsedIndexes.yearDay > -1) {\n resValues.month = 0;\n resValues.day = parseInt(matches[parsedIndexes.yearDay]);\n } // 24 Hour (0-23)\n\n\n if (parsedIndexes.hourBase0 > -1) {\n resValues.hour = parseInt(matches[parsedIndexes.hourBase0]);\n } // 24 Hour (1-24)\n\n\n if (parsedIndexes.hourBase1 > -1) {\n resValues.hour = parseInt(matches[parsedIndexes.hourBase1]) - 1;\n } // 12 Hour (0-11)\n\n\n if (parsedIndexes.hour12Base0 > -1) {\n var val = parseInt(matches[parsedIndexes.hour12Base0]);\n\n if (val == 11) {\n val = 0;\n }\n\n if (parsedIndexes.am > -1 && !this.isAm(matches[parsedIndexes.am])) {\n val += 12;\n }\n\n resValues.hour = val;\n } // 12 Hour (1-12)\n\n\n if (parsedIndexes.hour12Base1 > -1) {\n var val = parseInt(matches[parsedIndexes.hour12Base1]);\n\n if (val == 12) {\n val = 0;\n }\n\n if (parsedIndexes.am > -1 && !this.isAm(matches[parsedIndexes.am])) {\n val += 12;\n }\n\n resValues.hour = val;\n } // Minute\n\n\n if (parsedIndexes.minute > -1) {\n resValues.minute = parseInt(matches[parsedIndexes.minute]);\n } // Second\n\n\n if (parsedIndexes.second > -1) {\n resValues.second = parseInt(matches[parsedIndexes.second]);\n } // Millisecond\n\n\n if (parsedIndexes.millisecond > -1) {\n var val = parseInt(matches[parsedIndexes.millisecond]);\n\n if (parsedIndexes.millisecondDigits == 2) {\n val *= 10;\n } else if (parsedIndexes.millisecondDigits == 1) {\n val *= 100;\n }\n\n resValues.millisecond = val;\n } // Timestamp\n\n\n if (parsedIndexes.timestamp > -1) {\n resValues.timestamp = parseInt(matches[parsedIndexes.timestamp]);\n var ts = new Date(resValues.timestamp);\n resValues.year = ts.getUTCFullYear();\n resValues.month = ts.getUTCMonth();\n resValues.day = ts.getUTCDate();\n resValues.hour = ts.getUTCHours();\n resValues.minute = ts.getUTCMinutes();\n resValues.second = ts.getUTCSeconds();\n resValues.millisecond = ts.getUTCMilliseconds();\n } // Adjust time zone\n\n\n if (parsedIndexes.zone > -1) {\n resValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.zone]);\n } // ISO\n\n\n if (parsedIndexes.iso > -1) {\n resValues.year = $type.toNumber(matches[parsedIndexes.iso + 0]);\n resValues.month = $type.toNumber(matches[parsedIndexes.iso + 1]) - 1;\n resValues.day = $type.toNumber(matches[parsedIndexes.iso + 2]);\n resValues.hour = $type.toNumber(matches[parsedIndexes.iso + 3]);\n resValues.minute = $type.toNumber(matches[parsedIndexes.iso + 4]);\n resValues.second = $type.toNumber(matches[parsedIndexes.iso + 5]);\n resValues.millisecond = $type.toNumber(matches[parsedIndexes.iso + 6]);\n\n if (matches[parsedIndexes.iso + 7] == \"Z\" || matches[parsedIndexes.iso + 7] == \"z\") {\n resValues.utc = true;\n } else if (matches[parsedIndexes.iso + 7] != \"\") {\n resValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.iso + 7]);\n }\n } // Create Date object\n\n\n if (resValues.utc) {\n res = new Date(Date.UTC(resValues.year, resValues.month, resValues.day, resValues.hour, resValues.minute, resValues.second, resValues.millisecond));\n } else {\n res = new Date(resValues.year, resValues.month, resValues.day, resValues.hour, resValues.minute + resValues.offset, resValues.second, resValues.millisecond);\n }\n } else {\n // Didn't match anything\n // Let's try dropping it into Date constructor and hope for the best\n res = new Date(source);\n }\n\n return res;\n };\n\n DateFormatter.prototype.resolveTimezoneOffset = function (date, zone) {\n var value = zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/);\n\n if (value) {\n var match = $type.getValue(zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/));\n var dir = match[1];\n var hour = match[2];\n var minute = match[3];\n var offset = parseInt(hour) * 60 + parseInt(minute); // Adjust offset\n // Making it negative does not seem to make sense, but it's right\n // because of how JavaScript calculates GMT offsets\n\n if (dir == \"+\") {\n offset *= -1;\n } // Check the difference in offset\n\n\n var originalOffset = (date || new Date()).getTimezoneOffset();\n var diff = offset - originalOffset;\n return diff;\n }\n\n return 0;\n };\n /**\r\n * Resolves month name (i.e. \"December\") into a month number (11).\r\n *\r\n * @param value Month name\r\n * @return Month number\r\n */\n\n\n DateFormatter.prototype.resolveMonth = function (value) {\n // Let's try English first\n var month = this.months.indexOf(value);\n\n if (month > -1) {\n return month;\n } // Try the translation\n\n\n if (this.language && !this.language.isDefault()) {\n month = this.language.translateAll(this.months).indexOf(value);\n\n if (month > -1) {\n return month;\n }\n }\n\n return 0;\n };\n /**\r\n * Resolves short month name (i.e. \"Dec\") into a month number.\r\n *\r\n * @param value Short month name\r\n * @return Month number\r\n */\n\n\n DateFormatter.prototype.resolveShortMonth = function (value) {\n // Let's try English first\n var month = this.monthsShort.indexOf(value);\n\n if (month > -1) {\n return month;\n } // Maybe long month (workaround for May)\n\n\n month = this.months.indexOf(value);\n\n if (month > -1) {\n return month;\n } // Try the translation\n\n\n if (this.language && !this.language.isDefault()) {\n month = this.language.translateAll(this.monthsShort).indexOf(value);\n\n if (month > -1) {\n return month;\n }\n }\n\n return 0;\n };\n /**\r\n * Checks if passed in string represents AM/PM notation in many of its\r\n * versions.\r\n *\r\n * @param value Source string\r\n * @return Is it AM/PM?\r\n */\n\n\n DateFormatter.prototype.isAm = function (value) {\n var list = this.getStringList([\"AM\", \"A.M.\", \"A\"]);\n return list.indexOf(value.toUpperCase()) > -1;\n };\n /**\r\n * Invalidates related [[Sprite]] causing it to redraw.\r\n */\n\n\n DateFormatter.prototype.invalidateSprite = function () {\n if (this.sprite) {\n this.sprite.invalidate();\n }\n };\n /**\r\n * Translates list of strings.\r\n *\r\n * @param list Source strings\r\n * @return Translated strings\r\n */\n\n\n DateFormatter.prototype.getStringList = function (list) {\n var res = [];\n\n for (var i = 0; i < list.length; i++) {\n // translate?\n if (this.language) {\n res.push($utils.escapeForRgex(this.language.translate(list[i])));\n } else {\n res.push($utils.escapeForRgex(list[i]));\n }\n }\n\n return res;\n };\n\n Object.defineProperty(DateFormatter.prototype, \"dateFormat\", {\n /**\r\n * @return Date format\r\n */\n get: function get() {\n return this._dateFormat;\n },\n\n /**\r\n * Date format to use.\r\n *\r\n * If format is not supplied in-line in the string, this setting will be\r\n * used.\r\n *\r\n * @default \"yyyy-MM-dd\"\r\n * @param value Date format\r\n */\n set: function set(value) {\n this._dateFormat = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"inputDateFormat\", {\n /**\r\n * @return Date format\r\n */\n get: function get() {\n return this._inputDateFormat;\n },\n\n /**\r\n * Date format to use when parsing dates.\r\n *\r\n * @default \"yyyy-MM-dd\"\r\n * @param value Date format\r\n */\n set: function set(value) {\n this._inputDateFormat = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"intlLocales\", {\n /**\r\n * @return Date format\r\n */\n get: function get() {\n return this._intlLocales;\n },\n\n /**\r\n * Locales if you are using date formats in `Intl.DateTimeFormatOptions` syntax.\r\n *\r\n * @param value Locales\r\n */\n set: function set(value) {\n this._intlLocales = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"utc\", {\n /**\r\n * @return Use UTC?\r\n */\n get: function get() {\n return this._utc;\n },\n\n /**\r\n * Should formatter use UTC functions?\r\n *\r\n * If UTC is used, all date/time values will be independent on client's\r\n * time zone.\r\n *\r\n * @param value Use UTC?\r\n */\n set: function set(value) {\n this._utc = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"timezoneOffset\", {\n /**\r\n * @return Offset (minutes)\r\n */\n get: function get() {\n return this._timezoneOffset;\n },\n\n /**\r\n * If set, will apply specific offset in minutes before formatting the date\r\n * text.\r\n *\r\n * The value is a number of minutes from target time zone to UTC.\r\n *\r\n * E.g. `300` will recalculate Dates in \"GMT-5\" time zone.\r\n *\r\n * @param value Offset (minutes)\r\n */\n set: function set(value) {\n if (this._timezoneOffset != value) {\n this._timezoneOffset = value;\n this.invalidateSprite();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"timezone\", {\n /**\r\n * @return Timezone\r\n */\n get: function get() {\n return this._timezone;\n },\n\n /**\r\n * If set, will format date/time in specific time zone.\r\n *\r\n * The value should be named time zone, e.g.:\r\n * `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`.\r\n *\r\n * @since 4.10.1\r\n * @param value Timezone\r\n */\n set: function set(value) {\n if (this._timezone != value) {\n this._timezone = value;\n this.timezoneMinutes = $time.getTimezoneMinutes(value);\n this.invalidateSprite();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"firstDayOfWeek\", {\n /**\r\n * @return First day of week\r\n */\n get: function get() {\n return this._firstDayOfWeek;\n },\n\n /**\r\n * First day of the week:\r\n *\r\n * * 0 - Sunday\r\n * * 1 - Monday\r\n * * 2 - Tuesday\r\n *\r\n * Etc.\r\n *\r\n * @param value First day of week\r\n */\n set: function set(value) {\n this._firstDayOfWeek = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DateFormatter.prototype, \"outputFormat\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Format\r\n */\n get: function get() {\n return this._outputFormat;\n },\n\n /**\r\n * Output format for the formatted date.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Format\r\n */\n set: function set(value) {\n this._outputFormat = value.toLowerCase();\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n return DateFormatter;\n}(BaseObject);\n\nexport { DateFormatter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"DateFormatter\"] = DateFormatter;","/**\r\n * Duration formatting functionality.\r\n */\nimport { __extends } from \"tslib\";\nimport { Language } from \"../utils/Language\";\nimport { BaseObject } from \"../Base\";\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\nimport { registry } from \"../Registry\";\nimport * as $strings from \"../utils/Strings\";\nimport * as $object from \"../utils/Object\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * DurationFormatter class. Formats numbers as durations.\r\n *\r\n * `1000` as `16:40`\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Tutorial on duration formatting\r\n */\n\nvar DurationFormatter =\n/** @class */\nfunction (_super) {\n __extends(DurationFormatter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function DurationFormatter() {\n var _this = _super.call(this) || this;\n /**\r\n * A base value for negative numbers. Will treat all numbers below this value\r\n * as negative numbers.\r\n */\n\n\n _this._negativeBase = 0;\n /**\r\n * A base unit to consider values are in.\r\n *\r\n * @default \"s\"\r\n */\n\n _this._baseUnit = \"second\";\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\n\n _this._outputFormat = \"svg\";\n /**\r\n * How many milliseconds each unit represents.\r\n */\n\n _this._unitValues = {\n \"millisecond\": 1,\n \"second\": 1000,\n \"minute\": 60000,\n \"hour\": 3600000,\n \"day\": 86400000,\n \"week\": 604800000,\n \"month\": 2592000000,\n \"year\": 31536000000\n };\n /**\r\n * Collection of aliases for units.\r\n */\n\n _this._unitAliases = {\n \"Y\": \"y\",\n \"D\": \"d\",\n \"H\": \"h\",\n \"K\": \"h\",\n \"k\": \"h\",\n \"n\": \"S\"\n };\n _this.className = \"DurationFormatter\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Formats the number according as duration.\r\n *\r\n * For example `1000` (base unit seconds) would be converted to `16:40` as in\r\n * 16 minutes and 40 seconds.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Tutorial on duration formatting\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @param base Override base unit\r\n * @return Formatted number\r\n */\n\n\n DurationFormatter.prototype.format = function (value, format, base) {\n // no language?\n if (!this.language) {\n if (this.sprite) {\n this.language = this.sprite.language;\n } else {\n this.language = new Language();\n }\n } // no base unit?\n\n\n var baseUnit = base || this._baseUnit; // no format passed in or empty\n\n if (typeof format === \"undefined\" || format === \"\") {\n if ($type.hasValue(this.durationFormat)) {\n format = this.durationFormat;\n } else {\n format = this.getFormat($type.toNumber(value), null, baseUnit);\n }\n } // Clean format\n\n\n format = $utils.cleanFormat(format); // get format info (it will also deal with parser caching)\n\n var info = this.parseFormat(format, baseUnit); // cast to number just in case\n // TODO: maybe use better casting\n\n var source = Number(value); // format and replace the number\n\n var details;\n\n if (source > this._negativeBase) {\n details = info.positive;\n } else if (source < this._negativeBase) {\n details = info.negative;\n } else {\n details = info.zero;\n } // Format\n\n\n var formatted = this.applyFormat(source, details); // Apply color?\n\n if (details.color !== \"\") {\n if (this._outputFormat === \"svg\") {\n formatted = \"\" + formatted + \"\";\n } else if (this._outputFormat === \"html\") {\n formatted = \"\" + formatted + \"\";\n }\n }\n\n return formatted;\n };\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param base Override base unit\r\n * @return Parsed information\r\n */\n\n\n DurationFormatter.prototype.parseFormat = function (format, base) {\n var _this = this; // Check cache\n\n\n var cached = this.getCache(format);\n\n if ($type.hasValue(cached)) {\n return cached;\n } // no base unit?\n\n\n var baseUnit = base || this._baseUnit; // Initialize duration parsing info\n\n var info = {\n \"positive\": {\n \"color\": \"\",\n \"template\": \"\",\n \"parts\": [],\n \"source\": \"\",\n \"baseUnit\": baseUnit,\n \"parsed\": false,\n \"absolute\": false\n },\n \"negative\": {\n \"color\": \"\",\n \"template\": \"\",\n \"parts\": [],\n \"source\": \"\",\n \"baseUnit\": baseUnit,\n \"parsed\": false,\n \"absolute\": false\n },\n \"zero\": {\n \"color\": \"\",\n \"template\": \"\",\n \"parts\": [],\n \"source\": \"\",\n \"baseUnit\": baseUnit,\n \"parsed\": false,\n \"absolute\": false\n }\n }; // Escape double vertical bars (that mean display one vertical bar)\n\n format = format.replace(\"||\", $strings.PLACEHOLDER2); // Split it up and deal with different formats\n\n var parts = format.split(\"|\");\n info.positive.source = parts[0];\n\n if (typeof parts[2] === \"undefined\") {\n info.zero = info.positive;\n } else {\n info.zero.source = parts[2];\n }\n\n if (typeof parts[1] === \"undefined\") {\n info.negative = info.positive;\n } else {\n info.negative.source = parts[1];\n } // Parse each\n\n\n $object.each(info, function (part, item) {\n // Already parsed\n if (item.parsed) {\n return;\n } // Check cached\n\n\n if (typeof _this.getCache(item.source) !== \"undefined\") {\n info[part] = _this.getCache(item.source);\n return;\n } // Begin parsing\n\n\n var partFormat = item.source; // Check for [] directives\n\n var dirs = [];\n dirs = item.source.match(/^\\[([^\\]]*)\\]/);\n\n if (dirs && dirs.length && dirs[0] !== \"\") {\n partFormat = item.source.substr(dirs[0].length);\n item.color = dirs[1];\n } // Let TextFormatter split into chunks\n\n\n var chunks = getTextFormatter().chunk(partFormat, true);\n\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i]; // replace back double vertical bar\n\n chunk.text = chunk.text.replace($strings.PLACEHOLDER2, \"|\");\n\n if (chunk.type === \"value\") {\n // Just \"Duration\"?\n // if (chunk.text.toLowerCase() === \"duration\") {\n // \tchunk.text = durationFormat;\n // }\n // Check for \"a\" (absolute) modifier\n if (chunk.text.match(/[yYMdDwhHKkmsSn]+a/)) {\n item.absolute = true;\n chunk.text = chunk.text.replace(/([yYMdDwhHKkmsSn]+)a/, \"$1\");\n } // Find all possible parts\n\n\n var matches = chunk.text.match(/y+|Y+|M+|d+|D+|w+|h+|H+|K+|k+|m+|s+|S+|n+/g);\n\n if (matches) {\n // Populate template\n for (var x = 0; x < matches.length; x++) {\n // Is it an alias?\n if (!$type.hasValue(matches[x])) {\n matches[x] = _this._unitAliases[matches[x]];\n }\n\n item.parts.push(matches[x]);\n chunk.text = chunk.text.replace(matches[x], $strings.PLACEHOLDER);\n }\n }\n } // Apply to template\n\n\n item.template += chunk.text;\n } // Apply style formatting\n //item.template = getTextFormatter().format(item.template, this.outputFormat);\n // Save cache\n\n\n _this.setCache(item.source, item); // Mark this as parsed\n\n\n item.parsed = true;\n }); // Save cache (the whole thing)\n\n this.setCache(format, info);\n return info;\n };\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by {parseFormat}\r\n * @return Formatted duration\r\n */\n\n\n DurationFormatter.prototype.applyFormat = function (value, details) {\n // Use absolute values\n var negative = !details.absolute && value < this._negativeBase;\n value = Math.abs(value); // Recalculate to milliseconds\n\n var tstamp = this.toTimeStamp(value, details.baseUnit); // Init return value\n\n var res = details.template; // Iterate through duration parts\n\n for (var i = 0, len = details.parts.length; i < len; i++) {\n // Gather the part\n var part = details.parts[i];\n var unit = this.toTimeUnit(part.substr(0, 1));\n var digits = part.length; // Calculate current unit value\n\n var ints = Math.floor(tstamp / this._unitValues[unit]);\n res = res.replace($strings.PLACEHOLDER, $utils.padString(ints, digits, \"0\")); // Reduce timestamp\n\n tstamp -= ints * this._unitValues[unit];\n } // Reapply negative sign\n\n\n if (negative) {\n res = \"-\" + res;\n }\n\n return res;\n };\n /**\r\n * Converts numeric value to timestamp in milliseconds.\r\n *\r\n * @param value A source value\r\n * @param baseUnit Base unit the source value is in: \"q\", \"s\", \"i\", \"h\", \"d\", \"w\", \"m\", \"y\"\r\n * @return Value representation as a timestamp in milliseconds\r\n */\n\n\n DurationFormatter.prototype.toTimeStamp = function (value, baseUnit) {\n return value * this._unitValues[baseUnit];\n };\n\n DurationFormatter.prototype.toTimeUnit = function (code) {\n switch (code) {\n case \"S\":\n return \"millisecond\";\n\n case \"s\":\n return \"second\";\n\n case \"m\":\n return \"minute\";\n\n case \"h\":\n return \"hour\";\n\n case \"d\":\n return \"day\";\n\n case \"w\":\n return \"week\";\n\n case \"M\":\n return \"month\";\n\n case \"y\":\n return \"year\";\n }\n\n ;\n };\n /**\r\n * Invalidates the parent [[Sprite]] object.\r\n */\n\n\n DurationFormatter.prototype.invalidateSprite = function () {\n if (this.sprite) {\n this.sprite.invalidate();\n }\n };\n\n Object.defineProperty(DurationFormatter.prototype, \"baseUnit\", {\n /**\r\n * @return Base unit\r\n */\n get: function get() {\n return this._baseUnit;\n },\n\n /**\r\n * Base unit the values are in.\r\n *\r\n * A base unit will be used to recalculate the numeric value to millisecond\r\n * timestamps.\r\n *\r\n * Available options:\r\n *\r\n * * \"millisecond\"\r\n * * \"second\"\r\n * * \"minute\"\r\n * * \"hour\"\r\n * * \"day\"\r\n * * \"week\"\r\n * * \"month\"\r\n * * \"year\"\r\n *\r\n * @default \"s\"\r\n * @param baseUnit A base unit\r\n */\n set: function set(baseUnit) {\n this._baseUnit = baseUnit;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DurationFormatter.prototype, \"outputFormat\", {\n /**\r\n * Getter for output format.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Output format\r\n */\n get: function get() {\n return this._outputFormat;\n },\n\n /**\r\n * Setter for output format: \"svg\" or \"html.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Output format\r\n */\n set: function set(outputFormat) {\n this._outputFormat = outputFormat.toLowerCase();\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns appropriate default format for the value.\r\n *\r\n * If `maxValue` is sepcified, it will use that value to determine the time\r\n * unit for the format.\r\n *\r\n * For example if your `baseUnit` is `\"second\"` and you pass in `10`, you\r\n * will get `\"10\"`.\r\n *\r\n * However, you might want it to be formatted in the context of bigger scale,\r\n * say 10 minutes (600 seconds). If you pass in `600` as `maxValue`, all\r\n * values, including small ones will use format with minutes, e.g.:\r\n * `00:10`, `00:50`, `12: 30`, etc.\r\n *\r\n * @param value Value to format\r\n * @param maxValue Maximum value to be used to determine format\r\n * @param baseUnit Base unit of the value\r\n * @return Format\r\n */\n\n DurationFormatter.prototype.getFormat = function (value, maxValue, baseUnit) {\n // Is format override set?\n if ($type.hasValue(this.durationFormat)) {\n return this.durationFormat;\n } // Get base unit\n\n\n if (!baseUnit) {\n baseUnit = this.baseUnit;\n }\n\n if ($type.hasValue(maxValue) && value != maxValue) {\n value = Math.abs(value);\n maxValue = Math.abs(maxValue);\n var maxUnit = this.getValueUnit($math.max(value, maxValue), baseUnit); //let diffUnit = this.getValueUnit(Math.abs(maxValue - value), baseUnit);\n //console.log(maxUnit, diffUnit);\n\n return this.durationFormats[baseUnit][maxUnit];\n } else {\n var unit = this.getValueUnit(value, baseUnit);\n return this.durationFormats[baseUnit][unit];\n }\n };\n /**\r\n * Returns value's closest denominator time unit, e.g 100 seconds is\r\n * `\"minute\"`, while 59 seconds would still be `second`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Denominator\r\n */\n\n\n DurationFormatter.prototype.getValueUnit = function (value, baseUnit) {\n // Get base unit\n if (!baseUnit) {\n baseUnit = this.baseUnit;\n } // Convert to milliseconds\n\n\n var currentUnit;\n var ms = this.getMilliseconds(value, baseUnit);\n $object.eachContinue(this._unitValues, function (key, val) {\n if (key == baseUnit || currentUnit) {\n var num = ms / val;\n\n if (num <= 1) {\n if (!currentUnit) {\n currentUnit = key;\n }\n\n return false;\n }\n\n currentUnit = key;\n }\n\n return true;\n });\n return currentUnit;\n };\n /**\r\n * Converts value to milliseconds according to `baseUnit`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Value in milliseconds\r\n */\n\n\n DurationFormatter.prototype.getMilliseconds = function (value, baseUnit) {\n // Get base unit\n if (!baseUnit) {\n baseUnit = this.baseUnit;\n }\n\n return value * this._unitValues[baseUnit];\n };\n\n Object.defineProperty(DurationFormatter.prototype, \"durationFormat\", {\n /**\r\n * @return Format\r\n */\n get: function get() {\n return this._durationFormat;\n },\n\n /**\r\n * If set, this format will be used instead of the one determined dynamically\r\n * based on the basedUnit and range of values.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Available fomatting codes\r\n * @param value Format\r\n */\n set: function set(value) {\n if (this._durationFormat != value) {\n this._durationFormat = value;\n this.invalidateSprite();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DurationFormatter.prototype, \"durationFormats\", {\n /**\r\n * @return Formats\r\n */\n get: function get() {\n if (!this._durationFormats) {\n this._durationFormats = {\n \"millisecond\": {\n \"millisecond\": this.language.translate(\"_duration_millisecond\"),\n \"second\": this.language.translate(\"_duration_millisecond_second\"),\n \"minute\": this.language.translate(\"_duration_millisecond_minute\"),\n \"hour\": this.language.translate(\"_duration_millisecond_hour\"),\n \"day\": this.language.translate(\"_duration_millisecond_day\"),\n \"week\": this.language.translate(\"_duration_millisecond_week\"),\n \"month\": this.language.translate(\"_duration_millisecond_month\"),\n \"year\": this.language.translate(\"_duration_millisecond_year\")\n },\n \"second\": {\n \"second\": this.language.translate(\"_duration_second\"),\n \"minute\": this.language.translate(\"_duration_second_minute\"),\n \"hour\": this.language.translate(\"_duration_second_hour\"),\n \"day\": this.language.translate(\"_duration_second_day\"),\n \"week\": this.language.translate(\"_duration_second_week\"),\n \"month\": this.language.translate(\"_duration_second_month\"),\n \"year\": this.language.translate(\"_duration_second_year\")\n },\n \"minute\": {\n \"minute\": this.language.translate(\"_duration_minute\"),\n \"hour\": this.language.translate(\"_duration_minute_hour\"),\n \"day\": this.language.translate(\"_duration_minute_day\"),\n \"week\": this.language.translate(\"_duration_minute_week\"),\n \"month\": this.language.translate(\"_duration_minute_month\"),\n \"year\": this.language.translate(\"_duration_minute_year\")\n },\n \"hour\": {\n \"hour\": this.language.translate(\"_duration_hour\"),\n \"day\": this.language.translate(\"_duration_hour_day\"),\n \"week\": this.language.translate(\"_duration_hour_week\"),\n \"month\": this.language.translate(\"_duration_hour_month\"),\n \"year\": this.language.translate(\"_duration_hour_year\")\n },\n \"day\": {\n \"day\": this.language.translate(\"_duration_day\"),\n \"week\": this.language.translate(\"_duration_day_week\"),\n \"month\": this.language.translate(\"_duration_day_month\"),\n \"year\": this.language.translate(\"_duration_day_year\")\n },\n \"week\": {\n \"week\": this.language.translate(\"_duration_week\"),\n \"month\": this.language.translate(\"_duration_week_month\"),\n \"year\": this.language.translate(\"_duration_week_year\")\n },\n \"month\": {\n \"month\": this.language.translate(\"_duration_month\"),\n \"year\": this.language.translate(\"_duration_month_year\")\n },\n \"year\": {\n \"year\": this.language.translate(\"_duration_year\")\n }\n };\n }\n\n return this._durationFormats;\n },\n\n /**\r\n * Duration formats for various combination of base units.\r\n *\r\n * @param value Formats\r\n */\n set: function set(value) {\n this._durationFormats = value;\n this.invalidateSprite();\n },\n enumerable: true,\n configurable: true\n });\n return DurationFormatter;\n}(BaseObject);\n\nexport { DurationFormatter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"DurationFormatter\"] = DurationFormatter;","import { StyleRule } from \"../utils/DOM\";\nimport { InterfaceColorSet } from \"../utils/InterfaceColorSet\";\nimport { Dictionary } from \"../utils/Dictionary\";\nimport { MultiDisposer, CounterDisposer } from \"../utils/Disposer\";\nvar rules = new Dictionary();\n/**\r\n * A dynamically-loadable CSS module for Export menu.\r\n *\r\n * @ignore Exclude from docs\r\n * @param prefix Prefix to addtach to class names\r\n * @return A MultiDisposer with style rules\r\n */\n\nexport default function (element, prefix) {\n var newPrefix = prefix ? prefix : \"amexport\";\n var colorSet = new InterfaceColorSet();\n var counter = rules.insertKeyIfEmpty(newPrefix, function () {\n var disposer = new MultiDisposer([\n /*new StyleRule(`.${newPrefix}-menu`, {\r\n \"opacity\": \"0.3\",\r\n \"transition\": \"all 100ms ease-in-out\",\r\n }),\r\n new StyleRule(`div:hover .${newPrefix}-menu, .${newPrefix}-menu.active`, {\r\n \"opacity\": \"0.9\",\r\n }),*/\n new StyleRule(element, \".\" + newPrefix + \"-menu *\", {\n \"box-sizing\": \"border-box\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu-level-0\", {\n \"position\": \"absolute\",\n \"top\": \"5px\",\n \"right\": \"5px\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu-level-0.\" + newPrefix + \"-left\", {\n \"right\": \"auto\",\n \"left\": \"5px\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu-level-0.\" + newPrefix + \"-right\", {\n \"right\": \"5px\",\n \"left\": \"auto\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu-level-0.\" + newPrefix + \"-top\", {\n \"top\": \"5px\",\n \"bottom\": \"auto\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu-level-0.\" + newPrefix + \"-bottom\", {\n \"top\": \"auto\",\n \"bottom\": \"5px\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item.\" + newPrefix + \"-item-level-0\", {\n \"opacity\": \"0.3\",\n \"width\": \"30px\",\n \"min-height\": \"30px\",\n \"transition\": \"all 100ms ease-in-out\"\n }), new StyleRule(element, \"div:hover > div > .\" + newPrefix + \"-menu .\" + newPrefix + \"-item.\" + newPrefix + \"-item-level-0, .\" + newPrefix + \"-item.\" + newPrefix + \"-item-level-0.active\", {\n \"opacity\": \"0.9\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item.\" + newPrefix + \"-item-level-0 > a\", {\n \"padding\": \"0\",\n \"text-align\": \"center\",\n \"overflow\": \"hidden\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item.\" + newPrefix + \"-item-level-0:before\", {\n \"display\": \"block\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item\", {\n \"position\": \"relative\",\n \"display\": \"block\",\n \"opacity\": \"0\",\n \"z-index\": \"1\",\n \"border-radius\": \"3px\",\n \"background-color\": colorSet.getFor(\"secondaryButton\").hex,\n \"padding\": \"0\",\n \"margin\": \"1px 1px 0 0\",\n \"color\": colorSet.getFor(\"secondaryButton\").alternative.hex,\n \"transition\": \"all 100ms ease-in-out, opacity 0.5s ease 0.5s\"\n }), new StyleRule(element, \".\" + newPrefix + \"-left .\" + newPrefix + \"-item\", {\n \"margin\": \"1px 0 0 1px\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item:hover, .\" + newPrefix + \"-item.active\", {\n \"background\": colorSet.getFor(\"secondaryButtonHover\").hex,\n \"color\": colorSet.getFor(\"secondaryButtonText\").hex\n }), new StyleRule(element, \".\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"position\": \"absolute\",\n \"top\": \"-1px\",\n \"right\": \"0\",\n \"margin-right\": \"100%\"\n }), new StyleRule(element, \".\" + newPrefix + \"-left .\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"left\": \"0\",\n \"right\": \"auto\",\n \"margin-left\": \"100%\",\n \"margin-right\": \"auto\"\n }), new StyleRule(element, \".\" + newPrefix + \"-right .\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"left\": \"auto\",\n \"right\": \"0\",\n \"margin-left\": \"auto\",\n \"margin-right\": \"100%\"\n }), new StyleRule(element, \".\" + newPrefix + \"-top .\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"top\": \"-1px\",\n \"bottom\": \"auto\"\n }), new StyleRule(element, \".\" + newPrefix + \"-bottom .\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"top\": \"auto\",\n \"bottom\": \"0\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item > .\" + newPrefix + \"-menu\", {\n \"display\": \"none\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item:hover > .\" + newPrefix + \"-menu, .\" + newPrefix + \"-item.active > .\" + newPrefix + \"-menu\", {\n \"display\": \"block\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item:hover > .\" + newPrefix + \"-menu > .\" + newPrefix + \"-item, .\" + newPrefix + \"-item.active > .\" + newPrefix + \"-menu > .\" + newPrefix + \"-item\", {\n \"opacity\": \"1\"\n }), new StyleRule(element, \".\" + newPrefix + \"-menu\", {\n \"display\": \"block\",\n \"list-style\": \"none\",\n \"margin\": \"0\",\n \"padding\": \"0\"\n }), new StyleRule(element, \".\" + newPrefix + \"-label\", {\n \"display\": \"block\",\n \"cursor\": \"default\",\n \"padding\": \"0.5em 1em\"\n }), new StyleRule(element, \".\" + newPrefix + \"-icon\", {\n \"display\": \"block\",\n \"cursor\": \"default\",\n \"padding\": \"0.2em 0.4em\",\n \"width\": \"1.2em\",\n \"height\": \"1.2em\",\n \"min-width\": \"32px\",\n \"min-height\": \"32px\",\n \"margin\": \"auto auto\",\n \"border-radius\": \"3px\"\n }), new StyleRule(element, \".\" + newPrefix + \"-item-level-0 > .\" + newPrefix + \"-icon\", {\n \"padding\": \"0.1em 0.2em\"\n }), new StyleRule(element, \".\" + newPrefix + \"-clickable\", {\n \"cursor\": \"pointer\"\n })]);\n return new CounterDisposer(function () {\n rules.removeKey(newPrefix);\n disposer.dispose();\n });\n });\n return counter.increment();\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\r\n * Export module.\r\n *\r\n * Parts of Export functionality rely on the following third party libraries:\r\n *\r\n * [canvg.js](https://github.com/canvg/canvg)\r\n * Copyright (c) Gabe Lerner\r\n * Licensed under [MIT](https://github.com/canvg/canvg/blob/master/LICENSE)\r\n *\r\n * [pdfmake](http://pdfmake.org/)\r\n * Copyright (c) 2014 bpampuch\r\n * Licensed under [MIT](https://github.com/bpampuch/pdfmake/blob/master/LICENSE)\r\n *\r\n * [SheetJS Community Edition](https://github.com/sheetjs/js-xlsx)\r\n * Licensed under [Apache License 2.0](https://github.com/SheetJS/js-xlsx/blob/master/LICENSE)\r\n *\r\n * [JSZip](http://stuartk.com/jszip)\r\n * Copyright (c) Stuart Knightley\r\n * Dual licenced under the [MIT license or GPLv3](https://raw.githubusercontent.com/Stuk/jszip/master/LICENSE.markdown).\r\n */\nimport { __awaiter, __extends, __generator } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { ExportMenu } from \"./ExportMenu\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { Sprite } from \"../Sprite\";\nimport { Modal } from \"../elements/Modal\";\nimport { List } from \"../utils/List\";\nimport { Dictionary } from \"../utils/Dictionary\";\nimport { DateFormatter } from \"../formatters/DateFormatter\";\nimport { DurationFormatter } from \"../formatters/DurationFormatter\";\nimport { NumberFormatter } from \"../formatters/NumberFormatter\";\nimport { Language } from \"../utils/Language\";\nimport { Validatable } from \"../utils/Validatable\";\nimport { color } from \"../utils/Color\";\nimport { registry } from \"../Registry\";\nimport { options } from \"../Options\";\nimport { StyleRule, getComputedStyle } from \"../utils/DOM\";\nimport * as $browser from \"../utils/Browser\";\nimport * as $object from \"../utils/Object\";\nimport * as $net from \"../utils/Net\";\nimport * as $dom from \"../utils/DOM\";\nimport * as $type from \"../utils/Type\";\nimport * as $log from \"../utils/Log\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $array from \"../utils/Array\";\nimport * as $math from \"../utils/Math\";\nimport * as $strings from \"../utils/Strings\"; // This is used to cache the pdfmake loading\n\nvar pdfmakePromise;\n/**\r\n * Loads pdfmake dynamic module\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of pdfmake\r\n * @async\r\n */\n\nfunction _pdfmake() {\n return __awaiter(this, void 0, void 0, function () {\n var a, pdfmake, vfs_fonts, global;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , Promise.all([import(\n /* webpackChunkName: \"pdfmake\" */\n \"pdfmake/build/pdfmake.js\"), import(\n /* webpackChunkName: \"pdfmake\" */\n \"../../pdfmake/vfs_fonts\")])];\n\n case 1:\n a = _a.sent();\n pdfmake = a[0];\n vfs_fonts = a[1];\n global = window;\n global.pdfMake = global.pdfMake || {};\n global.pdfMake.vfs = vfs_fonts.default;\n pdfmake.vfs = vfs_fonts.default;\n return [2\n /*return*/\n , pdfmake];\n }\n });\n });\n} // TODO better parsing\n\n\nvar fontFamilySrcRegexp = /src: ([^;]+);/; // TODO better checks\n\nfunction supportsBlobUri() {\n return window.navigator.msSaveOrOpenBlob != null;\n} // TODO move into utils or something ?\n\n\nfunction blobToDataUri(blob) {\n return new Promise(function (resolve, reject) {\n // TODO handle abort ?\n var f = new FileReader();\n\n f.onload = function (e) {\n resolve(f.result);\n };\n\n f.onerror = function (e) {\n reject(e);\n };\n\n f.readAsDataURL(blob);\n });\n}\n\nfunction getCssRules(s) {\n return __awaiter(this, void 0, void 0, function () {\n var sheet, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n sheet = s.sheet;\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 2,, 4]);\n\n return [2\n /*return*/\n , sheet.cssRules];\n\n case 2:\n e_1 = _a.sent();\n return [4\n /*yield*/\n , new Promise(function (success, error) {\n s.addEventListener(\"load\", function () {\n success(sheet.cssRules);\n }, true);\n s.addEventListener(\"error\", function (e) {\n error(e);\n }, true);\n setTimeout(function () {\n error(new Error(\"Timeout while waiting for \" + this.serializeElement(this.sprite.paper.defs) + this.serializeElement(this.sprite.dom), options, width, height, scale, font, fontSize);\n svg = new Blob([data], {\n type: \"image/svg+xml\"\n });\n url = DOMURL.createObjectURL(svg);\n return [4\n /*yield*/\n , this.loadNewImage(url, width * scale * pixelRatio, height * scale * pixelRatio, \"anonymous\")];\n\n case 3:\n img = _a.sent(); // Draw image on canvas\n\n ctx.drawImage(img, 0, 0);\n return [3\n /*break*/\n , 5];\n\n case 4:\n if (url !== null) {\n DOMURL.revokeObjectURL(url);\n }\n\n if (blobs !== null) {\n $array.each(blobs, function (url) {\n DOMURL.revokeObjectURL(url);\n });\n } // Restore replaced tainted images in DOM\n\n\n this.restoreRemovedObjects();\n return [7\n /*endfinally*/\n ];\n\n case 5:\n return [2\n /*return*/\n , canvas];\n }\n });\n });\n };\n /**\r\n * Returns canvas representation of the [[Sprite]] using canvg.\r\n *\r\n * @param options Options\r\n * @return Canvas\r\n */\n\n\n Export.prototype.getCanvasAdvanced = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var background, canvg, width, height, font, fontSize, scale, pixelRatio, data, canvas, config;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Options are set?\n if (!$type.hasValue(options)) {\n options = {};\n } // Convert external images to data uris\n\n\n return [4\n /*yield*/\n , this.imagesToDataURI(this.sprite.dom, options)];\n\n case 1:\n // Convert external images to data uris\n _a.sent();\n\n background = this.backgroundColor || this.findBackgroundColor(this.sprite.dom);\n return [4\n /*yield*/\n , this.canvg];\n\n case 2:\n canvg = _a.sent();\n width = this.sprite.pixelWidth;\n height = this.sprite.pixelHeight;\n font = $dom.findFont(this.sprite.dom);\n fontSize = $dom.findFontSize(this.sprite.dom);\n scale = options.scale || 1;\n pixelRatio = this.getPixelRatio(options); // Check if scale needs to be updated as per min/max dimensions\n\n scale = this.getAdjustedScale(width * pixelRatio, height * pixelRatio, scale, options);\n data = this.normalizeSVG(this.serializeElement(this.sprite.paper.defs) + this.serializeElement(this.sprite.dom), options, width, height, scale, font, fontSize, background);\n canvas = this.getDisposableCanvas(); // Set canvas width/height\n\n canvas.style.width = width * pixelRatio * scale + 'px';\n canvas.style.height = height * pixelRatio * scale + 'px';\n canvas.width = width * pixelRatio * scale;\n canvas.height = height * pixelRatio * scale;\n config = {\n //ignoreDimensions: true,\n useCORS: true\n };\n\n if (pixelRatio != 1) {\n config.ignoreDimensions = true;\n config.scaleWidth = width * pixelRatio * scale;\n config.scaleHeight = height * pixelRatio * scale;\n }\n\n return [4\n /*yield*/\n , canvg.fromString(canvas.getContext(\"2d\"), data, config).render()];\n\n case 3:\n _a.sent();\n\n return [2\n /*return*/\n , canvas];\n }\n });\n });\n };\n /**\r\n * Tries to dynamically load [canvg.js](https://github.com/canvg/canvg) and\r\n * export an image using its functions.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Image format\r\n * @param options Options\r\n * @return Data uri\r\n */\n\n\n Export.prototype.getImageAdvanced = function (type, options, includeExtras) {\n return __awaiter(this, void 0, void 0, function () {\n var prehidden, canvas, uri;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n prehidden = this._objectsAlreadyHidden;\n\n if (!prehidden) {\n this.hideNonExportableSprites();\n }\n\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(type);\n }\n\n return [4\n /*yield*/\n , this.getCanvasAdvanced(options)];\n\n case 1:\n canvas = _a.sent();\n if (!(includeExtras !== false)) return [3\n /*break*/\n , 3];\n return [4\n /*yield*/\n , this.addExtras(canvas, options, true)];\n\n case 2:\n canvas = _a.sent();\n _a.label = 3;\n\n case 3:\n uri = canvas.toDataURL(this.getContentType(type), options.quality); // Get rid of the canvas\n\n this.disposeCanvas(canvas);\n\n if (!prehidden) {\n this.restoreNonExportableSprites();\n }\n\n return [2\n /*return*/\n , uri];\n }\n });\n });\n };\n /**\r\n * Creates a `` element and returns it.\r\n *\r\n * @return Canvas element\r\n */\n\n\n Export.prototype.getDisposableCanvas = function () {\n var canvas = document.createElement(\"canvas\");\n canvas.style.position = \"fixed\";\n canvas.style.top = \"-10000px\";\n document.body.appendChild(canvas);\n return canvas;\n };\n /**\r\n * Removes canvas.\r\n *\r\n * @param canvas Canvas element\r\n */\n\n\n Export.prototype.disposeCanvas = function (canvas) {\n document.body.removeChild(canvas);\n };\n /**\r\n * Returns pixel ratio for retina displays.\r\n *\r\n * @return Pixel ratio\r\n */\n\n\n Export.prototype.getPixelRatio = function (options) {\n // const scale = options && options.scale ? options.scale : 1;\n // return (this.useRetina ? $utils.getPixelRatio() : 1) * scale;\n return this.useRetina ? $utils.getPixelRatio() : 1;\n };\n /**\r\n * Calculates adjusted scale if image does not fit or is larger than min/max\r\n * settings.\r\n *\r\n * @param width Width of the source image\r\n * @param height Height of the source image\r\n * @param scale Current scale\r\n * @param options Options\r\n * @return Adjusted scale\r\n */\n\n\n Export.prototype.getAdjustedScale = function (width, height, scale, options) {\n if (!options) {\n return scale;\n }\n\n var adjWidth = width * scale;\n var adjHeight = width * scale; // Check max restrictions\n\n var widthScale;\n var heightScale;\n\n if (options.maxWidth && adjWidth > options.maxWidth) {\n widthScale = options.maxWidth / width;\n }\n\n if (options.maxHeight && adjHeight > options.maxHeight) {\n heightScale = options.maxHeight / height;\n }\n\n if (widthScale || heightScale) {\n return $math.min(widthScale, heightScale);\n } // Check min restrictions\n\n\n if (options.minWidth && adjWidth < options.minWidth) {\n widthScale = options.minWidth / width;\n }\n\n if (options.minHeight && adjHeight < options.minHeight) {\n heightScale = options.minHeight / height;\n }\n\n if (widthScale || heightScale) {\n return $math.max(widthScale, heightScale);\n }\n\n return scale;\n };\n /**\r\n * Converts all `` tags in SVG to use data uris instead of external\r\n * URLs\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el SVG node\r\n * @param options Options\r\n * @return Promise\r\n */\n\n\n Export.prototype.imagesToDataURI = function (el, options) {\n return __awaiter(this, void 0, void 0, function () {\n var images, promises, count, i, image, href;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n images = el.querySelectorAll(\"image\");\n if (!images.length) return [3\n /*break*/\n , 2];\n promises = []; // There are images, process each of them\n\n for (count = images.length, i = 0; i < count; i++) {\n image = images[i];\n href = image.getAttributeNS(Export.XLINK, \"href\"); // no href?\n\n if (!href) {\n continue;\n }\n\n if (href.indexOf(\"data:image\") !== -1) {// Ignore image if it's already in Data URI format\n } else {\n // SVG or bitmap image?\n if (href.indexOf(\".svg\") !== -1) {\n promises.push(this.svgToDataURI(image, options));\n } else {\n promises.push(this.imageToDataURI(image, options));\n }\n }\n }\n\n return [4\n /*yield*/\n , Promise.all(promises)];\n\n case 1:\n _a.sent();\n\n return [2\n /*return*/\n ];\n\n case 2:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * `foreignObject` elements cannot be exported. This function hides them\r\n * temprarily. In the future it might try to convert them to SVG to make them\r\n * exportable.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el SVG node\r\n * @param options Options\r\n * @return Promise\r\n */\n\n\n Export.prototype.prepForeignObjects = function (el, options) {\n return __awaiter(this, void 0, void 0, function () {\n var objects, count, i;\n return __generator(this, function (_a) {\n objects = el.querySelectorAll(\"foreignObject\");\n\n if (objects.length) {\n // There are foreign objects, process each of them\n for (count = objects.length, i = 0; i < count; i++) {\n this.temporarilyRemoveObject(objects[i]);\n }\n }\n\n return [2\n /*return*/\n ];\n });\n });\n };\n /**\r\n * Converts an SVG `` to use its data uri for `href` instead of\r\n * external file.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el SVG element\r\n * @param options Options\r\n */\n\n\n Export.prototype.imageToDataURI = function (el, options) {\n return __awaiter(this, void 0, void 0, function () {\n var img, canvas, uri, e_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2,, 3]);\n\n return [4\n /*yield*/\n , this.loadNewImage(el.getAttributeNS(Export.XLINK, \"href\"), null, null, \"anonymous\")];\n\n case 1:\n // Create image\n img = _a.sent();\n canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height; // Draw new image on it via `toDataURL`\n\n canvas.getContext(\"2d\").drawImage(img, 0, 0); // Replace image `href` with data uri\n // If we got to this point it means image has loaded, however we might\n // still get an error with `toDataURL()`\n\n try {\n uri = canvas.toDataURL();\n el.setAttribute(\"href\", uri);\n return [2\n /*return*/\n , uri];\n } catch (e) {\n // Give up and temporarily remove the element href temporarily\n if (options.keepTainted !== false) {\n /*this._removedObjects.push({\r\n \"element\": el,\r\n \"originalHref\": el.getAttributeNS(Export.XLINK, \"href\")\r\n });\r\n el.setAttributeNS(Export.XLINK, \"href\", \"\");*/\n this.temporarilyRemoveObject(el);\n }\n\n return [2\n /*return*/\n , undefined];\n }\n\n return [3\n /*break*/\n , 3];\n\n case 2:\n e_5 = _a.sent(); // Give up and temporarily remove the element's href\n\n if (!options || options.keepTainted !== false) {\n /*this._removedObjects.push({\r\n \"element\": el,\r\n \"originalHref\": el.getAttributeNS(Export.XLINK, \"href\")\r\n });\r\n el.setAttributeNS(Export.XLINK, \"href\", \"\");*/\n this.temporarilyRemoveObject(el);\n }\n\n return [2\n /*return*/\n , undefined];\n\n case 3:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Converts `` with external SVG source to data uri. Loads external SVG\r\n * file, then converts it to data uri and replaces the `xlink:href` parameter.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el An SVG element\r\n * @param options Options\r\n */\n\n\n Export.prototype.svgToDataURI = function (el, options) {\n return __awaiter(this, void 0, void 0, function () {\n var href, data, charset, uri, e_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n href = el.getAttributeNS(Export.XLINK, \"href\");\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , $net.load(href)];\n\n case 2:\n data = _a.sent();\n charset = this.adapter.apply(\"charset\", {\n charset: \"base64\",\n type: \"svg\",\n options: options\n }).charset;\n uri = this.adapter.apply(\"svgToDataURI\", {\n data: \"data:\" + this.getContentType(\"svg\") + \";\" + charset + \",\" + btoa(data.response),\n options: options\n }).data;\n el.setAttributeNS(Export.XLINK, \"href\", uri);\n return [2\n /*return*/\n , uri];\n\n case 3:\n e_6 = _a.sent(); // Disable temporarily\n\n if (!options || options.keepTainted !== false) {\n /*this._removedObjects.push({\r\n \"element\": el,\r\n \"originalHref\": href\r\n });\r\n el.setAttributeNS(Export.XLINK, \"href\", \"\");*/\n this.temporarilyRemoveObject(el);\n }\n\n return [2\n /*return*/\n , undefined];\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Temporarily removes element from DOM, and replaces it with a dummy\r\n * placeholder, as well as stores it for later restoration.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el Node\r\n */\n\n\n Export.prototype.temporarilyRemoveObject = function (el, placeholder) {\n // Get parent\n var parent = el.parentElement || el.parentNode; // Create a placeholder group element if it has not been passed in\n\n if (!placeholder) {\n placeholder = this.sprite.paper.add(\"g\").node;\n }\n\n parent.insertBefore(placeholder, el); // Check if we have a textContents we can replace with\n // @todo Perhaps we should explore alternatives to creating text nodes\n // i.e. creating a text version of the HTML-based Text, just for export\n // purposes. Converting HTML into SVG is very complicated\n\n if (el.textContent) {\n /*let text = this.sprite.paper.add(\"text\").node;\r\n text.textContent = el.textContent;\r\n placeholder.appendChild(text);\r\n // Copy properties from the removing element to the placeholder\r\n $dom.copyAttributes(el, placeholder);*/\n } // Remove the old element\n\n\n parent.removeChild(el); // Log removed item\n\n this._removedObjects.push({\n \"element\": el,\n \"placeholder\": placeholder\n });\n };\n /**\r\n * Restores all (possibly tainted or unsupported) objects that were\r\n * temporarily removed when exporting.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.prototype.restoreRemovedObjects = function () {\n var obj;\n\n while (true) {\n obj = this._removedObjects.pop();\n\n if (!obj) {\n break;\n } //obj.element.setAttribute(\"href\", obj.originalHref);\n\n\n var parent_1 = obj.placeholder.parentElement || obj.placeholder.parentNode;\n parent_1.insertBefore(obj.element, obj.placeholder); //parent.removeChild(obj.placeholder);\n }\n };\n /**\r\n * Checkes if simplified export can be used using `createObjectURL` and SVG\r\n * document does not contain any external images.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @return `true` if simplified export can be used\r\n */\n\n\n Export.prototype.simplifiedImageExport = function () {\n return __awaiter(this, void 0, void 0, function () {\n var cache, canvas, ctx, DOMURL, svg, url, img, e_7, e_8;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.useSimplifiedExport === false) {\n return [2\n /*return*/\n , false];\n }\n\n cache = registry.getCache(\"simplifiedImageExport\");\n\n if (cache === false || cache === true) {\n return [2\n /*return*/\n , cache];\n }\n\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 6,, 7]);\n\n canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n ctx = canvas.getContext(\"2d\");\n DOMURL = this.getDOMURL();\n svg = new Blob([this.normalizeSVG(\"\", {}, 1, 1)], {\n type: \"image/svg+xml\"\n });\n url = DOMURL.createObjectURL(svg);\n img = void 0;\n _a.label = 2;\n\n case 2:\n _a.trys.push([2, 4,, 5]);\n\n return [4\n /*yield*/\n , this.loadNewImage(url, 1, 1)];\n\n case 3:\n img = _a.sent();\n return [3\n /*break*/\n , 5];\n\n case 4:\n e_7 = _a.sent();\n return [2\n /*return*/\n , false];\n\n case 5:\n ctx.drawImage(img, 0, 0);\n DOMURL.revokeObjectURL(url);\n\n try {\n //let uri = canvas.toDataURL(\"image/png\");\n registry.setCache(\"simplifiedImageExport\", true);\n return [2\n /*return*/\n , true];\n } catch (e) {\n registry.setCache(\"simplifiedImageExport\", false);\n return [2\n /*return*/\n , false];\n }\n\n return [3\n /*break*/\n , 7];\n\n case 6:\n e_8 = _a.sent();\n registry.setCache(\"simplifiedImageExport\", false);\n return [2\n /*return*/\n , false];\n\n case 7:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Returns a new `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param url URL of the image\r\n * @param width Width (px)\r\n * @param height Height (px)\r\n * @param crossOrigin Cross-Origin setting\r\n * @return Promise\r\n */\n\n\n Export.prototype.loadNewImage = function (url, width, height, crossOrigin) {\n return new Promise(function (success, error) {\n // New image\n var image;\n\n if (width && height) {\n image = new Image(width, height);\n } else {\n image = new Image();\n } // Set crossorigin\n\n\n if (crossOrigin) {\n image.setAttribute(\"crossOrigin\", crossOrigin);\n } // Report success on load\n\n\n image.onload = function () {\n success(image);\n };\n\n function onerror() {\n // Error occurred. Just in case it's the crossOrigin issue, let's try\n // stripping off this attribute and trying again\n if (crossOrigin) {\n // Retain old uri\n var currentHref = image.src; // Set up another `onerror` to handle situations where image is not\n // loadable at all (i.e. protected by CORS)\n\n image.onerror = function () {\n // Nope, no luck\n error(new Error(\"Loading image \\\"\" + url + \"\\\" failed\"));\n }; // remove the `crossOrigin` attribute\n\n\n image.removeAttribute(\"crossorigin\"); // retry\n\n image.src = \"\";\n image.src = currentHref;\n } else {\n error(new Error(\"Loading image \\\"\" + url + \"\\\" failed\"));\n }\n } // Set image error handlers\n\n\n image.onabort = onerror;\n image.onerror = onerror; // Trigger load\n\n image.src = url;\n });\n };\n /**\r\n * Returns current DOM URL.\r\n *\r\n * @ignore Exclude from docs\r\n * @return URL\r\n */\n\n\n Export.prototype.getDOMURL = function () {\n return self.URL || self.webkitURL || self;\n };\n /**\r\n * Returns an SVG representation of the chart.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Type of the export\r\n * @param options Options\r\n * @param encodeURI If true, will return result will be data URI\r\n * @return Promise\r\n */\n\n\n Export.prototype.getSVG = function (type, options, encodeURI) {\n if (encodeURI === void 0) {\n encodeURI = true;\n }\n\n return __awaiter(this, void 0, void 0, function () {\n var prehidden, width, height, font, fontSize, scale, pixelRatio, svg, charset, uri;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n prehidden = this._objectsAlreadyHidden;\n\n if (!prehidden) {\n this.hideNonExportableSprites();\n }\n\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(\"svg\");\n } // Wait for required elements to be ready before proceeding\n\n\n return [4\n /*yield*/\n , this.awaitValidSprites()];\n\n case 1:\n // Wait for required elements to be ready before proceeding\n _a.sent();\n\n width = this.sprite.pixelWidth;\n height = this.sprite.pixelHeight;\n font = $dom.findFont(this.sprite.dom);\n fontSize = $dom.findFontSize(this.sprite.dom);\n scale = options.scale || 1;\n pixelRatio = this.getPixelRatio(options); // Check if scale needs to be updated as per min/max dimensions\n\n scale = this.getAdjustedScale(width * pixelRatio, height * pixelRatio, scale, options);\n svg = this.normalizeSVG(this.serializeElement(this.sprite.paper.defs) + this.serializeElement(this.sprite.dom), options, width, height, scale, font, fontSize);\n charset = this.adapter.apply(\"charset\", {\n charset: \"charset=utf-8\",\n type: \"svg\",\n options: options\n }).charset;\n uri = this.adapter.apply(\"getSVG\", {\n data: encodeURI ? \"data:\" + this.getContentType(type) + \";\" + charset + \",\" + encodeURIComponent(svg) : svg,\n options: options\n }).data;\n\n if (!prehidden) {\n this.restoreNonExportableSprites();\n }\n\n return [2\n /*return*/\n , uri];\n }\n });\n });\n };\n /**\r\n * Checks if SVG is fully formatted. Encloses in `...` if\r\n * necessary.\r\n *\r\n * @ignore Exclude from docs\r\n * @param svg Input SVG\r\n * @param options Options\r\n * @param width Width of the SVG viewport\r\n * @param height Height of the SVG viewport\r\n * @param font Font family to use as a base\r\n * @param fontSize Font size to use as a base\r\n * @return Output SVG\r\n * @todo Add style params to existing \r\n */\n\n\n Export.prototype.normalizeSVG = function (svg, options, width, height, scale, font, fontSize, background) {\n // Construct width/height params\n var dimParams = \"\";\n\n if (width) {\n dimParams += \"width=\\\"\" + Math.round(width * (scale || 1)) + \"px\\\" \";\n }\n\n if (height) {\n dimParams += \"height=\\\"\" + Math.round(height * (scale || 1)) + \"px\\\" \";\n } // Apply font settings\n\n\n var styleParams = \"\";\n\n if (font) {\n styleParams += \"font-family: \" + font.replace(/\"/g, \"\") + \";\";\n }\n\n if (fontSize) {\n styleParams += \"font-size: \" + fontSize + \";\";\n } // Scale\n\n\n if (scale) {\n dimParams += \"viewBox=\\\"0 0 \" + width + \" \" + height + \"\\\" \";\n } // Remove foreign objects temporarily\n\n\n var fos = [];\n var ms = svg.match(//gi);\n\n if (ms) {\n for (var i = 0; i < ms.length; i++) {\n svg = svg.replace(ms[i], $strings.PLACEHOLDER);\n fos.push(ms[i]);\n }\n } // Add missing enclosure\n\n\n if (!svg.match(/\" + svg + \"\";\n } else {\n if (dimParams !== \"\") {\n // Clear current params\n svg = svg.replace(/(]*)width=\"[^\"]*\"/, \"$1\");\n svg = svg.replace(/(]*)height=\"[^\"]*\"/, \"$1\"); // Add new params\n\n svg = svg.replace(/(]*)stylewidth=\"[^\"]*\"/, \"$1\");\r\n svg = svg.replace(/(]*)height=\"[^\"]*\"/, \"$1\");\r\n // Add new params\r\n svg = svg.replace(/(]*>)/, \"$1\"); //svg = svg.replace(/<\\/svg>/, \"\");\n }\n\n if ($browser.isInternetExplorer()) {\n // IE can't handle exporting for some reason\n svg = svg.replace(/]*\\/>/gi, \"\");\n } // Remove base uri-related stuff\n\n\n var reg = new RegExp(\"url\\\\(\" + $utils.escapeForRgex($utils.getBaseURI()), \"g\");\n svg = svg.replace(reg, \"url(#\"); // Remove escaped quotes in url() parameters\n\n svg = svg.replace(/url\\("([^)]*)"\\)/gm, \"url($1)\"); // Put foreignObjects back in\n\n if (fos.length) {\n for (var i = 0; i < fos.length; i++) {\n svg = svg.replace($strings.PLACEHOLDER, fos[i]);\n }\n }\n\n svg = this.adapter.apply(\"normalizeSVG\", {\n data: svg,\n options: options\n }).data;\n return svg;\n };\n /**\r\n * Serializes an element and returns its contents.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element An element to serialize\r\n * @return A serialized XML\r\n */\n\n\n Export.prototype.serializeElement = function (element) {\n return new XMLSerializer().serializeToString(element);\n };\n /**\r\n * Returns a PDF containing chart image.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Type of the export\r\n * @param options Options\r\n * @return Promise\r\n * @async\r\n * @todo Account for header when calculating vertical fit\r\n */\n\n\n Export.prototype.getPDF = function (type, options) {\n return __awaiter(this, void 0, void 0, function () {\n function addFont(font) {\n var paths = {};\n paths.normal = font.normal.path;\n vfs[font.normal.path] = font.normal.bytes;\n\n if (font.bold) {\n paths.bold = font.bold.path;\n vfs[font.bold.path] = font.bold.bytes;\n } else {\n paths.bold = font.normal.path;\n }\n\n if (font.italics) {\n paths.italics = font.italics.path;\n vfs[font.italics.path] = font.italics.bytes;\n } else {\n paths.italics = font.normal.path;\n }\n\n if (font.bolditalics) {\n paths.bolditalics = font.bolditalics.path;\n vfs[font.bolditalics.path] = font.bolditalics.bytes;\n } else {\n paths.bolditalics = font.normal.path;\n }\n\n fonts[font.name] = paths;\n }\n\n var image, pdfmake, defaultMargins, doc, title, extraMargin, _a, _b, _c, fonts, vfs;\n\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n return [4\n /*yield*/\n , this.getImage(options.imageFormat || \"png\", options)];\n\n case 1:\n image = _d.sent();\n return [4\n /*yield*/\n , this.pdfmake];\n\n case 2:\n pdfmake = _d.sent();\n defaultMargins = [30, 30, 30, 30];\n doc = {\n pageSize: options.pageSize || \"A4\",\n pageOrientation: options.pageOrientation || \"portrait\",\n pageMargins: options.pageMargins || defaultMargins,\n defaultStyle: {\n font: options.font ? options.font.name : undefined\n },\n //header: [],\n content: []\n };\n title = this.adapter.apply(\"title\", {\n title: this.title,\n options: options\n }).title;\n extraMargin = 0;\n\n if (title) {\n doc.content.push({\n text: title,\n fontSize: options.fontSize || 14,\n bold: true,\n margin: [0, 0, 0, 15]\n }); // Add some leftover margin for title\n\n extraMargin += 50;\n } // Add page URL?\n\n\n if (options.addURL) {\n doc.content.push({\n text: this.language.translate(\"Saved from\") + \": \" + document.location.href,\n fontSize: options.fontSize,\n margin: [0, 0, 0, 15]\n }); // Add some leftover margin for URL\n\n extraMargin += 50;\n } // Add image\n\n\n if (type != \"pdfdata\") {\n doc.content.push({\n image: image,\n alignment: options.align || \"left\",\n fit: this.getPageSizeFit(doc.pageSize, doc.pageMargins, extraMargin)\n });\n }\n\n if (!(type == \"pdfdata\" || options.addData)) return [3\n /*break*/\n , 4];\n _b = (_a = doc.content).push;\n _c = {};\n return [4\n /*yield*/\n , this.getPDFData(\"pdf\", options)];\n\n case 3:\n _b.apply(_a, [(_c.table = _d.sent(), _c.fontSize = options.fontSize || 14, _c)]);\n\n _d.label = 4;\n\n case 4:\n // Apply adapters\n doc = this.adapter.apply(\"pdfmakeDocument\", {\n doc: doc,\n options: options\n }).doc;\n fonts = null;\n vfs = null;\n\n if (options.font) {\n fonts = {};\n vfs = {};\n addFont(options.font);\n\n if (options.extraFonts) {\n $array.each(options.extraFonts, addFont);\n }\n }\n\n return [4\n /*yield*/\n , new Promise(function (success, error) {\n pdfmake.createPdf(doc, null, fonts, vfs).getDataUrl(function (uri) {\n success(uri);\n });\n })];\n\n case 5:\n // Create PDF\n return [2\n /*return*/\n , _d.sent()];\n }\n });\n });\n };\n /**\r\n * Returns chart's data formatted suitable for PDF export (pdfmake).\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @since 4.7.0\r\n * @param type Type of the export\r\n * @param options Options\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.getPDFData = function (type, options) {\n return __awaiter(this, void 0, void 0, function () {\n var content, dataFields, data, dataFieldsOrder_1, len, i;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n content = {\n \"body\": []\n };\n dataFields = this.adapter.apply(\"formatDataFields\", {\n dataFields: this.dataFields,\n format: \"pdf\"\n }).dataFields;\n data = this.data; // Vertical or horizontal (default) layout\n\n if (options.pivot) {\n dataFieldsOrder_1 = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"pdfdata\"\n }).dataFieldsOrder;\n $object.eachOrdered(dataFields, function (key, val) {\n var dataRow = [];\n\n if (options.addColumnNames) {\n dataRow.push(val);\n }\n\n for (var len = data.length, i = 0; i < len; i++) {\n var dataValue = data[i][key];\n dataRow.push(_this.convertToSpecialFormat(key, dataValue, options, true));\n }\n\n content.body.push(_this.getPDFDataRow(dataRow, options, undefined, true));\n }, function (a, b) {\n //console.log(a, b)\n var ai = dataFieldsOrder_1.indexOf(a);\n var bi = dataFieldsOrder_1.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n } else {\n // Add column names?\n if (options.addColumnNames) {\n content.body.push(this.getPDFDataRow(dataFields, options, undefined, true));\n content.headerRows = 1;\n }\n\n for (len = data.length, i = 0; i < len; i++) {\n content.body.push(this.getPDFDataRow(data[i], options, dataFields));\n }\n }\n\n return [2\n /*return*/\n , this.adapter.apply(\"pdfmakeTable\", {\n table: content,\n options: options\n }).table];\n });\n });\n };\n /**\r\n * Formats a row of data for use in PDF data table (pdfmake).\r\n *\r\n * @ignore Exclude from docs\r\n * @since 4.7.0\r\n * @param row An object holding data for the row\r\n * @param options Options\r\n * @param dataFields Data fields\r\n * @param asIs Do not try to convert to dates\r\n * @return Formated Data line\r\n */\n\n\n Export.prototype.getPDFDataRow = function (row, options, dataFields, asIs) {\n var _this = this;\n\n if (asIs === void 0) {\n asIs = false;\n } // Init\n\n\n var items = []; // Data fields\n\n if (!dataFields) {\n dataFields = row;\n } // Data fields order\n\n\n var dataFieldsOrder = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"pdfdata\"\n }).dataFieldsOrder; // Process each row item\n\n $object.eachOrdered(dataFields, function (key, name) {\n // Get value\n var value = _this.convertEmptyValue(key, row[key], options); // Convert dates\n\n\n var item = asIs ? value : _this.convertToSpecialFormat(key, value, options);\n item = \"\" + item; // Add to item\n\n items.push(item);\n }, function (a, b) {\n //console.log(a, b)\n var ai = dataFieldsOrder.indexOf(a);\n var bi = dataFieldsOrder.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n return items;\n };\n /**\r\n * Returns fit dimensions for available page sizes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pageSize Page size\r\n * @return `[width, height]` in pixels\r\n */\n\n\n Export.prototype.getPageSizeFit = function (pageSize, margins, extraMargin) {\n if (extraMargin === void 0) {\n extraMargin = 0;\n } // Check margins\n\n\n var newMargins = [0, 0, 0, 0];\n\n if (typeof margins == \"number\") {\n newMargins = [margins, margins, margins, margins];\n } else if (margins.length == 2) {\n newMargins = [margins[0], margins[1], margins[0], margins[1]];\n } else if (margins.length == 4) {\n newMargins = margins;\n } // Define available page sizes\n\n\n var sizes = {\n \"4A0\": [4767.87, 6740.79],\n \"2A0\": [3370.39, 4767.87],\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n A7: [209.76, 297.64],\n A8: [147.40, 209.76],\n A9: [104.88, 147.40],\n A10: [73.70, 104.88],\n B0: [2834.65, 4008.19],\n B1: [2004.09, 2834.65],\n B2: [1417.32, 2004.09],\n B3: [1000.63, 1417.32],\n B4: [708.66, 1000.63],\n B5: [498.90, 708.66],\n B6: [354.33, 498.90],\n B7: [249.45, 354.33],\n B8: [175.75, 249.45],\n B9: [124.72, 175.75],\n B10: [87.87, 124.72],\n C0: [2599.37, 3676.54],\n C1: [1836.85, 2599.37],\n C2: [1298.27, 1836.85],\n C3: [918.43, 1298.27],\n C4: [649.13, 918.43],\n C5: [459.21, 649.13],\n C6: [323.15, 459.21],\n C7: [229.61, 323.15],\n C8: [161.57, 229.61],\n C9: [113.39, 161.57],\n C10: [79.37, 113.39],\n RA0: [2437.80, 3458.27],\n RA1: [1729.13, 2437.80],\n RA2: [1218.90, 1729.13],\n RA3: [864.57, 1218.90],\n RA4: [609.45, 864.57],\n SRA0: [2551.18, 3628.35],\n SRA1: [1814.17, 2551.18],\n SRA2: [1275.59, 1814.17],\n SRA3: [907.09, 1275.59],\n SRA4: [637.80, 907.09],\n EXECUTIVE: [521.86, 756.00],\n FOLIO: [612.00, 936.00],\n LEGAL: [612.00, 1008.00],\n LETTER: [612.00, 792.00],\n TABLOID: [792.00, 1224.00]\n }; // Calculate size\n\n var fitSize = sizes[pageSize];\n fitSize[0] -= newMargins[0] + newMargins[2];\n fitSize[1] -= newMargins[1] + newMargins[3] + extraMargin;\n return fitSize;\n };\n /**\r\n * Returns an Excel file of chart's data.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Type of the export\r\n * @param options Options\r\n * @return Promise\r\n * @async\r\n * @todo Handle dates\r\n * @todo Support for multi-sheet\r\n */\n\n\n Export.prototype.getExcel = function (type, options) {\n return __awaiter(this, void 0, void 0, function () {\n var XLSX, wbOptions, sheetName, wb, data, dataFields, dataFieldsOrder_2, len, i, uri;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(\"xlsx\");\n }\n\n return [4\n /*yield*/\n , this.xlsx];\n\n case 1:\n XLSX = _a.sent();\n wbOptions = this.adapter.apply(\"xlsxWorkbookOptions\", {\n xlsx: XLSX,\n options: {\n bookType: \"xlsx\",\n bookSST: false,\n type: \"base64\"\n }\n }).options;\n sheetName = this.normalizeExcelSheetName(this.adapter.apply(\"xlsxSheetName\", {\n xlsx: XLSX,\n name: this.title || this.language.translate(\"Data\")\n }).name);\n wb = {\n SheetNames: [sheetName],\n Sheets: {}\n };\n data = [];\n dataFields = this.adapter.apply(\"formatDataFields\", {\n dataFields: this.dataFields,\n format: \"xslx\"\n }).dataFields; // Vertical or horizontal (default) layout\n\n if (options.pivot) {\n dataFieldsOrder_2 = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"xlsx\"\n }).dataFieldsOrder;\n $object.eachOrdered(dataFields, function (key, val) {\n var dataRow = [];\n\n if (options.addColumnNames) {\n dataRow.push(val);\n }\n\n for (var len = _this.data.length, i = 0; i < len; i++) {\n var dataValue = _this.data[i][key];\n dataRow.push(_this.convertToSpecialFormat(key, dataValue, options, true));\n }\n\n data.push(_this.getExcelRow(dataRow, options, undefined, true));\n }, function (a, b) {\n //console.log(a, b)\n var ai = dataFieldsOrder_2.indexOf(a);\n var bi = dataFieldsOrder_2.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n } else {\n // Add column names?\n if (options.addColumnNames) {\n data.push(this.getExcelRow(dataFields, options, undefined, true));\n } // Add lines\n\n\n for (len = this.data.length, i = 0; i < len; i++) {\n data.push(this.getExcelRow(this.data[i], options, dataFields));\n }\n } // Create sheet and add data\n\n\n wb.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(data); // Apply adapters\n\n wb = this.adapter.apply(\"xlsxWorkbook\", {\n xlsx: XLSX,\n workbook: wb,\n options: options\n }).workbook;\n uri = this.adapter.apply(\"getExcel\", {\n data: \"data:\" + this.getContentType(type) + \";base64,\" + XLSX.write(wb, wbOptions),\n options: options\n }).data;\n return [2\n /*return*/\n , uri];\n }\n });\n });\n };\n /**\r\n * This is needed to work around Excel limitations.\r\n *\r\n * @param name Source name\r\n * @return Normalized name\r\n */\n\n\n Export.prototype.normalizeExcelSheetName = function (name) {\n name = name.replace(/([:\\\\\\/?*\\[\\]]+)/g, \" \");\n return $utils.truncateWithEllipsis(name, 31, \"...\", true);\n };\n /**\r\n * Rertuns an array of values to be used as Excel row.\r\n *\r\n * @ignore Exclude from docs\r\n * @param row Row data\r\n * @param options Options\r\n * @param dataFields Data fields\r\n * @param asIs Do not try to convert to dates\r\n * @return Array of values\r\n */\n\n\n Export.prototype.getExcelRow = function (row, options, dataFields, asIs) {\n var _this = this;\n\n if (asIs === void 0) {\n asIs = false;\n } // Init\n\n\n var items = []; // Data fields\n\n if (!dataFields) {\n dataFields = row;\n } // Data fields order\n\n\n var dataFieldsOrder = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"xlsx\"\n }).dataFieldsOrder; // Process each row item\n\n $object.eachOrdered(dataFields, function (key, name) {\n // Get value\n var value = _this.convertEmptyValue(key, row[key], options); // Convert dates\n\n\n var item = asIs ? value : _this.convertToSpecialFormat(key, value, options, true);\n items.push(item);\n }, function (a, b) {\n //console.log(a, b)\n var ai = dataFieldsOrder.indexOf(a);\n var bi = dataFieldsOrder.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n return items;\n };\n /**\r\n * Returns chart's data formatted as CSV.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Type of the export\r\n * @param options Options\r\n * @param encodeURI If true, will return result will be data URI\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.getCSV = function (type, options, encodeURI) {\n if (encodeURI === void 0) {\n encodeURI = true;\n }\n\n return __awaiter(this, void 0, void 0, function () {\n var csv, dataFields, br, data, dataFieldsOrder_3, len, i, row, charset, uri;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(\"csv\");\n }\n\n csv = \"\";\n dataFields = this.adapter.apply(\"formatDataFields\", {\n dataFields: this.dataFields,\n format: \"csv\"\n }).dataFields;\n br = \"\";\n data = this.data; // Vertical or horizontal (default) layout\n\n if (options.pivot) {\n dataFieldsOrder_3 = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"csv\"\n }).dataFieldsOrder;\n $object.eachOrdered(dataFields, function (key, val) {\n var dataRow = [];\n\n if (options.addColumnNames) {\n dataRow.push(val);\n }\n\n for (var len = data.length, i = 0; i < len; i++) {\n var dataValue = data[i][key];\n dataRow.push(_this.convertToSpecialFormat(key, dataValue, options, true));\n }\n\n csv += br + _this.getCSVRow(dataRow, options, undefined, true);\n br = \"\\n\";\n }, function (a, b) {\n var ai = dataFieldsOrder_3.indexOf(a);\n var bi = dataFieldsOrder_3.indexOf(b);\n\n if (ai > bi) {\n return -1;\n } else if (ai < bi) {\n return 1;\n }\n\n return 0;\n });\n } else {\n for (len = data.length, i = 0; i < len; i++) {\n row = this.getCSVRow(data[i], options, dataFields);\n\n if (options.reverse) {\n csv = row + br + csv;\n } else {\n csv += br + row;\n }\n\n br = \"\\n\";\n } // Add column names?\n\n\n if (options.addColumnNames) {\n csv = this.getCSVRow(dataFields, options, undefined, true) + br + csv;\n }\n }\n\n charset = this.adapter.apply(\"charset\", {\n charset: \"charset=utf-8\",\n type: type,\n options: options\n }).charset;\n uri = this.adapter.apply(\"getCSV\", {\n data: encodeURI ? \"data:\" + this.getContentType(type) + \";\" + charset + \",\" + encodeURIComponent(csv) : csv,\n options: options\n }).data;\n return [2\n /*return*/\n , uri];\n });\n });\n };\n /**\r\n * Formats a row of CSV data.\r\n *\r\n * @ignore Exclude from docs\r\n * @param row An object holding data for the row\r\n * @param options Options\r\n * @param dataFields Data fields\r\n * @param asIs Do not try to convert to dates\r\n * @return Formated CSV line\r\n */\n\n\n Export.prototype.getCSVRow = function (row, options, dataFields, asIs) {\n var _this = this;\n\n if (asIs === void 0) {\n asIs = false;\n } // Init\n\n\n var separator = options.separator || \",\";\n var items = []; // Data fields\n\n if (!dataFields) {\n dataFields = row;\n } // Data fields order\n\n\n var dataFieldsOrder = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"csv\"\n }).dataFieldsOrder; // Process each row item\n\n $object.eachOrdered(dataFields, function (key, name) {\n // Get value\n var value = _this.convertEmptyValue(key, row[key], options); // Check if we need to skip\n // This is no longer required because we are iterating via dataFields anyway\n\n /*if ($type.hasValue(this.dataFields) && !$type.hasValue(this.dataFields[key])) {\r\n return;\r\n }*/\n // Convert dates\n\n\n var item = asIs ? value : _this.convertToSpecialFormat(key, value, options); // Cast and escape doublequotes\n\n item = \"\" + item;\n item = item.replace(/\"/g, '\"\"'); // Enclose into double quotes\n\n if (options.forceQuotes || item.search(new RegExp(\"\\\"|\\n|\" + separator, \"g\")) >= 0) {\n item = \"\\\"\" + item + \"\\\"\";\n } // Add to item\n\n\n items.push(item);\n }, function (a, b) {\n //console.log(a, b)\n var ai = dataFieldsOrder.indexOf(a);\n var bi = dataFieldsOrder.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n return items.join(separator);\n };\n /**\r\n * Returns chart's data formatted as HTML table.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @since 4.7.0\r\n * @param type Type of the export\r\n * @param options Options\r\n * @param encodeURI If true, will return result will be data URI\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.getHTML = function (type, options, encodeURI) {\n if (encodeURI === void 0) {\n encodeURI = true;\n }\n\n return __awaiter(this, void 0, void 0, function () {\n var html, dataFields, data, dataFieldsOrder_4, len, i, charset, uri;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(\"html\");\n }\n\n html = \"\";\n\n if (options.tableClass) {\n html = \"
\";\n }\n\n dataFields = this.adapter.apply(\"formatDataFields\", {\n dataFields: this.dataFields,\n format: \"html\"\n }).dataFields;\n data = this.data; // Vertical or horizontal (default) layout\n\n if (options.pivot) {\n dataFieldsOrder_4 = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"html\"\n }).dataFieldsOrder;\n html += \"\\n\";\n $object.eachOrdered(dataFields, function (key, val) {\n var dataRow = [];\n\n if (options.addColumnNames) {\n dataRow.push(val);\n }\n\n for (var len = data.length, i = 0; i < len; i++) {\n var dataValue = data[i][key];\n dataRow.push(_this.convertToSpecialFormat(key, dataValue, options, true));\n }\n\n html += \"\\n\" + _this.getHTMLRow(dataRow, options, undefined, true);\n }, function (a, b) {\n var ai = dataFieldsOrder_4.indexOf(a);\n var bi = dataFieldsOrder_4.indexOf(b);\n\n if (ai > bi) {\n return -1;\n } else if (ai < bi) {\n return 1;\n }\n\n return 0;\n });\n html += \"\\n\";\n } else {\n // Add column names?\n if (options.addColumnNames) {\n html += \"\\n\\n\" + this.getHTMLRow(dataFields, options, undefined, true, true) + \"\\n\";\n }\n\n html += \"\\n\";\n\n for (len = data.length, i = 0; i < len; i++) {\n html += \"\\n\" + this.getHTMLRow(data[i], options, dataFields);\n }\n\n html += \"\\n\";\n }\n\n html += \"\\n
\";\n charset = this.adapter.apply(\"charset\", {\n charset: \"charset=utf-8\",\n type: type,\n options: options\n }).charset;\n uri = this.adapter.apply(\"getHTML\", {\n data: encodeURI ? \"data:\" + this.getContentType(type) + \";\" + charset + \",\" + encodeURIComponent(html) : html,\n options: options\n }).data;\n return [2\n /*return*/\n , uri];\n });\n });\n };\n /**\r\n * Formats a row of HTML data.\r\n *\r\n * @since 4.7.0\r\n * @ignore Exclude from docs\r\n * @param row An object holding data for the row\r\n * @param options Options\r\n * @param dataFields Data fields\r\n * @param asIs Do not try to convert to dates\r\n * @return Formated HTML row\r\n */\n\n\n Export.prototype.getHTMLRow = function (row, options, dataFields, asIs, headerRow) {\n var _this = this;\n\n if (asIs === void 0) {\n asIs = false;\n }\n\n if (headerRow === void 0) {\n headerRow = false;\n } // Init output\n\n\n var html = \"\\t\";\n\n if (options.rowClass) {\n html = \"\\t\";\n } // Data fields\n\n\n if (!dataFields) {\n dataFields = row;\n } // Data fields order\n\n\n var dataFieldsOrder = this.adapter.apply(\"dataFieldsOrder\", {\n dataFieldsOrder: this.dataFieldsOrder,\n format: \"html\"\n }).dataFieldsOrder; // th or dh?\n\n var tag = headerRow ? \"th\" : \"td\"; // Process each row item\n\n var first = true;\n $object.eachOrdered(dataFields, function (key, name) {\n // Get value\n var value = _this.convertEmptyValue(key, row[key], options); // Convert dates\n\n\n var item = asIs ? value : _this.convertToSpecialFormat(key, value, options); // Escape HTML entities\n\n item = \"\" + item;\n item = item.replace(/[\\u00A0-\\u9999<>\\&]/gim, function (i) {\n return \"&#\" + i.charCodeAt(0) + \";\";\n }); // Which tag to use\n\n var useTag = tag;\n\n if (options.pivot && first) {\n useTag = \"th\";\n } // Add cell\n\n\n if (options.cellClass) {\n html += \"\\n\\t\\t<\" + useTag + \" class=\\\"\" + options.cellClass + \"\\\">\" + item + \"\";\n } else {\n html += \"\\n\\t\\t<\" + useTag + \">\" + item + \"\";\n }\n\n first = false;\n }, function (a, b) {\n var ai = dataFieldsOrder.indexOf(a);\n var bi = dataFieldsOrder.indexOf(b);\n\n if (ai > bi) {\n return 1;\n } else if (ai < bi) {\n return -1;\n }\n\n return 0;\n });\n html += \"\\n\\t\";\n return html;\n };\n /**\r\n * Returns chart's data in JSON format.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param type Type of the export\r\n * @param options Options\r\n * @param encodeURI If true, will return result will be data URI\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.getJSON = function (type, options, encodeURI) {\n if (encodeURI === void 0) {\n encodeURI = true;\n }\n\n return __awaiter(this, void 0, void 0, function () {\n var data, dataFields, sourceData, _loop_1, len, i, json, charset, uri;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n if (!$type.hasValue(options)) {\n options = this.getFormatOptions(\"json\");\n }\n\n dataFields = this.adapter.apply(\"formatDataFields\", {\n dataFields: this.dataFields,\n format: \"json\"\n }).dataFields;\n\n if (!this._dynamicDataFields) {\n data = [];\n sourceData = this.data;\n\n _loop_1 = function _loop_1(len, i) {\n var value = sourceData[i];\n\n if (_typeof(value) == \"object\") {\n var newValue_1 = {};\n $object.each(value, function (field, item) {\n if ($type.hasValue(dataFields[field])) {\n newValue_1[dataFields[field]] = _this.convertToSpecialFormat(field, item, options);\n }\n });\n data.push(newValue_1);\n }\n };\n\n for (len = sourceData.length, i = 0; i < len; i++) {\n _loop_1(len, i);\n }\n } else {\n data = this.data;\n }\n\n json = JSON.stringify(data, function (key, value) {\n if (_typeof(value) == \"object\") {\n $object.each(value, function (field, item) {\n value[field] = _this.convertToSpecialFormat(field, item, options);\n });\n }\n\n return value;\n }, options.indent);\n charset = this.adapter.apply(\"charset\", {\n charset: \"charset=utf-8\",\n type: type,\n options: options\n }).charset;\n uri = this.adapter.apply(\"getJSON\", {\n data: encodeURI ? \"data:\" + this.getContentType(type) + \";\" + charset + \",\" + encodeURIComponent(json) : json,\n options: options\n }).data;\n return [2\n /*return*/\n , uri];\n });\n });\n };\n /**\r\n * Converts the value to proper date format.\r\n *\r\n * @ignore Exclude from docs\r\n * @param field Field name\r\n * @param value Value\r\n * @param options Options\r\n * @param keepOriginal Will ignore formatting and will keep value as it is in data\r\n * @return Formatted date value or unmodified value\r\n */\n\n\n Export.prototype.convertToSpecialFormat = function (field, value, options, keepOriginal) {\n // Is this a timestamp or duration?\n if (typeof value == \"number\") {\n if (this.isDateField(field)) {\n value = new Date(value);\n } else if (this.isDurationField(field)) {\n return this.durationFormatter.format(value, this.durationFormat);\n } else if (this.isNumberField(field) && this.numberFormat) {\n return this.numberFormatter.format(value, this.numberFormat);\n }\n }\n\n if (value instanceof Date) {\n if (options.useTimestamps) {\n value = value.getTime();\n } else if (options.useLocale) {\n if (!keepOriginal) {\n value = value.toLocaleString();\n }\n } else {\n value = this.dateFormatter.format(value, this.dateFormat);\n }\n } else if ($type.isString(value) && this.isDateField(field) && this.dateFormat) {\n value = this.dateFormatter.format(this.dateFormatter.parse(value), this.dateFormat);\n }\n\n return value;\n };\n /**\r\n * Converts empty value based on `emptyAs` option.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.prototype.convertEmptyValue = function (field, value, options) {\n return $type.hasValue(value) ? value : options.emptyAs;\n };\n /**\r\n * Triggers download of the file.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param uri Data URI with file content\r\n * @param fileName File name\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.download = function (uri, fileName, addBOM) {\n if (addBOM === void 0) {\n addBOM = false;\n }\n\n return __awaiter(this, void 0, void 0, function () {\n var parts, contentType, decoded, blob_1, chars, i, charCode, blob, link_1, parts, contentType, decoded, blob_2, url_2, chars, i, charCode, blob, url_3, link, parts, contentType, iframe, idoc;\n return __generator(this, function (_a) {\n if (this.msBlobDownloadSupport()) {\n parts = uri.split(\";\");\n contentType = parts.shift().replace(/data:/, \"\");\n uri = decodeURIComponent(parts.join(\";\").replace(/^[^,]*,/, \"\")); // Check if we need to Base64-decode\n\n if ([\"image/svg+xml\", \"application/json\", \"text/csv\"].indexOf(contentType) == -1) {\n try {\n decoded = atob(uri);\n uri = decoded;\n } catch (e) {\n // Error occurred, meaning string was not Base64-encoded. Do nothing.\n return [2\n /*return*/\n , false];\n }\n } else {\n blob_1 = new Blob([uri], {\n type: contentType\n });\n window.navigator.msSaveBlob(blob_1, fileName);\n return [2\n /*return*/\n , true];\n }\n\n chars = new Array(uri.length);\n\n for (i = 0; i < uri.length; ++i) {\n charCode = uri.charCodeAt(i);\n chars[i] = charCode;\n }\n\n blob = new Blob([new Uint8Array(chars)], {\n type: contentType\n });\n window.navigator.msSaveBlob(blob, fileName);\n } else if (this.blobDownloadSupport()) {\n link_1 = document.createElement(\"a\");\n link_1.download = fileName;\n document.body.appendChild(link_1);\n parts = uri.split(\";\");\n contentType = parts.shift().replace(/data:/, \"\");\n uri = decodeURIComponent(parts.join(\";\").replace(/^[^,]*,/, \"\"));\n\n if ([\"image/svg+xml\", \"application/json\", \"text/csv\", \"text/html\"].indexOf(contentType) == -1) {\n try {\n decoded = atob(uri);\n uri = decoded;\n } catch (e) {\n // Error occurred, meaning string was not Base64-encoded. Do nothing.\n return [2\n /*return*/\n , false];\n }\n } else {\n if (addBOM) {\n uri = \"\\uFEFF\" + uri;\n }\n\n blob_2 = new Blob([uri], {\n type: contentType\n });\n url_2 = window.URL.createObjectURL(blob_2);\n link_1.href = url_2;\n link_1.download = fileName;\n link_1.click();\n setTimeout(function () {\n document.body.removeChild(link_1);\n window.URL.revokeObjectURL(url_2);\n }, 100);\n return [2\n /*return*/\n , true];\n }\n\n chars = new Array(uri.length);\n\n for (i = 0; i < uri.length; ++i) {\n charCode = uri.charCodeAt(i);\n chars[i] = charCode;\n }\n\n if (addBOM) {\n chars = [0xEF, 0xBB, 0xBF].concat(chars);\n }\n\n blob = new Blob([new Uint8Array(chars)], {\n type: contentType\n });\n url_3 = window.URL.createObjectURL(blob);\n link_1.href = url_3;\n link_1.download = fileName;\n document.body.appendChild(link_1);\n link_1.click();\n document.body.removeChild(link_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(url_3);\n }, 100);\n } else if (this.linkDownloadSupport()) {\n link = document.createElement(\"a\");\n link.download = fileName;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else if (this.legacyIE()) {\n parts = uri.match(/^data:(.*);[ ]*([^,]*),(.*)$/);\n\n if (parts.length === 4) {\n // Base64-encoded or text-based stuff?\n if (parts[2] == \"base64\") {\n // Base64-encoded - probably an image\n if (parts[1].match(/^image\\//)) {\n // Yep, an image. Let's create a temporary image placeholder,\n // so that user can use do Save As.\n this.showModal(\"\" + \"

\" + this.language.translate(\"To save the image, right-click thumbnail on the left and choose \\\"Save picture as...\\\"\") + \"

\" + \"

\" + this.language.translate(\"(Press ESC to close this message)\") + \"

\", this.language.translate(\"Image Export Complete\"));\n }\n } else {\n contentType = void 0;\n\n if (fileName.match(/\\.svg$/)) {\n contentType = \"image/svg+xml\";\n } else {\n contentType = \"text/plain\";\n fileName += \".txt\";\n }\n\n iframe = document.createElement(\"iframe\");\n iframe.width = \"1px\";\n iframe.height = \"1px\";\n iframe.style.display = \"none\";\n document.body.appendChild(iframe);\n idoc = iframe.contentDocument;\n idoc.open(contentType, \"replace\"); // TODO test this with various encodings (e.g. UTF)\n //idoc.charset = parts[2].replace(/charset=/, \"\");\n\n idoc.write(decodeURIComponent(parts[3]));\n idoc.close();\n idoc.execCommand(\"SaveAs\", true, fileName); // Destroy the iframe\n\n document.body.removeChild(iframe);\n }\n }\n } else {\n /**\r\n * Something else - perhaps a mobile.\r\n * Let's just display it in the same page.\r\n * (hey we don't like it either)\r\n */\n window.location.href = uri;\n }\n\n return [2\n /*return*/\n , true];\n });\n });\n };\n /**\r\n * Returns `true` if browser has any supported methods to trigger download\r\n * of a binary file.\r\n *\r\n * @return Supports downloads?\r\n */\n\n\n Export.prototype.downloadSupport = function () {\n //return !this.legacyIE();\n return this.linkDownloadSupport() || this.msBlobDownloadSupport();\n };\n /**\r\n * Checks if the browser supports \"download\" attribute on links.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Browser supports triggering downloads?\r\n */\n\n\n Export.prototype.linkDownloadSupport = function () {\n // Do we have this cached?\n var cache = registry.getCache(\"linkDownloadSupport\");\n\n if (cache === false || cache === true) {\n return cache;\n }\n\n var a = document.createElement(\"a\");\n var res = typeof a.download !== \"undefined\";\n registry.setCache(\"linkDownloadSupport\", res);\n return res;\n };\n /**\r\n * Checks if the browser supports download via `msBlob`.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Browser supports triggering downloads?\r\n */\n\n\n Export.prototype.blobDownloadSupport = function () {\n return $type.hasValue(window.Blob);\n };\n /**\r\n * Checks if the browser supports download via `msBlob`.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Browser supports triggering downloads?\r\n */\n\n\n Export.prototype.msBlobDownloadSupport = function () {\n return $type.hasValue(window.navigator.msSaveOrOpenBlob);\n };\n /**\r\n * Checks if this is a legacy version of IE.\r\n *\r\n * @ignore Exclude from docs\r\n * @return IE9 or less?\r\n */\n\n\n Export.prototype.legacyIE = function () {\n // Create a temporary
with conditional tags in it an an tag.\n // Count s. If there are some, we have IE9 or late on our hands.\n var div = document.createElement(\"div\");\n div.innerHTML = \"\";\n return div.getElementsByTagName(\"i\").length == 1;\n };\n /**\r\n * Initiates print of the chart.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @param data Data URI for the image\r\n * @param options Options\r\n * @param title Optional title to use (uses window's title by default)\r\n * @return Promise\r\n * @async\r\n */\n\n\n Export.prototype.print = function (data, options, title) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (options.printMethod == \"css\") {\n return [2\n /*return*/\n , this.printViaCSS(data, options, title)];\n } else {\n return [2\n /*return*/\n , this.printViaIframe(data, options, title)];\n }\n\n return [2\n /*return*/\n ];\n });\n });\n };\n\n Export.prototype.printViaCSS = function (data, options, title) {\n return __awaiter(this, void 0, void 0, function () {\n var scroll, rule, originalTitle, img, isIOS;\n return __generator(this, function (_a) {\n scroll = document.documentElement.scrollTop || document.body.scrollTop;\n rule = new StyleRule($dom.getShadowRoot(this.container), \"body > *\", {\n \"display\": \"none\",\n \"position\": \"fixed\",\n \"visibility\": \"hidden\",\n \"opacity\": \"0\",\n \"clipPath\": \"polygon(0px 0px,0px 0px,0px 0px,0px 0px);\"\n });\n\n if (title && document && document.title) {\n originalTitle = document.title;\n document.title = title;\n }\n\n img = new Image();\n img.src = data;\n img.style.maxWidth = \"100%\";\n img.style.display = \"block\";\n img.style.position = \"relative\";\n img.style.visibility = \"visible\";\n img.style.opacity = \"1\";\n img.style.clipPath = \"none\";\n document.body.appendChild(img); // Print\n\n this.setTimeout(function () {\n window.print();\n }, 50);\n isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n if (isIOS && options.delay < 1000) {\n options.delay = 1000;\n } else if (options.delay < 100) {\n options.delay = 100;\n } // Delay function that resets back the document the way ot was before\n\n\n this.setTimeout(function () {\n // Remove image\n document.body.removeChild(img); // Reset back all elements\n\n /*for (let len = items.length, i = 0; i < len; i++) {\r\n let item = items[i];\r\n if ($dom.isElement(item)) {\r\n item.style.display = states[i];\r\n }\r\n }*/\n\n rule.dispose(); // Restore title\n\n if (originalTitle) {\n document.title = document.title;\n } // Scroll back the document the way it was before\n\n\n document.documentElement.scrollTop = document.body.scrollTop = scroll;\n }, options.delay || 500);\n return [2\n /*return*/\n , true];\n });\n });\n };\n\n Export.prototype.printViaIframe = function (data, options, title) {\n return __awaiter(this, void 0, void 0, function () {\n var iframe, img, isIOS;\n return __generator(this, function (_a) {\n iframe = document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n document.body.appendChild(iframe); // This is needed for FireFox\n\n iframe.contentWindow.document.open();\n iframe.contentWindow.document.close();\n img = new Image();\n img.src = data;\n img.style.maxWidth = \"100%\";\n img.style.height = \"auto\";\n\n if (title) {\n iframe.contentWindow.document.title = title;\n }\n\n iframe.contentWindow.document.body.appendChild(img);\n\n iframe.load = function () {\n iframe.contentWindow.document.body.appendChild(img);\n }; // Print\n\n\n this.setTimeout(function () {\n try {\n if (!iframe.contentWindow.document.execCommand(\"print\", false, null)) {\n iframe.contentWindow.print();\n }\n } catch (e) {\n iframe.contentWindow.print();\n }\n }, options.delay || 50);\n isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n if (isIOS && options.delay < 1000) {\n options.delay = 1000;\n } else if (options.delay < 100) {\n options.delay = 100;\n } // Delay function that resets back the document the way ot was before\n\n\n this.setTimeout(function () {\n // Remove image\n document.body.removeChild(iframe);\n }, options.delay + 50 || 100);\n return [2\n /*return*/\n , true];\n });\n });\n };\n /**\r\n * Finds a background color for the element. If element is transparent it goes\r\n * up the DOM hierarchy to find a parent element that does.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Color code\r\n */\n\n\n Export.prototype.findBackgroundColor = function (element) {\n // Check if element has styles set\n var opacity = 1,\n currentColor = getComputedStyle(element, \"background-color\"); // Check opacity\n\n if (currentColor.match(/[^,]*,[^,]*,[^,]*,[ ]?0/) || currentColor == \"transparent\") {\n opacity = 0;\n }\n\n if (opacity == 0) {\n var parent_2 = element.parentElement; // || element.parentNode;\n // Completely transparent. Look for a parent\n\n if (parent_2) {\n return this.findBackgroundColor(parent_2);\n } else {\n return color(\"#fff\");\n }\n } else {\n return color(currentColor, opacity);\n }\n };\n\n Object.defineProperty(Export.prototype, \"container\", {\n /**\r\n * @return Reference\r\n */\n get: function get() {\n return this.adapter.apply(\"container\", {\n container: this._container\n }).container;\n },\n\n /**\r\n * A reference to a container to be used to place [[ExportMenu]] in.\r\n *\r\n * @param value Reference\r\n */\n set: function set(value) {\n this._container = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"sprite\", {\n /**\r\n * @return Sprite\r\n */\n get: function get() {\n return this.adapter.apply(\"sprite\", {\n sprite: this._sprite\n }).sprite;\n },\n\n /**\r\n * A reference to [[Sprite]] to export. Can be any Sprite, including some\r\n * internal elements.\r\n *\r\n * @param value Sprite\r\n */\n set: function set(value) {\n this._sprite = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"extraSprites\", {\n /**\r\n * @return Sprite\r\n */\n get: function get() {\n return this.adapter.apply(\"extraSprites\", {\n extraSprites: this._extraSprites\n }).extraSprites;\n },\n\n /**\r\n * An array of extra [[Sprite]] elements to include in export.\r\n *\r\n * It can be used to export any external elements, or even other charts.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * chart.exporting.extraSprites.push(chart2);\r\n * ```\r\n * ```JavaScript\r\n * chart.exporting.extraSprites.push(chart2);\r\n * ```\r\n *\r\n * IMPORTANT: This setting is ignored when exporting to SVG format.\r\n *\r\n * @since 4.2.0\r\n * @param value Sprite\r\n */\n set: function set(value) {\n this._extraSprites = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"validateSprites\", {\n /**\r\n * @return Sprite\r\n */\n get: function get() {\n return this.adapter.apply(\"validateSprites\", {\n validateSprites: this._validateSprites\n }).validateSprites;\n },\n\n /**\r\n * An array of [[Sprite]] elements that need to be valid before export\r\n * commences.\r\n *\r\n * If any of those elements is not completely ready when export is triggered,\r\n * the export will wait until they are (their `validated` event triggers)\r\n * before going through with the export opertaion.\r\n *\r\n * This is useful if you need to modify chart appearance for the export.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Add watermark\r\n * let watermark = chart.createChild(am4core.Label);\r\n * watermark.text = \"Copyright (C) 2019\";\r\n * watermark.disabled = true;\r\n *\r\n * // Add watermark to validated sprites\r\n * chart.exporting.validateSprites.push(watermark);\r\n *\r\n * // Enable watermark on export\r\n * chart.exporting.events.on(\"exportstarted\", function(ev) {\r\n * watermark.disabled = false;\r\n * });\r\n *\r\n * // Disable watermark when export finishes\r\n * chart.exporting.events.on(\"exportfinished\", function(ev) {\r\n * watermark.disabled = true;\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * // Add watermark\r\n * var watermark = chart.createChild(am4core.Label);\r\n * watermark.text = \"Copyright (C) 2019\";\r\n * watermark.disabled = true;\r\n *\r\n * // Add watermark to validated sprites\r\n * chart.exporting.validateSprites.push(watermark);\r\n *\r\n * // Enable watermark on export\r\n * chart.exporting.events.on(\"exportstarted\", function(ev) {\r\n * watermark.disabled = false;\r\n * });\r\n *\r\n * // Disable watermark when export finishes\r\n * chart.exporting.events.on(\"exportfinished\", function(ev) {\r\n * watermark.disabled = true;\r\n * });\r\n * ```\r\n *\r\n * @since 4.6.8\r\n * @param value Sprite\r\n */\n set: function set(value) {\n this._validateSprites = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"data\", {\n /**\r\n * @return Data\r\n */\n get: function get() {\n return this.adapter.apply(\"data\", {\n data: this._data\n }).data;\n },\n\n /**\r\n * Data to export.\r\n *\r\n * @param value Data\r\n */\n set: function set(value) {\n this._data = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"dataFields\", {\n /**\r\n * @return Field names `{ field: fieldName }`\r\n */\n get: function get() {\n if (!this._dataFields) {\n this.generateDataFields();\n }\n\n return this.adapter.apply(\"dataFields\", {\n dataFields: this._dataFields\n }).dataFields;\n },\n\n /**\r\n * Data fields in `{ field: fieldName }` format. Those are used for\r\n * exporting in data formats to name the columns.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/exporting/#Changing_order_and_names_of_columns} for examples and details\r\n * @param value Field names\r\n */\n set: function set(value) {\n this._dataFields = value;\n this._dynamicDataFields = false;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Called after target chart's data updates.\r\n *\r\n * @ignore\r\n */\n\n Export.prototype.handleDataUpdated = function () {\n if (this._dynamicDataFields) {\n this._dataFields = undefined;\n }\n\n var hasData = this.data.length > 0;\n\n if (this._prevHasData != hasData) {\n this._prevHasData = hasData;\n\n if (this.menu) {\n this.menu.invalidate();\n }\n }\n };\n\n Object.defineProperty(Export.prototype, \"dateFormatter\", {\n /**\r\n * @return A DateFormatter instance\r\n */\n get: function get() {\n if (!this._dateFormatter) {\n this._dateFormatter = new DateFormatter();\n this._dateFormatter.language = this.language;\n }\n\n return this.adapter.apply(\"dateFormatter\", {\n dateFormatter: this._dateFormatter\n }).dateFormatter;\n },\n\n /**\r\n * A [[DateFormatter]] to use when formatting dates when exporting data.\r\n *\r\n * @param value DateFormatter instance\r\n */\n set: function set(value) {\n this._dateFormatter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"dateFormat\", {\n /**\r\n * @return Date format\r\n */\n get: function get() {\n return this.adapter.apply(\"dateFormat\", {\n dateFormat: this._dateFormat\n }).dateFormat;\n },\n\n /**\r\n * A date format to use for exporting dates. Will use [[DateFormatter]]\r\n * format if not set.\r\n *\r\n * @param value Date format\r\n */\n set: function set(value) {\n this._dateFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"dateFields\", {\n /**\r\n * @return Date field list\r\n */\n get: function get() {\n if (!this._dateFields) {\n this._dateFields = new List();\n }\n\n return this.adapter.apply(\"dateFields\", {\n dateFields: this._dateFields\n }).dateFields;\n },\n\n /**\r\n * A list of fields that hold date values.\r\n *\r\n * @param value Date field list\r\n */\n set: function set(value) {\n this._dateFields = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"numberFormatter\", {\n /**\r\n * @return A NumberFormatter instance\r\n */\n get: function get() {\n if (!this._numberFormatter) {\n this._numberFormatter = new NumberFormatter();\n this._numberFormatter.language = this.language;\n }\n\n return this.adapter.apply(\"numberFormatter\", {\n numberFormatter: this._numberFormatter\n }).numberFormatter;\n },\n\n /**\r\n * A [[NumberFormatter]] to use when formatting dates when exporting data.\r\n *\r\n * @since 4.5.15\r\n * @param value NumberFormatter instance\r\n */\n set: function set(value) {\n this._numberFormatter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"numberFormat\", {\n /**\r\n * @return Number format\r\n */\n get: function get() {\n return this.adapter.apply(\"numberFormat\", {\n numberFormat: this._numberFormat\n }).numberFormat;\n },\n\n /**\r\n * A number format to use for exporting dates. Will use [[NumberFormatter]]\r\n * format if not set.\r\n *\r\n * @since 4.5.15\r\n * @param value Number format\r\n */\n set: function set(value) {\n this._numberFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"numberFields\", {\n /**\r\n * @return Number field list\r\n */\n get: function get() {\n if (!this._numberFields) {\n this._numberFields = new List();\n }\n\n return this.adapter.apply(\"numberFields\", {\n numberFields: this._numberFields\n }).numberFields;\n },\n\n /**\r\n * A list of fields that hold number values.\r\n *\r\n * @since 4.5.15\r\n * @param value Number field list\r\n */\n set: function set(value) {\n this._numberFields = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"durationFormatter\", {\n /**\r\n * @return A DurationFormatter instance\r\n */\n get: function get() {\n if (!this._durationFormatter) {\n this._durationFormatter = new DurationFormatter();\n this._durationFormatter.language = this.language;\n }\n\n return this.adapter.apply(\"durationFormatter\", {\n durationFormatter: this._durationFormatter\n }).durationFormatter;\n },\n\n /**\r\n * A [[DurationFormatter]] to use when formatting duration values when\r\n * exporting data.\r\n *\r\n * @param value DurationFormatter instance\r\n */\n set: function set(value) {\n this._durationFormatter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"durationFormat\", {\n /**\r\n * @return Duration format\r\n */\n get: function get() {\n return this.adapter.apply(\"durationFormat\", {\n durationFormat: this._durationFormat\n }).durationFormat;\n },\n\n /**\r\n * A format to use when formatting values from `durationFields`.\r\n * Will use [[DurationFormatter]] format if not set.\r\n *\r\n * @param value Duration format\r\n */\n set: function set(value) {\n this._durationFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"durationFields\", {\n /**\r\n * @return Duration field list\r\n */\n get: function get() {\n if (!this._durationFields) {\n this._durationFields = new List();\n }\n\n return this.adapter.apply(\"durationFields\", {\n durationFields: this._durationFields\n }).durationFields;\n },\n\n /**\r\n * A list of fields that hold duration values.\r\n *\r\n * @param value Duration field list\r\n */\n set: function set(value) {\n this._durationFields = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Generates data fields out of the first row of data.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Export.prototype.generateDataFields = function () {\n var _this = this;\n\n this._dataFields = {};\n\n if (this.data.length) {\n $array.each(this.data, function (row) {\n $object.each(row, function (key, value) {\n if (!$type.hasValue(_this._dataFields[key])) {\n _this._dataFields[key] = _this.adapter.apply(\"dataFieldName\", {\n name: key,\n field: key\n }).name;\n }\n });\n });\n }\n };\n /**\r\n * Cheks against `dateFields` property to determine if this field holds\r\n * dates.\r\n *\r\n * @ignore Exclude from docs\r\n * @param field Field name\r\n * @param options Options\r\n * @return `true` if it's a date field\r\n */\n\n\n Export.prototype.isDateField = function (field) {\n return this.adapter.apply(\"isDateField\", {\n isDateField: this.dateFields.contains(field),\n field: field\n }).isDateField;\n };\n /**\r\n * Cheks against `numberFields` property to determine if this field holds\r\n * numbers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param field Field name\r\n * @param options Options\r\n * @return `true` if it's a number field\r\n */\n\n\n Export.prototype.isNumberField = function (field) {\n return this.adapter.apply(\"isNumberField\", {\n isNumberField: this.numberFields.contains(field),\n field: field\n }).isNumberField;\n };\n /**\r\n * Cheks against `durationFields` property to determine if this field holds\r\n * durations.\r\n *\r\n * @ignore Exclude from docs\r\n * @param field Field name\r\n * @param options Options\r\n * @return `true` if it's a date field\r\n */\n\n\n Export.prototype.isDurationField = function (field) {\n return this.adapter.apply(\"isDurationField\", {\n isDurationField: this.durationFields.contains(field),\n field: field\n }).isDurationField;\n };\n /**\r\n * Returns proper content type for the export type.\r\n *\r\n * @param type Export format/type\r\n * @return Proper content type, i.e. \"image/jpeg\"\r\n */\n\n\n Export.prototype.getContentType = function (type) {\n var contentType = \"\";\n\n switch (type) {\n case \"png\":\n case \"gif\":\n contentType = \"image/\" + type;\n break;\n\n case \"jpg\":\n contentType = \"image/jpeg\";\n break;\n\n case \"svg\":\n contentType = \"image/svg+xml\";\n break;\n\n case \"csv\":\n contentType = \"text/csv\";\n break;\n\n case \"json\":\n contentType = \"application/json\";\n break;\n\n case \"html\":\n contentType = \"text/html\";\n break;\n\n case \"pdf\":\n case \"pdfdata\":\n contentType = \"application/pdf\";\n break;\n\n case \"xlsx\":\n contentType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n break;\n }\n\n return this.adapter.apply(\"contentType\", {\n contentType: contentType,\n type: type\n }).contentType;\n };\n\n Object.defineProperty(Export.prototype, \"filePrefix\", {\n /**\r\n * @return File prefix\r\n */\n get: function get() {\n return this.adapter.apply(\"filePrefix\", {\n filePrefix: this._filePrefix\n }).filePrefix;\n },\n\n /**\r\n * A file prefix to be used for all exported formats.\r\n *\r\n * Export will apply format-related extension to it. E.g. if this is set to\r\n * \"myExport\", the file name of the PNG exported image will be \"myExport.png\".\r\n *\r\n * @param value File prefix\r\n */\n set: function set(value) {\n this._filePrefix = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"backgroundColor\", {\n /**\r\n * @return Background color\r\n */\n get: function get() {\n return this.adapter.apply(\"backgroundColor\", {\n backgroundColor: this._backgroundColor\n }).backgroundColor;\n },\n\n /**\r\n * A background color to be used for exported images. If set, this will\r\n * override the automatically acquired background color.\r\n *\r\n * @param value Color\r\n */\n set: function set(value) {\n this._backgroundColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"title\", {\n /**\r\n * @return Title\r\n */\n get: function get() {\n return this.adapter.apply(\"title\", {\n title: this._title\n }).title;\n },\n\n /**\r\n * A title to be used when printing.\r\n *\r\n * @param value Title\r\n */\n set: function set(value) {\n this._title = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Displays a preloader/exporting indicator.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Add ability to change text\r\n */\n\n Export.prototype.showPreloader = function () {\n var preloader = this.preloader;\n\n if (preloader) {\n preloader.progress = 0.5;\n preloader.label.text = \"...\";\n }\n };\n /**\r\n * Hides preloader/exporting indicator\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.prototype.hidePreloader = function () {\n var preloader = this.preloader;\n\n if (preloader) {\n preloader.progress = 1;\n }\n };\n\n Object.defineProperty(Export.prototype, \"preloader\", {\n /**\r\n * Returns a an instance of [[Preloader]] associated with the Sprite being\r\n * exported.\r\n *\r\n * @return Preloader\r\n */\n get: function get() {\n return this._sprite && this._sprite.parent && this._sprite.parent.preloader ? this._sprite.parent.preloader : undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Displays a modal saying export is taking longer than expected.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Export.prototype.showTimeout = function () {\n this.showModal(this.adapter.apply(\"timeoutMessage\", {\n message: this.language.translate(\"Export operation took longer than expected. Something might have gone wrong.\")\n }).message);\n };\n /**\r\n * Hides preloader/exporting indicator.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.prototype.hideTimeout = function () {\n if (this._timeoutTimeout) {\n this.removeDispose(this._timeoutTimeout);\n this._timeoutTimeout = null;\n }\n\n this.hideModal();\n };\n\n Object.defineProperty(Export.prototype, \"language\", {\n /**\r\n * @return A [[Language]] instance to be used\r\n */\n get: function get() {\n if (!this._language) {\n this._language = new Language();\n }\n\n return this._language;\n },\n\n /**\r\n * A [[Language]] instance to be used for translations.\r\n *\r\n * @param value An instance of [[Language]]\r\n */\n set: function set(value) {\n this._language = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"modal\", {\n /**\r\n * Returns (and creates) [[Modal]].\r\n *\r\n * @ignore Exclude from docs\r\n * @return Modal instance\r\n */\n get: function get() {\n if (!this._modal) {\n this._modal = new Modal(); // Prefix with Sprite's class name\n\n this._modal.adapter.add(\"classPrefix\", function (value) {\n value = options.classNamePrefix + value;\n return value;\n });\n }\n\n return this._modal;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Shows [[Modal]] with specific text.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Modal contents\r\n */\n\n Export.prototype.showModal = function (text, title) {\n // Hide previous modal and preloader\n this.hideModal();\n this.hidePreloader(); // Create modal\n\n var modal = this.modal;\n modal.container = this.sprite.svgContainer.SVGContainer;\n modal.content = text;\n modal.readerTitle = title;\n modal.open();\n };\n /**\r\n * Hides modal window if one's currently open.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.prototype.hideModal = function () {\n if (this._modal) {\n this.modal.close();\n }\n };\n /**\r\n * Loads canvg dynamic module.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of canvg\r\n * @async\r\n */\n\n\n Export.prototype._canvg = function () {\n return __awaiter(this, void 0, void 0, function () {\n var canvg;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , import(\n /* webpackChunkName: \"canvg\" */\n \"../../canvg/index.js\")];\n\n case 1:\n canvg = _a.sent();\n\n if (canvg.default != null) {\n return [2\n /*return*/\n , canvg.default];\n } else {\n return [2\n /*return*/\n , canvg];\n }\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n Object.defineProperty(Export.prototype, \"canvg\", {\n /**\r\n * Returns canvg instance.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of canvg\r\n */\n get: function get() {\n return this._canvg();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Export.prototype, \"pdfmake\", {\n /**\r\n * Returns pdfmake instance.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of pdfmake\r\n */\n get: function get() {\n if (pdfmakePromise == null) {\n pdfmakePromise = _pdfmake();\n }\n\n return pdfmakePromise;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Loads xlsx dynamic module.\r\n *\r\n * This is an asynchronous function. Check the description of `getImage()`\r\n * for description and example usage.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of pdfmake\r\n * @async\r\n */\n\n Export.prototype._xlsx = 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 , import(\n /* webpackChunkName: \"xlsx\" */\n \"xlsx/dist/xlsx.core.min.js\")];\n\n case 1:\n return [2\n /*return*/\n , _a.sent()];\n }\n });\n });\n };\n\n Object.defineProperty(Export.prototype, \"xlsx\", {\n /**\r\n * Returns xlsx instance.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Instance of pdfmake\r\n */\n get: function get() {\n return this._xlsx();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets options for a format.\r\n */\n\n Export.prototype.setFormatOptions = function (type, options) {\n this._formatOptions.setKey(type, options);\n };\n /**\r\n * Returns current options for a format.\r\n */\n\n\n Export.prototype.getFormatOptions = function (type) {\n return this._formatOptions.getKey(type);\n };\n\n Object.defineProperty(Export.prototype, \"formatOptions\", {\n /**\r\n * A [[Dictionary]] object containing format-specific options.\r\n *\r\n * May be used to change specific option for the format:\r\n *\r\n * ```TypeScript\r\n * chart.exporting.formatOptions.getKey(\"csv\").disabled = true;\r\n * ```\r\n * ```JavaScript\r\n * chart.exporting.formatOptions.getKey(\"csv\").disabled = true;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"exporting\": {\r\n * // ...\r\n * \"formatOptions\": {\r\n * \"csv\": {\r\n * \"disabled\": true\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @since 4.9.12\r\n * @return Options\r\n */\n get: function get() {\n return this._formatOptions;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Disables interactivity on parent chart.\r\n */\n\n Export.prototype._disablePointers = function () {\n if (!$type.hasValue(this._spriteInteractionsEnabled)) {\n this._spriteInteractionsEnabled = this.sprite.interactionsEnabled;\n }\n\n this.sprite.interactionsEnabled = false;\n };\n /**\r\n * Releases temporarily disabled pointers on parent chart.\r\n */\n\n\n Export.prototype._releasePointers = function () {\n if ($type.hasValue(this._spriteInteractionsEnabled) && !this._exportRunning) {\n this.sprite.interactionsEnabled = this._spriteInteractionsEnabled;\n }\n };\n /**\r\n * Hides all elements that should not be included in the exported image.\r\n */\n\n\n Export.prototype.hideNonExportableSprites = function () {\n var _this = this;\n\n if (this._objectsAlreadyHidden) {\n return;\n }\n\n var svgContainer = this.sprite.svgContainer;\n\n if (svgContainer) {\n $array.each(svgContainer.nonExportableSprites, function (item) {\n if (!item.isHidden && !item.isHiding && item.visible) {\n _this._hiddenObjects.push(item);\n }\n\n item.hide(0);\n });\n }\n\n this._objectsAlreadyHidden = true;\n };\n /**\r\n * Respores elements that were hidden before export.\r\n */\n\n\n Export.prototype.restoreNonExportableSprites = function () {\n if (!this._objectsAlreadyHidden) {\n return;\n }\n\n $array.each(this._hiddenObjects, function (item) {\n item.show(0);\n });\n this._hiddenObjects = [];\n this._objectsAlreadyHidden = false;\n };\n /**\r\n * Checks if there are elements that absolutely need to be validated before\r\n * export.\r\n *\r\n * If there are invalid elements, it will await for them to be validated.\r\n *\r\n * @return Promise\r\n */\n\n\n Export.prototype.awaitValidSprites = function () {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = [];\n\n if (this.validateSprites.length) {\n $array.each(this.validateSprites, function (sprite, index) {\n if (sprite.invalid) {\n promises.push(new Promise(function (resolve, reject) {\n sprite.events.once(\"validated\", function (ev) {\n resolve();\n });\n }));\n }\n });\n }\n\n if (!promises.length) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , Promise.all(promises)];\n\n case 1:\n _a.sent();\n\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n Export.prototype.processConfig = function (config) {\n registry.registeredClasses[\"ExportMenu\"] = ExportMenu;\n\n if (config) {\n // Set up menu\n if ($type.hasValue(config.menu) && !$type.hasValue(config.menu.type)) {\n config.menu.type = \"ExportMenu\";\n }\n\n if ($type.hasValue(config.dataFields) && $type.isObject(config.dataFields)) {\n this.dataFields = config.dataFields;\n delete config.dataFields;\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * XLINK namespace definition.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Export.XLINK = \"http://www.w3.org/1999/xlink\";\n return Export;\n}(Validatable);\n\nexport { Export };","/**\r\n * This module defines a [[Validatable]] class which can be used by all\r\n * non-[[Sprite]] classes to use system beats to revalidate themselves.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"../Base\";\nimport { registry } from \"../Registry\";\n/**\r\n * This module defines a [[Validatable]] class which can be used by all\r\n * non-[[Sprite]] classes to use system update cycle to revalidate themselves.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar Validatable =\n/** @class */\nfunction (_super) {\n __extends(Validatable, _super);\n\n function Validatable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Is invalid and should be revalidated?\r\n */\n\n\n _this._validateDisposer = null;\n return _this;\n }\n /**\r\n * Invalidates the element, so that it can re-validate/redraw itself in the\r\n * next cycle.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Validatable.prototype.invalidate = function () {\n if (this._validateDisposer === null) {\n this._validateDisposer = registry.events.on(\"exitframe\", this.validate, this);\n }\n };\n /**\r\n * Validates itself.\r\n *\r\n * Most probably the extending class will have an overriding `validate()`\r\n * method which will do actual work, as well as call this method using\r\n * `super.validate()`.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Validatable.prototype.validate = function () {\n if (this._validateDisposer !== null) {\n this._validateDisposer.dispose();\n\n this._validateDisposer = null;\n }\n };\n\n Validatable.prototype.dispose = function () {\n if (this._validateDisposer !== null) {\n this._validateDisposer.dispose();\n\n this._validateDisposer = null;\n }\n\n _super.prototype.dispose.call(this);\n };\n\n return Validatable;\n}(BaseObjectEvents);\n\nexport { Validatable };","/**\r\n * ExportMenu provides functionality for building Export menu\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport exportCSS from \"./ExportCSS\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { List } from \"../utils/List\";\nimport { getInteraction } from \"../interaction/Interaction\";\nimport { MutableValueDisposer } from \"../utils/Disposer\";\nimport { Language } from \"../utils/Language\";\nimport { Validatable } from \"../utils/Validatable\";\nimport { keyboard } from \"../utils/Keyboard\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $iter from \"../utils/Iterator\";\nimport * as $dom from \"../utils/DOM\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a menu for Export operations.\r\n *\r\n * To add an export menu to a chart, set this to a new instance of\r\n * [[ExportMenu]].\r\n *\r\n * ```TypeScript\r\n * chart.exporting.menu = new am4core.ExportMenu();\r\n * ```\r\n * ```JavaScript\r\n * chart.exporting.menu = new am4core.ExportMenu();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"exporting\": {\r\n * \"menu\": {}\r\n * }\r\n * }\r\n * ```\r\n * @important\r\n */\n\nvar ExportMenu =\n/** @class */\nfunction (_super) {\n __extends(ExportMenu, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ExportMenu() {\n var _this = _super.call(this) || this;\n /**\r\n * An [[Adapter]].\r\n */\n\n\n _this.adapter = new Adapter(_this);\n /**\r\n * How many milliseconds to hold menu/sub-menu open after it loses focus or\r\n * hover, before auto-closing it.\r\n *\r\n * @default 1000\r\n */\n\n _this.closeDelay = 1000;\n /**\r\n * Close the menu automatically when some export operation is triggered.\r\n *\r\n * @default true\r\n * @since 4.2.2\r\n */\n\n _this.closeOnClick = true;\n /**\r\n * An instance of [[Language]].\r\n */\n\n _this._language = new MutableValueDisposer();\n /**\r\n * What HTML tags to use to build menu.\r\n */\n\n _this._menuTag = \"ul\";\n /**\r\n * Which tag to use to enclose individual menu items.\r\n */\n\n _this._itemTag = \"li\";\n /**\r\n * Tag to wrap menu item labels in.\r\n */\n\n _this._labelTag = \"a\";\n /**\r\n * Tag to use for icons\r\n */\n\n _this._iconTag = \"img\";\n /**\r\n * Prefix for class names applied to menu elements.\r\n */\n\n _this._classPrefix = \"amexport\";\n /**\r\n * If set to `true` [[ExportMenu]] will load it's own external CSS when\r\n * instantiated.\r\n */\n\n _this._defaultStyles = true;\n /**\r\n * Horizontal positioning.\r\n */\n\n _this._align = \"right\";\n /**\r\n * Vertical positioning.\r\n */\n\n _this._verticalAlign = \"top\";\n /**\r\n * A tabindex to apply to Export Menu.\r\n */\n\n _this._tabindex = 0;\n /**\r\n * Whether next menu close event should be ignored.\r\n */\n\n _this._ignoreNextClose = false;\n /**\r\n * Default menu items.\r\n */\n\n _this._items = [{\n \"label\": \"...\",\n \"menu\": [{\n \"label\": \"Image\",\n \"menu\": [{\n \"type\": \"png\",\n \"label\": \"PNG\"\n }, {\n \"type\": \"jpg\",\n \"label\": \"JPG\"\n }, {\n \"type\": \"svg\",\n \"label\": \"SVG\"\n }, {\n \"type\": \"pdf\",\n \"label\": \"PDF\"\n }]\n }, {\n \"label\": \"Data\",\n \"menu\": [{\n \"type\": \"json\",\n \"label\": \"JSON\"\n }, {\n \"type\": \"csv\",\n \"label\": \"CSV\"\n }, {\n \"type\": \"xlsx\",\n \"label\": \"XLSX\"\n }, {\n \"type\": \"html\",\n \"label\": \"HTML\"\n }, {\n \"type\": \"pdfdata\",\n \"label\": \"PDF\"\n }]\n }, {\n \"label\": \"Print\",\n \"type\": \"print\"\n }]\n }];\n _this.className = \"ExportMenu\";\n\n _this._disposers.push(_this._language);\n\n _this.invalidate();\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * (Re)draws the Export menu.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ExportMenu.prototype.validate = function () {\n this.draw();\n\n _super.prototype.validate.call(this);\n };\n /**\r\n * Draws the menu based on current items.\r\n *\r\n * Normally, there's no need to call this explicitly. The chart, if it has\r\n * export menu enabled, will automatically draw the menu.\r\n */\n\n\n ExportMenu.prototype.draw = function () {\n var _this = this; // Create top-level menu item, or clear it\n\n\n if (!this._element) {\n this._element = this.createMenuElement(0);\n } else {\n this._element.innerHTML = \"\";\n this._element.className = this.getMenuItemClass(0);\n } // See if we're loading external CSS\n // Hide it until CSS is loaded\n\n\n if (this.defaultStyles) {\n this._element.style.display = \"none\";\n } // Append to container\n\n\n $type.getValue(this._container).appendChild(this._element); // Apply adapter to menu items before processing\n\n var items = this.adapter.apply(\"items\", {\n items: this._items\n }).items;\n\n for (var len = items.length, i = 0; i < len; i++) {\n this.drawBranch(this._element, items[i], 0);\n } // Apply adapter to finalized menu element\n\n\n this._element = this.adapter.apply(\"menuElement\", {\n menuElement: this._element\n }).menuElement; // Set up global \"down\" event\n\n this._disposers.push(getInteraction().body.events.on(\"down\", function (ev) {\n if (!ev.pointer.touch) {\n _this._ignoreNextClose = false;\n }\n\n _this.close();\n })); // Set up global event on ESC press to close the menu\n\n\n this._disposers.push(getInteraction().body.events.on(\"keydown\", function (ev) {\n var key = keyboard.getEventKey(ev.event);\n\n switch (key) {\n case \"esc\":\n _this.close();\n\n break;\n\n case \"up\":\n case \"down\":\n case \"left\":\n case \"right\":\n if (_this._currentSelection) {\n ev.event.preventDefault();\n }\n\n _this.moveSelection(key);\n\n break;\n }\n }));\n\n if (this.defaultStyles) {\n this.loadDefaultCSS();\n }\n };\n /**\r\n * Creates a new branch in export menu. This function is recursive for\r\n * building multi-level menus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param container Container to put branch elements in\r\n * @param branch Menu item\r\n * @param level Current nesting level\r\n */\n\n\n ExportMenu.prototype.drawBranch = function (container, branch, level) {\n var _this = this; // Apply adapter\n\n\n branch = this.adapter.apply(\"branch\", {\n branch: branch,\n level: level\n }).branch; // Unsupported?\n // ExportMenu does not check or know for specific browser/system\n // capabilities. It must happen in some other code and applied via Adapter.\n // Export itself will check compatibility, but there might be other plugins\n // that influence it or even add any specific export functionality.\n\n if (branch.unsupported === true) {\n return;\n } // Init ascendants\n\n\n if (!branch.ascendants) {\n branch.ascendants = new List();\n } // Get type\n\n\n var type = branch.type; // Create an item\n\n var element = this.createItemElement(level, type); // Create label\n\n var label; // Create icon\n\n if (branch.icon) {\n label = this.createIconElement(level, type);\n label.src = branch.icon;\n\n if (branch.label || branch.title) {\n label.title = branch.title || branch.label;\n }\n } else if (branch.svg) {\n label = this.createSvgElement(level, type, branch.svg);\n\n if (branch.label || branch.title) {\n label.title = branch.title || branch.label;\n }\n } else {\n label = this.createLabelElement(level, type);\n label.innerHTML = branch.label ? this.language.translate(branch.label) : \"\";\n\n if (branch.title) {\n label.title = branch.title;\n }\n } // Apply reader text to label\n\n\n var readerLabel = this.getReaderLabel(branch, label.innerHTML);\n label.setAttribute(\"aria-label\", readerLabel); // Add Label\n\n element.appendChild(label); // Create interaction object\n // TODO clean this up when it's disposed\n\n branch.interactions = getInteraction().getInteraction(element);\n branch.element = element; // Create interaction manager we can set event listeners to\n\n if (this.typeClickable(type)) {\n //branch.interactions.clickable = true;\n // TODO clean this up when it's disposed\n branch.interactions.events.on(\"hit\", function (ev) {\n if (_this.events.isEnabled(\"hit\") && !_this.isDisposed()) {\n var event_1 = {\n \"type\": \"hit\",\n \"event\": ev.event,\n \"target\": _this,\n \"branch\": branch\n };\n\n _this.events.dispatchImmediately(\"hit\", event_1);\n }\n }); // TODO clean this up when it's disposed\n\n branch.interactions.events.on(\"keyup\", function (ev) {\n if (keyboard.isKey(ev.event, \"enter\")) {\n if (_this.events.isEnabled(\"enter\")) {\n var event_2 = {\n \"type\": \"enter\",\n \"event\": ev.event,\n \"target\": _this,\n \"branch\": branch\n };\n\n _this.events.dispatchImmediately(\"enter\", event_2);\n }\n }\n });\n }\n\n {\n var submenu_1 = this.getSubMenu(branch); // Add ENTER event to open sub-menus\n\n if (submenu_1 != null) {\n // TODO clean this up when it's disposed\n branch.interactions.events.on(\"keyup\", function (ev) {\n if (keyboard.isKey(ev.event, \"enter\")) {\n // This is item has sub-menu, activate the first child on ENTER\n _this.selectBranch(submenu_1[0]); // Attempt to set focus\n\n\n _this.setFocus(submenu_1[0]);\n }\n });\n branch.interactions.events.on(\"hit\", function (ev) {\n _this.selectBranch(branch);\n });\n }\n } // Add events\n // TODO clean this up when it's disposed\n\n branch.interactions.events.on(\"over\", function (ev) {\n if (ev.pointer.touch) {\n // Cancel pending menu closure\n _this._ignoreNextClose = true;\n }\n\n _this.selectBranch(branch);\n\n if (_this.events.isEnabled(\"over\")) {\n var event_3 = {\n \"type\": \"over\",\n \"event\": ev.event,\n \"target\": _this,\n \"branch\": branch\n };\n\n _this.events.dispatchImmediately(\"over\", event_3);\n }\n }); // TODO clean this up when it's disposed\n\n branch.interactions.events.on(\"out\", function (ev) {\n if (_this.isDisposed()) {\n return;\n }\n\n if (!ev.pointer.touch) {\n _this.delayUnselectBranch(branch);\n }\n\n if (_this.events.isEnabled(\"out\")) {\n var event_4 = {\n \"type\": \"out\",\n \"event\": ev.event,\n \"target\": _this,\n \"branch\": branch\n };\n\n _this.events.dispatchImmediately(\"out\", event_4);\n }\n }); // TODO clean this up when it's disposed\n\n branch.interactions.events.on(\"focus\", function (ev) {\n _this.selectBranch(branch);\n }); // TODO clean this up when it's disposed\n\n branch.interactions.events.on(\"blur\", function (ev) {\n _this.delayUnselectBranch(branch);\n }); // Increment level\n\n var local_level = level + 1; // Has sub-menu?\n\n if (branch.menu) {\n var submenu = this.createMenuElement(local_level);\n branch.submenuElement = submenu;\n\n for (var len = branch.menu.length, i = 0; i < len; i++) {\n var ascendants = new List();\n branch.menu[i].ascendants = ascendants;\n\n if (branch.ascendants.length) {\n ascendants.copyFrom(branch.ascendants);\n }\n\n ascendants.push(branch);\n this.drawBranch(submenu, branch.menu[i], local_level);\n } // Sub-menu is empty (all items are not supported)\n // Do not draw this menu item at all\n\n\n if (submenu.innerHTML == \"\") {\n return;\n }\n\n element.appendChild(submenu);\n } // Should this item be hidden?\n\n\n if (branch.hidden) {\n this.hideBranch(branch);\n } // Add id?\n\n\n if (branch.id) {\n element.setAttribute(\"id\", branch.id);\n } // Background color?\n\n\n if (branch.color) {\n element.style.backgroundColor = branch.color.hex;\n } // Append to container\n\n\n container.appendChild(element);\n };\n /**\r\n * Creates a menu element to hold its elements in. Usually it's an `
    `\r\n * tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @return HTML element reference\r\n */\n\n\n ExportMenu.prototype.createMenuElement = function (level) {\n var element = document.createElement(this.menuTag);\n element.className = this.getMenuItemClass(level); // Accessibility\n\n if (level === 0) {\n element.setAttribute(\"role\", \"menubar\");\n } else {\n element.setAttribute(\"role\", \"menu\");\n }\n\n return element;\n };\n /**\r\n * Generates a class name for the menu element based on its nesting level.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @return Class name(s)\r\n */\n\n\n ExportMenu.prototype.getMenuItemClass = function (level) {\n var className = this.classPrefix + \"-menu \" + this.classPrefix + \"-menu-level-\" + level;\n\n if (level === 0) {\n className += \" \" + this.classPrefix + \"-menu-root \" + this.classPrefix + \"-\" + this.align + \" \" + this.classPrefix + \"-\" + this.verticalAlign;\n }\n\n return this.adapter.apply(\"menuClass\", {\n className: className,\n level: level\n }).className;\n };\n /**\r\n * Creates menu item. Usually `
  • ` tag. Its label and sub-elements will go\r\n * into this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @param type Type of the menu item\r\n * @return HTML element reference\r\n */\n\n\n ExportMenu.prototype.createItemElement = function (level, type) {\n var element = document.createElement(this.itemTag);\n var className = this.classPrefix + \"-item \" + this.classPrefix + \"-item-level-\" + level + \" \" + this.classPrefix + \"-item-\" + (type || \"blank\");\n element.className = this.adapter.apply(\"itemClass\", {\n className: className,\n level: level,\n type: type\n }).className;\n element.setAttribute(\"role\", \"menuitem\");\n element.setAttribute(\"tabindex\", this.tabindex.toString());\n return element;\n };\n /**\r\n * Creates a \"label\" part of the menu item. It could be text or any HTML\r\n * content.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @param type Type of the menu item\r\n * @return An HTML Element\r\n */\n\n\n ExportMenu.prototype.createLabelElement = function (level, type) {\n var element = document.createElement(this.labelTag);\n var className = this.classPrefix + \"-label \" + this.classPrefix + \"-label-level-\" + level + \" \" + this.classPrefix + \"-item-\" + (type || \"blank\");\n\n if (this.typeClickable(type)) {\n className += \" \" + this.classPrefix + \"-clickable\";\n }\n\n element.className = this.adapter.apply(\"labelClass\", {\n className: className,\n level: level,\n type: type\n }).className; // Accessible navigation\n //element.setAttribute(\"tabindex\", this.tabindex.toString());\n //element.setAttribute(\"role\", \"menuitem\");\n\n return element;\n };\n /**\r\n * Creates a \"icon\" part of the menu item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @param type Type of the menu item\r\n * @return An HTML Element\r\n */\n\n\n ExportMenu.prototype.createIconElement = function (level, type) {\n var element = document.createElement(this.iconTag);\n var className = this.classPrefix + \"-icon \" + this.classPrefix + \"-icon-level-\" + level + \" \" + this.classPrefix + \"-item-\" + (type || \"blank\");\n\n if (this.typeClickable(type)) {\n className += \" \" + this.classPrefix + \"-clickable\";\n }\n\n element.className = this.adapter.apply(\"labelClass\", {\n className: className,\n level: level,\n type: type\n }).className; // Accessible navigation\n\n element.setAttribute(\"tabindex\", this.tabindex.toString());\n element.setAttribute(\"role\", \"menuitem\");\n return element;\n };\n /**\r\n * Creates a a custom element out of raw HTML.\r\n *\r\n * @ignore Exclude from docs\r\n * @param level Current nesting level\r\n * @param type Type of the menu item\r\n * @return An HTML Element\r\n */\n\n\n ExportMenu.prototype.createSvgElement = function (level, type, svg) {\n var parser = new DOMParser();\n var element = parser.parseFromString(svg, \"image/svg+xml\").documentElement;\n var className = this.classPrefix + \"-icon \" + this.classPrefix + \"-icon-level-\" + level + \" \" + this.classPrefix + \"-item-\" + (type || \"blank\");\n\n if (this.typeClickable(type)) {\n className += \" \" + this.classPrefix + \"-clickable\";\n }\n\n element.setAttribute(\"class\", this.adapter.apply(\"labelClass\", {\n className: className,\n level: level,\n type: type\n }).className); // Accessible navigation\n\n element.setAttribute(\"tabindex\", this.tabindex.toString());\n element.setAttribute(\"role\", \"menuitem\");\n return element;\n };\n /**\r\n * Destroys the menu and all its elements.\r\n */\n\n\n ExportMenu.prototype.dispose = function () {\n if (!this._disposed) {\n _super.prototype.dispose.call(this);\n\n if (this._element && this._element.parentNode) {\n this._element.parentNode.removeChild(this._element);\n }\n }\n };\n /**\r\n * Checks whether menu item type is supposed to be clickable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param type Menu item type\r\n * @return Is clickable?\r\n */\n\n\n ExportMenu.prototype.typeClickable = function (type) {\n return $type.hasValue(type);\n };\n /**\r\n * Checks whether menu item has any sub-items.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch A menu item\r\n * @return Has sub-items?\r\n */\n\n\n ExportMenu.prototype.hasSubMenu = function (branch) {\n return branch.menu && branch.menu.length ? true : false;\n };\n /**\r\n * Returns sub-items (if they exist).\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch A menu item\r\n * @return Submenus\r\n */\n\n\n ExportMenu.prototype.getSubMenu = function (branch) {\n if (branch.menu && branch.menu.length) {\n return branch.menu;\n }\n };\n /**\r\n * Generates and returns an applicable label to be used for screen readers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item A menu item instance\r\n * @param label Current label\r\n * @return Reader text\r\n */\n\n\n ExportMenu.prototype.getReaderLabel = function (branch, label) {\n // Strip any HTML from the label\n label = $utils.stripTags(label); // Add textual note if the branch is clickable\n\n if (branch.ascendants.length == 0) {\n label = label == \"...\" ? this.language.translate(\"Export\") : label;\n label += \" [\" + this.language.translate(\"Press ENTER or use arrow keys to navigate\") + \"]\";\n } else if (this.hasSubMenu(branch)) {\n label += \" [\" + this.language.translate(\"Click, tap or press ENTER to open\") + \"]\";\n } else if (branch.type == \"print\") {\n label = this.language.translate(\"Click, tap or press ENTER to print.\");\n } else if (this.typeClickable(branch.type)) {\n label = this.language.translate(\"Click, tap or press ENTER to export as %1.\", undefined, label);\n }\n\n return this.adapter.apply(\"rederLabel\", {\n label: label,\n branch: branch\n }).label;\n };\n\n Object.defineProperty(ExportMenu.prototype, \"container\", {\n /**\r\n * @return Container\r\n */\n get: function get() {\n return this._container;\n },\n\n /**\r\n * Getters and setters\r\n */\n\n /**\r\n * An HTML container to place the Menu in.\r\n *\r\n * A container must be an HTML element, because menu itself is HTML, and\r\n * cannot be placed into SVG.\r\n *\r\n * @param container Reference to container element\r\n * @todo Check if menu is already build. If it is, just move it to a new container\r\n */\n set: function set(container) {\n this._container = container;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"items\", {\n /**\r\n * @return Menu items\r\n */\n get: function get() {\n return this._items;\n },\n\n /**\r\n * A list of menu items. Can be nested.\r\n *\r\n * @param items Menu items\r\n */\n set: function set(items) {\n this._items = items;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"tag\", {\n /**\r\n * Sets main menu tag to place menu in.\r\n *\r\n * This also sets up how menu items are built.\r\n *\r\n * If you set this to \"ul\", menu items will be wrapped into `
  • ` tags.\r\n *\r\n * If set to \"div\", menu items will be wrapped in `
    ` tags.\r\n *\r\n * @default \"ul\"\r\n * @param tag Tag to use for menu\r\n */\n set: function set(tag) {\n this._menuTag = tag;\n this._itemTag = tag == \"ul\" ? \"li\" : \"div\";\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"menuTag\", {\n /**\r\n * Returns current menu tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Menu tag (item that contains sub-items)\r\n */\n get: function get() {\n return this.adapter.apply(\"menuTag\", {\n tag: this._menuTag\n }).tag;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"itemTag\", {\n /**\r\n * Returns tag to wrap items into.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Item tag\r\n */\n get: function get() {\n return this.adapter.apply(\"itemTag\", {\n tag: this._itemTag\n }).tag;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"labelTag\", {\n /**\r\n * Returns menu label tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Label tag\r\n */\n get: function get() {\n return this.adapter.apply(\"labelTag\", {\n tag: this._labelTag\n }).tag;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"iconTag\", {\n /**\r\n * Returns icon tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Icon tag\r\n */\n get: function get() {\n return this.adapter.apply(\"iconTag\", {\n tag: this._iconTag\n }).tag;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"align\", {\n /**\r\n * @return Horizontal alignment\r\n */\n get: function get() {\n return this.adapter.apply(\"align\", {\n align: this._align\n }).align;\n },\n\n /**\r\n * A horizontal alignment for the menu placement.\r\n *\r\n * @param value Horizontal alignment\r\n */\n set: function set(value) {\n this._align = value;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"verticalAlign\", {\n /**\r\n * @return Vertical alignment\r\n */\n get: function get() {\n return this.adapter.apply(\"verticalAlign\", {\n verticalAlign: this._verticalAlign\n }).verticalAlign;\n },\n\n /**\r\n * A vertical alignment for the menu placement.\r\n *\r\n * @param value Vertical alignment\r\n */\n set: function set(value) {\n this._verticalAlign = value;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"classPrefix\", {\n /**\r\n * @return Class name prefix\r\n */\n get: function get() {\n return this.adapter.apply(\"classPrefix\", {\n classPrefix: this._classPrefix\n }).classPrefix;\n },\n\n /**\r\n * Class name prefix.\r\n *\r\n * @default \"amexport\"\r\n * @param value Class name prefix\r\n */\n set: function set(value) {\n this._classPrefix = value;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"defaultStyles\", {\n /**\r\n * @return Should ExportMenu load its own CSS?\r\n */\n get: function get() {\n return this.adapter.apply(\"defaultStyles\", {\n defaultStyles: this._defaultStyles\n }).defaultStyles;\n },\n\n /**\r\n * Indicates whether [[ExportMenu]] should load external CSS to style itself.\r\n *\r\n * If set to `false`, the menu will not be styled, and will rely on some\r\n * external CSS.\r\n *\r\n * @default true\r\n * @param Should ExportMenu load its own CSS?\r\n */\n set: function set(value) {\n if (this._defaultStyles != value) {\n this._defaultStyles = value;\n\n if (value) {\n this.loadDefaultCSS();\n }\n }\n\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Loads the default CSS.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n ExportMenu.prototype.loadDefaultCSS = function () {\n this._disposers.push(exportCSS($dom.getShadowRoot(this.container), this.classPrefix));\n\n if (this._element) {\n this._element.style.display = \"\";\n }\n };\n\n Object.defineProperty(ExportMenu.prototype, \"tabindex\", {\n /**\r\n * @return Tab index\r\n */\n get: function get() {\n return this.adapter.apply(\"tabindex\", {\n tabindex: this._tabindex\n }).tabindex;\n },\n\n /**\r\n * A tab index for the menu.\r\n *\r\n * Tab index will influence the order in which elements on the chart and\r\n * the whole page are selected when pressing TAB key.\r\n *\r\n * @param value Tab index\r\n */\n set: function set(value) {\n this._tabindex = value;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExportMenu.prototype, \"language\", {\n /**\r\n * @return A [[Language]] instance to be used\r\n */\n get: function get() {\n var _this = this;\n\n var language = this._language.get();\n\n if (language == null) {\n language = new Language(); // TODO code duplication with `set language()`\n\n this._language.set(language, language.events.on(\"localechanged\", function (ev) {\n _this.invalidate();\n }));\n }\n\n return language;\n },\n\n /**\r\n * A [[Language]] instance.\r\n *\r\n * @param value An instance of [[Language]]\r\n */\n set: function set(value) {\n var _this = this;\n\n this._language.set(value, value.events.on(\"localechanged\", function (ev) {\n _this.invalidate();\n }));\n\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Controlling the menu\r\n */\n\n /**\r\n * Removes all active classes from menu items. Useful on touch devices and\r\n * keyboard navigation where open menu can be closed instantly by clicking or\r\n * tapping outside it.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n ExportMenu.prototype.close = function () {\n var _this = this;\n\n if (this.isDisposed()) {\n return;\n }\n\n if (this._ignoreNextClose) {\n this._ignoreNextClose = false;\n return;\n }\n\n if (this.closeOnClick) {\n this._element.style.pointerEvents = \"none\";\n setTimeout(function () {\n _this._element.style.pointerEvents = \"auto\";\n }, 100);\n }\n\n if (this._currentSelection) {\n this.setBlur(this._currentSelection);\n this._currentSelection = undefined;\n }\n\n if (this._element) {\n var items = this._element.getElementsByClassName(\"active\");\n\n for (var len = items.length, i = len - 1; i >= 0; i--) {\n if (items[i]) {\n $dom.removeClass(items[i], \"active\");\n }\n }\n }\n\n this.events.dispatchImmediately(\"closed\", {\n type: \"closed\",\n target: this\n });\n };\n /**\r\n * Selects a branch in the menu.\r\n *\r\n * Handles closing of currently open branch.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Branch to select\r\n */\n\n\n ExportMenu.prototype.selectBranch = function (branch) {\n var _this = this;\n\n if (this.isDisposed()) {\n return;\n } // Cancel previous closure\n\n\n if (branch.closeTimeout) {\n this.removeDispose(branch.closeTimeout);\n branch.closeTimeout = undefined;\n } // Add active class\n\n\n $dom.addClass(branch.element, \"active\"); // Set expanded\n\n if (branch.submenuElement) {\n branch.submenuElement.setAttribute(\"aria-expanded\", \"true\");\n } // Remove current selection\n\n\n if (this._currentSelection && this._currentSelection !== branch && this._currentSelection.ascendants) {\n $iter.each($iter.concat($iter.fromArray([this._currentSelection]), this._currentSelection.ascendants.iterator()), function (ascendant) {\n if (!branch.ascendants.contains(ascendant) && branch !== ascendant) {\n _this.unselectBranch(ascendant, true);\n }\n });\n } // Select and/or cancel timeout for current ascendants\n\n\n $iter.each(branch.ascendants.iterator(), function (ascendant) {\n if (ascendant.closeTimeout) {\n _this.removeDispose(ascendant.closeTimeout);\n\n ascendant.closeTimeout = undefined;\n }\n\n $dom.addClass(ascendant.element, \"active\");\n }); // Log current selection\n\n this._currentSelection = branch; // Invoke event\n\n if (this.events.isEnabled(\"branchselected\")) {\n var event_5 = {\n type: \"branchselected\",\n target: this,\n branch: branch\n };\n this.events.dispatchImmediately(\"branchselected\", event_5);\n }\n };\n /**\r\n * Unselects a branch. Also selects a branch one level up if necessary.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Branch to unselect\r\n * @param simple If `true`, only the branch will be unselected without selecting parent branch\r\n */\n\n\n ExportMenu.prototype.unselectBranch = function (branch, simple) {\n if (this.isDisposed()) {\n return;\n } // Remove active class\n\n\n $dom.removeClass(branch.element, \"active\"); // Set expanded\n\n if (branch.submenuElement) {\n branch.submenuElement.removeAttribute(\"aria-expanded\");\n } // Remove current selection\n\n\n if (this._currentSelection == branch) {\n this._currentSelection = undefined;\n } // Invoke event\n\n\n if (this.events.isEnabled(\"branchunselected\")) {\n var event_6 = {\n type: \"branchunselected\",\n target: this,\n branch: branch\n };\n this.events.dispatchImmediately(\"branchunselected\", event_6);\n }\n };\n /**\r\n * Delay unselection of a branch. This can still be cancelled in some other\r\n * place if the branch or its children regain focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Branch to unselect\r\n * @param simple If `true`, only the branch will be unselected without selecting parent branch\r\n */\n\n\n ExportMenu.prototype.delayUnselectBranch = function (branch, simple) {\n var _this = this;\n\n if (this.isDisposed()) {\n return;\n } // Schedule branch unselection\n\n\n if (branch.closeTimeout) {\n this.removeDispose(branch.closeTimeout);\n branch.closeTimeout = undefined;\n }\n\n branch.closeTimeout = this.setTimeout(function () {\n _this.unselectBranch(branch, simple);\n }, this.closeDelay); // Schedule unselection of all ascendants\n // In case focus went away from the export menu altogether, this will ensure\n // that all items will be closed.\n // In case we're jumping to other menu item, those delayed unselections will\n // be cancelled by `selectBranch`\n\n if (simple !== true && branch.ascendants) {\n $iter.each(branch.ascendants.iterator(), function (ascendant) {\n _this.delayUnselectBranch(ascendant, true);\n });\n }\n };\n /**\r\n * Navigates the menu based on which direction kayboard key was pressed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key A key that was pressed\r\n */\n\n\n ExportMenu.prototype.moveSelection = function (key) {\n if (this.isDisposed()) {\n return;\n } // Check if there's a current selection\n\n\n if (!this._currentSelection) {\n return;\n }\n\n var newSelection;\n\n if (key == \"up\") {\n // Try moving up in current menu list, or to the last item if already\n // at the top\n newSelection = this.getPrevSibling(this._currentSelection);\n } else if (key == \"down\") {\n // Try moving down in current menu list, or to the top item if already\n // at the bottom\n newSelection = this.getNextSibling(this._currentSelection);\n } else if (key == \"left\" && this.align == \"right\" || key == \"right\" && this.align == \"left\") {\n var menu = this.getSubMenu(this._currentSelection); // Go one level-deeper\n\n if (menu != null) {\n newSelection = menu[0];\n }\n } else if (key == \"right\" && this.align == \"right\" || key == \"left\" && this.align == \"left\") {\n // Go one level-deeper\n newSelection = this.getParentItem(this._currentSelection);\n }\n\n if (newSelection && newSelection !== this._currentSelection) {\n this.selectBranch(newSelection);\n this.setFocus(newSelection);\n this._currentSelection = newSelection;\n }\n };\n /**\r\n * Returns all siblings of a menu item, including this same menu item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item\r\n * @return List of sibling menu items\r\n */\n\n\n ExportMenu.prototype.getSiblings = function (branch) {\n var parent = this.getParentItem(branch);\n\n if (parent && parent.menu) {\n return parent.menu;\n } else {\n return [];\n }\n };\n /**\r\n * Returns menu items parent item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item\r\n * @return Parent menu item\r\n */\n\n\n ExportMenu.prototype.getParentItem = function (branch) {\n if (branch.ascendants && branch.ascendants.length) {\n return branch.ascendants.getIndex(branch.ascendants.length - 1);\n } else {\n return undefined;\n }\n };\n /**\r\n * Returns next sibling in the same menu branch. If there is no next sibling,\r\n * the first one is returned. If there is just one item, that item is\r\n * returned. Unsupported menu items are skipped.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item to search siblings for\r\n * @return Menu item\r\n */\n\n\n ExportMenu.prototype.getNextSibling = function (branch) {\n var siblings = this.getSiblings(branch);\n\n if (siblings.length > 1) {\n var next = siblings.indexOf(branch) + 1;\n next = siblings.length == next ? 0 : next;\n return siblings[next].unsupported ? this.getNextSibling(siblings[next]) : siblings[next];\n } else {\n return branch;\n }\n };\n /**\r\n * Returns previous sibling in the same menu branch. If there is no next\r\n * sibling, the first one is returned. If there is just one item, that item is\r\n * returned. Unsupported menu items are skipped.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item to search siblings for\r\n * @return Menu item\r\n */\n\n\n ExportMenu.prototype.getPrevSibling = function (branch) {\n var siblings = this.getSiblings(branch);\n\n if (siblings.length > 1) {\n var prev = siblings.indexOf(branch) - 1;\n prev = prev == -1 ? siblings.length - 1 : prev;\n return siblings[prev].unsupported ? this.getPrevSibling(siblings[prev]) : siblings[prev];\n } else {\n return branch;\n }\n };\n /**\r\n * Attempts to set focus on particular menu element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item\r\n */\n\n\n ExportMenu.prototype.setFocus = function (branch) {\n if (branch.interactions) {\n try {\n branch.interactions.element.focus();\n } catch (e) {// nothing\n }\n }\n };\n /**\r\n * Attempts to remove focus from the menu element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param branch Menu item\r\n */\n\n\n ExportMenu.prototype.setBlur = function (branch) {\n if (branch.interactions) {\n try {\n branch.interactions.element.blur();\n } catch (e) {// nothing\n }\n }\n };\n /**\r\n * Hides the whole branch of menu.\r\n *\r\n * @param branch branch\r\n */\n\n\n ExportMenu.prototype.hideBranch = function (branch) {\n branch.element.style.display = \"none\";\n };\n /**\r\n * Show the branch of menu.\r\n *\r\n * @param branch branch\r\n */\n\n\n ExportMenu.prototype.showBranch = function (branch) {\n branch.element.style.display = \"\";\n };\n\n Object.defineProperty(ExportMenu.prototype, \"element\", {\n /**\r\n * The main element o fthe menu - usually `
      `.\r\n *\r\n * @since 4.10.6\r\n * @return Menu element\r\n */\n get: function get() {\n return this._element;\n },\n enumerable: true,\n configurable: true\n });\n return ExportMenu;\n}(Validatable);\n\nexport { ExportMenu };","/**\r\n * A collection of network-related functions\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport * as $type from \"./Type\";\n/**\r\n * Loads an external file via its URL.\r\n *\r\n * Please note that this is an asynchronous function.\r\n *\r\n * It will not return the result, but rather a `Promise`.\r\n *\r\n * You can use the `await` notion, or `then()`.\r\n *\r\n * ```TypeScript\r\n * // Using await\r\n * let response = await Net.load( \"http://www.my.com/data.json\" );\r\n * console.log( response.response );\r\n *\r\n * // Using then()\r\n * Net.load( \"http://www.my.com/data.json\" ).then( ( response ) => {\r\n * console.log( response.response );\r\n * } );\r\n * ```\r\n * ```JavaScript\r\n * // Using then()\r\n * Net.load( \"http://www.my.com/data.json\" ).then( function( response ) {\r\n * console.log( response.response );\r\n * } );\r\n * ```\r\n *\r\n * @async\r\n * @param url URL for the file to load\r\n * @param target A target element that is requesting the net load\r\n * @param options Request options\r\n * @return Result (Promise)\r\n */\n\nexport function load(url, target, options) {\n return new Promise(function (success, error) {\n // Is return type Blob?\n var isBlob = $type.hasValue(options) && options.responseType == \"blob\"; // Create request and set up handlers\n\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function () {\n if (xhr.status === 200) {\n var response = void 0;\n var blob_1;\n\n if (isBlob) {\n blob_1 = xhr.response;\n readBlob(blob_1).then(function (response) {\n var output = {\n xhr: xhr,\n error: false,\n response: response,\n blob: blob_1,\n type: xhr.getResponseHeader(\"Content-Type\"),\n target: target\n };\n success(output);\n });\n return;\n } else {\n response = xhr.responseText || xhr.response;\n }\n\n var output = {\n xhr: xhr,\n error: false,\n response: response,\n blob: blob_1,\n type: xhr.getResponseHeader(\"Content-Type\"),\n target: target\n };\n success(output);\n } else {\n error({\n xhr: xhr,\n error: true,\n type: xhr.getResponseHeader(\"Content-Type\"),\n target: target\n });\n }\n };\n\n xhr.onerror = function () {\n error({\n xhr: xhr,\n error: true,\n type: xhr.getResponseHeader(\"Content-Type\"),\n target: target\n });\n }; // Open request\n\n\n xhr.open(\"GET\", url, true);\n\n if (options && options.withCredentials) {\n xhr.withCredentials = true;\n } // Process options\n\n\n if ($type.hasValue(options)) {\n if ($type.hasValue(options.requestHeaders)) {\n for (var i = 0; i < options.requestHeaders.length; i++) {\n var header = options.requestHeaders[i];\n xhr.setRequestHeader(header.key, header.value);\n }\n }\n\n if ($type.hasValue(options.responseType)) {\n xhr.responseType = options.responseType;\n }\n } // Send request\n\n\n xhr.send();\n });\n}\n/**\r\n * Returns textual representation of a Blob object.\r\n *\r\n * @param blob Target blob\r\n * @return Text promise\r\n */\n\nexport function readBlob(blob) {\n return new Promise(function (success, error) {\n var reader = new FileReader();\n\n reader.onload = function (event) {\n success(reader.result);\n };\n\n reader.onerror = function (e) {\n error(e);\n };\n\n reader.readAsText(blob);\n });\n}","/**\r\n * This is the main class that encapsulates every object on the chart.\r\n *\r\n * If it's an element that is to be displayed on the screen at some point, its\r\n * class must extend [[Sprite]] class.\r\n */\nimport { __extends, __values } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { SpriteState } from \"./SpriteState\";\nimport { SpriteEventDispatcher } from \"./SpriteEvents\";\nexport { SpriteEventDispatcher };\nimport { BaseObjectEvents } from \"./Base\";\nimport { Adapter, globalAdapter } from \"./utils/Adapter\";\nimport { Dictionary, DictionaryTemplate, DictionaryDisposer } from \"./utils/Dictionary\";\nimport { ListDisposer, List } from \"./utils/List\";\nimport { MultiDisposer, Disposer, MutableValueDisposer } from \"./utils/Disposer\";\nimport { Animation, AnimationDisposer } from \"./utils/Animation\";\nimport { getGhostPaper } from \"./rendering/Paper\";\nimport { Container } from \"./Container\";\nimport { Pattern } from \"./rendering/fills/Pattern\";\nimport { LinearGradient } from \"./rendering/fills/LinearGradient\";\nimport { RadialGradient } from \"./rendering/fills/RadialGradient\";\nimport { Color, color, toColor } from \"./utils/Color\";\nimport { getInteraction } from \"./interaction/Interaction\";\nimport { MouseCursorStyle } from \"./interaction/Mouse\";\nimport { options } from \"./Options\";\nimport { registry } from \"./Registry\";\nimport { NumberFormatter } from \"./formatters/NumberFormatter\";\nimport { DateFormatter } from \"./formatters/DateFormatter\";\nimport { DurationFormatter } from \"./formatters/DurationFormatter\";\nimport { getTextFormatter } from \"./formatters/TextFormatter\";\nimport { Language } from \"./utils/Language\";\nimport { Export } from \"./export/Export\";\nimport * as $utils from \"./utils/Utils\";\nimport * as $math from \"./utils/Math\";\nimport * as $strings from \"./utils/Strings\";\nimport * as $array from \"./utils/Array\";\nimport * as $object from \"./utils/Object\";\nimport * as $type from \"./utils/Type\";\nimport * as $iter from \"./utils/Iterator\";\nimport { system } from \"./System\";\nimport { Percent, percent } from \"./utils/Percent\";\n/**\r\n * Defines list ofvisual properties\r\n */\n\nexport var visualProperties = [\"fill\", \"fillOpacity\", \"stroke\", \"strokeOpacity\", \"strokeWidth\", \"strokeDasharray\", \"strokeDashoffset\", \"strokeLinecap\", \"strokeLinejoin\"]; // do not add opacity here, as it is used for showing/hiding\n\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Sprite represents any displayable element.\r\n *\r\n * This is the main class that encapsulates every object on the chart.\r\n *\r\n * If it's an element that is to be displayed on the screen at some point, its\r\n * class must extend [[Sprite]] class.\r\n *\r\n * [[Sprite]] class represents the a hierarchical structure. Every object that\r\n * extends [[Sprite]] can have children, that would inherit their properties,\r\n * such as language, formatters, etc.\r\n *\r\n * @see {@link SpriteState}\r\n * @see {@link ISpriteEvents} for a list of available events\r\n * @see {@link ISpriteAdapters} for a list of available Adapters\r\n *\r\n * @todo Review child elements that need to go into `_disposers`\r\n * @important\r\n */\n\nvar Sprite =\n/** @class */\nfunction (_super) {\n __extends(Sprite, _super);\n /**\r\n * Constructor:\r\n * * Creates initial node\r\n * * Sets default properties\r\n * * Creates required default states\r\n * * Inits accessibility\r\n */\n\n\n function Sprite() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Holds values for Sprite's properties.\r\n */\n\n\n _this.properties = {};\n /**\r\n * @ignore\r\n */\n\n _this._eventDispatcher = new SpriteEventDispatcher(_this);\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this._bindings = {};\n /**\r\n * Holds indicator if this Sprite is a \"template\" to be used for creating\r\n * other Sprites from and should not be treated as full-fledged element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._isTemplate = false;\n _this._isPath = false;\n /**\r\n * Holds indicator whether this sprite was already initialized.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._inited = false;\n /**\r\n * Holds indicator whether this sprite was already initialized and ready.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._ready = false;\n /**\r\n * If `sprite.hide()` is called and we have \"hidden\" state and\r\n * `transitionDuration > 0`, we set `isHiding` flag to `true` in order to\r\n * avoid restarting animations in case `hide()` method is called multiple\r\n * times.\r\n */\n\n _this.isHiding = false;\n /**\r\n * If `sprite.hide()` is called, we set isHidden to true when sprite is hidden.\r\n * This was added becaus hidden state might have visibility set to true and so\r\n * there would not be possible to find out if a sprite is technically hidden or not.\r\n */\n\n _this._isHidden = false;\n /**\r\n * This property indicates if Sprite is currently being revealed from hidden\r\n * state. This is used to prevent multiple calls to `sprite.show()` to\r\n * restart reveal animation. (if enabled)\r\n */\n\n _this.isShowing = false;\n /**\r\n * Indicates if this element is a standalone instance. A \"standalone\r\n * instance\" means this is a autonomous object which maintains its own\r\n * set of controls like Preloader, Export, etc.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.isStandaloneInstance = false;\n /**\r\n * Indicates if togglable Sprite is currently active (toggled on).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._isActive = false;\n /**\r\n * A Sprite element to use as a mask for this Sprite.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._mask = new MutableValueDisposer();\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this._positionPrecision = 3;\n /**\r\n * An instance of [[Language]].\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._language = new MutableValueDisposer();\n /**\r\n * Holds [[Export]] object.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._exporting = new MutableValueDisposer();\n /**\r\n * Should this Sprite be included when exporting?\r\n */\n\n _this._exportable = true;\n /**\r\n * Defines bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._bbox = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n /**\r\n * Indicates if this element is invalid and should be re-validated (redrawn).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.invalid = false;\n /**\r\n * Indicates if this elements position is invalid and should be repositioned\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.positionInvalid = false;\n /**\r\n * A collection of key/value pairs that can be used to bind specific Sprite\r\n * properties to [[DataItem]].\r\n *\r\n * For example: `fill` property can be bound to `myCustomColor` field in\r\n * DataItem. The Sprite will automatically get the value for `fill` from its\r\n * DataItem.\r\n *\r\n * Can be set for each [[SpriteState]] individually to override default\r\n * bindings.\r\n *\r\n * @see {@link SpriteState}\r\n */\n\n _this.propertyFields = {};\n /**\r\n * Specifies if property changes on this object should be propagated to the\r\n * objects cloned from this object.\r\n *\r\n * This setting affects property changes *after* cloning, since at the moment\r\n * of cloning all of properties from source object are copied to the clone\r\n * anyway.\r\n *\r\n * @default false\r\n */\n\n _this.applyOnClones = false; // unrotated unscaled\n\n _this._measuredWidthSelf = 0;\n _this._measuredHeightSelf = 0; // read only, sprite extreme coordinates\n\n /**\r\n * @ignore\r\n */\n\n _this.maxLeft = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxRight = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxTop = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxBottom = 0; // not rotated and not scaled\n\n /**\r\n * @ignore\r\n */\n\n _this.maxLeftSelf = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxRightSelf = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxTopSelf = 0;\n /**\r\n * @ignore\r\n */\n\n _this.maxBottomSelf = 0;\n _this._isDragged = false;\n _this._isResized = false;\n /**\r\n * @deprecated Moved to [[SpriteProperties]]\r\n */\n\n _this._disabled = false;\n _this._internalDisabled = false;\n _this._updateDisabled = false;\n _this._internalDefaultsApplied = false;\n /**\r\n * Time in milliseconds after which rollout event happens when user rolls-out of the sprite. This helps to avoid flickering in some cases.\r\n */\n\n _this.rollOutDelay = 0;\n /**\r\n * This flag is set to `true` for the initial sprite you create and place\r\n * to the div so that we could clear all additional\r\n * sprites/containers when this sprite is disposed.\r\n *\r\n * @ignore\r\n */\n\n _this.isBaseSprite = false;\n /**\r\n * Indicates whether this sprite should be cloned when cloning its parent\r\n * container. We set this to `false` in those cases when a sprite is created\r\n * by the class, so that when cloning a duplicate sprite would not appear.\r\n */\n\n _this.shouldClone = true;\n /**\r\n * A read-only flag which indicates if a sprite has completed its initial\r\n * animation (if `showOnInit = true`).\r\n *\r\n * In case `showOnInit = false`, `appeared` is set to `true` on init.\r\n *\r\n * @readonly\r\n */\n\n _this.appeared = false;\n /**\r\n * [ex description]\r\n *\r\n * @todo Description\r\n * @ignore\r\n */\n\n _this.ex = 0;\n /**\r\n * [ey description]\r\n *\r\n * @todo Description\r\n * @ignore\r\n */\n\n _this.ey = 0;\n /**\r\n * Indicates if the sprite can be moved around when resizing it with two fingers (will only work if draggable = false)\r\n * @ignore\r\n */\n\n _this.dragWhileResize = false;\n /**\r\n * @ignore\r\n */\n\n _this.measureFailed = false;\n /**\r\n * If this flag is set to true, calling show() will not reveal the sprite.\r\n *\r\n * @ignore\r\n */\n\n _this.preventShow = false;\n /**\r\n * When cloning a sprite, if the template has it's own tooltip assigned, this tooltip is also cloned by default.\r\n * This is not good for cpu and sometimes you might only need one single tooltip for all clones. Set this to false in order not to clone tooltip.\r\n */\n\n _this.cloneTooltip = true;\n _this.className = \"Sprite\";\n\n _this._disposers.push(_this._eventDispatcher); // Generate a unique ID\n\n\n $utils.used(_this.uid); // Create SVG group to hold everything in\n\n _this.group = _this.paper.addGroup(\"g\"); // Set defaults\n // it is better to set defauls like this in order to save invaliation calls and events\n\n _this.setPropertyValue(\"scale\", 1);\n\n _this.setPropertyValue(\"rotation\", 0);\n\n _this.setPropertyValue(\"align\", \"none\");\n\n _this.setPropertyValue(\"valign\", \"none\");\n\n _this.setPropertyValue(\"pixelPerfect\", false);\n\n _this.setPropertyValue(\"visible\", true);\n\n _this.setPropertyValue(\"tooltipPosition\", \"fixed\");\n\n _this.setPropertyValue(\"verticalCenter\", \"none\");\n\n _this.setPropertyValue(\"horizontalCenter\", \"none\");\n\n _this.setPropertyValue(\"tooltipX\", percent(50));\n\n _this.setPropertyValue(\"tooltipX\", percent(50));\n\n _this.setPropertyValue(\"marginTop\", 0);\n\n _this.setPropertyValue(\"marginBottom\", 0);\n\n _this.setPropertyValue(\"marginLeft\", 0);\n\n _this.setPropertyValue(\"marginRight\", 0);\n\n _this.setPropertyValue(\"dx\", 0);\n\n _this.setPropertyValue(\"dy\", 0);\n\n _this.setPropertyValue(\"paddingTop\", 0);\n\n _this.setPropertyValue(\"paddingBottom\", 0);\n\n _this.setPropertyValue(\"paddingRight\", 0);\n\n _this.setPropertyValue(\"paddingLeft\", 0);\n\n _this.setPropertyValue(\"togglable\", false);\n\n _this.setPropertyValue(\"hidden\", false);\n\n _this.setPropertyValue(\"urlTarget\", \"_self\");\n\n _this.setPropertyValue(\"alwaysShowTooltip\", false);\n\n _this.setPropertyValue(\"showTooltipOn\", \"hover\");\n\n _this._prevMeasuredWidth = 0;\n _this._prevMeasuredHeight = 0;\n _this._measuredWidth = 0;\n _this._measuredHeight = 0;\n _this._isMeasured = true; // Invalidate the Sprite so that renderer knows it needs to be drawn\n\n _this.invalidate(); //this.states.create(\"default\").properties.opacity = 1;\n // Apply the theme\n\n\n _this.applyTheme(); //this._disposers.push(this._clickable);\n // Decorate adapter with events so that we can apply its settings whenever\n // it is modified\n // @todo Think what to do here. We can't just apply the adapter value to\n // property since not all of those are for properties. Commented out for\n // now.\n\n /*this.adapter.events.on(\"inserted\", (ev: any) => {\r\n (this)[ev.newValue.key] = (this)[ev.newValue.key];\r\n });\r\n this.adapter.events.on(\"removed\", (ev: any) => {\r\n (this)[ev.newValue.key] = (this)[ev.newValue.key];\r\n });*/\n // Add disposable dependencies to `_disposers` so they are automatically\n // disposed of when this object is disposed\n\n\n _this._disposers.push(_this.events);\n\n _this._disposers.push(_this.group);\n\n _this._disposers.push(_this._mask);\n\n _this._disposers.push(_this._language);\n\n _this._disposers.push(_this._exporting); //this._disposers.push(this._parent);\n //this._disposers.push(this._modal);\n\n\n _this._disposers.push(new Disposer(function () {\n $object.each(_this._bindings, function (key, value) {\n value.dispose();\n });\n }));\n\n _this.setPropertyValue(\"interactionsEnabled\", true);\n\n return _this;\n }\n\n Object.defineProperty(Sprite.prototype, \"events\", {\n /**\r\n * Event dispatcher.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/event-listeners/} for more info about Events\r\n */\n get: function get() {\n return this._eventDispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"adapter\", {\n /**\r\n * Holds Adapter.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/adapters/} for more info about Adapters\r\n */\n get: function get() {\n if (!this._adapterO) {\n this._adapterO = new Adapter(this);\n }\n\n return this._adapterO;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * ==========================================================================\r\n * ELEMENT VALIDATION, INIT, AND DRAWING STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Applies properties from all assigned themes.\r\n *\r\n * We do this here so that we can apply class names as well.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype.applyTheme = function () {\n _super.prototype.applyTheme.call(this);\n\n if (options.autoSetClassName) {\n this.setClassName();\n }\n };\n /**\r\n * Returns theme(s) used by this object either set explicitly on this\r\n * element, inherited from parent, or inherited from [[System]].\r\n *\r\n * @return An array of theme references\r\n */\n\n\n Sprite.prototype.getCurrentThemes = function () {\n var themes = this._themes;\n\n if (themes) {\n return themes;\n } else {\n var parent_1 = this._parent;\n\n if (parent_1) {\n return parent_1.getCurrentThemes();\n } else {\n return registry.themes;\n }\n }\n };\n /**\r\n * Called just before element's validation, this function allows setting\r\n * defaults.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.applyInternalDefaults = function () {\n // Nothing here, but extending classes might override this function\n // so that they can set their defaults\n this._internalDefaultsApplied = true;\n };\n /**\r\n * Invalidates element.\r\n *\r\n * Object will be redrawn during the next update cycle.\r\n *\r\n * Please note that in most cases elements will auto-invalidate when needed. If\r\n * everything works, DO NOT use this method. Use it only if some changes do\r\n * not take otherwise.\r\n */\n\n\n Sprite.prototype.invalidate = function () {\n if (this.disabled || this._isTemplate || this.__disabled) {\n return;\n } // We no longer reset this on each invalidate, so that they are applied\n // only once, and do not overwrite user-defined settings\n //this._internalDefaultsApplied = false;\n\n\n if (!this.invalid) {\n this.invalid = true;\n registry.addToInvalidSprites(this);\n system.requestFrame();\n }\n };\n /**\r\n * Validates element:\r\n * * Triggers events\r\n * * Redraws the element\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.validate = function () {\n this.dispatchImmediately(\"beforevalidated\"); // prevents from drawing if topparent is 0x0\n\n /*\r\n let topParent = this.topParent;\r\n if (topParent) {\r\n if (!topParent.maxWidth || !topParent.maxHeight) {\r\n this._disposers.push(topParent.events.once(\"maxsizechanged\", this.invalidate, this));\r\n }\r\n }*/\n // Set internal defaults\n\n if (!this._internalDefaultsApplied) {\n this.applyInternalDefaults();\n }\n\n this.beforeDraw();\n this.draw();\n this.invalid = false;\n registry.removeFromInvalidSprites(this);\n this.afterDraw();\n };\n /**\r\n * Invalidates element's position.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.invalidatePosition = function () {\n if (this.disabled || this._isTemplate) {\n return;\n }\n\n if (!this.positionInvalid) {\n this.positionInvalid = true;\n registry.addToInvalidPositions(this);\n system.requestFrame();\n }\n };\n /**\r\n * Transforms the element.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.validatePosition = function () {\n var pixelX = this.pixelX;\n var pixelY = this.pixelY;\n var dx = this.dx;\n var dy = this.dy;\n var x = pixelX + dx;\n var y = pixelY + dy;\n\n if (this._updateDisabled) {\n if (this._internalDisabled) {\n this.group.attr({\n \"display\": \"none\"\n });\n } else {\n if (!this.disabled) {\n this.removeSVGAttribute(\"display\");\n }\n }\n\n this._updateDisabled = false;\n }\n\n var sizeChanged = this.measure(); //if (!this.invalid) {\n\n var prevGroupTransform = this.group.transformString;\n this.group.moveTo({\n x: x,\n y: y\n });\n this.group.rotation = this.rotation;\n\n if (this.nonScaling) {\n this.group.scale = this.scale / this.globalScale;\n } else {\n this.group.scale = this.scale;\n }\n\n if (prevGroupTransform != this.group.transformString || sizeChanged) {\n // not yet sure, this is to avoid many transforms=>container layout invalidation on initial buid\n if (prevGroupTransform == null) {\n this.dispatch(\"transformed\");\n } else {\n this.dispatchImmediately(\"transformed\");\n } // TODO clear existing positionchanged dispatches ?\n\n\n this.dispatch(\"positionchanged\");\n\n if (this.showTooltipOn == \"hit\" || this.showTooltipOn == \"always\") {\n this.updateTooltipPosition();\n }\n } //}\n // it might happen that x and y changed again, so we only remove if they didn't\n\n\n if (pixelX + dx == x && pixelY + dy == y) {\n registry.removeFromInvalidPositions(this);\n this.positionInvalid = false;\n }\n\n var maskRectangle = this._maskRectangle; // todo: verify this\n\n if (maskRectangle) {\n this._clipElement.moveTo({\n x: maskRectangle.x - pixelX,\n y: maskRectangle.y - pixelY\n });\n }\n };\n /**\r\n * A placeholder method that is called **before** element begins to be drawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.beforeDraw = function () {};\n /**\r\n * A placeholder method that draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.draw = function () {};\n /**\r\n * A placeholder method that is called **after** element finishes drawing\r\n * itself.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.afterDraw = function () {\n var e_1, _a;\n\n if (this.isMeasured || this.horizontalCenter !== \"none\" || this.verticalCenter !== \"none\") {\n this.measureElement();\n } //this.applyMask();\n\n\n if (!this._inited) {\n if (this._adapterO) {\n try {\n // used to be applySVGAttrbutes here, this is more efficient\n for (var _b = __values(this._adapterO.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n\n switch (key) {\n case \"mask\":\n case \"fill\":\n case \"opacity\":\n case \"fillOpacity\":\n case \"stroke\":\n case \"strokeOpacity\":\n case \"strokeWidth\":\n case \"shapeRendering\":\n case \"strokeDasharray\":\n case \"strokeDashoffset\":\n case \"strokeLinecap\":\n case \"strokeLinejoin\":\n case \"textDecoration\":\n case \"fontSize\":\n case \"fontFamily\":\n case \"fontWeight\":\n //case \"focusable\":\n //case \"tabindex\":\n //case \"role\":\n this[key] = this[key];\n break;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n\n this.applyFilters();\n this.visible = this.visible;\n this.interactionsEnabled = this.getPropertyValue(\"interactionsEnabled\"); // can't use .interactionsEnabled as it get's parent's\n\n this._inited = true;\n\n if (!this.showOnInit) {\n this.appeared = true;\n }\n\n if (this.hidden) {\n this.hide(0);\n }\n\n this.applyMask();\n this.dispatch(\"validated\");\n this.dispatch(\"inited\");\n this.dispatchReady();\n } else {\n this.dispatch(\"validated\");\n }\n\n if (this.showTooltipOn == \"always\") {\n if (this.visible && !this.disabled && !this.__disabled) {\n this.showTooltip();\n } else {\n this.hideTooltip(0);\n }\n }\n };\n /**\r\n * Dispatches `\"ready\"` event. Sprite dispatches it right after `\"inited\"` event.\r\n *\r\n * @ignore\r\n */\n\n\n Sprite.prototype.dispatchReady = function () {\n if (!this.isReady()) {\n this._ready = true;\n this.dispatch(\"ready\");\n }\n };\n /**\r\n * Triggers a re-initialization of this element.\r\n *\r\n * Will result in complete redrawing of the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.reinit = function () {\n this._inited = false;\n this.setState(this.defaultState);\n this.invalidate();\n };\n /**\r\n * Handles the situation where parent element is resized.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.handleGlobalScale = function () {\n this.dispatch(\"globalscalechanged\");\n\n if (this.nonScalingStroke) {\n this.strokeWidth = this.strokeWidth;\n }\n\n if (this.nonScaling) {\n this.validatePosition();\n }\n\n this.updateFilterScale();\n };\n /**\r\n * Updates filter properties which might depend on scale\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.updateFilterScale = function () {\n var _this = this;\n\n $iter.each(this.filters.iterator(), function (filter) {\n filter.scale = _this.globalScale;\n });\n };\n /**\r\n * Removes itself from system's invalid lists.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.removeFromInvalids = function () {\n registry.removeFromInvalidSprites(this);\n registry.removeFromInvalidPositions(this);\n };\n /**\r\n * Copies all parameters from another [[Sprite]].\r\n *\r\n * @param source Source Sprite\r\n */\n\n\n Sprite.prototype.copyFrom = function (source) {\n var _this = this;\n\n _super.prototype.copyFrom.call(this, source);\n\n this.isMeasured = source.isMeasured;\n this.states.copyFrom(source.states);\n\n if (source.filters.length > 0) {\n source.filters.each(function (filter) {\n _this.filters.push(filter.clone());\n });\n }\n\n if (source._adapterO) {\n this.adapter.copyFrom(source._adapterO);\n } //helps to avoid calling getter which creates instance\n\n\n if (source[\"_interaction\"]) {\n this.interactions.copyFrom(source.interactions);\n }\n\n if (source[\"_plugins\"]) {\n this.plugins.copyFrom(source.plugins);\n }\n\n this.configField = source.configField;\n this.applyOnClones = source.applyOnClones; // this.numberFormatter = source.numberFormatter; // todo: this creates loose number formatter and copies it to all clones. somehow we need to know if source had numberFormatter explicitly created and not just because a getter was called.\n //this.mask = source.mask; need to think about this, generally this causes a lot of problems\n\n this.disabled = source.disabled;\n this.virtualParent = source.virtualParent;\n this.exportable = source.exportable; //@todo: create tooltip if it's on source but not on this?\n //const tooltip = this._tooltip;\n //if (tooltip) {\n //\ttooltip.copyFrom(source.tooltip);\n //}\n\n if (source._tooltip) {\n if (this._tooltip) {\n this._tooltip.copyFrom(source.tooltip);\n } else {\n if (source.cloneTooltip) {\n this.tooltip = source.tooltip.clone();\n } else {\n this._tooltip = source.tooltip;\n }\n }\n } //if ((source)[\"_tooltip\"] && !this._tooltip) {\n //\tthis._tooltip = (source)[\"_tooltip\"];\n //}\n\n\n this._showSystemTooltip = source.showSystemTooltip;\n $utils.copyProperties(source.propertyFields, this.propertyFields);\n $utils.copyProperties(source.properties, this);\n\n if (source.fillModifier) {\n this.fillModifier = source.fillModifier.clone();\n }\n\n if (source.strokeModifier) {\n this.strokeModifier = source.strokeModifier.clone();\n }\n };\n /**\r\n * Destroys this object and all related data.\r\n */\n\n\n Sprite.prototype.dispose = function () {\n if (!this.isDisposed()) {\n if (this.showTooltipOn == \"always\" && this.tooltip) {\n this.tooltip.hide();\n }\n\n this.dispatchImmediately(\"beforedisposed\");\n\n if (this.isBaseSprite) {\n if (this.htmlContainer) {\n while (this.htmlContainer.childNodes.length > 0) {\n this.htmlContainer.removeChild(this.htmlContainer.firstChild);\n }\n }\n\n this.isBaseSprite = false;\n }\n\n _super.prototype.dispose.call(this); // Clear adapters\n\n\n if (this._adapterO) {\n this._adapterO.clear();\n }\n\n if (this.applyOnClones) {\n if (this._clones) {\n for (var i = this._clones.length - 1; i >= 0; i--) {\n var clone = this._clones.getIndex(i);\n\n clone.dispose();\n }\n }\n }\n\n if (this._svgContainer) {\n this._svgContainer.dispose();\n }\n\n if (this._interactionDisposer) {\n this._interactionDisposer.dispose();\n\n this._interactionDisposer = undefined;\n }\n\n if (this._urlDisposer) {\n this._urlDisposer.dispose();\n }\n\n this.removeFromInvalids();\n\n if (this.element) {\n this.element.dispose();\n }\n\n if (this.group) {\n this.group.dispose();\n }\n\n if (this._numberFormatter) {\n this._numberFormatter.dispose();\n }\n\n if (this._focusFilter) {\n this._focusFilter.dispose();\n }\n\n var stroke = this.stroke;\n\n if (stroke && !(stroke instanceof Color) && stroke.dispose) {\n if (this.clonedFrom && this.clonedFrom.stroke == stroke) {// do nothing\n } else {\n stroke.dispose();\n }\n } // TODO a bit hacky\n\n\n var fill = this.fill;\n\n if (fill && !(fill instanceof Color) && fill.dispose) {\n if (this.clonedFrom && this.clonedFrom.fill == fill) {// do nothing\n } else {\n fill.dispose();\n }\n } // remove from map\n\n\n if ($type.hasValue(this.id)) {\n this.map.removeKey(this.id);\n }\n\n this.parent = undefined;\n\n if (this._filters) {\n while (this._filters.length > 0) {\n var filter = this._filters.getIndex(0);\n\n filter.dispose();\n\n this._filters.removeValue(filter);\n }\n }\n\n this._alwaysShowDisposers = undefined;\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"isTemplate\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Is template?\r\n */\n get: function get() {\n return this._isTemplate;\n },\n\n /**\r\n * Indicates if this element is a \"template\".\r\n *\r\n * Template Sprites act only as a holders for config for other \"real\"\r\n * elements to be cloned from.\r\n *\r\n * Templates are treated differently, as they are not validated, redrawn, or\r\n * otherwise are processed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Is template?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this._isTemplate != value) {\n this._isTemplate = value;\n\n if (this instanceof Container) {\n $iter.each(this.children.iterator(), function (child) {\n child.isTemplate = value;\n });\n }\n\n if (value) {\n this.parent = this._parent;\n this.removeFromInvalids();\n } else {\n this.invalidate();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"showSystemTooltip\", {\n /**\r\n * @return Show system tooltip?\r\n */\n get: function get() {\n if (!$type.hasValue(this._showSystemTooltip)) {\n if (this.virtualParent) {\n return this.virtualParent.showSystemTooltip;\n } else if (this._parent) {\n return this._parent.showSystemTooltip;\n } else {\n return false;\n }\n }\n\n return this._showSystemTooltip;\n },\n\n /**\r\n * Indicates whether the element should attempt to construct itself in a way\r\n * so that system tooltip is shown if its `readerTitle` is set.\r\n *\r\n * @param value Show system tooltip?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this._showSystemTooltip != value) {\n this._showSystemTooltip = value;\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"topParent\", {\n /**\r\n * ==========================================================================\r\n * HIERARCHY AND STRUCTURE RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Sprites's top-level [[Container]].\r\n *\r\n * Please note that in most cases it won't be the chart element.\r\n *\r\n * To access base chart element, use `baseSprite` instead.\r\n *\r\n * @return Top-level ascendant\r\n */\n get: function get() {\n if (this._topParent) {\n return this._topParent;\n } else {\n if (this._parent) {\n return this._parent.topParent;\n }\n }\n },\n\n /**\r\n * @ignore\r\n * @param value {Container} top parent of a sprite\r\n */\n set: function set(value) {\n this._topParent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"parent\", {\n /**\r\n * @return Parent container\r\n */\n get: function get() {\n return this._parent;\n },\n\n /**\r\n * Elements' parent [[Container]].\r\n *\r\n * @param parent Parent container\r\n */\n set: function set(parent) {\n if (this._isTemplate) {\n return;\n } // TODO is this needed ?\n\n\n $utils.used(this.paper);\n var oldParent = this._parent;\n\n if (oldParent != parent) {\n if (oldParent) {\n oldParent.children.removeValue(this);\n }\n\n this._parent = parent;\n\n if (parent) {\n this.topParent = parent.topParent;\n\n if (parent.isTemplate) {\n this.isTemplate = true;\n }\n\n this.baseId = parent.baseId;\n parent.children.push(this); // insert handler at Container invalidates + invalidatesLayout + adds to group\n\n if (this._tooltip && !this._tooltipContainer) {\n this._tooltip.parent = parent.tooltipContainer;\n }\n\n if (!this._dataItem) {\n this.dataItem = parent.dataItem;\n }\n\n this.handleAlwaysShowTooltip();\n\n if (this.dataItem) {\n // No need to apply accessibility if there's no data item\n // The whole reason of applying it here is to populate data\n // placesholders, and if tehre's no data item, it won't work anyway\n this.applyAccessibility();\n }\n\n this.dispatchImmediately(\"parentset\");\n } else {\n this.topParent = undefined;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n Sprite.prototype.handleAlwaysShow = function () {\n this.showTooltip();\n };\n /**\r\n * @ignore\r\n */\n\n\n Sprite.prototype.handleAlwaysShowTooltip = function () {\n var sprite = this;\n var oldDisposers = this._alwaysShowDisposers;\n\n if (oldDisposers) {\n $array.each(oldDisposers, function (oldDisposer) {\n oldDisposer.dispose();\n });\n }\n\n this._alwaysShowDisposers = [];\n\n if (this.showTooltipOn == \"always\") {\n while (sprite != undefined) {\n var disposer = sprite.events.on(\"visibilitychanged\", this.handleAlwaysShow, this, false);\n this.addDisposer(disposer);\n\n this._alwaysShowDisposers.push(disposer);\n\n sprite = sprite.parent;\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"virtualParent\", {\n /**\r\n * @return Virtual parent\r\n */\n get: function get() {\n return this._virtualParent;\n },\n\n /**\r\n * Element's \"virtual\" parent.\r\n *\r\n * This is required in ordere to maintain proper inheritance (like\r\n * formatters).\r\n *\r\n * Sometimes an element is a \"logical\" parent, even though it's not a direct\r\n * ascendant.\r\n *\r\n * Example: a bullet is not a child of the axis, but it would make sense\r\n * for it to inherit series' formatters.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Virtual parent\r\n */\n set: function set(value) {\n this._virtualParent = value;\n\n if (this.dataItem) {\n // No need to apply accessibility if there's no data item\n // The whole reason of applying it here is to populate data\n // placesholders, and if tehre's no data item, it won't work anyway\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Moves `` to correct place in DOM.\r\n *\r\n * Some elements are initially created in \"ghost\" container. When moving\r\n * those into proper place in DOM, their respective `` need to be moved\r\n * as well.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype.appendDefs = function () {\n if (this.filterElement) {\n this.paper.appendDef(this.filterElement);\n }\n\n var fill = this.fill;\n\n if (fill && fill.element) {\n this.paper.appendDef(fill.element);\n }\n\n var stroke = this.stroke;\n\n if (stroke && stroke.element) {\n this.paper.appendDef(stroke.element);\n }\n\n if (this.fillModifier && this.fill instanceof Color) {\n var fill_1 = this.fillModifier.modify(this.fill);\n\n if (fill_1 && fill_1.element) {\n this.paper.appendDef(fill_1.element);\n }\n }\n\n if (this.strokeModifier && this.stroke instanceof Color) {\n var stroke_1 = this.strokeModifier.modify(this.stroke);\n\n if (stroke_1 && stroke_1.element) {\n this.paper.appendDef(stroke_1.element);\n }\n }\n\n if (this._clipPath) {\n this.paper.appendDef(this._clipPath);\n }\n\n if (this._exportable === false) {\n this.exportable = false;\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"map\", {\n /**\r\n * Returns a [[Dictionary]] which maps object ids with their respective\r\n * objects.\r\n *\r\n * Can be used to retrieve any object by id, e.g.:\r\n *\r\n * ```TypeScript\r\n * console.log(mySprite.map.getKey(\"myid\"));\r\n * ```\r\n * ```JavaScript\r\n * console.log(mySprite.map.getKey(\"myid\"));\r\n * ```\r\n *\r\n * @return Map collection\r\n */\n get: function get() {\n var top = this.topParent;\n\n if (top) {\n return top.map;\n } else if (!this._map) {\n this._map = new Dictionary();\n }\n\n return this._map;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"delayedMap\", {\n /**\r\n * @ignore\r\n * @return Map collection\r\n */\n get: function get() {\n var top = this.topParent;\n\n if (top) {\n return top.delayedMap;\n } else if (!this._delayedMap) {\n this._delayedMap = new Dictionary();\n }\n\n return this._delayedMap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"id\", {\n /**\r\n * @return ID\r\n */\n get: function get() {\n return this._id;\n },\n\n /**\r\n * Element's user-defined ID.\r\n *\r\n * Will throw an Error if there already is an object with the same ID.\r\n *\r\n * Please note that above check will be performed withing the scope of the\r\n * current chart instance. It will not do checks across other chart instances\r\n * or in globally in DOM.\r\n *\r\n * Make sure the IDs are unique.\r\n *\r\n * @param value ID\r\n */\n set: function set(value) {\n if (this._id != value) {\n this._id = value;\n\n if (this.map.hasKey(value)) {\n throw Error(\"Duplicate id (\" + value + \") used on multiple objects.\");\n } else {\n this.map.setKey(value, this);\n }\n\n if (options.autoSetClassName) {\n this.setClassName();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"dom\", {\n /**\r\n * ==========================================================================\r\n * ELEMENT AND DOM TREE MANIPULATION AND MEASURING\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns DOM element reference associated with this element.\r\n *\r\n * @readonly\r\n * @return DOM element\r\n */\n get: function get() {\n return this.group.node;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"paper\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Paper\r\n */\n get: function get() {\n if (this._paper) {\n return this._paper;\n } else {\n var parent_2 = this._parent;\n\n if (parent_2) {\n return parent_2.paper;\n }\n }\n\n return getGhostPaper();\n },\n\n /**\r\n * A [[Paper]] instance to place elements on.\r\n *\r\n * If there's no Paper set for this element, it goes up the ascendant tree\r\n * until it finds one.\r\n *\r\n * This method is used by important `addChild()` method, so it's essential\r\n * to have a [[Paper]] instance.\r\n *\r\n * If this element has a separate `htmlContainer` set, it will have a\r\n * [[Paper]] instance itself.\r\n *\r\n * @ignore Exclude from docs\r\n * @param paper Paper\r\n */\n set: function set(paper) {\n this.setPaper(paper);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\n\n Sprite.prototype.setPaper = function (paper) {\n var oldPaper = this._paper;\n\n if (oldPaper != paper) {\n this._paper = paper;\n this.appendDefs();\n return true;\n }\n\n return false;\n };\n\n Object.defineProperty(Sprite.prototype, \"htmlContainer\", {\n /**\r\n * @return HTML element\r\n */\n get: function get() {\n if (this._htmlContainer) {\n return this._htmlContainer;\n } else {\n var parent_3 = this._parent;\n\n if (parent_3) {\n return parent_3.htmlContainer;\n }\n }\n },\n\n /**\r\n * An HTML element to be used when placing wrapper element (`
      `)\r\n * for the whole chart.\r\n *\r\n * This is the same for **all** elements within the same chart.\r\n *\r\n * @param htmlContainer HTML element\r\n */\n set: function set(htmlContainer) {\n this._htmlContainer = htmlContainer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"titleElement\", {\n /**\r\n * Creates (if not yet created) and returns element's `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Title element\r\n */\n get: function get() {\n if (!this._titleElement) {\n this._titleElement = this.paper.add(\"title\");\n this.group.add(this._titleElement);\n }\n\n return this._titleElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"descriptionElement\", {\n /**\r\n * Creates (if not yet created) and returns element's `<desc>` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Desc element\r\n */\n get: function get() {\n if (!this._descriptionElement) {\n this._descriptionElement = this.paper.add(\"desc\");\n this.group.add(this._descriptionElement);\n }\n\n return this._descriptionElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"filters\", {\n /**\r\n * Returns list of SVG filters (effects) applied to element. If the filter\r\n * list is not yet initilized, creates and returns an empty one.\r\n * Note, not all filters combine well with one another. We recommend using one filter per sprite.\r\n *\r\n * @return List of filters\r\n */\n get: function get() {\n if (!this._filters) {\n this._filters = new List(); // TODO only add certain events ?\n\n this._disposers.push(this._filters.events.onAll(this.applyFilters, this));\n\n this._disposers.push(new ListDisposer(this._filters));\n }\n\n return this._filters;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets required SVG attributes. Must be called every time an element is\r\n * redrawn so that attributes are (re)applied.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype.setSVGAttributes = function () {\n this.fill = this.fill;\n this.opacity = this.opacity;\n this.fillOpacity = this.fillOpacity;\n this.stroke = this.stroke;\n this.strokeOpacity = this.strokeOpacity;\n this.shapeRendering = this.shapeRendering;\n this.strokeDasharray = this.strokeDasharray;\n this.strokeDashoffset = this.strokeDashoffset;\n this.strokeLinecap = this.strokeLinecap;\n this.strokeLinejoin = this.strokeLinejoin;\n this.focusable = this.focusable;\n this.tabindex = this.tabindex;\n this.role = this.role;\n };\n /**\r\n * Sets an attribute directly on an SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param attribute Attribute object\r\n */\n\n\n Sprite.prototype.setSVGAttribute = function (attribute) {\n this.group.attr(attribute);\n };\n /**\r\n * Removes an attribute directly from SVG element.\r\n *\r\n * @param attribute Attribute key to remove\r\n */\n\n\n Sprite.prototype.removeSVGAttribute = function (attribute) {\n this.group.removeAttr(attribute);\n };\n /**\r\n * Sets `class` attribute of the elements SVG node.\r\n *\r\n * Uses `am4core.options.classNamePrefix`.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.setClassName = function () {\n var className = this.className;\n var classNamePrefix = options.classNamePrefix;\n\n if (this.element) {\n this.element.addClass(classNamePrefix + className);\n }\n\n this.group.addClass(classNamePrefix + className + \"-group\");\n\n if ($type.hasValue(this.id)) {\n this.group.addClass(classNamePrefix + this.id);\n }\n\n if (this.userClassName) {\n this.group.addClass(this.userClassName);\n }\n };\n /**\r\n * Adds an `id` attribute the the element and returns the id.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Element's ID\r\n */\n\n\n Sprite.prototype.uidAttr = function () {\n this.setSVGAttribute({\n \"id\": this.uid\n });\n return this.uid;\n };\n /**\r\n * [updateClipPath description]\r\n *\r\n * @todo Description\r\n */\n\n\n Sprite.prototype.updateClipPath = function () {\n var element = this._clipElement;\n\n if (element) {\n element.moveTo({\n x: this.mask.pixelX,\n y: this.mask.pixelY\n });\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Sprite.prototype.createClipPath = function () {\n if (!this._clipPath) {\n this._clipPath = this.paper.addGroup(\"clipPath\");\n this.paper.appendDef(this._clipPath);\n\n this._disposers.push(this._clipPath);\n\n var id = registry.getUniqueId();\n\n this._clipPath.attr({\n \"id\": id\n });\n\n this.group.attr({\n \"clip-path\": \"url(\\\"\" + $utils.getBaseURI() + id + \"\\\")\"\n });\n }\n };\n /**\r\n * Applies the mask Sprite.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.applyMask = function () {\n var mask = this.mask;\n\n if (this._clipPath && mask) {\n // Container\n if (mask instanceof Container) {\n this._clipElement.attr({\n \"width\": $math.max(0, mask.pixelWidth),\n \"height\": $math.max(0, mask.pixelHeight)\n });\n\n var point = $utils.spritePointToSprite({\n x: mask.pixelX,\n y: mask.pixelY\n }, mask.parent, this);\n this._clipPath.x = point.x;\n this._clipPath.y = point.y;\n } // Sprite\n else {\n if (mask.element && mask.element != this._clipElement) {\n this._clipElement = mask.element;\n\n this._clipPath.add(this._clipElement);\n }\n\n this._clipPath.scale = mask.scale;\n this._clipPath.x = mask.pixelX;\n this._clipPath.y = mask.pixelY;\n this._clipPath.rotation = mask.rotation;\n }\n }\n };\n /**\r\n * Applies filters to the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.applyFilters = function () {\n var _this = this; // we create a separate filter for each sprite as otherwise it would be impossible to animate filter.\n // svg doesn't support multiple filters applied to one element, so we put all the primitives to one filterElement of a sprite.\n\n\n if (this._filters && this._filters.length > 0) {\n var width_1 = 100;\n var height_1 = 100;\n\n if (!this.filterElement) {\n this.filterElement = this.paper.addGroup(\"filter\");\n\n this._disposers.push(this.filterElement);\n } else {\n this.filterElement.removeChildNodes();\n }\n\n this.paper.appendDef(this.filterElement);\n var id = \"filter-\" + this.uid;\n this.filterElement.attr({\n \"id\": id\n });\n $iter.each(this.filters.iterator(), function (filter) {\n filter.sprite = _this;\n filter.paper = _this.paper;\n\n _this.filterElement.attr({\n filterUnits: filter.filterUnits\n });\n\n filter.appendPrimitives(_this.filterElement);\n\n if (filter.width > width_1) {\n width_1 = filter.width;\n }\n\n if (filter.height > height_1) {\n height_1 = filter.height;\n }\n\n filter.scale = _this.globalScale;\n });\n var w = width_1 + \"%\";\n var h = height_1 + \"%\";\n /* temporarily removed as it is breaking tooltips on Safari @todo come back to this\r\n if (this._measuredHeight <= 1) {\r\n h = height + \"\";\r\n }\r\n if (this._measuredWidth <= 1) {\r\n h = width + \"\";\r\n }*/\n\n this.filterElement.attr({\n \"width\": w,\n \"height\": h,\n \"x\": -(width_1 - 100) / 2 + \"%\",\n \"y\": -(height_1 - 100) / 2 + \"%\"\n });\n this.group.attr({\n \"filter\": \"url(\\\"\" + $utils.getBaseURI() + id + \"\\\")\"\n });\n } else if (this.filterElement) {\n this.group.removeAttr(\"filter\");\n this.filterElement.removeChildNodes();\n }\n };\n /**\r\n * [removeClipPath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Sprite.prototype.removeClipPath = function () {\n if (this._clipPath) {\n //this._clipPath.dispose();\n this.removeDispose(this._clipPath);\n this._clipPath = undefined;\n }\n };\n /**\r\n * [setElement description]\r\n *\r\n * @ignore\r\n * @todo Description\r\n * @param element [description]\r\n */\n\n\n Sprite.prototype.setElement = function (element) {\n this.element = element;\n this.setSVGAttributes();\n this.applyAccessibility();\n };\n\n Object.defineProperty(Sprite.prototype, \"element\", {\n /**\r\n * @return Element\r\n */\n get: function get() {\n return this._element;\n },\n\n /**\r\n * The main element for this Sprite, usually an SVG `<g>`.\r\n *\r\n * All other sub-elements are created in it.\r\n *\r\n * @param element Element\r\n */\n set: function set(element) {\n // Destroy previous element if there was one before\n this.removeElement(); // Set new element\n\n this._element = element; // Add element to group\n // Since we are adding Element to group, which is already in the\n // `.disposers` it will be removed automatically when Sprite is disposed\n // of\n\n this.group.add(element);\n\n if (element.node instanceof SVGPathElement) {\n this._isPath = true;\n } // This is needed if someone is setting element not in draw method but\n // from outside\n\n\n if (!this.invalid) {\n this.validate();\n }\n\n if (options.autoSetClassName) {\n this.setClassName();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"svgContainer\", {\n /**\r\n * HTML container (`<div>`) which is used to place chart's `<svg>` element\r\n * in.\r\n *\r\n * @return Container for chart elements\r\n */\n get: function get() {\n if (this._svgContainer) {\n return this._svgContainer;\n } else if (this._parent) {\n return this._parent.svgContainer;\n }\n },\n\n /**\r\n * Sets HTML container to add SVG and other chart elements to.\r\n *\r\n * @param svgContainer Container for chart elements\r\n */\n set: function set(svgContainer) {\n this._svgContainer = svgContainer;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Measures main element.\r\n *\r\n * Saves measurements into private `_bbox` property.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype.measureElement = function () {\n if (this.element) {\n if (this.definedBBox) {\n this._bbox = this.definedBBox;\n } else {\n var svgBBox = this.element.getBBox();\n this._bbox = {\n x: svgBBox.x,\n y: svgBBox.y,\n width: svgBBox.width,\n height: svgBBox.height\n };\n }\n }\n };\n /**\r\n * Positions element according its center settings.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.updateCenter = function () {\n if (this.element) {\n var prevElementTransform = this.element.transformString;\n var bbox = this.bbox;\n var ex = 0;\n var ey = 0;\n var elementX = bbox.x;\n var elementY = bbox.y;\n var elementWidth = bbox.width;\n var elementHeigth = bbox.height;\n var pixelPaddingLeft = this.pixelPaddingLeft;\n var pixelPaddingRight = this.pixelPaddingRight;\n var pixelPaddingTop = this.pixelPaddingTop;\n var pixelPaddingBottom = this.pixelPaddingBottom; // add padding to the measured size\n\n var measuredWidth = $math.max(elementWidth + pixelPaddingLeft + pixelPaddingRight, this.pixelWidth);\n var measuredHeight = $math.max(elementHeigth + pixelPaddingTop + pixelPaddingBottom, this.pixelHeight); // extremes\n\n var left = bbox.x;\n var right = bbox.x + measuredWidth;\n var top_1 = bbox.y;\n var bottom = bbox.y + measuredHeight;\n var horizontalCenter = this.horizontalCenter;\n var verticalCenter = this.verticalCenter;\n\n switch (horizontalCenter) {\n case \"none\":\n ex = elementX + pixelPaddingLeft;\n break;\n\n case \"left\":\n ex = pixelPaddingLeft;\n break;\n\n case \"middle\":\n ex = pixelPaddingLeft - (elementWidth + pixelPaddingRight + pixelPaddingLeft) / 2;\n break;\n\n case \"right\":\n ex = -pixelPaddingRight - elementWidth;\n break;\n }\n\n switch (verticalCenter) {\n case \"none\":\n ey = elementY + pixelPaddingTop;\n break;\n\n case \"top\":\n ey = pixelPaddingTop;\n break;\n\n case \"middle\":\n ey = pixelPaddingTop - (elementHeigth + pixelPaddingBottom + pixelPaddingTop) / 2;\n break;\n\n case \"bottom\":\n ey = -pixelPaddingBottom - elementHeigth;\n break;\n }\n\n this._measuredHeight = measuredHeight;\n this._measuredWidth = measuredWidth;\n var x = $math.round(ex - elementX, this._positionPrecision, true);\n var y = $math.round(ey - elementY, this._positionPrecision, true);\n this.ex = x - pixelPaddingLeft;\n this.ey = y - pixelPaddingTop;\n this.maxLeft = left + x - pixelPaddingLeft;\n this.maxRight = right + x - pixelPaddingLeft;\n this.maxTop = top_1 + y - pixelPaddingTop;\n this.maxBottom = bottom + y - pixelPaddingTop;\n\n if (this.pixelPerfect && options.pixelPerfectPrecision == 0) {\n x -= 0.5;\n y -= 0.5;\n }\n\n this.element.moveTo({\n x: x,\n y: y\n });\n\n if (prevElementTransform != this.element.transformString) {\n this.dispatchImmediately(\"transformed\");\n }\n }\n };\n /**\r\n * Measures the whole element.\r\n *\r\n * Returns `true` if the size has changed from the last measurement.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Did the size changed from the last measurement?\r\n */\n\n\n Sprite.prototype.measure = function () {\n this.updateCenter();\n var measuredWidth = this._measuredWidth;\n var measuredHeight = this._measuredHeight; // extremes\n\n var left = this.maxLeft;\n var right = this.maxRight;\n var top = this.maxTop;\n var bottom = this.maxBottom; // non-parent wise size\n\n this._measuredWidthSelf = measuredWidth;\n this._measuredHeightSelf = measuredHeight;\n var positionPrecision = this._positionPrecision;\n this.maxLeftSelf = this.maxLeft;\n this.maxRightSelf = this.maxRight;\n this.maxTopSelf = this.maxTop;\n this.maxBottomSelf = this.maxBottom; // if a sprite is rotated or scaled, calculate measured size after transformations\n\n if (this.rotation !== 0 || this.scale !== 1 || this.nonScaling) {\n // not good to handleGlobalScale here.\n if (this.nonScalingStroke) {\n this.strokeWidth = this.strokeWidth;\n }\n\n var svg = this.paper.svg;\n var matrix = svg.createSVGMatrix();\n var rotation = this.rotation;\n var scale = this.scale;\n\n if (this.nonScaling) {\n scale = this.scale / this.globalScale;\n }\n\n matrix.a = $math.cos(rotation) * scale;\n matrix.c = -$math.sin(rotation) * scale;\n matrix.e = 0;\n matrix.b = $math.sin(rotation) * scale;\n matrix.d = $math.cos(rotation) * scale;\n matrix.f = 0;\n var p1 = svg.createSVGPoint();\n p1.x = left;\n p1.y = top;\n var p2 = svg.createSVGPoint();\n p2.x = right;\n p2.y = top;\n var p3 = svg.createSVGPoint();\n p3.x = right;\n p3.y = bottom;\n var p4 = svg.createSVGPoint();\n p4.x = left;\n p4.y = bottom;\n var pt1 = p1.matrixTransform(matrix);\n var pt2 = p2.matrixTransform(matrix);\n var pt3 = p3.matrixTransform(matrix);\n var pt4 = p4.matrixTransform(matrix);\n left = Math.min(pt1.x, pt2.x, pt3.x, pt4.x);\n right = Math.max(pt1.x, pt2.x, pt3.x, pt4.x);\n top = Math.min(pt1.y, pt2.y, pt3.y, pt4.y);\n bottom = Math.max(pt1.y, pt2.y, pt3.y, pt4.y);\n measuredWidth = right - left;\n measuredHeight = bottom - top;\n this.maxLeft = $math.round(left, positionPrecision, true);\n this.maxRight = $math.round(right, positionPrecision, true);\n this.maxTop = $math.round(top, positionPrecision, true);\n this.maxBottom = $math.round(bottom, positionPrecision, true);\n }\n\n this._measuredWidth = $math.round(measuredWidth, positionPrecision, true);\n this._measuredHeight = $math.round(measuredHeight, positionPrecision, true); // dispatch event\n\n if (this._measuredWidth != this._prevMeasuredWidth || this._measuredHeight != this._prevMeasuredHeight) {\n this._prevMeasuredHeight = this._measuredHeight;\n this._prevMeasuredWidth = this._measuredWidth; // TODO clear existing sizechanged dispatches ?\n\n this.dispatch(\"sizechanged\");\n\n if ((this.isHover || this.showTooltipOn == \"hit\" || this.showTooltipOn == \"always\") && this.tooltip && this.tooltip.visible && ($type.hasValue(this.tooltipText) || $type.hasValue(this.tooltipHTML))) {\n this.updateTooltipPosition();\n }\n\n return true;\n }\n\n return false;\n };\n /**\r\n * Insert this element before sibling element.\r\n *\r\n * @param sprite Target element\r\n * @return This element\r\n */\n\n\n Sprite.prototype.insertBefore = function (sprite) {\n var parent = this._parent;\n\n if (parent) {\n var index = parent.children.indexOf(sprite);\n\n if (index !== -1) {\n parent.children.moveValue(this, index);\n parent.sortChildren();\n }\n }\n\n return this;\n };\n /**\r\n * Insert this element after sibling element.\r\n *\r\n * @param sprite Target element\r\n * @return This element\r\n */\n\n\n Sprite.prototype.insertAfter = function (sprite) {\n var parent = this._parent;\n\n if (parent) {\n var index = parent.children.indexOf(sprite);\n\n if (index !== -1) {\n parent.children.moveValue(this, index + 1);\n parent.sortChildren();\n }\n }\n\n return this;\n };\n /**\r\n * Removes the main SVG element.\r\n *\r\n * This does not destroy the whole Sprite element. To do that use\r\n * `dispose()` instead.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.removeElement = function () {\n // remove visual element\n if (this._element) {\n this.removeDispose(this._element);\n this._element = undefined;\n }\n };\n /**\r\n * Returns relative (percent) value of the X coordindate within this element.\r\n *\r\n * A relative value is a hundredth of a percent. So 100% would result in a 1\r\n * as relative value.\r\n *\r\n * @param value Absolute or relative X coordinate\r\n * @return Relative value\r\n */\n\n\n Sprite.prototype.getRelativeX = function (value) {\n if (value instanceof Percent) {\n return value.value;\n } else if (this._parent) {\n return value / this._parent.innerWidth;\n }\n\n return 0;\n };\n /**\r\n * Returns relative (percent) value of the Y coordindate within this element.\r\n *\r\n * A relative value is a hundredth of a percent. So 100% would result in a 1\r\n * as relative value.\r\n *\r\n * @param value Absolute or relative Y coordinate\r\n * @return Relative value\r\n */\n\n\n Sprite.prototype.getRelativeY = function (value) {\n if (value instanceof Percent) {\n return value.value;\n } else if (this._parent) {\n return value / this._parent.innerHeight;\n }\n\n return 0;\n };\n /**\r\n * Returns an X coordinate in pixel within the element.\r\n *\r\n * If number is passed in as parameter, the same number will be returned\r\n * back.\r\n *\r\n * If [[Percent]] is passed in, it will be recalculated to pixels.\r\n *\r\n * @param value Absolute or relative X coordinate\r\n * @return X coordinate in pixels\r\n */\n\n\n Sprite.prototype.getPixelX = function (value) {\n // we don't use $utils.valueToRelative as this would mean that we should access parent.innerWidth\n // all the time and this would result chain of the same actions and will slow down the system a lot\n var pixel = 0;\n\n if ($type.isNumber(value)) {\n pixel = value;\n } else if (value instanceof Percent) {\n var relative = value.value;\n\n if (this._parent) {\n pixel = $math.round(this._parent.innerWidth * relative, this._positionPrecision, true);\n }\n }\n\n return pixel;\n };\n /**\r\n * Returns an Y coordinate in pixel within the element.\r\n *\r\n * If number is passed in as parameter, the same number will be returned\r\n * back.\r\n *\r\n * If [[Percent]] is passed in, it will be recalculated to pixels.\r\n *\r\n * @param value Absolute or relative Y coordinate\r\n * @return Y coordinate in pixels\r\n */\n\n\n Sprite.prototype.getPixelY = function (value) {\n // we don't use $utils.valueToRelative as this would mean that we should access parent.innerWidth\n // all the time and this would result chain of the same actions and will slow down the system a lot\n var pixel = 0;\n\n if ($type.isNumber(value)) {\n pixel = value;\n } else if (value instanceof Percent) {\n var relative = value.value;\n\n if (this._parent) {\n pixel = $math.round(this._parent.innerHeight * relative, this._positionPrecision, true);\n }\n }\n\n return pixel;\n };\n /**\r\n * Moves the element to a specified coordinates.\r\n *\r\n * Using this method is preferred method of moving element, as it saves some\r\n * CPU processing power over setting `x` and `y` properties separately.\r\n *\r\n * The method respects element's center settings. The element will be\r\n * positioned so that `point` coordinates come in whatever \"center\" of the\r\n * element is, as set in `horizontalCenter` and `verticalCenter`.\r\n *\r\n * Besides moving the element, you can also at the same time scale and\r\n * rotate the element.\r\n *\r\n * @param point New coordinates\r\n * @param rotation New rotation\r\n * @param scale New Scale\r\n */\n\n\n Sprite.prototype.moveTo = function (point, rotation, scale, isDragged) {\n if (this.isDragged && !isDragged) {\n return;\n }\n\n if (point) {\n if ($type.isNumber(point.x)) {\n this.setPropertyValue(\"x\", $math.round(point.x, this._positionPrecision, true));\n }\n\n if ($type.isNumber(point.y)) {\n this.setPropertyValue(\"y\", $math.round(point.y, this._positionPrecision, true));\n }\n }\n\n if ($type.isNumber(rotation)) {\n this.rotation = rotation;\n }\n\n if ($type.isNumber(scale)) {\n this.scale = scale;\n } // must leave this\n\n\n this.invalidatePosition();\n };\n\n Object.defineProperty(Sprite.prototype, \"mask\", {\n /**\r\n * Returns [[Sprite]] element currently used as mask for this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return A [[Sprite]] to use as mask\r\n */\n get: function get() {\n if (!this._adapterO) {\n return this._mask.get();\n } else {\n return this._adapterO.apply(\"mask\", this._mask.get());\n }\n },\n\n /**\r\n * Sets another [[Sprite]] element as this elements mask.\r\n *\r\n * @ignore Exclude from docs\r\n * @param mask A [[Sprite]] to use as mask\r\n */\n set: function set(mask) {\n var _this = this;\n\n if (this._mask.get() !== mask) {\n // this is good\n if (mask) {\n this.createClipPath();\n\n if (!(mask instanceof Container)) {\n mask.isMeasured = false;\n\n if (mask.element) {\n this._clipElement = mask.element;\n }\n } else {\n this._clipElement = this.paper.add(\"rect\");\n }\n\n if (this._clipElement) {\n this._clipPath.add(this._clipElement);\n }\n\n this._mask.set(mask, new MultiDisposer([//mask.addEventListener(SpriteEvent.TRANSFORMED, this.applyMask, false, this);\n mask.events.on(\"maxsizechanged\", function () {\n if (_this.inited) {\n _this.applyMask();\n }\n }, undefined, false), mask.events.on(\"validated\", this.applyMask, this, false), mask.events.on(\"positionchanged\", this.applyMask, this, false)]));\n\n this.applyMask();\n } else {\n this._mask.reset();\n\n this.group.removeAttr(\"clip-path\");\n this.removeClipPath();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"maskRectangle\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Mask Rectangle\r\n */\n get: function get() {\n return this._maskRectangle;\n },\n // you can set IRectangle as a mask instead o a sprite. Note, the changes of the object won't be monitored\n\n /**\r\n * Instead of creating a [[Sprite]] for mask, you can just use a\r\n * [[Rectangle]] by setting this accessor.\r\n *\r\n * Please note that the element will not monitor any changes to the mask\r\n * rectangle.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rect Mask Rectangle\r\n */\n set: function set(rect) {\n if (rect) {\n this.createClipPath();\n\n if (!this._clipElement) {\n this._clipElement = this.paper.add(\"rect\");\n\n this._clipPath.add(this._clipElement);\n }\n\n this._clipElement.attr({\n \"width\": rect.width,\n \"height\": rect.height\n });\n } else {\n this.removeClipPath();\n this._clipElement = undefined;\n }\n\n this._maskRectangle = rect;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isMeasured\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Was element already measured?\r\n */\n get: function get() {\n return this._isMeasured;\n },\n\n /**\r\n * Indicates if this element was already measured.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Was element already measured?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (!value) {\n this._measuredWidth = 0;\n this._measuredHeight = 0; //this._pixelHeight = 0;\n //this._pixelWidth = 0;\n }\n\n if (this._isMeasured != value) {\n this._isMeasured = value;\n this.invalidatePosition();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if the this element has any of its parts overlapping with another\r\n * element.\r\n *\r\n * @todo Description (review)\r\n * @param sprite Second element to test again\r\n * @return Overlapping?\r\n */\n\n Sprite.prototype.hitTest = function (sprite) {\n // validate, otherwise we will not know measuredWidth and measuredHeight\n if (this.invalid) {\n this.validate();\n }\n\n if (sprite.invalid) {\n sprite.validate();\n }\n\n var ax1 = this.pixelX + this.maxLeft;\n var ay1 = this.pixelY + this.maxTop;\n var ax2 = ax1 + this.maxRight;\n var ay2 = ay1 + this.maxBottom;\n var bx1 = sprite.pixelX + sprite.maxLeft;\n var by1 = sprite.pixelY + sprite.maxTop;\n var bx2 = bx1 + sprite.maxRight;\n var by2 = by1 + sprite.maxBottom;\n return !(bx1 > ax2 || bx2 < ax1 || by1 > ay2 || by2 < ay1);\n };\n\n Object.defineProperty(Sprite.prototype, \"inited\", {\n /**\r\n * ==========================================================================\r\n * STATE-RELATED\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns `true` if Sprite has already finished initializing.\r\n *\r\n * @return Initialized?\r\n */\n get: function get() {\n return this._inited;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns `true` if Sprite has already finished initializing and is ready.\r\n *\r\n * If this object is a [[Container]] it will wait for all of its children\r\n * are ready before becoming ready itself and firing a `\"ready\"` event.\r\n *\r\n * @return is ready?\r\n */\n\n Sprite.prototype.isReady = function () {\n return this._ready;\n };\n\n Object.defineProperty(Sprite.prototype, \"states\", {\n /**\r\n * Returns a collection of element's available [[SpriteState]] entries.\r\n *\r\n * @see {@link SpriteState}\r\n * @return States\r\n */\n get: function get() {\n if (!this._states) {\n var state = new SpriteState(); // works\n\n this._states = new DictionaryTemplate(state); // TODO what about removeKey ?\n\n this._disposers.push(this._states.events.on(\"insertKey\", this.processState, this, false));\n\n this._disposers.push(this._states.events.on(\"setKey\", this.processState, this, false));\n\n this._disposers.push(new DictionaryDisposer(this._states));\n\n this._disposers.push(state);\n }\n\n return this._states;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"hiddenState\", {\n /**\r\n * Returns a [[SpriteState]] object for \"hidden\" state.\r\n *\r\n * This is a shortcut to `this.states.getKey(\"hidden\")`.\r\n *\r\n * @return Hidden state\r\n */\n get: function get() {\n if (!this.states.getKey(\"hidden\")) {\n var hiddenState = this.states.create(\"hidden\");\n hiddenState.properties.opacity = 0;\n hiddenState.properties.visible = false;\n }\n\n return this.states.getKey(\"hidden\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"defaultState\", {\n /**\r\n * Returns a [[SpriteState]] object for \"default\" state.\r\n *\r\n * This is a shortcut to `this.states.getKey(\"default\")`.\r\n *\r\n * @return Hidden state\r\n */\n get: function get() {\n if (!this.states.getKey(\"default\")) {\n var defaultState = this.states.create(\"default\");\n defaultState.properties.opacity = 1;\n }\n\n return this.states.getKey(\"default\");\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if some key states are defined and updates Sprite properties\r\n * accordingly.\r\n *\r\n * For example if there's a state \"down\" defined for Sprite, we automatically\r\n * make it \"clickable\".\r\n *\r\n * @ignore Exclude from docs\r\n * @param event An event which caused state list update\r\n */\n\n Sprite.prototype.processState = function (event) {\n var state = event.newValue;\n state.sprite = this;\n state.name = event.key;\n\n if (this.states.hasKey(\"hover\") || this.showTooltipOn == \"hover\" && ($type.hasValue(this.tooltipHTML) || $type.hasValue(this.tooltipText))) {\n this.hoverable = true;\n }\n\n if (this.states.hasKey(\"down\") || this.showTooltipOn == \"hover\" && ($type.hasValue(this.tooltipHTML) || $type.hasValue(this.tooltipText))) {\n this.clickable = true;\n }\n\n if (this.states.hasKey(\"focus\")) {\n this.focusable = true;\n } // Propagate the new state to clones\n\n\n if (this.applyOnClones) {\n var clones = this.clones.values;\n var length_1 = clones.length;\n\n for (var i = 0; i < length_1; ++i) {\n var clone = clones[i];\n\n if (!clone.isDisposed()) {\n clone.states.setKey(state.name, state);\n }\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"animations\", {\n /**\r\n * Returns a list elements's animations currently being played.\r\n *\r\n * If the list has not been initialized it is created.\r\n *\r\n * @return List of animations\r\n */\n get: function get() {\n if (!this._animations) {\n this._animations = [];\n\n this._disposers.push(new AnimationDisposer(this._animations));\n }\n\n return this._animations;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts element's local coordinates to the coordinates within the main\r\n * chart container.\r\n *\r\n * @param point Local point\r\n * @return Global point\r\n */\n\n Sprite.prototype.getSvgPoint = function (point) {\n try {\n // Calculate SVG point\n var bbox = this.htmlContainer.getBoundingClientRect();\n return {\n \"x\": point.x - bbox.left,\n \"y\": point.y - bbox.top\n };\n } catch (e) {\n return point;\n }\n };\n /**\r\n * Creates and starts an [[Animation]] with given `animationOptions`.\r\n *\r\n * @see {@link Animation} for additional information about available options\r\n * @param animationOptions Animation options\r\n * @param duration Duration in milliseconds\r\n * @param easing Easing function\r\n * @return Animation instance\r\n */\n\n\n Sprite.prototype.animate = function (animationOptions, duration, easing) {\n return new Animation(this, animationOptions, duration, easing).start();\n };\n /**\r\n * Applies a [[SpriteState]] on this element.\r\n *\r\n * The first parameter can either be a name state or a [[SpriteState]]\r\n * instance.\r\n *\r\n * When run, this method will apply SVG properties defined in a\r\n * [[SpriteState]], but only those that are relevant to this particular\r\n * element, i.e. are in the `properties` array.\r\n *\r\n * @see {@link SpriteState}\r\n * @param value A state - name key or instance\r\n * @param transitionDuration Duration of the transition between current and new state\r\n * @param easing An easing function\r\n */\n\n\n Sprite.prototype.setState = function (value, transitionDuration, easing) {\n var state;\n\n if (value instanceof SpriteState) {\n this.states.setKey(value.name, value);\n state = value;\n } else {\n state = this.states.getKey(value);\n\n if (!state) {\n return;\n }\n } // stop previous transition\n // not good - foe expample, we are animating to some \"active\" state and in them middle \"hover\" state happens. then \"active\" stat won't be applied\n //if (this._transition) {\n //this._transition.stop();\n //}\n\n\n if (state.name == \"hover\") {\n if (this.isHidden) {\n return;\n }\n\n this.isHover = true;\n }\n\n if (state.name == \"hidden\") {\n this.isHiding = true;\n } else {\n if (!this.visible) {\n this.setVisibility(state.properties.visible || this.defaultState.properties.visible);\n }\n }\n\n if (state.name == \"active\") {\n this.isActive = true;\n } // we do not set isActive = false here if it's not active, but container does that if setStateOnChildren = true\n\n\n if (!$type.isNumber(transitionDuration)) {\n transitionDuration = state.transitionDuration;\n }\n\n if (!$type.hasValue(easing)) {\n easing = state.transitionEasing;\n }\n\n return this.transitTo(state, transitionDuration, easing);\n };\n /**\r\n * Applies proper state based on the condition of the element. A condition is\r\n * deducted in this order:\r\n * * \"hover\" if Sprite has currently any pointers over it\r\n * * \"down\" if Sprite has any pointers (touch or mouse) currently pressed over it\r\n * * \"focus\" if Sprite has currently got focus (accessibility)\r\n * * \"hidden\" if Sprite is currently hidden\r\n *\r\n * Returns an [[Animation]] object, which is handling gradual transition from\r\n * current values of properties, to the new target state(s).\r\n *\r\n * @param duration Duration for the animation (ms)\r\n * @return [[Animation]] object which is handling the transition\r\n */\n\n\n Sprite.prototype.applyCurrentState = function (duration) {\n //if (!this.isHidden) { // this was done for hover state not to take effect if \"hidden\" is actually visible, need to think about it.\n var animation = this.setState(this.defaultState, duration);\n\n if (this.isHover) {\n animation = this.setState(\"hover\", duration);\n }\n\n if (this.isDown && this.interactions.downPointers.length) {\n animation = this.setState(\"down\", duration);\n }\n\n this.isFocused = this.isFocused;\n\n if (this.isActive) {\n animation = this.setState(\"active\", duration);\n\n if (this.isHover && this.states.hasKey(\"hoverActive\")) {\n animation = this.setState(\"hoverActive\", duration);\n }\n }\n\n return animation; //}\n };\n /**\r\n * Starts an [[Animation]] of the properties to specific values as they are\r\n * set in `state`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param state Target State\r\n * @param duration Duration in milliseconds\r\n * @param easing Easing function\r\n * @return Transition Animation\r\n */\n\n\n Sprite.prototype.transitTo = function (state, duration, easing) {\n var _this = this; // Init\n\n\n var options = [],\n propValues = state.allValues,\n transition; // todo: do this for numeric/color properties only?\n // @todo use state.getPropertyValue instead\n\n $object.each(propValues, function (propertyName, finalValue) {\n var currentValue = _this[propertyName]; // save current value to default state. this solves a big problem where values must be set both on sprite and default state\n\n if (finalValue != currentValue && _this.defaultState.properties[propertyName] == undefined) {\n _this.defaultState.properties[propertyName] = currentValue;\n } //if (finalValue != currentValue && $type.hasValue(finalValue)) {\n\n\n if (finalValue != \"__unset\") {\n var option = {\n from: currentValue,\n to: finalValue,\n property: propertyName\n };\n options.push(option);\n }\n });\n\n if (options.length > 0) {\n transition = this.animate(options, duration, easing);\n\n if (transition && !transition.isFinished()) {\n // TODO should this use events.once ?\n // TODO push onto _disposers array ?\n this._disposers.push(transition.events.on(\"animationended\", function () {\n _this.dispatchImmediately(\"transitionended\");\n }));\n } else {\n this.dispatchImmediately(\"transitionended\");\n }\n } // apply filters if set\n\n\n if (state.filters.length > 0) {\n var newFilters_1 = []; // check for the same filters\n\n $iter.each(state.filters.iterator(), function (stateFilter) {\n var newFilter = stateFilter.clone();\n newFilters_1.push(newFilter);\n var animationOptions = [];\n $iter.each(_this.filters.iterator(), function (currentFilter) {\n // if we have the same filters\n if (currentFilter.className == newFilter.className) {\n if (!$iter.contains(_this.defaultState.filters.iterator(), function (x) {\n return x.className === newFilter.className;\n })) {\n _this.defaultState.filters.push(currentFilter);\n }\n\n $object.each(newFilter.properties, function (propertyName, newValue) {\n var currentValue = currentFilter.properties[propertyName]; // if values are not the same, push to animation options array\n\n if (currentValue != newValue) {\n animationOptions.push({\n property: propertyName,\n from: currentValue,\n to: newValue\n });\n }\n });\n }\n }); // animate to new value\n\n newFilter.animate(animationOptions, duration, easing);\n });\n this.filters.clear();\n this.filters.pushAll(newFilters_1);\n }\n\n return transition;\n };\n /**\r\n * Returns `true` if Sprite is currently transiting from one state/value to\r\n * another.\r\n *\r\n * @return Is in transition?\r\n */\n\n\n Sprite.prototype.isInTransition = function () {\n return this.animations.length > 0;\n };\n\n Object.defineProperty(Sprite.prototype, \"isHover\", {\n /**\r\n * @return Is hovered?\r\n */\n get: function get() {\n if (this.isInteractive()) {\n return this.interactions.isHover;\n }\n\n return false;\n },\n\n /**\r\n * Indicates if this element has a mouse pointer currently hovering\r\n * over it, or if it has any touch pointers pressed on it.\r\n *\r\n * You can force element to be \"hovered\" manually, by setting this property\r\n * to `true`.\r\n *\r\n * @param value Is hovered?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (value !== this.isHover) {\n if (this.isInteractive()) {\n this.interactions.isHover = value;\n\n if (value) {\n this.handleOver();\n } else {\n this.interactions.isRealHover = false;\n this.handleOut();\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isDragged\", {\n /**\r\n * Returns indicator if this element is being dragged at the moment.\r\n *\r\n * @return Is dragged?\r\n */\n get: function get() {\n return this._isDragged;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isResized\", {\n /**\r\n * Returns indicator if this element is being resized at the moment.\r\n *\r\n * @return Is resized?\r\n */\n get: function get() {\n return this._isResized;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isDown\", {\n /**\r\n * @return Is down?\r\n */\n get: function get() {\n if (this.isInteractive()) {\n return this.interactions.isDown;\n }\n\n return false;\n },\n\n /**\r\n * Indicates if this element has any pointers (mouse or touch) pressing down\r\n * on it.\r\n *\r\n * @param value Is down?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.isInteractive() && this.isDown != value) {\n this.interactions.isDown = value;\n\n if (value) {\n this.handleDown();\n } else {\n this.handleUp();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isFocused\", {\n /**\r\n * @return Is focused?\r\n */\n get: function get() {\n if (this.isInteractive()) {\n return this.interactions.isFocused;\n }\n\n return false;\n },\n\n /**\r\n * Indicates if this element is focused (possibly by tab navigation).\r\n *\r\n * @param value Is focused?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.focusable && this.isFocused != value) {\n if (this.isInteractive()) {\n this.interactions.isFocused = value;\n\n if (value === true) {\n this.handleFocus();\n } else {\n this.handleBlur();\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"isActive\", {\n /**\r\n * @return Is active?\r\n */\n get: function get() {\n return this._isActive;\n },\n\n /**\r\n * Indicates if this element is currently active (toggled on) or not\r\n * (toggled off).\r\n *\r\n * @param value Is active?\r\n */\n set: function set(value) {\n this.setActive(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Sprite.prototype.setActive = function (value) {\n value = $type.toBoolean(value);\n\n if (this._isActive !== value) {\n this._isActive = value;\n\n if (value && this.states.hasKey(\"active\")) {\n this.setState(\"active\");\n\n if (this.isHover && this.states.hasKey(\"hoverActive\")) {\n this.setState(\"hoverActive\");\n }\n } else {\n this.applyCurrentState();\n }\n\n this.dispatchImmediately(\"toggled\");\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"disabled\", {\n /**\r\n * @return Disabled?\r\n */\n get: function get() {\n //if(this._internalDisabled){\n //\treturn true;\n //}\n var current = this.getPropertyValue(\"disabled\");\n\n if ($type.hasValue(current)) {\n return current;\n } else {\n if (this.virtualParent) {\n return this.virtualParent.disabled;\n }\n\n if (this._parent) {\n return this._parent.disabled;\n }\n }\n\n return false;\n },\n\n /**\r\n * Controls if element is disabled.\r\n *\r\n * A disabled element is hidden, and is removed from any processing, layout\r\n * calculations, and generally treated as if it does not exist.\r\n *\r\n * The element itself is not destroyed, though. Setting this back to `false`,\r\n * will \"resurrect\" the element.\r\n *\r\n * @param value Disabled?\r\n */\n set: function set(value) {\n this.setDisabled(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Sprite.prototype.setDisabled = function (value) {\n value = $type.toBoolean(value);\n var current = this.getPropertyValue(\"disabled\");\n\n if (current != value) {\n this.setPropertyValue(\"disabled\", value, true);\n\n if (value) {\n this.parent = this._parent;\n this.removeFromInvalids();\n this.group.attr({\n \"display\": \"none\"\n });\n this.dispatch(\"disabled\");\n } else {\n if (this._parent) {\n var group = this._parent.element;\n\n if (!group.hasChild(this.group)) {\n group.add(this.group);\n }\n }\n\n if (this instanceof Container) {\n this.deepInvalidate();\n\n if (this._background) {\n this._background.invalidate();\n }\n } else {\n this.invalidate();\n }\n\n if (!this.__disabled) {\n this.removeSVGAttribute(\"display\");\n }\n\n this.dispatch(\"enabled\");\n }\n\n this.dispatch(\"transformed\");\n system.requestFrame();\n return true;\n }\n\n return false;\n };\n\n Object.defineProperty(Sprite.prototype, \"__disabled\", {\n /**\r\n * @ignore\r\n * @return Disabled?\r\n */\n get: function get() {\n return this._internalDisabled;\n },\n\n /**\r\n * Internal disable method.\r\n *\r\n * Do not use it for disabling elements. Use `disabled` accessor instead.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Disabled?\r\n */\n set: function set(value) {\n if (this._internalDisabled != value) {\n this._internalDisabled = value;\n this._updateDisabled = true;\n this.invalidatePosition(); // better use this instead of invalidate()\n\n if (!value) {\n this.invalidate();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"numberFormatter\", {\n /**\r\n * @return A [[NumberFormatter]] instance to be used\r\n */\n get: function get() {\n if (this._numberFormatter) {\n return this._numberFormatter;\n } else if (this.virtualParent) {\n return this.virtualParent.numberFormatter;\n } else if (this._parent) {\n return this._parent.numberFormatter;\n }\n\n this._numberFormatter = new NumberFormatter();\n this._numberFormatter.language = this.language;\n return this.numberFormatter;\n },\n\n /**\r\n * ==========================================================================\r\n * FORMATTERS AND OTHER EXTERNAL HELPERS\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * A [[NumberFormatter]] instance.\r\n *\r\n * This is used to format numbers.\r\n *\r\n * ```TypeScript\r\n * chart.numberFormatter.numberFormat = \"#,###.#####\";\r\n * ```\r\n * ```JavaScript\r\n * chart.numberFormatter.numberFormat = \"#,###.#####\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"numberFormatter\": {\r\n * \"numberFormat\": \"#,###.#####\"\r\n * }\r\n * }\r\n * ```\r\n *\r\n * You can set a separate instance of formatter for each\r\n * individual element. However that would be unnecessary overhead as\r\n * all elements would automatically inherit formatter from their parents,\r\n * all the way up to the chart itself.\r\n *\r\n *\r\n * @see {@link NumberFormatter} for more info on formatting numbers\r\n * @param value An instance of NumberFormatter\r\n */\n set: function set(value) {\n this._numberFormatter = value;\n this._numberFormatter.language = this.language;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"dateFormatter\", {\n /**\r\n * @return An instance of DateFormatter\r\n */\n get: function get() {\n if (this._dateFormatter) {\n return this._dateFormatter;\n } else if (this.virtualParent) {\n return this.virtualParent.dateFormatter;\n } else if (this._parent) {\n return this._parent.dateFormatter;\n }\n\n this._dateFormatter = new DateFormatter();\n this._dateFormatter.language = this.language;\n return this.dateFormatter;\n },\n\n /**\r\n * A [[DateFormatter]] instance.\r\n *\r\n * This is used to format dates, e.g. on a date axes, balloons, etc.\r\n *\r\n * ```TypeScript\r\n * chart.dateFormatter.dateFormat = \"yyyy-MM-dd\";\r\n * ```\r\n * ```JavaScript\r\n * chart.dateFormatter.dateFormat = \"yyyy-MM-dd\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dateFormatter\": {\r\n * \"dateFormat\": \"yyyy-MM-dd\"\r\n * }\r\n * }\r\n * ```\r\n *\r\n * You can set a separate instance of formatter for each\r\n * individual element. However that would be unnecessary overhead as\r\n * all elements would automatically inherit formatter from their parents,\r\n * all the way up to the chart itself.\r\n *\r\n * @see {@link DateFormatter} for more info on dates formatting\r\n * @param value An instance of DateFormatter\r\n */\n set: function set(value) {\n this._dateFormatter = value;\n this._dateFormatter.language = this.language;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"durationFormatter\", {\n /**\r\n * @return An instance of DurationFormatter\r\n */\n get: function get() {\n if (this._durationFormatter) {\n return this._durationFormatter;\n } else if (this.virtualParent) {\n return this.virtualParent.durationFormatter;\n } else if (this._parent) {\n return this._parent.durationFormatter;\n }\n\n this._durationFormatter = new DurationFormatter();\n this._durationFormatter.language = this.language;\n return this.durationFormatter;\n },\n\n /**\r\n * A [[DurationFormatter]] instance.\r\n *\r\n * This is used to format numbers as durations, e.g. on a value axes.\r\n *\r\n * You can set a separate instance of formatter for each\r\n * individual element. However that would be unnecessary overhead as\r\n * all elements would automatically inherit formatter from their parents,\r\n * all the way up to the chart itself.\r\n *\r\n * @see {@link DurationFormatter} for more info on durations\r\n * @param value An instance of DurationFormatter\r\n */\n set: function set(value) {\n this._durationFormatter = value;\n this._durationFormatter.language = this.language;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"language\", {\n /**\r\n * @return An instance of Language\r\n */\n get: function get() {\n var language = this._language.get();\n\n if (language) {\n return language;\n } else if (this.virtualParent) {\n return this.virtualParent.language;\n } else if (this._parent) {\n return this._parent.language;\n }\n\n language = new Language();\n this.language = language;\n return language;\n },\n\n /**\r\n * A [[Language]] instance to use for translations.\r\n *\r\n * Normally it is enough to set language for the top-most element - chart.\r\n *\r\n * All other element child elements will automatically re-use that language\r\n * object.\r\n *\r\n * @param value An instance of Language\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this._language.get() !== value) {\n this._language.set(value, value.events.on(\"localechanged\", function (ev) {\n if (_this._numberFormatter) {\n _this._numberFormatter.language = _this.language;\n }\n\n if (_this._dateFormatter) {\n _this._dateFormatter.language = _this.language;\n }\n\n if (_this._durationFormatter) {\n _this._durationFormatter.language = _this.language;\n }\n\n if (_this._exporting.get()) {\n var exporting = _this._exporting.get();\n\n exporting.numberFormatter.language = _this.language;\n exporting.dateFormatter.language = _this.language;\n exporting.durationFormatter.language = _this.language;\n exporting.language = _this.language;\n }\n\n if (_this instanceof Container) {\n _this.deepInvalidate();\n }\n }));\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * ==========================================================================\r\n * DATA-RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Parses the string for meta tags `{tag}` and replaces them with a real\r\n * value. Supports straight up tags referring to the field in data, i.e.\r\n * `{value}` or tags with additional formatting info. E.g.:\r\n *\r\n * ```Text\r\n * {myfield.formatDate(\"yyyy-MM-dd\")}\r\n * {myfield.formatDate()}\r\n * {myfield.formatNumber(\"#,####.00\")}\r\n * {myfield.formatNumber()}\r\n * {myField.formatDuration(\"mm:ss\")}\r\n * ```\r\n *\r\n * Etc.\r\n *\r\n * This method Will automatically detect and use proper formatter for the\r\n * value.\r\n *\r\n * The source value will be looked up in various places: (in order)\r\n * * Sprite's own `dataItem`\r\n * * Sprite's properties\r\n * * Parent's `dataItem`\r\n * * Parent's properties\r\n *\r\n * @ignore Exclude from docs\r\n * @param string A string to format\r\n * @param dataItem DataItem\r\n * @return Formatted string\r\n */\n\n Sprite.prototype.populateString = function (string, dataItem) {\n if ($type.hasValue(string)) {\n string = $type.castString(string);\n string = getTextFormatter().escape(string);\n var tags = string.match(/\\{([^}]+)\\}/g);\n var i = void 0;\n\n if (tags) {\n for (i = 0; i < tags.length; i++) {\n var tag = tags[i].replace(/\\{([^}]+)\\}/, \"$1\");\n var value = this.getTagValue(tag, \"\", dataItem);\n\n if (!$type.hasValue(value)) {\n value = \"\";\n }\n\n string = string.split(tags[i]).join(value);\n }\n }\n\n string = getTextFormatter().unescape(string);\n } else {\n string = \"\";\n }\n\n if (!this._adapterO) {\n return string;\n } else {\n return this._adapterO.apply(\"populateString\", string);\n }\n };\n /**\r\n * Gets the value from data item and formats it according to specified format.\r\n *\r\n * If `format` is specified, it will use its contents to choose formatter for\r\n * the value. Otherwise it will select formatter accordingly to actual value\r\n * type.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Ability to force certain formatter on known numeric and date values\r\n * @see {@link NumberFormatter}\r\n * @see {@link DateFormatter}\r\n * @see {@link DurationFormatter}\r\n * @param tagName Tag name to replace\r\n * @param format Format to use\r\n * @param dataItem DataItem\r\n * @return Formatted value\r\n */\n\n\n Sprite.prototype.getTagValue = function (tagName, format, dataItem) {\n var value;\n\n if (!$type.hasValue(dataItem)) {\n dataItem = this.dataItem;\n } // Parse parts\n\n\n var parts = [];\n var reg = /([^.]+)\\(([^)]*)\\)|([^.]+)/g;\n ;\n var matches;\n\n while (true) {\n matches = reg.exec(tagName);\n\n if (matches === null) {\n break;\n }\n\n if (matches[3]) {\n // Simple property\n parts.push({\n prop: matches[3]\n });\n } else {\n // Method\n // Parse parameters\n var params = [];\n\n if ($utils.trim(matches[2]) != \"\") {\n var reg2 = /'([^']*)'|\"([^\"]*)\"|([0-9\\-]+)/g;\n var matches2 = void 0;\n\n while (true) {\n matches2 = reg2.exec(matches[2]);\n\n if (matches2 === null) {\n break;\n }\n\n params.push(matches2[1] || matches2[2] || matches2[3]);\n }\n }\n\n parts.push({\n method: matches[1],\n params: params\n });\n }\n } // Check if we can retrieve the value from data item\n\n\n if (dataItem) {\n // Check values\n value = this.getTagValueFromObject(parts, dataItem.values); // Check properties\n\n if (!$type.hasValue(value) || $type.isObject(value)) {\n // isObject helps to solve problem with date axis, as for example dateX will get dateX from values object and won't get to the dateX date.\n value = this.getTagValueFromObject(parts, dataItem);\n } // Check data context\n\n\n var dataContext = dataItem.dataContext;\n\n if (!$type.hasValue(value) && dataContext) {\n value = this.getTagValueFromObject(parts, dataItem.dataContext); // Maybe it's a literal dot-separated name of the key in dataContext?\n\n if (!$type.hasValue(value)) {\n value = this.getTagValueFromObject([{\n prop: tagName\n }], dataContext);\n } // scond data context level sometimes exist (tree map)\n\n\n if (!$type.hasValue(value) && dataContext.dataContext) {\n value = this.getTagValueFromObject(parts, dataContext.dataContext);\n }\n } // Check component's data item\n\n\n if (!$type.hasValue(value) && dataItem.component && dataItem.component.dataItem !== dataItem) {\n value = dataItem.component.getTagValue(tagName, format);\n }\n } // Check sprite's properties\n\n\n if (!$type.hasValue(value)) {\n value = this.getTagValueFromObject(parts, this.populateStringFrom || this);\n } // Finally, check the parent\n\n\n if (!$type.hasValue(value) && this._parent) {\n value = this._parent.getTagValue(tagName, format);\n }\n\n return value;\n };\n /**\r\n * Tries to retrieve values from properties of any object, then applies\r\n * proper formatting to it.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (improve)\r\n * @param parts Properties ant methods to access\r\n * @param object Source object\r\n * @param format A specific format to apply\r\n * @return Formatted value\r\n */\n\n\n Sprite.prototype.getTagValueFromObject = function (parts, object, format) {\n var current = object;\n var formatApplied = false;\n\n for (var i = 0, len = parts.length; i < len; i++) {\n var part = parts[i];\n\n if (part.prop) {\n // Regular property\n current = current[part.prop];\n\n if (!$type.hasValue(current)) {\n // Not set, return undefined\n return;\n }\n } else {\n // Method\n switch (part.method) {\n case \"formatNumber\":\n var numberValue = $utils.anyToNumber(current);\n\n if ($type.hasValue(numberValue)) {\n current = this.numberFormatter.format(numberValue, format || part.params[0] || undefined);\n formatApplied = true;\n }\n\n break;\n\n case \"formatDate\":\n var dateValue = void 0;\n\n if ($type.isString(current)) {\n dateValue = this.dateFormatter.parse(current);\n } else {\n dateValue = $utils.anyToDate(current);\n }\n\n if (!$type.isDate(dateValue) || $type.isNaN(dateValue.getTime())) {\n // Was not able to get date out of value, quitting and letting\n // calling method try another value\n return;\n }\n\n if ($type.hasValue(dateValue)) {\n current = this.dateFormatter.format(dateValue, format || part.params[0] || undefined);\n formatApplied = true;\n }\n\n break;\n\n case \"formatDuration\":\n var durationValue = $utils.anyToNumber(current);\n\n if ($type.hasValue(durationValue)) {\n current = this.durationFormatter.format(durationValue, format || part.params[0] || undefined, part.params[1] || undefined);\n formatApplied = true;\n }\n\n break;\n\n case \"urlEncode\":\n case \"encodeURIComponent\":\n current = encodeURIComponent(current);\n break;\n\n default:\n if (current[part.method]) {\n current[part.method].apply(this, part.params);\n }\n\n break;\n }\n }\n } // Apply default format if it wasn't applied explicitly\n\n\n if (!formatApplied) {\n var formatParts = [{\n method: \"\",\n params: format\n }];\n\n if (!$type.hasValue(format)) {\n // Format is not set\n // Determine from the type of the value\n if ($type.isNumber(current)) {\n formatParts[0].method = \"formatNumber\";\n formatParts[0].params = \"\";\n } else if ($type.isDate(current)) {\n formatParts[0].method = \"formatDate\";\n formatParts[0].params = \"\";\n }\n } else {\n // Format set\n // Try to determine formatter based on the format\n var formatterType = $utils.getFormat(format); // format\n\n if (formatterType === $strings.NUMBER) {\n formatParts[0].method = \"formatNumber\";\n } else if (formatterType === $strings.DATE) {\n formatParts[0].method = \"formatDate\";\n } else if (formatterType === $strings.DURATION) {\n formatParts[0].method = \"formatDuration\";\n }\n } // Apply format\n\n\n if (formatParts[0].method) {\n current = this.getTagValueFromObject(formatParts, current);\n }\n }\n\n return current;\n };\n\n Object.defineProperty(Sprite.prototype, \"dataItem\", {\n /**\r\n * @return [[DataItem]]\r\n */\n get: function get() {\n if (!this._dataItem) {\n if (this.virtualParent) {\n return this.virtualParent.dataItem;\n }\n\n if (this._parent) {\n return this._parent.dataItem;\n }\n }\n\n return this._dataItem;\n },\n\n /**\r\n * A [[DataItem]] to use as element's data source.\r\n *\r\n * @todo Review type\r\n * @param dataItem DataItem\r\n */\n set: function set(dataItem) {\n //an not use this[\"_dataItem\"] here, as we return parent data item if this sprite doesn't have one.\n // @todo:think about it\n this.setDataItem(dataItem);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets currently used [[DataItem]].\r\n *\r\n * If the element has also `configField` set, it will also look for any\r\n * config in DataItem's data context to apply to this element.\r\n *\r\n * @param dataItem DataItem\r\n */\n\n Sprite.prototype.setDataItem = function (dataItem) {\n var _this = this;\n\n if (this._dataItem != dataItem) {\n this._dataItem = dataItem;\n\n if (dataItem) {\n if (this.configField) {\n var dataContext_1 = dataItem.dataContext;\n\n if (dataContext_1) {\n this.config = dataContext_1[this.configField];\n\n if (!this.config && dataContext_1.dataContext) {\n this.config = dataContext_1.dataContext[this.configField];\n }\n }\n }\n\n var dataContext_2 = dataItem.dataContext;\n\n if (dataContext_2) {\n var dataContext2_1 = dataContext_2.dataContext;\n $object.each(this.propertyFields, function (propertyName, fieldValue) {\n if ($type.hasValue(dataContext_2[fieldValue])) {\n var anyThis = _this;\n anyThis[propertyName] = dataContext_2[fieldValue];\n } else {\n if (dataContext2_1) {\n var value = dataContext2_1[fieldValue];\n\n if ($type.hasValue(value)) {\n var anyThis = _this;\n anyThis[propertyName] = value;\n }\n }\n }\n });\n }\n }\n\n this.invalidate();\n }\n };\n /**\r\n * ==========================================================================\r\n * PROPERTY UTILITIES\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns element's property value.\r\n *\r\n * Will check if there are any bindings with [[DataItem]].\r\n *\r\n * Will also apply any adapters bound to `propertyName`.\r\n *\r\n * @param propertyName Property name\r\n * @return Property value\r\n */\n\n\n Sprite.prototype.getPropertyValue = function (propertyName) {\n var propValue = this.properties[propertyName]; // Apply adapter\n\n if (!this._isTemplate) {\n if (this._adapterO) {\n propValue = this._adapterO.apply(propertyName, propValue);\n }\n\n propValue = globalAdapter.applyAll(this, propertyName, propValue);\n }\n\n return propValue;\n };\n\n Sprite.prototype.setColorProperty = function (property, value, invalidate) {\n var currentValue = this.properties[property];\n\n if (value instanceof Color && currentValue instanceof Color && value.toString() == currentValue.toString()) {\n return false;\n } else {\n return this.setPropertyValue(property, value, invalidate);\n }\n };\n\n Sprite.prototype.setPercentProperty = function (property, value, invalidate, transform, precision, floor) {\n value = $type.toNumberOrPercent(value);\n\n if ($type.isNumber(value)) {\n if ($type.isNumber(precision)) {\n value = $math.round(value, precision, floor);\n }\n\n return this.setPropertyValue(property, value, invalidate, transform);\n } else {\n var currentValue = this.properties[property];\n\n if (value instanceof Percent && currentValue instanceof Percent && value.value == currentValue.value) {\n return false;\n } else {\n return this.setPropertyValue(property, value, invalidate, transform);\n }\n }\n };\n /**\r\n * Sets elements's property value. Will also propagate the same property value\r\n * on all element's clones.\r\n *\r\n * @param property Property\r\n * @param value Value\r\n * @param invalidate Should the sprite be invalidated, cause it's re-rendering\r\n * @param transform Re-apply positioning of the element\r\n * @return Did the value change? It will return `true` if the new value and the old value of the property are not the same\r\n * @todo Review propagation to clones. Right now we simply check if clone is disposed before setting the same property on it. It's better to remove from clone list altogether.\r\n */\n\n\n Sprite.prototype.setPropertyValue = function (property, value, invalidate, transform) {\n if (this.properties[property] !== value && !this.isDisposed()) {\n this.properties[property] = value;\n\n if (this.events.isEnabled(\"propertychanged\")) {\n var event_1 = {\n type: \"propertychanged\",\n target: this,\n property: property\n };\n this.events.dispatchImmediately(\"propertychanged\", event_1);\n }\n\n if (invalidate) {\n this.invalidate();\n }\n\n if (transform) {\n this.invalidatePosition();\n }\n\n if (this.applyOnClones) {\n var clones = this.clones.values;\n var length_2 = clones.length;\n\n for (var i = 0; i < length_2; ++i) {\n var clone = clones[i];\n\n if (!clone.isDisposed()) {\n //(<Sprite>clone).setPropertyValue(<any>property, value, invalidate, transform);\n clone[property] = value;\n }\n }\n }\n\n return true;\n }\n\n return false;\n };\n\n Sprite.prototype.bind = function (property, source, bindToProperty, modifier) {\n var _this = this;\n\n if (bindToProperty === void 0) {\n bindToProperty = property;\n }\n\n if ($type.hasValue(this._bindings[property])) {\n this._bindings[property].dispose();\n } // set current value\n\n\n this[property] = source[bindToProperty]; //source.addEventListener(AMEvent.PROPERTY_CHANGED, this.handleBindings, false, this);\n\n this._bindings[property] = source.events.on(\"propertychanged\", function (event) {\n if (event.property === bindToProperty) {\n var value = source[bindToProperty];\n\n if (modifier) {\n value = modifier(value);\n } // TODO clonesById\n\n\n _this[property] = value;\n }\n });\n };\n /**\r\n * Sets up and obeserver function to monitor changes in particular property\r\n * or properties.\r\n *\r\n * @ignore Exclude from docs\r\n * @param property Element's property name\r\n * @param listener Handler function\r\n * @param context Context for handler function\r\n * @returns Event Disposer\r\n */\n\n\n Sprite.prototype.observe = function (property, listener, context, shouldClone) {\n var _this = this;\n\n return new MultiDisposer($array.map($array.toArray(property), function (prop) {\n return _this.events.on(\"propertychanged\", function (e) {\n if (e.property === prop) {\n listener.call(context, e);\n }\n }, context, shouldClone);\n }));\n };\n /**\r\n * ==========================================================================\r\n * ACCESSIBILITY-RELATED PROPERTIES\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Applies accessibility to the SVG element.\r\n *\r\n * Adds `<title>` and `<description>` elements as well as `aria-labelledby`\r\n * and `role` properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.applyAccessibility = function () {\n // Check if we need to add label and description\n var title = this.readerTitle,\n description = this.readerDescription,\n role = this.role,\n hidden = this.readerHidden,\n checked = this.readerChecked,\n controls = this.readerControls,\n live = this.readerLive,\n orientation = this.readerOrientation,\n valueNow = this.readerValueNow,\n valueText = this.readerValueText; // Init label/describe ids\n\n var labelledByIds = [];\n var describedByIds = [];\n var labelledBy = this.readerLabelledBy;\n\n if (labelledBy) {\n labelledByIds.push(labelledBy);\n }\n\n var describedBy = this.readerDescribedBy;\n\n if (describedBy) {\n describedByIds.push(describedBy);\n } // Add arial-label attribute if present\n // If not readerTitle and labelledBy is set we will use <title> element\n // instead of aria-label\n // TODO: should we check agains this.showSystemTooltip?\n\n\n if (title) {\n if (labelledByIds.length || this.showSystemTooltip) {\n var titleElement = this.titleElement;\n var titleId = this.uid + \"-title\";\n\n if (titleElement.node.textContent != title) {\n titleElement.node.textContent = title;\n titleElement.attr({\n id: titleId\n });\n }\n\n labelledByIds.push(titleId);\n } else {\n if (this._titleElement) {\n this.group.removeElement(this._titleElement);\n this._titleElement = undefined;\n }\n\n this.setSVGAttribute({\n \"aria-label\": title\n });\n }\n } else {\n this.removeSVGAttribute(\"aria-label\");\n\n if (this._titleElement) {\n this.group.removeElement(this._titleElement);\n this._titleElement = undefined;\n }\n } // Add description\n\n\n if (description) {\n var descriptionElement = this.descriptionElement;\n var descriptionId = this.uid + \"-description\";\n\n if (descriptionElement.node.textContent != description) {\n descriptionElement.node.textContent = description;\n descriptionElement.attr({\n id: descriptionId\n });\n }\n\n describedByIds.push(descriptionId);\n } else if (this._descriptionElement) {\n this.group.removeElement(this._descriptionElement);\n this._descriptionElement = undefined;\n } // Add label and described properties\n\n\n if (labelledByIds.length) {\n this.setSVGAttribute({\n \"aria-labelledby\": labelledByIds.join(\" \")\n });\n } else {\n this.removeSVGAttribute(\"aria-labelledby\");\n }\n\n if (describedByIds.length) {\n this.setSVGAttribute({\n \"aria-describedby\": describedByIds.join(\" \")\n });\n } else {\n this.removeSVGAttribute(\"aria-describedby\");\n } // Apply role\n\n\n if (role) {\n this.setSVGAttribute({\n \"role\": role\n });\n } else {\n this.removeSVGAttribute(\"role\");\n } // Apply aria-hidden\n\n\n if (hidden) {\n this.setSVGAttribute({\n \"aria-hidden\": \"true\"\n });\n } else {\n this.removeSVGAttribute(\"aria-hidden\");\n } // Apply aria-checked\n\n\n if (checked) {\n this.setSVGAttribute({\n \"aria-checked\": \"true\"\n });\n } else if (checked === false) {\n this.setSVGAttribute({\n \"aria-checked\": \"false\"\n });\n } else {\n this.removeSVGAttribute(\"aria-checked\");\n } // Apply aria-controls\n\n\n if (controls) {\n this.setSVGAttribute({\n \"aria-controls\": controls\n });\n } else {\n this.removeSVGAttribute(\"aria-controls\");\n } // Apply aria-live\n\n\n if (live) {\n this.setSVGAttribute({\n \"aria-live\": live\n });\n } else {\n this.removeSVGAttribute(\"aria-live\");\n } // Apply aria-orientation\n\n\n if (orientation) {\n this.setSVGAttribute({\n \"aria-orientation\": orientation\n });\n } else {\n this.removeSVGAttribute(\"aria-orientation\");\n } // Apply aria-valuenow\n\n\n if (valueNow) {\n this.setSVGAttribute({\n \"aria-valuenow\": valueNow\n });\n } else {\n this.removeSVGAttribute(\"aria-valuenow\");\n } // Apply aria-valuetext\n\n\n if (valueText) {\n this.setSVGAttribute({\n \"aria-valuetext\": valueText\n });\n } else {\n this.removeSVGAttribute(\"aria-valuetext\");\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"readerTitle\", {\n /**\r\n * @return Title\r\n */\n get: function get() {\n var title = this.getPropertyValue(\"readerTitle\");\n\n if ($type.hasValue(title) && this.dataItem) {\n return this.populateString(title);\n }\n\n return title;\n },\n\n /**\r\n * Screen reader title of the element.\r\n *\r\n * @param value Title\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerTitle\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerDescription\", {\n /**\r\n * @return Description\r\n */\n get: function get() {\n var description = this.getPropertyValue(\"readerDescription\");\n\n if ($type.hasValue(description) && this.dataItem) {\n return this.populateString(description);\n }\n\n return this.getPropertyValue(\"readerDescription\");\n },\n\n /**\r\n * Screen reader description of the element.\r\n *\r\n * @param value Description\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerDescription\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"role\", {\n /**\r\n * @return Role\r\n */\n get: function get() {\n return this.getPropertyValue(\"role\");\n },\n\n /**\r\n * A WAI-ARIA role for the element.\r\n *\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#role_definitions} for more information on WAI-ARIA roles\r\n * @param value Role\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"role\", value)) {\n this.applyAccessibility();\n\n if (value == \"slider\") {\n this.setSVGAttribute({\n \"aria-valuemin\": \"0\"\n });\n this.setSVGAttribute({\n \"aria-valuemax\": \"100\"\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerHidden\", {\n /**\r\n * @return Hidden?\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerHidden\");\n },\n\n /**\r\n * Controls if element should be hidden from screen readers.\r\n *\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-hidden} for more information\r\n * @param value Hidden?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"readerHidden\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerChecked\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Checked?\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerChecked\");\n },\n\n /**\r\n * Controls if element is currently marked as \"checked\".\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-checked} for more information\r\n * @param value Checked?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"readerChecked\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerControls\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Setting value\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerControls\");\n },\n\n /**\r\n * A `uid` of an element this element controls.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-controls} for more information\r\n * @param value Setting value\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerControls\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerLive\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Setting value\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerLive\");\n },\n\n /**\r\n * Controls accessibility setting \"aria-live\" for the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions} for more information\r\n * @param value Setting value\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerLive\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerLabelledBy\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Target element\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerLabelledBy\");\n },\n\n /**\r\n * A `uid` of an element that describes this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby} for more information\r\n * @param value Target element\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerLabelledBy\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerDescribedBy\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Target element\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerDescribedBy\");\n },\n\n /**\r\n * A `uid` of an element that describes this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-describedby} for more information\r\n * @param value Target element\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerDescribedBy\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerOrientation\", {\n /**\r\n * @return Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerOrientation\");\n },\n\n /**\r\n * Orientation of the element.\r\n *\r\n * @since 4.7.16\r\n * @param value Orientation\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerOrientation\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerValueNow\", {\n /**\r\n * @return Current value\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerValueNow\");\n },\n\n /**\r\n * Current value of the element.\r\n *\r\n * @since 4.7.16\r\n * @param value Current value\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerValueNow\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"readerValueText\", {\n /**\r\n * @return Current value (text)\r\n */\n get: function get() {\n return this.getPropertyValue(\"readerValueText\");\n },\n\n /**\r\n * Text representation of the current value of the element.\r\n *\r\n * @since 4.7.16\r\n * @param value Current value (text)\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerValueText\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"keyboardOptions\", {\n /**\r\n * ==========================================================================\r\n * USER INTERACTIONS\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns elements keyboard options.\r\n *\r\n * @return Keyboard options\r\n */\n get: function get() {\n if (!this.interactions.keyboardOptions) {\n if (this.virtualParent) {\n return this.virtualParent.keyboardOptions;\n }\n\n if (this._parent) {\n return this._parent.keyboardOptions;\n }\n }\n\n return this.interactions.keyboardOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"mouseOptions\", {\n /**\r\n * Mouse options.\r\n *\r\n * Enables controlling options related to the mouse, for example sensitivity\r\n * of its mouse wheel.\r\n *\r\n * E.g. the below will reduce chart's wheel-zoom speed to half its default\r\n * speed:\r\n *\r\n * ```TypeScript\r\n * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"plotContainer\": {\r\n * \"mouseOptions\": {\r\n * \"sensitivity\": 0.5\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @return Mouse options\r\n */\n get: function get() {\n if (!this.interactions.mouseOptions) {\n if (this.virtualParent) {\n return this.virtualParent.mouseOptions;\n }\n\n if (this._parent) {\n return this._parent.mouseOptions;\n }\n }\n\n return this.interactions.mouseOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"interactions\", {\n /**\r\n * Returns (creates if necessary) an [[InteractionObject]] associated with\r\n * this element.\r\n *\r\n * [[InteractionObject]] is used to attach all kinds of user-interactions to\r\n * the element, e.g. click/touch, dragging, hovering, and similar events.\r\n *\r\n * @return Interaction object\r\n */\n get: function get() {\n if (!this._interaction) {\n var interaction = getInteraction().getInteraction(this.dom);\n this._interaction = interaction;\n this._interaction.clickable = this.clickable;\n this._interaction.hoverable = this.hoverable;\n this._interaction.trackable = this.trackable;\n this._interaction.draggable = this.draggable;\n this._interaction.swipeable = this.swipeable;\n this._interaction.resizable = this.resizable;\n this._interaction.wheelable = this.wheelable;\n this._interaction.contextMenuDisabled = this.contextMenuDisabled;\n this._interaction.inert = this.inert;\n this._interaction.sprite = this;\n\n this._disposers.push(this._interaction);\n }\n\n return this._interaction;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns true if interactions object was created. Mostly used just to avoid creating interactions object if not needed.\r\n * @return Is Sprite interactive?\r\n */\n\n Sprite.prototype.isInteractive = function () {\n if (this._interaction) {\n return true;\n } else {\n return false;\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"focusable\", {\n /**\r\n * @return Can element be focused?\r\n */\n get: function get() {\n return this.getPropertyValue(\"focusable\");\n },\n\n /**\r\n * ==========================================================================\r\n * ELEMENT FOCUS-RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Controls if the element can gain focus.\r\n *\r\n * Focusable element will be selectable via TAB key.\r\n *\r\n * Please note, clicking it with a mouse or touching will not add focus to\r\n * it.\r\n *\r\n * Focused element will show a system-specific highlight, which might ruin\r\n * the overal look. This is why we don't focus element on click/touch.\r\n *\r\n * A default setting varies for different elements. By default all elements\r\n * are not focusable, except certain items like buttons, legend items, etc.\r\n *\r\n * @default undefined (auto)\r\n * @param value Can element be focused?\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"focusable\", value)) {\n if (!value && !this.isInteractive()) {} else {\n this.interactions.focusable = value;\n\n if (value) {\n this.setSVGAttribute({\n \"focusable\": value\n });\n\n if (!this._tabindex) {\n this.tabindex = 0;\n }\n } else {\n this.removeSVGAttribute(\"focusable\");\n this.tabindex = undefined;\n } // Set focus events that would apply \"focus\" state\n // setEventDisposer will also remove listeners if value == false\n\n\n this.interactions.setEventDisposer(\"sprite-focusable\", value, function () {\n return new MultiDisposer([_this.events.on(\"blur\", _this.handleBlur, _this, false), _this.events.on(\"focus\", _this.handleFocus, _this, false)]);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Applies filters (if set) when element gains focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Original event\r\n */\n\n Sprite.prototype.handleFocus = function (ev) {\n if (this.focusable) {\n if (this.topParent) {\n this.topParent.hasFocused = true;\n this.topParent.focusedElement = this;\n }\n\n if (this.focusFilter) {\n // Any `filters` manipulation will trigger `applyFilters()` so we don't\n // need to call it here\n this.filters.push(this.focusFilter);\n }\n\n if (this.hoverOnFocus) {\n // Trigger a hover event as well\n this.isHover = true;\n this.handleOver();\n }\n }\n };\n /**\r\n * Removes focus filter (if set) when elementloses focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Original event\r\n */\n\n\n Sprite.prototype.handleBlur = function (ev) {\n if (this.focusable) {\n if (this.topParent) {\n this.topParent.hasFocused = false;\n this.topParent.focusedElement = undefined;\n }\n\n if (this.focusFilter) {\n // Any `filters` manipulation will trigger `applyFilters()` so we don't\n // need to call it here\n this.filters.removeValue(this.focusFilter);\n }\n\n if (this.hoverOnFocus) {\n // Trigger a out event as well\n this.isHover = false;\n this.handleOut();\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"focusFilter\", {\n /**\r\n * A reference to a [[Filter]] to apply to element when it gains focus.\r\n *\r\n * Normally, browsers will draw a default ugly square around focused element,\r\n * which totally makes sense because its purpose is to help identify active\r\n * element for visually impaired people.\r\n *\r\n * However, if you would rather apply a filter, so you can modify how focused\r\n * element looks like, use `focusFilter`.\r\n *\r\n * Simply set it to an anstance of [[FocusFilter]], or any other filter\r\n * object.\r\n *\r\n * ```TypeScript\r\n * chart.focusFilter = new am4core.FocusFilter();\r\n * ```\r\n * ```JavaScript\r\n * chart.focusFilter = new am4core.FocusFilter();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"focusFilter\": {\r\n * \"type\": \"FocusFilter\"\r\n * },\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link Filter}\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/accessibility/} more about accessibility\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/changing-appearance-of-focused-items/} cusomizing focus appearance\r\n * @ignore Exclude from docs\r\n * @return Focused element filter\r\n */\n get: function get() {\n /*if (!this._focusFilter) {\r\n this._focusFilter = new FocusFilter();\r\n this._disposers.push(this._focusFilter);\r\n }*/\n //return this._focusFilter;\n var focusFilter = this._focusFilter;\n\n if (focusFilter) {\n return focusFilter;\n }\n\n if (this.virtualParent) {\n return this.virtualParent.focusFilter;\n } else if (this._parent) {\n return this._parent.focusFilter;\n } //this._focusFilter = new FocusFilter();\n //this._disposers.push(this._focusFilter);\n\n },\n\n /**\r\n * @see {@link Filter}\r\n * @ignore Exclude from docs\r\n * @todo This is still experimental, don't use it\r\n */\n set: function set(value) {\n this._focusFilter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"hoverOnFocus\", {\n /**\r\n * @return Trigger hover on focus?\r\n */\n get: function get() {\n return this.getPropertyValue(\"hoverOnFocus\");\n },\n\n /**\r\n * If set to `true`, this element will also trigger `\"over\"` event with all\r\n * the related consequences, like \"hover\" state being applied and tooltip\r\n * being shown.\r\n *\r\n * Useful as an accessibility feature to display rollover tooltips on items\r\n * selected via keyboard.\r\n *\r\n * @param value Trigger hover on focus?\r\n * @default false\r\n */\n set: function set(value) {\n if (value !== this.hoverOnFocus) {\n this.setPropertyValue(\"hoverOnFocus\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tabindex\", {\n /**\r\n * @return TAB index\r\n */\n get: function get() {\n var index = this._tabindex;\n\n if (index != null) {\n return index;\n } else if (this.virtualParent) {\n return this.virtualParent.tabindex;\n } else if (this._parent) {\n return this._parent.tabindex;\n }\n },\n\n /**\r\n * Sets or returns TAB index.\r\n *\r\n * Tab index maintains the order in which focusable elements gain focus when\r\n * TAB key is pressed.\r\n *\r\n * Please note, tab index is not local to the chart. It affects the whole\r\n * of the page, including non-SVG elements. Maintain extreme causion when\r\n * setting tab indexes, as it affects the user experience for the whole\r\n * web page.\r\n *\r\n * @param value TAB index\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n\n if (this.setPropertyValue(\"tabindex\", value) && $type.isNumber(value)) {\n this.interactions.tabindex = value;\n this.setSVGAttribute({\n \"tabindex\": value\n });\n this._tabindex = value;\n\n if (value > -1) {\n this.focusable = true;\n } else {\n this.focusable = undefined;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"inertiaOptions\", {\n /**\r\n * ==========================================================================\r\n * DRAGGING AND RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns element's options to be used for inertia. This setting is\r\n * inheritable, meaning that if not set directly, it will search in all its\r\n * ascendants until very top.\r\n *\r\n * Inertia is used only if element's `inert` is set to `true`.\r\n *\r\n * \"Inert\" element, when dragged and released, will carry the momentum of the\r\n * movement, and will continue moving in the same drag direction, gradually\r\n * reducing in speed until finally stops.\r\n *\r\n * Check [[IInertiaOptions]] for how you tweak inertia animations.\r\n *\r\n * @return Inertia options\r\n */\n get: function get() {\n if (!this.interactions.inertiaOptions) {\n if (this._parent) {\n return this._parent.inertiaOptions;\n }\n }\n\n return this.interactions.inertiaOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"draggable\", {\n /**\r\n * @return `true` if element can be dragged\r\n */\n get: function get() {\n return this.getPropertyValue(\"draggable\");\n },\n\n /**\r\n * Controls if the element is draggable.\r\n *\r\n * @param value `true` if element can be dragged\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"draggable\", value)) {\n if (!value && !this.isInteractive()) {} else {\n this.applyCursorStyle();\n this.interactions.draggable = value; //interaction.processDraggable(this);\n // Add events\n // @todo Maybe attach to InteractionObject's multidisposer so that\n // sprites events get disposed together with them?\n // this.interactions.disposers.getItem(\"movable\")\n // setEventDisposer will also remove listeners if value == false\n\n this.interactions.setEventDisposer(\"sprite-draggable\", value, function () {\n return new MultiDisposer([_this.events.on(\"down\", _this.handleDown, _this, false), _this.events.on(\"dragstart\", _this.handleDragStart, _this, false), _this.events.on(\"drag\", _this.handleDragMove, _this, false), _this.events.on(\"dragstop\", _this.handleDragStop, _this, false)]);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Executes when dragged element is being started to drag.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype.handleDragStart = function (ev) {\n if (!this.interactions.isTouchProtected || !ev.touch) {\n this.interactions.originalPosition = {\n x: this.pixelX,\n y: this.pixelY\n };\n this._isDragged = true;\n this.hideTooltip(0);\n }\n };\n /**\r\n * Tell this element to start being dragged. This is useful if you want to\r\n * drag items by interactions performed not directly on the target element.\r\n *\r\n * Parameter `pointer` is highly recommended. By passing in the Pointer you\r\n * will ensure that movement is tracked for the pointer that you want. If not\r\n * supplied, the system will try to determine the most logical pointer.\r\n *\r\n * However this may fail if you have more than one pointer active, which\r\n * might happen if you have several objects being dragged on a touch device.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer to use for movement\r\n */\n\n\n Sprite.prototype.dragStart = function (pointer) {\n //this.dragStop(pointer);\n //this.draggable = true;\n this._isDragged = true;\n getInteraction().dragStart(this.interactions, pointer);\n };\n /**\r\n * Executes when dragged element is being dropped.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype.handleDragStop = function (ev) {\n if (!this.interactions.isTouchProtected || !ev.touch) {\n this._isDragged = false;\n this.showTooltip();\n this.interactions.originalPosition = undefined;\n }\n };\n /**\r\n * Stops manually initiated dragging of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer to use as a reference\r\n */\n\n\n Sprite.prototype.dragStop = function (pointer, cancelled) {\n //this.draggable = false;\n this._isDragged = false;\n getInteraction().dragStop(this.interactions, pointer, cancelled); //this.handleDragStop();\n };\n /**\r\n * Executes when {Sprite} is being dragged.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n * @todo Implement parent position offset calculation\r\n */\n\n\n Sprite.prototype.handleDragMove = function (ev) {\n if (!this.interactions.isTouchProtected || !ev.touch) {\n var point = this.interactions.originalPosition;\n\n if (point && this._isDragged) {\n var globalScale = this._parent.globalScale * this.svgContainer.cssScale;\n this.moveTo({\n x: point.x + ev.shift.x / globalScale,\n y: point.y + ev.shift.y / globalScale\n }, undefined, undefined, true);\n }\n\n this.dispatchImmediately(\"dragged\", ev);\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"inert\", {\n /**\r\n * @return `true` if element should use inertia when animated\r\n */\n get: function get() {\n return this.getPropertyValue(\"inert\");\n },\n\n /**\r\n * Controls if the element should use inertia when interacted with.\r\n *\r\n * \"Inert\" element, when dragged and released, will carry the momentum of the\r\n * movement, and will continue moving in the same drag direction, gradually\r\n * reducing in speed until finally stops.\r\n *\r\n * @default false\r\n * @param value `true` if element should use inertia when animated\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"inert\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.interactions.inert = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"hoverOptions\", {\n /**\r\n * ==========================================================================\r\n * HOVERING\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns Sprite's hover options.\r\n *\r\n * @see {@link IHoverOptions} for available options.\r\n * @return Options\r\n */\n get: function get() {\n if (!this.interactions.hoverOptions) {\n if (this.virtualParent) {\n return this.virtualParent.hoverOptions;\n }\n\n if (this._parent) {\n return this._parent.hoverOptions;\n }\n }\n\n return this.interactions.hoverOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"hoverable\", {\n /**\r\n * @return `true` if element is hoverable\r\n */\n get: function get() {\n return this.getPropertyValue(\"hoverable\");\n },\n\n /**\r\n * Controls if the element is hoverable (hover events are registered).\r\n *\r\n * Use `over` and `out` events, to watch for those respective actions.\r\n *\r\n * @default false\r\n * @param value `true` if element can be hovered\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"hoverable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.applyCursorStyle();\n this.interactions.hoverable = value; // setEventDisposer will also remove listeners if value == false\n\n this.interactions.setEventDisposer(\"sprite-hoverable\", value, function () {\n return new MultiDisposer([_this.events.on(\"over\", _this.handleOver, _this, false), _this.events.on(\"out\", _this.handleOut, _this, false)]);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles tasks when element becomes hovered:\r\n * * Shows [[Tooltip]] if applicable\r\n * * Applies \"hover\" state\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n Sprite.prototype.handleOver = function (ev) {\n if (this._outTimeout) {\n this._outTimeout.dispose();\n }\n\n if (this.isHover) {\n if (this.states.hasKey(\"hover\")) {\n //this.setState(\"hover\");\n // This will check `isHover` and will set \"hover\" state\n if (!this.isHidden) {\n this.applyCurrentState();\n }\n }\n\n var point = void 0;\n\n if (ev && ev.pointer) {\n point = $utils.documentPointToSvg(ev.pointer.point, this.svgContainer.SVGContainer, this.svgContainer.cssScale);\n }\n\n if (this.showTooltipOn == \"hover\") {\n this.showTooltip(point);\n }\n } else {\n if (this.showTooltipOn == \"hover\") {\n this.hideTooltip();\n }\n\n if (!this.isHidden && this.states.hasKey(\"hover\")) {\n this.applyCurrentState();\n }\n }\n };\n /**\r\n * Handles tasks when element loses hover:\r\n *\r\n * * Hides [[Tooltip]]\r\n * * Applies default state\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev [description]\r\n */\n\n\n Sprite.prototype.handleOut = function (ev) {\n var _this = this;\n\n if (this.tooltip && this.tooltip.targetSprite == this && this.tooltip.keepTargetHover) {\n this._outTimeout = this.setTimeout(function () {\n if (!_this.tooltip.isHover) {\n if (_this.tooltip.targetSprite == _this) {\n _this.hideTooltip();\n }\n\n _this._outTimeout = _this.setTimeout(_this.handleOutReal.bind(_this), _this.rollOutDelay);\n }\n }, 10);\n return;\n }\n\n if (this.showTooltipOn == \"hover\") {\n this.hideTooltip();\n }\n\n this._outTimeout = this.setTimeout(this.handleOutReal.bind(this), this.rollOutDelay);\n };\n /**\r\n * [handleOutReal description]\r\n *\r\n * @ignore\r\n * @todo description\r\n */\n\n\n Sprite.prototype.handleOutReal = function () {\n if (!this.isHidden && !this.isHiding && this.states.hasKey(\"hover\")) {\n this.applyCurrentState();\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"hitOptions\", {\n /**\r\n * ==========================================================================\r\n * CLICKING/TAPPING AND TOGGLING STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns Sprite's click (hit) options.\r\n *\r\n * Click (hit) options control things like double-click, timeouts, etc.\r\n *\r\n * @see {@link IHitOptions} for available options.\r\n * @return Options\r\n */\n get: function get() {\n if (!this.interactions.hitOptions) {\n if (this.virtualParent) {\n return this.virtualParent.hitOptions;\n }\n\n if (this._parent) {\n return this._parent.hitOptions;\n }\n }\n\n return this.interactions.hitOptions;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Prepares element's after `down` event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event\r\n */\n\n Sprite.prototype.handleDown = function (ev) {\n if (this.interactions.downPointers.length === 1) {\n this.interactions.originalPosition = {\n x: this.pixelX,\n y: this.pixelY\n };\n this.interactions.originalAngle = this.rotation;\n this.interactions.originalScale = this.scale;\n\n if (this.states.hasKey(\"down\")) {\n this.setState(\"down\");\n }\n }\n };\n /**\r\n * Prepares element's after `up` event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event\r\n */\n\n\n Sprite.prototype.handleUp = function (ev) {\n var _this = this;\n /*if (!this.isDown) {\r\n this.interactions.originalPosition = null;\r\n this.interactions.originalAngle = null;\r\n this.interactions.originalScale = null;\r\n }*/\n\n\n this._isResized = false;\n\n if (this.states.hasKey(\"down\")) {\n this.applyCurrentState();\n }\n\n if (this.showTooltipOn == \"hit\") {\n this.updateTooltipPosition(ev.pointer ? ev.pointer.point : undefined);\n\n this._disposers.push(registry.events.once(\"exitframe\", function () {\n _this.showTooltip();\n }));\n\n this._disposers.push(getInteraction().body.events.once(\"down\", function (ev) {\n _this.hideTooltip();\n }));\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"clickable\", {\n /**\r\n * @return {boolean}\r\n */\n get: function get() {\n return this.getPropertyValue(\"clickable\");\n },\n\n /**\r\n * Indicates if the element is clickable.\r\n *\r\n * Some type of the elements, like buttons are clickable by default.\r\n *\r\n * Most of the elements are not clickable by default.\r\n *\r\n * Use `hit`, `doublehit`, `up`, `down`, `toggled` events to watch for\r\n * respective click/touch actions.\r\n *\r\n * @param value `true` if element can be clicked\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"clickable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.applyCursorStyle();\n this.interactions.clickable = value; // setEventDisposer will also remove listeners if value == false\n\n this.interactions.setEventDisposer(\"sprite-clickable\", value, function () {\n return new MultiDisposer([_this.events.on(\"down\", _this.handleDown, _this, false), _this.events.on(\"up\", _this.handleUp, _this, false)]);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"togglable\", {\n /**\r\n * @return Is togglable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"togglable\");\n },\n\n /**\r\n * Indicates if element can be toggled on and off by subsequent clicks/taps.\r\n *\r\n * Togglable element will alternate its `isActive` property between `true`\r\n * and `false` with each click.\r\n *\r\n * @param value Is togglable?\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"togglable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n // setEventDisposer will also remove listeners if value == false\n this.interactions.setEventDisposer(\"sprite-togglable\", value, function () {\n return _this.events.on(\"hit\", _this.handleToggle, _this, false);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles toggling of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event\r\n */\n\n Sprite.prototype.handleToggle = function (ev) {\n this.isActive = !this.isActive;\n };\n\n Object.defineProperty(Sprite.prototype, \"contextMenuDisabled\", {\n /**\r\n * @return Context menu disabled?\r\n */\n get: function get() {\n return this.getPropertyValue(\"contextMenuDisabled\");\n },\n\n /**\r\n * Should element prevent context menu to be displayed, e.g. when\r\n * right-clicked?\r\n *\r\n * @default false\r\n * @param value Context menu disabled?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"contextMenuDisabled\", value)) {\n this.interactions.contextMenuDisabled = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"url\", {\n /**\r\n * @return URL\r\n */\n get: function get() {\n return this.getPropertyValue(\"url\");\n },\n\n /**\r\n * Click-through URL for this element.\r\n *\r\n * If set, clicking/tapping this element will open the new URL in a target\r\n * window/tab as set by `urlTarget`.\r\n *\r\n * Please note that URL will be parsed by data placeholders in curly\r\n * brackets, to be populated from data. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.columns.template.url = \"https://www.google.com/search?q={category.urlEncode()}\";\r\n * ```\r\n * ```JavaScript\r\n * series.columns.template.url = \"https://www.google.com/search?q={category.urlEncode()}\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"columns\": {\r\n * \"url\": \"https://www.google.com/search?q={category.urlEncode()}\"\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @param value URL\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"url\", value)) {\n if (this._urlDisposer) {\n this._urlDisposer.dispose();\n } // If URL is not empty, set up events\n\n\n if ($utils.isNotEmpty(value)) {\n this._urlDisposer = this.events.on(\"hit\", this.urlHandler, this, false); // Set other required parameters\n\n this.clickable = true;\n this.cursorOverStyle = MouseCursorStyle.pointer;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"baseId\", {\n /**\r\n * [baseId description]\r\n *\r\n * @ignore\r\n * @return [description]\r\n */\n get: function get() {\n if (!this._baseId && this._parent) {\n this.baseId = this._parent.baseId;\n }\n\n return this._baseId;\n },\n\n /**\r\n * [baseId description]\r\n *\r\n * @ignore\r\n * @param value [description]\r\n */\n set: function set(value) {\n this.setBaseId(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Sprite.prototype.setBaseId = function (value) {\n if (value != this._baseId) {\n if (this.invalid) {\n this.invalid = false;\n registry.removeFromInvalidSprites(this);\n this.invalidate();\n }\n\n this._baseId = value;\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"baseSprite\", {\n /**\r\n * Returns the mail chart object that this element belongs to.\r\n *\r\n * In most cases it will mean the chart object.\r\n *\r\n * Can be used to retrieve chart object in various events and adapters.\r\n *\r\n * ```TypeScript\r\n * chart.seriesContainer.events.on(\"hit\", function(ev) {\r\n * console.log(ev.target.baseSprite);\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * chart.seriesContainer.events.on(\"hit\", function(ev) {\r\n * console.log(ev.target.baseSprite);\r\n * });\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"seriesContainer\": {\r\n * \"events\": {\r\n * \"hit\": function(ev) {\r\n * console.log(ev.target.baseSprite);\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @readonly\r\n * @return Base chart object\r\n */\n get: function get() {\n if (this.isBaseSprite) {\n return this;\n } else if (this._parent) {\n return this._parent.baseSprite;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"urlTarget\", {\n /**\r\n * @return URL target\r\n */\n get: function get() {\n return this.getPropertyValue(\"urlTarget\");\n },\n\n /**\r\n * Target to use for URL clicks:\r\n *\r\n * * _blank\r\n * * _self (default)\r\n * * _parent\r\n * * _top\r\n * * Name of the window/frame\r\n *\r\n * Ignored if `url` is not set.\r\n *\r\n * @param value URL target\r\n */\n set: function set(value) {\n this.setPropertyValue(\"urlTarget\", value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles URL transition on element click.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev An event object\r\n */\n\n Sprite.prototype.urlHandler = function (ev) {\n // Is URL set?\n if ($utils.isNotEmpty(this.url)) {\n // Proceed to the URL\n var url = this.populateString(this.url);\n\n if (this.urlTarget === \"_self\") {\n window.location.href = url;\n } else {\n window.open(url, this.urlTarget);\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"swipeOptions\", {\n /**\r\n * ==========================================================================\r\n * SWIPING GESTURE TRACKING\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns element's swipe gesture options.\r\n *\r\n * @return Swipe gesture options\r\n */\n get: function get() {\n if (!this.interactions.swipeOptions) {\n if (this.virtualParent) {\n return this.virtualParent.swipeOptions;\n }\n\n if (this._parent) {\n return this._parent.swipeOptions;\n }\n }\n\n return this.interactions.swipeOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"swipeable\", {\n /**\r\n * @return Element swipable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"swipeable\");\n },\n\n /**\r\n * Controls if element is swipeable.\r\n *\r\n * Swipable element will invoke `swipe`, `swipeleft` and `swiperight` events,\r\n * when quick horizontal drag action is performed with either mouse or touch.\r\n *\r\n * Please note that combining swipe and drag is possible, however will incur\r\n * a slight but noticeable delay in drag start.\r\n *\r\n * @param value Element swipable?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"swipeable\", value)) {\n this.applyCursorStyle();\n\n if (!value && !this.isInteractive()) {// void\n } else {\n this.interactions.swipeable = value;\n } //interaction.processSwipeable(this);\n\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"trackable\", {\n /**\r\n * @return Track cursor movement over element?\r\n */\n get: function get() {\n return this.getPropertyValue(\"trackable\");\n },\n\n /**\r\n * ==========================================================================\r\n * POINTER TRACKING\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Indicates if the element is trackable (mouse position over it is reported to\r\n * event listeners).\r\n *\r\n * Will invoke `track` events whenever pointer (cursor) changes position\r\n * while over element.\r\n *\r\n * Please note, touch devices will also invoke `track` events when touch\r\n * point is moved while holding down on a trackable element.\r\n *\r\n * @param value Track cursor movement over element?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"trackable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.applyCursorStyle();\n this.interactions.trackable = value;\n } //interaction.processTrackable(this);\n\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"wheelable\", {\n /**\r\n * @return Mouse wheel events enabled?\r\n */\n get: function get() {\n return this.getPropertyValue(\"wheelable\");\n },\n\n /**\r\n * ==========================================================================\r\n * MOUSE-WHEEL RELATED\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Indicates if the element can be interacted with mouse wheel.\r\n *\r\n * Will invoke `wheel`, `wheelup`, `wheeldown`, `wheelleft`, and `wheelright`\r\n * events when using mouse wheel over the element.\r\n *\r\n * @param value Mouse wheel events enabled?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"wheelable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.applyCursorStyle();\n this.interactions.wheelable = value;\n } //interaction.processWheelable(this);\n\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"resizable\", {\n /**\r\n * @return Element resizable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"resizable\");\n },\n\n /**\r\n * ==========================================================================\r\n * RESIZE\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Indicates if this element is resizable.\r\n *\r\n * Enabling resize will turn on various interactions on the element. Their\r\n * actual functionality will depend on other properties.\r\n *\r\n * If the element also `draggable`, resize will only happen with two points\r\n * of contact on a touch device.\r\n *\r\n * If the element is not draggable, resize can be performed with just one\r\n * point of contact, touch or mouse.\r\n *\r\n * Will invoke `resize` event every time the size of the element changes.\r\n *\r\n * @param value Element resizable?\r\n */\n set: function set(value) {\n var _this = this;\n\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"resizable\", value)) {\n if (!value && !this.isInteractive()) {// void\n } else {\n this.applyCursorStyle();\n this.interactions.resizable = value; // setEventDisposer will also remove listeners if value == false\n\n this.interactions.setEventDisposer(\"sprite-resizable\", value, function () {\n return new MultiDisposer([_this.events.on(\"down\", _this.handleDown, _this, false), _this.events.on(\"resize\", _this.handleResize, _this, false)]);\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles resize intermediate step.\r\n *\r\n * By default this method resizes actual element. Each element, can override\r\n * this method to implement their own resize logic.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\n\n Sprite.prototype.handleResize = function (ev) {\n if (!this.interactions.isTouchProtected || !ev.touch) {\n this._isResized = true;\n this.scale = this.interactions.originalScale * ev.scale;\n this.validatePosition();\n /*center: (io.draggable\r\n ? $math.getMidPoint(point1, point2)\r\n : {\r\n \"x\": io.originalPosition.x,\r\n \"y\": io.originalPosition.y\r\n })*/\n //this.moveTo(this.originalPosition.x + ev.shift.x, this.originalPosition.y + ev.shift.y);\n\n if (this.draggable || this.dragWhileResize) {\n this._isDragged = false;\n var svgPoint1 = $utils.documentPointToSvg(ev.point1, this.htmlContainer, this.svgContainer.cssScale);\n var svgPoint2 = $utils.documentPointToSvg(ev.point2, this.htmlContainer, this.svgContainer.cssScale);\n var svgMidPoint = $math.getMidPoint(svgPoint1, svgPoint2);\n var parentPoint1 = $utils.documentPointToSprite(ev.startPoint1, this._parent);\n var parentPoint2 = $utils.documentPointToSprite(ev.startPoint2, this._parent);\n var originalPosition = this.interactions.originalPosition;\n var originalScale = this.interactions.originalScale;\n\n if (originalPosition) {\n var spritePoint1 = {\n x: (parentPoint1.x - originalPosition.x) / originalScale,\n y: (parentPoint1.y - originalPosition.y) / originalScale\n };\n var spritePoint2 = {\n x: (parentPoint2.x - originalPosition.x) / originalScale,\n y: (parentPoint2.y - originalPosition.y) / originalScale\n };\n var spriteMidPoint = $math.getMidPoint(spritePoint1, spritePoint2);\n var parentPoint = $utils.svgPointToSprite(svgMidPoint, this._parent);\n this.moveTo({\n x: parentPoint.x - spriteMidPoint.x * this.scale,\n y: parentPoint.y - spriteMidPoint.y * this.scale\n }, undefined, undefined, true);\n }\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"cursorOptions\", {\n /**\r\n * ==========================================================================\r\n * MOUSE-RELATED\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Returns element's cursor options.\r\n *\r\n * Cursor options usually define cursor style for various states of the\r\n * hovered element.\r\n *\r\n * Elements inherit `cursorOptions` from their parents if they don't have\r\n * them set explicitly.\r\n *\r\n * @see {@link ICursorOptions} for a list of available options\r\n * @return Cursor options\r\n */\n get: function get() {\n if (!this.interactions.cursorOptions) {\n if (this.virtualParent) {\n return this.virtualParent.cursorOptions;\n }\n\n if (this._parent) {\n return this._parent.cursorOptions;\n }\n }\n\n return this.interactions.cursorOptions;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"cursorOverStyle\", {\n /**\r\n * A shortcut to setting mouse cursor on hover.\r\n *\r\n * Example:\r\n *\r\n * ```TypeScript\r\n * series.slices.template.cursorOverStyle = am4core.MouseCursorStyle.pointer;\r\n * ```\r\n * ```JavaScript\r\n * series.slices.template.cursorOverStyle = am4core.MouseCursorStyle.pointer;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": {\r\n * // ...\r\n * \"slices\": {\r\n * \"cursorOverStyle\": \"pointer\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @param style An array of styles to apply onhover\r\n */\n set: function set(style) {\n if (!this.cursorOptions.overStyle) {\n this.interactions.cursorOptions = {\n defaultStyle: this.cursorOptions.defaultStyle\n };\n }\n\n this.cursorOptions.overStyle = style;\n getInteraction().applyCursorOverStyle(this.interactions);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"cursorDownStyle\", {\n /**\r\n * A shortcut to setting mouse cursor when button is pressed down.\r\n *\r\n * Example:\r\n *\r\n * ```TypeScript\r\n * series.slices.template.cursorDownStyle = am4core.MouseCursorStyle.grabbing;\r\n * ```\r\n * ```JavaScript\r\n * series.slices.template.cursorDownStyle = am4core.MouseCursorStyle.grabbing;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": {\r\n * // ...\r\n * \"slices\": {\r\n * \"cursorDownStyle\": \"grabbing\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @param style An array of styles to apply onhover\r\n */\n set: function set(style) {\n this.cursorOptions.downStyle = style;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Applies default cursor styles for interactable elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Determine if this is necessary. Maybe let's not apply any cursor styles by default\r\n */\n\n Sprite.prototype.applyCursorStyle = function () {// Draggable styles\n\n /*if (this.draggable) {\r\n if (!$type.hasValue(this.cursorOptions.overStyle)) {\r\n this.cursorOptions.overStyle = MouseCursorStyle.grab;\r\n }\r\n if (!$type.hasValue(this.cursorOptions.downStyle)) {\r\n this.cursorOptions.downStyle = MouseCursorStyle.grabbing;\r\n }\r\n }*/\n };\n\n Object.defineProperty(Sprite.prototype, \"interactionsEnabled\", {\n /**\r\n * @return Is interaction enabled for this element?\r\n */\n get: function get() {\n var value = this.getPropertyValue(\"interactionsEnabled\");\n\n if (value === false) {\n return false;\n }\n\n if (this.virtualParent) {\n return this.virtualParent.interactionsEnabled;\n }\n\n if (this._parent) {\n return this._parent.interactionsEnabled;\n }\n\n return true;\n },\n\n /**\r\n * Setting this to `false` will effectively disable all interactivity on the\r\n * element.\r\n *\r\n * @param value Is interaction enabled for this element?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"interactionsEnabled\", value)) {\n var pointerEvents = null; // must be null, not \"null\"!\n\n if (!value) {\n pointerEvents = \"none\";\n } else {\n // this is for IE\n this.group.node.style.pointerEvents = \"\";\n }\n\n this.group.node.style.pointerEvents = pointerEvents;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"exporting\", {\n /**\r\n * @return Export instance\r\n */\n get: function get() {\n return this.getExporting();\n },\n\n /**\r\n * ==========================================================================\r\n * EXPORT-RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * An [[Export]] instance.\r\n *\r\n * Used to access API of the chart export functionality.\r\n *\r\n * If `exporting` is not set, the element inherits [[Export]] instance from\r\n * its parents.\r\n *\r\n * Upon request, if no parent has such instance, a new one is created, using\r\n * default settings, what in most cases is just enough.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/exporting/} for more info about exporting\r\n * @param exp Export\r\n */\n set: function set(exp) {\n this._exporting.set(exp, exp);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * This is here as a method so that inheriting classes could override it.\r\n *\r\n * @return Export instance\r\n */\n\n Sprite.prototype.getExporting = function () {\n var _export = this._exporting.get();\n\n if (_export) {\n return _export;\n } else {\n if (this.isStandaloneInstance || !this._parent) {\n _export = new Export(this.svgContainer.SVGContainer);\n _export.sprite = this;\n _export.language = this.language;\n _export.numberFormatter = this.numberFormatter;\n _export.dateFormatter = this.dateFormatter;\n _export.durationFormatter = this.durationFormatter;\n\n this._exporting.set(_export, _export);\n } else {\n return this._parent.exporting;\n }\n }\n\n return _export;\n };\n\n Object.defineProperty(Sprite.prototype, \"exportable\", {\n /**\r\n * @return Export?\r\n */\n get: function get() {\n return this._exportable;\n /*const svgContainer = this.svgContainer;\r\n return !svgContainer || $array.indexOf(svgContainer.nonExportableSprites, this) == -1;*/\n },\n\n /**\r\n * If set to `false` this element will be omitted when exporting the chart\r\n * to an image.\r\n *\r\n * @default true\r\n * @param value Export?\r\n */\n set: function set(value) {\n var svgContainer = this.svgContainer;\n this._exportable = value;\n\n if (svgContainer) {\n if (value) {\n $array.remove(svgContainer.nonExportableSprites, this);\n } else if ($array.indexOf(svgContainer.nonExportableSprites, this) == -1) {\n svgContainer.nonExportableSprites.push(this);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * ==========================================================================\r\n * MODAL/POPUP RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Private method to be used for \"classPrefix\" adapter for modals/popups.\r\n *\r\n * @param value Prefix\r\n */\n\n Sprite.prototype.modalPrefix = function (value) {\n value = options.classNamePrefix + value;\n return value;\n };\n\n Object.defineProperty(Sprite.prototype, \"modal\", {\n /**\r\n * Returns a [[Modal]] instance, associated with this chart.\r\n * (elements top parent)\r\n *\r\n * Accessing modal does not make it appear. To make a modal appear, use\r\n * `showModal()` method.\r\n *\r\n * @see {@link Modal} for more information about using Modal windows\r\n * @return Modal instance\r\n */\n get: function get() {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n var modal = svgContainer.modal;\n\n if (!modal.adapter.has(\"classPrefix\", this.modalPrefix)) {\n modal.adapter.add(\"classPrefix\", this.modalPrefix);\n }\n\n return modal;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Opens a modal window with specific content (`text` parameter) and,\r\n * optionally, `title`.\r\n *\r\n * The `text` parameter can contain HTML content.\r\n *\r\n * @see {@link Modal} for more information about using Modal windows\r\n * @param text Modal contents\r\n * @param title Title for the modal window\r\n */\n\n Sprite.prototype.openModal = function (text, title) {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n return svgContainer.openModal(text, title);\n }\n };\n /**\r\n * Hides modal window if there is one currently open.\r\n */\n\n\n Sprite.prototype.closeModal = function () {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n svgContainer.closeModal();\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"popups\", {\n /**\r\n * A list of popups for this chart.\r\n *\r\n * @return Popups\r\n */\n get: function get() {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n var popups = svgContainer.popups;\n popups.template.sprite = this;\n\n if (!popups.template.adapter.has(\"classPrefix\", this.modalPrefix)) {\n popups.template.adapter.add(\"classPrefix\", this.modalPrefix);\n }\n\n return popups;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates, opens, and returns a new [[Popup]] window.\r\n *\r\n * `text` can be any valid HTML.\r\n *\r\n * `title` is currently not supported.\r\n *\r\n * @param text Popup contents\r\n * @param title Popup title\r\n * @return Popup instance\r\n */\n\n Sprite.prototype.openPopup = function (text, title) {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n return svgContainer.openPopup(text, title);\n }\n };\n /**\r\n * Closes all currently open popup windows\r\n */\n\n\n Sprite.prototype.closeAllPopups = function () {\n var svgContainer = this.svgContainer;\n\n if (svgContainer) {\n svgContainer.closeAllPopups();\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"x\", {\n /**\r\n * @return X coordinate\r\n */\n get: function get() {\n return this.getPropertyValue(\"x\");\n },\n\n /**\r\n * ==========================================================================\r\n * POSITIONAL PROPERTIES AND RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Element's absolute or relative X coordinate.\r\n *\r\n * If setting both X and Y, please consider using `moveTo()` method instead,\r\n * as it will be faster to set both coordinates at once.\r\n *\r\n * @param value X coordinate\r\n */\n set: function set(value) {\n if (!this.isDragged) {\n this.setPercentProperty(\"x\", value, false, true, this._positionPrecision, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelX\", {\n /**\r\n * Returns element's current absolute X coordinate in pixels.\r\n *\r\n * @readonly\r\n * @return X coordinate (px)\r\n */\n get: function get() {\n var value = $math.fitToRange(this.getPixelX(this.x), this.minX, this.maxX);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelX\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeX\", {\n /**\r\n * Returns element's current relative X coordinate in [[Percent]].\r\n *\r\n * @return X coordinate ([[Percent]])\r\n */\n get: function get() {\n if (!this._adapterO) {\n return this.getRelativeX(this.x);\n } else {\n return this._adapterO.apply(\"relativeX\", this.getRelativeX(this.x));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"minX\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Min X (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minX\");\n },\n\n /**\r\n * The smallest allowable absolute X coordinate for this element.\r\n *\r\n * This is used to contain element movement within certain boundaries.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Min X (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"minX\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"maxX\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Max X (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxX\");\n },\n\n /**\r\n * The biggest allowable absolute X coordinate for this element.\r\n *\r\n * This is used to contain element movement within certain boundaries.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Max X (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"maxX\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"y\", {\n /**\r\n * @return Y coordinate\r\n */\n get: function get() {\n return this.getPropertyValue(\"y\");\n },\n\n /**\r\n * Element's absolute or relative Y coordinate.\r\n *\r\n * If setting both X and Y, please consider using `moveTo()` method instead,\r\n * as it will be faster to set both coordinates at once.\r\n *\r\n * @param value Y coordinate\r\n */\n set: function set(value) {\n if (!this.isDragged) {\n this.setPercentProperty(\"y\", value, false, true, this._positionPrecision, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelY\", {\n /**\r\n * Returns element's current absolute Y coordinate in pixels.\r\n *\r\n * @readonly\r\n * @return Y coordinate (px)\r\n */\n get: function get() {\n var value = $math.fitToRange(this.getPixelY(this.y), this.minY, this.maxY);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelY\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeY\", {\n /**\r\n * Returns element's current relative Y coordinate in [[Percent]].\r\n *\r\n * @readonly\r\n * @return Y coordinate ([[Percent]])\r\n */\n get: function get() {\n if (!this._adapterO) {\n return this.getRelativeX(this.y);\n } else {\n return this._adapterO.apply(\"relativeY\", this.getRelativeX(this.y));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"minY\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Min Y (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minY\");\n },\n\n /**\r\n * The smallest allowable absolute Y coordinate for this element.\r\n *\r\n * This is used to contain element movement within certain boundaries.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Min Y (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"minY\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"maxY\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Max Y (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxY\");\n },\n\n /**\r\n * The biggest allowable absolute Y coordinate for this element.\r\n *\r\n * This is used to contain element movement within certain boundaries.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Max Y (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"maxY\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"dx\", {\n /**\r\n * @return Horizontal offset (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"dx\");\n },\n\n /**\r\n * A horizontal offset for the element in pixels.\r\n *\r\n * Can be negative value for offset to the left.\r\n *\r\n * @param value Horizontal offset (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"dx\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"dy\", {\n /**\r\n * @return Vertical offset (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"dy\");\n },\n\n /**\r\n * A vertical offset for the element in pixels.\r\n *\r\n * Can be negative value for offset upwards.\r\n *\r\n * @param value Vertical offset (px)\r\n */\n set: function set(value) {\n if ($type.isNumber(value)) {\n value = $math.round(value, this._positionPrecision, true);\n this.setPropertyValue(\"dy\", value, false, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"rotation\", {\n /**\r\n * @return Rotation (0-360)\r\n */\n get: function get() {\n return this.getPropertyValue(\"rotation\");\n },\n\n /**\r\n * Rotation of the element in degrees. (0-360)\r\n *\r\n * Note: For convenience purposes, negative values (for counter-clockwise\r\n * rotation) and values exceeding 360 can also be used.\r\n *\r\n * @param value Rotation (0-360)\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n this.setPropertyValue(\"rotation\", value, false, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"align\", {\n /**\r\n * @return Horizontal align\r\n */\n get: function get() {\n return this.getPropertyValue(\"align\");\n },\n\n /**\r\n * Controls horizontal alignment of the element.\r\n *\r\n * This is used by parent [[Container]] when layouting its children.\r\n *\r\n * @param value Horizontal align\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"align\", value)) {\n if (this._parent) {\n this._parent.invalidateLayout();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"valign\", {\n /**\r\n * @return Vertical align\r\n */\n get: function get() {\n return this.getPropertyValue(\"valign\");\n },\n\n /**\r\n * Controls vertical alignment of the element.\r\n *\r\n * This is used by parent [[Container]] when layouting its children.\r\n *\r\n * @param value Vertical align\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"valign\", value)) {\n if (this._parent) {\n this._parent.invalidateLayout();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"horizontalCenter\", {\n /**\r\n * @return Horizontal center\r\n */\n get: function get() {\n return this.getPropertyValue(\"horizontalCenter\");\n },\n\n /**\r\n * Controls which part of the element to treat as a horizontal center.\r\n *\r\n * The setting will be used when positioning, resizing and rotating the\r\n * element.\r\n *\r\n * @param value Horizontal center\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"horizontalCenter\", value)) {\n this.updateCenter();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"verticalCenter\", {\n /**\r\n * @return Vertical center\r\n */\n get: function get() {\n return this.getPropertyValue(\"verticalCenter\");\n },\n\n /**\r\n * Controls which part of the element to treat as a vertical center.\r\n *\r\n * The setting will be used when positioning, resizing and rotating the\r\n * element.\r\n *\r\n * @param value Vertical center\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"verticalCenter\", value)) {\n this.updateCenter();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"maxWidth\", {\n /**\r\n * @return Maximum width (px)\r\n */\n get: function get() {\n var maxWidth = this.getPropertyValue(\"maxWidth\");\n\n if (!$type.isNumber(maxWidth)) {\n if (this._parent) {\n var parentWidth = this._parent.maxWidth;\n\n if (this._parent.layout != \"absolute\" && this.align != \"none\" && this.align != undefined) {\n parentWidth = parentWidth - this.pixelMarginLeft - this.pixelMarginRight;\n }\n\n return parentWidth;\n }\n }\n\n return maxWidth;\n },\n\n /**\r\n * ==========================================================================\r\n * DIMENSIONAL PROPERTIES AND RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Maximum allowed width for the element in pixels.\r\n *\r\n * @param value Maximum width (px)\r\n */\n set: function set(value) {\n this.setMaxWidth(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Sprite.prototype.setMaxWidth = function (value) {\n var prevWidth = this.maxWidth;\n var prevHeight = this.maxHeight;\n\n if (this.setPropertyValue(\"maxWidth\", value)) {\n if ($type.isNumber(this.relativeWidth)) {\n this.invalidate();\n }\n\n var event_2 = {\n type: \"maxsizechanged\",\n target: this,\n previousWidth: prevWidth,\n previousHeight: prevHeight\n };\n this.dispatchImmediately(\"maxsizechanged\", event_2);\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"maxHeight\", {\n /**\r\n * @return Maximum height (px)\r\n */\n get: function get() {\n var maxHeight = this.getPropertyValue(\"maxHeight\");\n\n if (!$type.isNumber(maxHeight)) {\n if (this._parent) {\n var parentHeight = this._parent.maxHeight;\n\n if (this._parent.layout != \"absolute\" && this.valign != \"none\" && this.valign != undefined) {\n parentHeight = parentHeight - this.pixelMarginTop - this.pixelMarginBottom;\n }\n\n return parentHeight;\n }\n }\n\n return maxHeight;\n },\n\n /**\r\n * Maximum allowed height for the element in pixels.\r\n *\r\n * @param value Maximum height (px)\r\n */\n set: function set(value) {\n this.setMaxHeight(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Sprite.prototype.setMaxHeight = function (value) {\n var prevWidth = this.maxWidth;\n var prevHeight = this.maxHeight;\n\n if (this.setPropertyValue(\"maxHeight\", value)) {\n if ($type.isNumber(this.relativeHeight)) {\n this.invalidate();\n }\n\n var event_3 = {\n type: \"maxsizechanged\",\n target: this,\n previousWidth: prevWidth,\n previousHeight: prevHeight\n };\n this.dispatchImmediately(\"maxsizechanged\", event_3);\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"minWidth\", {\n /**\r\n * @return Minimum width (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minWidth\");\n },\n\n /**\r\n * Minimum width of the element in pixels.\r\n *\r\n * Set to `undefined` to remove the limit.\r\n *\r\n * @param value Minimum width (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minWidth\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"minHeight\", {\n /**\r\n * @return Minimum height (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minHeight\");\n },\n\n /**\r\n * Minimum height for the element in pixels.\r\n *\r\n * Set to `undefined` to remove the limit.\r\n *\r\n * @param value Minimum height (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minHeight\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"width\", {\n /**\r\n * @return Width (absolute or relative)\r\n */\n get: function get() {\n return this.getPropertyValue(\"width\");\n },\n\n /**\r\n * Element's absolute or relative width.\r\n *\r\n * The width can either be absolute, set in numeric pixels, or relative, set\r\n * in [[Percent]].\r\n *\r\n * Relative width will be calculated using closest measured ancestor\r\n * [[Container]].\r\n *\r\n * NOTE: `width` is an accessor, which allows setting width in pixels or\r\n * percent. It is a sort of a \"shortcut\" for the users. Actual renderer does\r\n * not ever use it. It uses either `pixelWidth` or `percentWidth`, so if\r\n * you need to add an adapter for width add it for either of the two\r\n * properties - whichever suits your requirements.\r\n *\r\n * @param value Width (numeric in pixels or relative)\r\n */\n set: function set(value) {\n var changed = this.setPercentProperty(\"width\", value, true, false, this._positionPrecision, true);\n\n if (changed) {\n this.percentWidth = undefined;\n this.relativeWidth = undefined;\n\n if (value instanceof Percent) {\n this.percentWidth = value.percent;\n\n if ($type.isNumber(this._pixelWidth)) {\n this.maxWidth = undefined;\n }\n\n this._pixelWidth = undefined;\n } else {\n this._pixelWidth = Number(value); //this._measuredWidth = this._pixelWidth;\n\n this.maxWidth = this._pixelWidth;\n }\n\n this.invalidatePosition();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"height\", {\n /**\r\n * @return height (absolute or relative)\r\n */\n get: function get() {\n return this.getPropertyValue(\"height\");\n },\n\n /**\r\n * Element's absolute or relative height.\r\n *\r\n * The height can either be absolute, set in numeric pixels, or relative, set\r\n * in [[Percent]].\r\n *\r\n * Relative height will be calculated using closest measured ancestor\r\n * [[Container]].\r\n *\r\n * NOTE: `height` is an accessor, which allows setting height in pixels or\r\n * percent. It is a sort of a \"shortcut\" for the users. Actual renderer does\r\n * not ever use it. It uses either `pixelHeight` or `percentHeight`, so if\r\n * you need to add an adapter for height add it for either of the two\r\n * properties - whichever suits your requirements.\r\n *\r\n * @param value Height (numeric in pixels or relative)\r\n */\n set: function set(value) {\n var changed = this.setPercentProperty(\"height\", value, true, false, this._positionPrecision, true);\n\n if (changed) {\n this.percentHeight = undefined;\n this._relativeHeight = undefined;\n\n if (value instanceof Percent) {\n this.percentHeight = value.percent;\n\n if ($type.isNumber(this._pixelHeight)) {\n this.maxHeight = undefined;\n }\n\n this._pixelHeight = undefined;\n } else {\n this._pixelHeight = Number(value); //this._measuredHeight = this._pixelHeight;\n\n this.maxHeight = this._pixelHeight; // yes, we reset maxWidth\n }\n\n this.invalidatePosition();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelWidth\", {\n /**\r\n * Returns element's width in pixels, if width was set. For actual width use measuredWidth property.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\n get: function get() {\n var width;\n\n if ($type.isNumber(this.percentWidth)) {\n width = this.maxWidth;\n } else if ($type.isNumber(this._pixelWidth)) {\n width = this._pixelWidth;\n } else {\n width = 0;\n }\n\n var minWidth = this.minWidth;\n\n if (minWidth != null && width < minWidth) {\n width = minWidth;\n }\n\n var value = $math.round(width, this._positionPrecision, true);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelWidth\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelHeight\", {\n /**\r\n * Returns element's height in pixels. For actual height use measuredHeight property.\r\n *\r\n * @readonly\r\n * @return Height (px)\r\n */\n get: function get() {\n var height;\n\n if ($type.isNumber(this.percentHeight)) {\n height = this.maxHeight;\n } else if ($type.isNumber(this._pixelHeight)) {\n height = this._pixelHeight;\n } else {\n height = 0; //this._measuredHeightSelf;\n }\n\n var minHeight = this.minHeight;\n\n if (minHeight != null && height < minHeight) {\n height = minHeight;\n }\n\n var value = $math.round(height, this._positionPrecision, true);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelHeight\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeWidth\", {\n /**\r\n * @return Relative width\r\n * @ignore\r\n */\n get: function get() {\n var relativeWidth = this._relativeWidth;\n\n if ($type.isNumber(relativeWidth)) {\n if (!this._adapterO) {\n return relativeWidth;\n } else {\n return this._adapterO.apply(\"relativeWidth\", relativeWidth);\n }\n }\n },\n\n /**\r\n * Element's relative width in [[Percent]].\r\n * @ignore\r\n *\r\n * @param value Relative width\r\n */\n set: function set(value) {\n if (this._relativeWidth != value) {\n this._relativeWidth = value; //\t\t\tthis.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeHeight\", {\n /**\r\n * @return Relative height\r\n * @ignore\r\n */\n get: function get() {\n var relativeHeight = this._relativeHeight;\n\n if ($type.isNumber(relativeHeight)) {\n if (!this._adapterO) {\n return relativeHeight;\n } else {\n return this._adapterO.apply(\"relativeHeight\", relativeHeight);\n }\n }\n },\n\n /**\r\n * Element's relative height in [[Percent]].\r\n *\r\n * @param value Relative height\r\n * @ignore\r\n */\n set: function set(value) {\n if (this._relativeHeight != value) {\n this._relativeHeight = value; //\t\t\tthis.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"measuredWidth\", {\n /**\r\n * Returns element's measured width in pixels.\r\n *\r\n * A measured width is actual width of contents plus `paddingRight` and* `paddingLeft`, relative to sprite parent, meaning that\r\n * rotation and scale is taken into account.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\n get: function get() {\n if (this.disabled || this.__disabled) {\n return 0;\n }\n\n if (!this._adapterO) {\n return this._measuredWidth;\n } else {\n return this._adapterO.apply(\"measuredWidth\", this._measuredWidth);\n } // it's not good to fit to min/max range as then rotations and scale won't be taken into account\n //return this.adapter.apply(\"measuredWidth\", $math.fitToRange(this._measuredWidth, this.minWidth, this.maxWidth));\n\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"measuredHeight\", {\n /**\r\n * Returns elements's measured height in pixels.\r\n *\r\n * A measured height is actual height of contents plus `paddingTop` and `paddingBottom`, relative to sprite parent, meaning that\r\n * rotation and scale taken into account.\r\n *\r\n * @readonly\r\n * @return Height (px)\r\n */\n get: function get() {\n if (this.disabled || this.__disabled) {\n return 0;\n } // it's not good to fit to min/max range as then rotations and scale won't be taken into account\n //return this.adapter.apply(\"measuredHeight\", $math.fitToRange(this._measuredHeight, this.minHeight, this.maxHeight));\n\n\n if (!this._adapterO) {\n return this._measuredHeight;\n } else {\n return this._adapterO.apply(\"measuredHeight\", this._measuredHeight);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"outerWidth\", {\n /**\r\n * Returns element's measured width plus its left and right margins in\r\n * pixels.\r\n *\r\n * @readonly\r\n * @return Outer width (px)\r\n */\n get: function get() {\n var value = this.pixelWidth + this.pixelMarginRight + this.pixelMarginLeft;\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"outerWidth\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"outerHeight\", {\n /**\r\n * Returns element's measured height plus its top and bottom margins in\r\n * pixels.\r\n *\r\n * @readonly\r\n * @return Outer height (px)\r\n */\n get: function get() {\n var value = this.pixelHeight + this.pixelMarginTop + this.pixelMarginBottom;\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"outerHeight\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"innerWidth\", {\n /**\r\n * Returns element's measured inner width in pixels.\r\n *\r\n * Inner width is actual available space for content, e.g. element's width\r\n * minus horizontal padding.\r\n *\r\n * @readonly\r\n * @return Inner width (px)\r\n */\n get: function get() {\n var value = Math.max(0, this.pixelWidth - this.pixelPaddingRight - this.pixelPaddingLeft);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"innerWidth\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"innerHeight\", {\n /**\r\n * Returns element's measured inner height in pixels.\r\n *\r\n * Inner height is actual available space for content, e.g. element's height\r\n * minus vertical padding.\r\n *\r\n * @readonly\r\n * @return Inner height (px)\r\n */\n get: function get() {\n var value = Math.max(0, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"innerHeight\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"globalScale\", {\n /**\r\n * Returns element's current \"global\" scale.\r\n *\r\n * Scale values accumulate over hierarchy of elements.\r\n *\r\n * E.g. if a [[Container]] has `scale = 2` and it's child has a `scale = 2`,\r\n * the child's `globalScale` will be 4. (a multitude of `2 x 2`)\r\n *\r\n * @readonly\r\n * @return Global scale\r\n */\n get: function get() {\n var scale = this.scale;\n\n if (this._parent) {\n scale = scale * this._parent.globalScale;\n }\n\n if (!this._adapterO) {\n return scale;\n } else {\n return this._adapterO.apply(\"globalScale\", scale);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"scale\", {\n /**\r\n * @return Scale (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"scale\");\n },\n\n /**\r\n * Scale of the element.\r\n *\r\n * The scale is set from 0 (element reduced to nothing) to 1 (default size).\r\n * * 2 will mean element is increased twice.\r\n * * 0.5 - reduced by 50%.\r\n *\r\n * Etc.\r\n *\r\n * @param value Scale (0-1)\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n\n if (value < 0) {\n value = 0;\n }\n\n if (value != this.getPropertyValue(\"scale\")) {\n this.setPropertyValue(\"scale\", value, false, true);\n this.handleGlobalScale();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets all four margins for the element at once.\r\n *\r\n * Margins are set in pixels.\r\n *\r\n * @param top Top margin\r\n * @param right Right margin\r\n * @param bottom Bottom margin\r\n * @param left Left margin\r\n * @return Current element\r\n */\n\n Sprite.prototype.margin = function (top, right, bottom, left) {\n this.marginTop = top;\n this.marginRight = right;\n this.marginBottom = bottom;\n this.marginLeft = left;\n return this;\n };\n\n Object.defineProperty(Sprite.prototype, \"marginLeft\", {\n /**\r\n * @return Margin value\r\n */\n get: function get() {\n return this.getPropertyValue(\"marginLeft\");\n },\n\n /**\r\n * Left margin - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Margin value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"marginLeft\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"marginRight\", {\n /**\r\n * @return Margin value\r\n */\n get: function get() {\n return this.getPropertyValue(\"marginRight\");\n },\n\n /**\r\n * Right margin - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Margin value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"marginRight\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"marginTop\", {\n /**\r\n * @return Margin value\r\n */\n get: function get() {\n return this.getPropertyValue(\"marginTop\");\n },\n\n /**\r\n * Top margin - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Margin value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"marginTop\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"marginBottom\", {\n /**\r\n * @return Margin value\r\n */\n get: function get() {\n return this.getPropertyValue(\"marginBottom\");\n },\n\n /**\r\n * Bottom margin - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Margin value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"marginBottom\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelMarginRight\", {\n /**\r\n * Returns current right margin in pixels.\r\n *\r\n * @readonly\r\n * @return Right margin (px)\r\n */\n get: function get() {\n var value = this.getPixelX(this.marginRight);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelMarginRight\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeMarginRight\", {\n /**\r\n * Returns current relative right margin.\r\n *\r\n * @readonly\r\n * @return Relative right margin\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n var value = this.getRelativeX(this.marginRight);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"relativeMarginRight\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelMarginLeft\", {\n /**\r\n * Returns current left margin in pixels.\r\n *\r\n * @readonly\r\n * @return Left margin (px)\r\n */\n get: function get() {\n var value = this.getPixelX(this.marginLeft);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelMarginLeft\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeMarginLeft\", {\n /**\r\n * Returns current relative left margin.\r\n *\r\n * @readonly\r\n * @return Relative left margin\r\n */\n get: function get() {\n //@todo Maybe use [[Percent]]?\n var value = this.getRelativeX(this.marginLeft);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"relativeMarginLeft\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelMarginTop\", {\n /**\r\n * Returns current top margin in pixels.\r\n *\r\n * @readonly\r\n * @return Top margin (px)\r\n */\n get: function get() {\n var value = this.getPixelY(this.marginTop);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelMarginTop\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeMarginTop\", {\n /**\r\n * Returns current relative top margin.\r\n *\r\n * @readonly\r\n * @return Relative top margin\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n var value = this.getRelativeY(this.marginTop);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"relativeMarginTop\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelMarginBottom\", {\n /**\r\n * Returns current bottom margin in pixels.\r\n *\r\n * @readonly\r\n * @return Bottom margin (px)\r\n */\n get: function get() {\n var value = this.getPixelY(this.marginBottom);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"pixelMarginBottom\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativeMarginBottom\", {\n /**\r\n * Returns current relative bottom margin.\r\n *\r\n * @readonly\r\n * @return Relative bottom margin\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n var value = this.getRelativeY(this.marginBottom);\n\n if (!this._adapterO) {\n return value;\n } else {\n return this._adapterO.apply(\"relativeMarginBottom\", value);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets padding for the element in pixels.\r\n *\r\n * @param top Top padding (px)\r\n * @param right Right padding (px)\r\n * @param bottom Bottom padding (px)\r\n * @param left Left padding (px)\r\n * @return Element\r\n */\n\n Sprite.prototype.padding = function (top, right, bottom, left) {\n this.paddingTop = top;\n this.paddingRight = right;\n this.paddingBottom = bottom;\n this.paddingLeft = left;\n return this;\n };\n\n Object.defineProperty(Sprite.prototype, \"paddingLeft\", {\n /**\r\n * @return Padding value\r\n */\n get: function get() {\n return this.getPropertyValue(\"paddingLeft\");\n },\n\n /**\r\n * Left padding - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Padding value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"paddingLeft\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"paddingRight\", {\n /**\r\n * @return Padding value\r\n */\n get: function get() {\n return this.getPropertyValue(\"paddingRight\");\n },\n\n /**\r\n * Right padding - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Padding value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"paddingRight\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"paddingTop\", {\n /**\r\n * @return Padding value\r\n */\n get: function get() {\n return this.getPropertyValue(\"paddingTop\");\n },\n\n /**\r\n * Top padding - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Padding value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"paddingTop\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"paddingBottom\", {\n /**\r\n * @return Padding value\r\n */\n get: function get() {\n return this.getPropertyValue(\"paddingBottom\");\n },\n\n /**\r\n * Bottom padding - absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Padding value\r\n */\n set: function set(value) {\n this.setPercentProperty(\"paddingBottom\", value, true, true, this._positionPrecision, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelPaddingRight\", {\n /**\r\n * Returns current right padding in pixels.\r\n *\r\n * @readonly\r\n * @return Right padding (px)\r\n */\n get: function get() {\n return this.getPixelX(this.paddingRight);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativePaddingRight\", {\n /**\r\n * Returns current relative right padding.\r\n *\r\n * @readonly\r\n * @return Relative right padding\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n return this.getRelativeX(this.paddingRight);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelPaddingLeft\", {\n /**\r\n * Returns current left padding in pixels.\r\n *\r\n * @readonly\r\n * @return Left padding (px)\r\n */\n get: function get() {\n return this.getPixelX(this.paddingLeft);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativePaddingLeft\", {\n /**\r\n * Returns current relative left padding.\r\n *\r\n * @readonly\r\n * @return Relative left padding\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n return this.getRelativeX(this.paddingLeft);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelPaddingTop\", {\n /**\r\n * Returns current top padding in pixels.\r\n *\r\n * @readonly\r\n * @return Top padding (px)\r\n */\n get: function get() {\n return this.getPixelY(this.paddingTop);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativePaddingTop\", {\n /**\r\n * Returns current relative top padding.\r\n *\r\n * @readonly\r\n * @return Relative top padding\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n return this.getRelativeY(this.paddingTop);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelPaddingBottom\", {\n /**\r\n * Returns current bottom padding in pixels.\r\n *\r\n * @readonly\r\n * @return Bottom padding (px)\r\n */\n get: function get() {\n return this.getPixelY(this.paddingBottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"relativePaddingBottom\", {\n /**\r\n * Returns current relative bottom padding.\r\n *\r\n * @readonly\r\n * @return Relative bottom padding\r\n */\n get: function get() {\n // @todo Maybe use [[Percent]]?\n return this.getRelativeY(this.paddingBottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"path\", {\n /**\r\n * @return Path of a Sprite element\r\n */\n get: function get() {\n return this.getPropertyValue(\"path\");\n },\n\n /**\r\n * ==========================================================================\r\n * APPEARANCE-RELATED PROPERTIES AND RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Path of Sprite element\r\n */\n set: function set(value) {\n this.setPath(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n Sprite.prototype.setPath = function (value) {\n if (this.setPropertyValue(\"path\", value)) {\n if (this._adapterO) {\n value = this._adapterO.apply(\"path\", value);\n }\n\n if (!this._isPath) {\n if (!this.element || this.element.node && !(this.element.node instanceof SVGPathElement)) {\n this.element = this.paper.add(\"path\");\n }\n\n this._isPath = true;\n }\n\n if ($type.hasValue(value)) {\n this.element.attr({\n \"d\": value\n });\n } else {\n this.element.removeAttr(\"d\");\n }\n\n this.invalidatePosition(); // otherwise is 0x0\n\n if (!this.inited) {\n this.events.once(\"inited\", this.validatePosition, this, false);\n }\n\n return true;\n }\n\n return false;\n };\n\n Object.defineProperty(Sprite.prototype, \"fillModifier\", {\n /**\r\n * @return Fill color modifier\r\n */\n get: function get() {\n return this.getPropertyValue(\"fillModifier\");\n },\n\n /**\r\n * [[ColorModifier]] that can be used to modify color and pattern of the\r\n * element's fill, e.g. create gradients.\r\n *\r\n * @param value Fill color modifiier\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"fillModifier\", value)) {\n this.setFill(this.fill);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeModifier\", {\n /**\r\n * @return Stroke color modifier\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeModifier\");\n },\n\n /**\r\n * [[ColorModifier]] that can be used to modify color and pattern of the\r\n * element's stroke (outline), e.g. create gradients.\r\n *\r\n * @param value Stroke color modifier\r\n */\n set: function set(value) {\n this.setPropertyValue(\"strokeModifier\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"fillOpacity\", {\n /**\r\n * @return Opacity (0-9)\r\n */\n get: function get() {\n return this.getPropertyValue(\"fillOpacity\");\n },\n\n /**\r\n * Element's fill opacity.\r\n *\r\n * Opacity ranges from 0 (fully transparent) to 1 (fully opaque).\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n value = $math.toNumberRange(value, 0, 1);\n\n if (this.setPropertyValue(\"fillOpacity\", value)) {\n this.setSVGAttribute({\n \"fill-opacity\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"fill\", {\n /**\r\n * @return Fill\r\n */\n get: function get() {\n return this.getPropertyValue(\"fill\");\n },\n\n /**\r\n * Element's fill color or pattern.\r\n *\r\n * @param value Fill\r\n */\n set: function set(value) {\n this.setFill(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\n\n Sprite.prototype.setFill = function (value) {\n if (!$type.isObject(value) || \"r\" in value) {\n value = toColor(value);\n }\n\n if (this.setColorProperty(\"fill\", value) || this.fillModifier) {\n // this can not go into next if, as value is turned to Gradient\n if (value instanceof Color) {\n if (this.fillModifier) {\n value = this.fillModifier.modify(value);\n }\n }\n\n this.realFill = value; // todo: review this place when some Color type will be added\n\n if (value instanceof Color) {\n this.setSVGAttribute({\n \"fill\": value.toString()\n });\n } else if (!$type.hasValue(value)) {\n this.removeSVGAttribute(\"fill\");\n } else if (value instanceof Pattern || value instanceof LinearGradient || value instanceof RadialGradient) {\n var fill = value;\n fill.paper = this.paper;\n this.setSVGAttribute({\n \"fill\": \"url(\\\"\" + $utils.getBaseURI() + fill.id + \"\\\")\"\n });\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"opacity\", {\n /**\r\n * @return Opacity (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"opacity\");\n },\n\n /**\r\n * Element's opacity.\r\n *\r\n * Opacity setting can range from 0 (fully transparent) to 1 (fully opaque).\r\n *\r\n * ATTENTION: It is highly not recommended to use `opacity` directly on the\r\n * element. The charts use `opacity` to hide/show elements, so your setting\r\n * might be lost if element is hidden and then later shown.\r\n *\r\n * Instead use methods `hide()` and `show()` to completely toggle off and on\r\n * the element.\r\n *\r\n * Or, use properties `fillOpacity` and `strokeOpacity`, if you need to make\r\n * the element semi-transparent.\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n value = $math.toNumberRange(value, 0, 1);\n\n if (this.setPropertyValue(\"opacity\", value)) {\n this.setSVGAttribute({\n \"opacity\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"stroke\", {\n /**\r\n * @return Stroke setting\r\n */\n get: function get() {\n return this.getPropertyValue(\"stroke\");\n },\n\n /**\r\n * Element's stroke (outline) color or pattern.\r\n *\r\n * @param value Stroke setting\r\n */\n set: function set(value) {\n this.setStroke(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets actual `stroke` property on the SVG element, including applicable\r\n * color modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Stroke setting\r\n */\n\n Sprite.prototype.setStroke = function (value) {\n if (!$type.isObject(value) || \"r\" in value) {\n value = toColor(value);\n }\n\n if (this.setColorProperty(\"stroke\", value) || this.strokeModifier) {\n // this can not go into next if, as value is turned to Gradient\n if (value instanceof Color) {\n if (this.strokeModifier) {\n value = this.strokeModifier.modify(value);\n }\n }\n\n this.realStroke = value;\n\n if (value instanceof Color) {\n if (value.hex == \"none\") {\n this.removeSVGAttribute(\"stroke\");\n } else {\n this.setSVGAttribute({\n \"stroke\": value.toString()\n });\n }\n } else if (!$type.hasValue(value)) {\n this.removeSVGAttribute(\"stroke\");\n } else if (value instanceof Pattern || value instanceof LinearGradient || value instanceof RadialGradient) {\n var stroke = value;\n stroke.paper = this.paper;\n this.setSVGAttribute({\n \"stroke\": \"url(\\\"\" + $utils.getBaseURI() + stroke.id + \"\\\")\"\n });\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"strokeOpacity\", {\n /**\r\n * @return Opacity (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeOpacity\");\n },\n\n /**\r\n * Stroke (outline) opacity.\r\n *\r\n * The values may range from 0 (fully transparent) to 1 (fully opaque).\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n value = $math.toNumberRange(value, 0, 1);\n\n if (this.setPropertyValue(\"strokeOpacity\", value)) {\n this.setSVGAttribute({\n \"stroke-opacity\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"nonScalingStroke\", {\n /**\r\n * @return Do not scale stroke (outline)\r\n */\n get: function get() {\n return this.getPropertyValue(\"nonScalingStroke\");\n },\n\n /**\r\n * Controls if the element's stroke (outline) should remain keep constant\r\n * thicnkess and do not scale when the whole element is resized.\r\n *\r\n * @param value Do not scale stroke (outline)\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.setPropertyValue(\"nonScalingStroke\", value)) {\n this.strokeWidth = this.strokeWidth;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"nonScaling\", {\n /**\r\n * @return Is element scaleable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"nonScaling\");\n },\n\n /**\r\n * Controls if element should keep constant size and not scale even if there is\r\n * space available, or it does not fit.\r\n *\r\n * @param value Is element scaleable?\r\n */\n set: function set(value) {\n // @todo Description (review)\n value = $type.toBoolean(value);\n this.setPropertyValue(\"nonScaling\", value, false, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeWidth\", {\n /**\r\n * @return Thickness (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeWidth\");\n },\n\n /**\r\n * Stroke (outline) thickness in pixels.\r\n *\r\n * @param value Thickness (px)\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n this.setPropertyValue(\"strokeWidth\", value, true);\n\n if (this.nonScalingStroke) {\n if (!$type.isNumber(value)) {\n value = 1;\n }\n\n value = value / this.globalScale;\n }\n\n this.setSVGAttribute({\n \"stroke-width\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeDasharray\", {\n /**\r\n * @return `stroke-dasharray`\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeDasharray\");\n },\n\n /**\r\n * A `stroke-dasharray` for the stroke (outline).\r\n *\r\n * \"Dasharray\" allows setting rules to make lines dashed, dotted, etc.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray} for more info on `stroke-dasharray`\r\n * @param value `stroke-dasharray`\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"strokeDasharray\", value)) {\n this.setSVGAttribute({\n \"stroke-dasharray\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeDashoffset\", {\n /**\r\n * @return `stroke-dashoffset`\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeDashoffset\");\n },\n\n /**\r\n * A `stroke-dashoffset` for the stroke (outline).\r\n *\r\n * \"Dashoffset\" allows setting the start position of the dashes if\r\n * `strokeDasharray` is used.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset} for more info on `stroke-dashoffset`\r\n * @param value `stroke-dashoffset`\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n\n if (this.setPropertyValue(\"strokeDashoffset\", value)) {\n this.setSVGAttribute({\n \"stroke-dashoffset\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeLinecap\", {\n /**\r\n * @return `stroke-linecap`\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeLinecap\");\n },\n\n /**\r\n * A `stroke-linecap` to indicate how line ends are drawn.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes#Stroke} for more info on `stroke-linecap`\r\n * @param value `stroke-linecap`\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"strokeLinecap\", value)) {\n this.setSVGAttribute({\n \"stroke-linecap\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"strokeLinejoin\", {\n /**\r\n * @return `stroke-linejoin`\r\n */\n get: function get() {\n return this.getPropertyValue(\"strokeLinejoin\");\n },\n\n /**\r\n * A `stroke-linejoin` to indicate how line ends are drawn.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes#Stroke} for more info on `stroke-linejoin`\r\n * @param value `stroke-linejoin`\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"strokeLinejoin\", value)) {\n this.setSVGAttribute({\n \"stroke-linejoin\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"shapeRendering\", {\n /**\r\n * @return 'shape-rendering' value\r\n */\n get: function get() {\n return this.getPropertyValue(\"shapeRendering\");\n },\n\n /**\r\n * An SVG-specific `shape-rendering` value.\r\n *\r\n * `shape-rendering` controls how vector graphics are drawn and rendered.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering} for more information about `shape-rendering`\r\n * @default \"auto\"\r\n * @param value 'shape-rendering' value\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"shapeRendering\", value)) {\n this.setSVGAttribute({\n \"shape-rendering\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"pixelPerfect\", {\n /**\r\n * @return Use pixel perfect?\r\n */\n get: function get() {\n return this.getPropertyValue(\"pixelPerfect\");\n },\n\n /**\r\n * Controls if SVG vectors should be drawn with \"pixel\" precision, producing\r\n * perfectly crisp lines on retina displays.\r\n *\r\n * Setting this to `true` might improve visual quality, but may have a\r\n * negative effect on performance.\r\n *\r\n * Different elements use different default setting for `pixelPerfect`.\r\n *\r\n * We recommend leaving this at their default settings, unless there's a\r\n * specific need.\r\n *\r\n * @param value Use pixel perfect?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (value) {\n this._positionPrecision = options.pixelPerfectPrecision;\n } else {\n this._positionPrecision = 3;\n }\n\n this.setPropertyValue(\"pixelPerfect\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"rtl\", {\n /**\r\n * @return RTL?\r\n */\n get: function get() {\n if ($type.hasValue(this._rtl)) {\n return this._rtl;\n } else if (this._topParent) {\n return this._topParent.rtl;\n } //this.rtl = false;\n\n\n return false;\n },\n\n /**\r\n * An RTL (right-to-left) setting.\r\n *\r\n * RTL may affect alignment, text, and other visual properties.\r\n *\r\n * If you set this on a top-level chart object, it will be used for all\r\n * child elements, e.g. labels, unless they have their own `rtl` setting\r\n * set directly on them.\r\n *\r\n * @param value `true` for to use RTL\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (this.isBaseSprite) {\n this.topParent.rtl = value;\n }\n\n this._rtl = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * ==========================================================================\r\n * VISIBILITY AND ORDER PROPERTIES AND RELATED STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Reveals hidden element.\r\n *\r\n * Has no effect if element is already visible.\r\n *\r\n * If `duration` is not specified, it will use default.\r\n *\r\n * @param duration Fade in duration (ms)\r\n * @return Animation object if such object was created\r\n */\n\n Sprite.prototype.show = function (duration) {\n return this.showReal(duration);\n };\n /**\r\n * Performs actual operations to reveal this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param duration Fade in duration (ms)\r\n * @return Fade in duration (ms)\r\n */\n\n\n Sprite.prototype.showReal = function (duration) {\n var _this = this;\n\n if (this.preventShow) {\n return;\n }\n\n var transition;\n var properties = this.defaultState.properties;\n\n if (!this.disabled && (this.isHidden || !this.visible || this.isHiding || properties.opacity != null && this.opacity < properties.opacity && !this.isShowing) && !this.isDisposed()) {\n // helps to avoid flicker, as show might change opacity or visibility but item might be at invalid state/position\n if (this.invalid) {\n this.validate();\n }\n\n if (this.positionInvalid) {\n this.validatePosition();\n }\n\n if (!$type.isNumber(duration)) {\n duration = this.defaultState.transitionDuration;\n }\n\n if (this._hideAnimation) {\n this._hideAnimation.kill();\n\n this._hideAnimation = undefined;\n } // Cancel hide handler just in case it was there\n\n\n if (this._showHideDisposer) {\n this.removeDispose(this._showHideDisposer);\n }\n\n this._isHidden = false;\n this.isHiding = false;\n this.isShowing = true; // Apply current state\n\n transition = this.applyCurrentState(duration);\n\n if (transition && !transition.isFinished()) {\n this._showHideDisposer = transition.events.on(\"animationended\", function () {\n _this.isShowing = false;\n });\n\n this._disposers.push(this._showHideDisposer);\n } else {\n this.isShowing = false;\n } // Make it visible\n\n\n var visible = this.defaultState.properties.visible;\n\n if (!$type.hasValue(visible)) {\n visible = true;\n }\n\n this.visible = visible; // Unhide from screen readers\n\n this.readerHidden = false; // Dispatch \"show\" event\n\n this.dispatchImmediately(\"shown\");\n }\n\n return transition;\n };\n /**\r\n * Initiates hiding of Sprite.\r\n * When called it will fade out the the Sprite to transparency, then make it\r\n * invisible.\r\n * @param duration Duration in millisecons\r\n */\n\n /**\r\n * Hides the element, by applying `hidden` state.\r\n *\r\n * Has no effect if element is already hidden.\r\n *\r\n * If `duration` is not specified, it will use default.\r\n *\r\n * While element is fading out, its `isHiding` property will resolve to\r\n * `true`.\r\n *\r\n * When element is hidden, its `visible` property will resolve to `false`.\r\n *\r\n * @param duration Fade out duration (ms)\r\n * @return hide Animation object if such object was created\r\n */\n\n\n Sprite.prototype.hide = function (duration) {\n return this.hideReal(duration);\n };\n /**\r\n * Hides actual SVG elements and handles hiding animations.\r\n *\r\n * @param duration Fade out duration (ms)\r\n * @return Fade out duration (ms)\r\n * @ignore\r\n */\n\n\n Sprite.prototype.hideReal = function (duration) {\n var _this = this;\n\n var transition;\n\n if (!this.isHiding && this.visible && !this.isDisposed()) {\n // added to solve 51375\n if (this.tooltip && this.tooltip.currentSprite == this) {\n this.hideTooltip(0);\n }\n\n if (this._hideAnimation) {\n this._hideAnimation.kill();\n\n this._hideAnimation = undefined;\n }\n\n this.isShowing = false; // Cancel hide handler just in case it was there\n\n if (this._showHideDisposer) {\n this.removeDispose(this._showHideDisposer);\n } // Get state\n\n\n var hiddenState_1 = this.hiddenState; // Transition to \"hidden\" state, provided Sprite has one set\n\n if (hiddenState_1) {\n // Yes, we have a \"hidden\" state\n // `setState` will return an `Animation` object which we can set\n // events on\n transition = this.setState(hiddenState_1, duration, undefined);\n\n if (transition && !transition.isFinished()) {\n this._hideAnimation = transition;\n this._showHideDisposer = transition.events.on(\"animationended\", function () {\n _this.isHiding = false;\n _this._isHidden = true;\n\n if (hiddenState_1.properties.visible == false) {\n _this.visible = false;\n }\n }, this);\n\n this._disposers.push(this._showHideDisposer); // Thrown everything into `_disposers` just in case Sprite gets\n // destroyed in the meantime\n\n\n this._disposers.push(transition);\n } else {\n this.isHiding = false;\n this._isHidden = true;\n }\n } else {\n // No hidden state, let's just set `visible` and call it a day\n this.visible = false;\n this.isHiding = false;\n this._isHidden = true;\n } // Hide from screen readers\n\n\n this.readerHidden = true; // Dispach \"hidden\" event\n\n this.dispatchImmediately(\"hidden\");\n this.invalidate(); // hide it at once to avoid flickers // validate() causes SO\n }\n\n if (!$type.isNumber(duration)) {\n duration = this.hiddenState.transitionDuration;\n }\n\n return transition;\n };\n\n Object.defineProperty(Sprite.prototype, \"visible\", {\n /**\r\n * @return Visible?\r\n */\n get: function get() {\n return this.getVisibility();\n },\n\n /**\r\n * Indicates if element is current visible (`true`) or hidden (`false`).\r\n *\r\n * @param value Visible?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n this.setVisibility(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns visibility value\r\n * @ignore\r\n */\n\n Sprite.prototype.getVisibility = function () {\n var value = this.getPropertyValue(\"visible\");\n\n if (!$type.hasValue(value)) {\n value = true;\n }\n\n return value;\n };\n /**\r\n * Sets `visibility` property:\r\n *\r\n * * `true` - visible\r\n * * `false` - hidden\r\n *\r\n * @param value true - visible, false - hidden\r\n * @return Current visibility\r\n */\n\n\n Sprite.prototype.setVisibility = function (value) {\n if (this.setPropertyValue(\"visible\", value)) {\n if (value) {\n this.group.removeAttr(\"visibility\");\n } else {\n this.group.attr({\n \"visibility\": \"hidden\"\n });\n } //this.invalidatePosition();\n\n\n if (this.events.isEnabled(\"visibilitychanged\")) {\n var event_4 = {\n type: \"visibilitychanged\",\n target: this,\n visible: value\n };\n this.events.dispatchImmediately(\"visibilitychanged\", event_4);\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"zIndex\", {\n /**\r\n * @return zIndex\r\n */\n get: function get() {\n return this.getPropertyValue(\"zIndex\");\n },\n\n /**\r\n * A \"zIndex\" of the element.\r\n *\r\n * \"zIndex\" determines the order of how elements are placed over each other.\r\n *\r\n * Higher \"zIndex\" will mean the element will be draw on top of elements\r\n * with lower \"zIndexes\".\r\n *\r\n * @param value zIndex\r\n */\n set: function set(value) {\n value = $type.toNumber(value);\n\n if (this.setPropertyValue(\"zIndex\", value)) {\n this.dispatch(\"zIndexChanged\");\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Moves the element to the very top in element order, so that it appears\r\n * in front of other elements.\r\n */\n\n Sprite.prototype.toFront = function () {\n var parent = this._parent;\n\n if (parent && parent.children.indexOf(this) != parent.children.length - 1) {\n parent.children.moveValue(this, parent.children.length - 1);\n this.dispatch(\"zIndexChanged\");\n }\n };\n /**\r\n * Moves the element to the very bottom in the element order, so that it\r\n * appears behind other elements.\r\n */\n\n\n Sprite.prototype.toBack = function () {\n var parent = this._parent;\n\n if (parent && parent.children.indexOf(this) != 0) {\n parent.children.moveValue(this, 0);\n this.dispatch(\"zIndexChanged\");\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"userClassName\", {\n /**\r\n * @return Class name\r\n */\n get: function get() {\n return this.getPropertyValue(\"userClassName\");\n },\n\n /**\r\n * A custom class name to set on the element.\r\n *\r\n * If set, the value will be added to element's `class` attribute.\r\n *\r\n * @since 4.9.11\r\n * @param value Class name\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"userClassName\", value)) {\n if (!value && this.userClassName) {\n this.group.removeClass(this.userClassName);\n }\n\n this.setClassName();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltip\", {\n /**\r\n * @return Tooltip\r\n */\n get: function get() {\n if (this._tooltip) {\n return this._tooltip;\n } else if (this.virtualParent) {\n return this.virtualParent.tooltip;\n } else if (this._parent) {\n return this._parent.tooltip;\n }\n },\n\n /**\r\n * ==========================================================================\r\n * TOOLTIP-RELATED PROPERTIES STUFF\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * A [[Tooltip]] object to be used when displayed rollover information for\r\n * the element.\r\n *\r\n * @param tooltip Tooltip\r\n */\n set: function set(tooltip) {\n if (this._tooltip) {\n //this._tooltip.dispose();\n this.removeDispose(this._tooltip);\n }\n\n this._tooltip = tooltip;\n\n if (tooltip) {\n tooltip.parent = this.tooltipContainer;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipDataItem\", {\n /**\r\n * @return Tooltip data item\r\n */\n get: function get() {\n var tooltipDataItem = this._tooltipDataItem;\n\n if (tooltipDataItem) {\n return tooltipDataItem;\n } else {\n return this.dataItem;\n }\n },\n\n /**\r\n * A [[DataItem]] to use when populating content for the element's\r\n * [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n * @see {@link DataItem}\r\n * @param value Tooltip data item\r\n */\n set: function set(value) {\n // important: do not dispose tooltip dataItem, as it is some actual data item from data!\n this._tooltipDataItem = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipColorSource\", {\n /**\r\n * @return Tooltip color source\r\n */\n get: function get() {\n return this._tooltipColorSource;\n },\n\n /**\r\n * A [[Sprite]] or sprite template to use when getting colors for tooltip. If a template is set,\r\n * tooltip will look for a clone in tooltipDataItem.sprites. If no clone is found, then template colors will be used.\r\n *\r\n * @see {@link Tooltip}\r\n * @see {@link Sprite}\r\n * @param sprite Sprite\r\n */\n set: function set(sprite) {\n this._tooltipColorSource = sprite;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Shows the element's [[Tooltip]].\r\n *\r\n * A tooltip will be populated using text templates in either `tooltipHTML` or\r\n * `tooltipText` as well as data in `tooltipDataItem`.\r\n *\r\n * @see {@link Tooltip}\r\n * @param optional point (sprite-related) to which tooltip must point.\r\n * @return returns true if the tooltip was shown and false if it wasn't (no text was found)\r\n */\n\n Sprite.prototype.showTooltip = function (point) {\n if (this.showTooltipOn == \"always\" && !this._tooltip && this.tooltip) {\n this._tooltip = this.tooltip.clone();\n }\n\n if (!point && this.tooltipPosition == \"pointer\" && this.isHover) {\n point = $utils.documentPointToSvg(getInteraction().lastPointer.point, this.svgContainer.SVGContainer, this.svgContainer.cssScale);\n } // do not show if hidden\n\n\n var sprite = this;\n\n while (sprite != undefined) {\n if (!sprite.visible || sprite.disabled || sprite.__disabled) {\n if (this._tooltip && this._tooltip.visible) {\n this._tooltip.hide(0);\n }\n\n return;\n }\n\n sprite = sprite.parent;\n }\n\n if ($type.hasValue(this.tooltipText) || $type.hasValue(this.tooltipHTML)) {\n var tooltip = this.tooltip;\n var tooltipDataItem = this.tooltipDataItem;\n\n if (tooltip) {\n tooltip.targetSprite = this;\n var colorSource_1 = this;\n var tooltipColorSource_1 = this.tooltipColorSource;\n\n if ((tooltip.getStrokeFromObject || tooltip.getFillFromObject) && tooltipColorSource_1) {\n if (tooltipColorSource_1.isTemplate) {\n if (tooltipDataItem) {\n $array.eachContinue(tooltipDataItem.sprites, function (sprite) {\n if (sprite.clonedFrom == tooltipColorSource_1) {\n colorSource_1 = sprite;\n return false;\n }\n\n return true;\n });\n }\n } else {\n colorSource_1 = tooltipColorSource_1;\n }\n }\n\n if (tooltip.getStrokeFromObject) {\n var stroke = this.stroke;\n var source = colorSource_1;\n\n while (source.parent != undefined) {\n stroke = source.stroke;\n\n if (stroke == undefined) {\n source = source.parent;\n }\n\n if (stroke != undefined) {\n break;\n }\n }\n\n if (stroke instanceof Color) {\n tooltip.background.animate({\n property: \"stroke\",\n to: stroke\n }, tooltip.animationDuration);\n } else {\n tooltip.background.stroke = stroke;\n }\n } // Set data item\n\n\n tooltip.dataItem = tooltipDataItem;\n tooltip.label.populateStringFrom = this;\n\n if (tooltip.getFillFromObject) {\n var fill = this.fill;\n var source = colorSource_1;\n\n while (source.parent != undefined) {\n fill = source.fill;\n\n if (fill == undefined || fill instanceof Color && fill.rgb == undefined) {\n source = source.parent;\n } else if (fill != undefined) {\n break;\n }\n }\n\n if (fill == undefined) {\n fill = color(\"#000000\");\n }\n\n if (fill instanceof Color) {\n if (!tooltip.visible) {\n tooltip.background.fill = fill;\n } else {\n tooltip.background.animate({\n property: \"fill\",\n to: fill\n }, tooltip.animationDuration);\n }\n } else {\n tooltip.background.fill = fill;\n }\n\n if (tooltip.autoTextColor && fill instanceof Color) {\n tooltip.label.fill = fill.alternative;\n }\n } // Apply tooltip text\n\n\n var text = \"\";\n\n if (this.tooltipHTML) {\n tooltip.html = this.tooltipHTML;\n text = this.tooltipHTML;\n }\n\n if (this.tooltipText) {\n tooltip.text = this.tooltipText;\n text = this.tooltipText;\n }\n\n if (this.updateTooltipPosition(point)) {\n // Set accessibility option\n tooltip.readerDescribedBy = this.uidAttr(); // make label to render to be able to check currentText\n\n if (tooltip.label.invalid) {\n tooltip.label.validate();\n }\n\n if (text != undefined && text != \"\" && tooltip.label.currentText != \"\") {\n //@todo: think of how to solve this better\n if (tooltip && !tooltip.parent) {\n tooltip.parent = this.tooltipContainer;\n } // Reveal tooltip\n // showing it in 1 ms helps to avoid strange flickering in IE\n\n\n var duration = tooltip.defaultState.transitionDuration;\n\n if (duration <= 0) {\n duration = 1;\n }\n\n tooltip.show(duration);\n tooltip.currentSprite = this;\n return true;\n } else {\n this.hideTooltip(0);\n }\n } else {\n this.hideTooltip(0);\n }\n }\n }\n\n return false;\n };\n /**\r\n * @ignore\r\n */\n\n\n Sprite.prototype.updateTooltipPosition = function (point) {\n var _this = this;\n\n if (this.tooltipPosition == \"pointer\") {\n if (this._interactionDisposer) {\n this._interactionDisposer.dispose();\n }\n\n this._interactionDisposer = getInteraction().body.events.on(\"track\", function (ev) {\n return _this.pointTooltipTo($utils.documentPointToSvg(ev.point, _this.svgContainer.SVGContainer, _this.svgContainer.cssScale), true);\n });\n\n if (point) {\n return this.pointTooltipTo(point, true);\n }\n } else {\n // Point to the X/Y of this Sprite\n var globalPoint = $utils.spritePointToSvg({\n \"x\": this.getTooltipX(),\n \"y\": this.getTooltipY()\n }, this);\n return this.pointTooltipTo(globalPoint);\n }\n };\n /**\r\n * Sets the point the [[Tooltip]] should point to.\r\n *\r\n * @param point Coordinates to point to\r\n * @param instantly Move instantly without animation\r\n */\n\n\n Sprite.prototype.pointTooltipTo = function (point, instantly) {\n var tooltip = this.tooltip;\n\n if (tooltip && this.topParent) {\n if (tooltip.showInViewport) {\n tooltip.pointTo(point, instantly);\n return true;\n }\n\n if ($math.isInRectangle(point, {\n x: 0,\n y: 0,\n width: this.topParent.maxWidth,\n height: this.topParent.maxHeight\n })) {\n tooltip.pointTo(point, instantly);\n return true;\n }\n }\n\n return false;\n };\n /**\r\n * Hides element's [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n */\n\n\n Sprite.prototype.hideTooltip = function (duration) {\n if (this.showTooltipOn == \"always\") {\n return;\n }\n\n var tooltip = this.tooltip;\n\n if (tooltip) {\n if (tooltip.targetSprite == this) {\n tooltip.targetSprite = undefined;\n }\n\n tooltip.hide(duration);\n\n if (this._interactionDisposer) {\n this._interactionDisposer.dispose();\n\n this._interactionDisposer = undefined;\n }\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"tooltipHTML\", {\n /**\r\n * @return Tooltip HTML content template\r\n */\n get: function get() {\n return this.getPropertyValue(\"tooltipHTML\");\n },\n\n /**\r\n * An HTML template to be used to populate [[Tooltip]] contents.\r\n *\r\n * If element has `tooltipDataItem` or `dataItem` set, this will be parsed\r\n * for any data values to be replaced with the values from respective data\r\n * items.\r\n *\r\n * @param value Tooltip HTML content template\r\n */\n set: function set(value) {\n value = $type.toText(value);\n this.hoverable = true;\n\n if (this.setPropertyValue(\"tooltipHTML\", value)) {\n if (this.tooltip) {\n if (this.tooltip.visible) {\n this.showTooltip();\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipText\", {\n /**\r\n * @return Tooltip content template\r\n */\n get: function get() {\n return this.getPropertyValue(\"tooltipText\");\n },\n\n /**\r\n * A text template to be used to populate Tooltip's contents.\r\n *\r\n * If element has `tooltipDataItem` or `dataItem` set, this will be parsed\r\n * for any data values to be replaced with the values from respective data\r\n * items.\r\n *\r\n * This template will also be parsed for any special formatting tags.\r\n *\r\n * @param value Tooltip content template\r\n * @see {@link TextFormatter}\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (value) {\n this.hoverable = true;\n }\n\n if (this.setPropertyValue(\"tooltipText\", value)) {\n if (this.tooltip) {\n if (this.tooltip.visible) {\n this.showTooltip();\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipContainer\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Container\r\n */\n get: function get() {\n if (this._tooltipContainer) {\n return this._tooltipContainer;\n } else if (this._parent) {\n return this._parent.tooltipContainer;\n }\n },\n\n /**\r\n * A container reference that should be used to place element's\r\n * [[Tooltip]] in.\r\n *\r\n * Will use parent's container if does not have one set.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Container\r\n * @todo Dispose of the old _tooltipContainer ?\r\n */\n set: function set(value) {\n this._tooltipContainer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipX\", {\n /**\r\n * @return Tooltip X (px)\r\n */\n get: function get() {\n return this.getTooltipX();\n },\n\n /**\r\n * X coordinate the [[Tooltip]] should be shown at.\r\n *\r\n * @param value Tooltip X (px)\r\n */\n set: function set(value) {\n if (this.setPercentProperty(\"tooltipX\", value) && this.tooltip) {\n this.tooltip.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"alwaysShowTooltip\", {\n /**\r\n * @return Always show tooltip?\r\n */\n get: function get() {\n return this.getPropertyValue(\"showTooltipOn\") == \"always\";\n },\n\n /**\r\n * DEPRECATION NOTICE: This setting is deprecated in favor of a more flexible\r\n * setting: `showTooltipOn`. Please use `showTooltipOn = \"always\"` instead.\r\n *\r\n * Indicates if this element should display a tooltip permanently.\r\n *\r\n * Useful, if you want to show permanent tooltips on some items.\r\n *\r\n * @default false\r\n * @since 4.5.4\r\n * @deprecated Use `showTooltipOn = \"always\"` instead\r\n * @param value Always show tooltip?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n\n if (value) {\n this.showTooltipOn = \"always\";\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"showTooltipOn\", {\n /**\r\n * @return When to show tooltip\r\n */\n get: function get() {\n return this.getPropertyValue(\"showTooltipOn\");\n },\n\n /**\r\n * Indicates when tooltip needs to be shown on this element:\r\n *\r\n * * `\"hover\"` (default) - Tooltip will be shown when element is hovered on.\r\n * * `\"hit\"` - Tooltip will be shown when element is clicked/tapped. Tooltip will be hidden when clicked/tapped anywhere else.\r\n * * `\"always\"` - Tooltip will be shown on the element permanently.\r\n *\r\n * For example, if you would like to show tooltips on all of the columns of\r\n * a [[ColumnSeries]]:\r\n *\r\n * ```TypeScript\r\n * series.columns.template.showTooltipOn = \"always\";\r\n * ```\r\n * ```JavaScript\r\n * series.columns.template.showTooltipOn = \"always\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"columns\": {\r\n * \"showTooltipOn\": \"always\"\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * It can even be set to display on a selected columns via `propertyFields`:\r\n *\r\n * ```TypeScript\r\n * series.columns.template.propertyFields.showTooltipOn = \"tooltip\";\r\n * ```\r\n * ```JavaScript\r\n * series.columns.template.propertyFields.showTooltipOn = \"tooltip\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"columns\": {\r\n * \"propertyFields\": {\r\n * \"showTooltipOn\": \"tooltip\"\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default \"hover\"\r\n * @since 4.7.9\r\n * @param value When to show tooltip\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"showTooltipOn\", value)) {\n if (value == \"hit\") {\n this.clickable = true;\n }\n\n if (this.tooltip) {\n if (value == \"always\") {\n this.showTooltip();\n } else {\n this.handleAlwaysShowTooltip();\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipPosition\", {\n /**\r\n * Position\r\n */\n get: function get() {\n return this.getPropertyValue(\"tooltipPosition\");\n },\n\n /**\r\n * Specifies if [[Tooltip]] should follow the mouse or touch pointer or stay\r\n * at the fixed position.\r\n *\r\n * @param value Position\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tooltipPosition\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"tooltipY\", {\n /**\r\n * @return Tooltip Y (px)\r\n */\n get: function get() {\n return this.getTooltipY();\n },\n\n /**\r\n * Y coordinate the [[Tooltip]] should be shown at.\r\n *\r\n * @param value Tooltip Y (px)\r\n */\n set: function set(value) {\n if (this.setPercentProperty(\"tooltipY\", value) && this.tooltip) {\n this.tooltip.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns Tooltip X coordinate if it's set, or middle of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return X (px)\r\n */\n\n Sprite.prototype.getTooltipX = function () {\n var x = this.getPropertyValue(\"tooltipX\");\n\n if (!$type.hasValue(x)) {\n x = percent(50);\n }\n\n var value;\n\n if ($type.isNumber(x)) {\n value = x;\n }\n\n if (x instanceof Percent) {\n value = this.maxLeftSelf + this._measuredWidthSelf * x.value - this.pixelPaddingLeft - this.ex; // overflow is know only for measured items, so this is not always good\n }\n\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n return value;\n };\n /**\r\n * Returns Tooltip Y coordinate if it's set, or middle of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Y (px)\r\n */\n\n\n Sprite.prototype.getTooltipY = function () {\n var y = this.getPropertyValue(\"tooltipY\");\n\n if (!$type.hasValue(y)) {\n y = percent(50);\n }\n\n var value;\n\n if ($type.isNumber(y)) {\n value = y;\n }\n\n if (y instanceof Percent) {\n value = this.maxTopSelf + this._measuredHeightSelf * y.value - this.pixelPaddingTop - this.ey; // overflow is know only for measured items, so this is not always good\n }\n\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n return value;\n };\n /**\r\n * Displays a modal or console message with error, and halts any further\r\n * processing of this item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param e Error\r\n * @todo Implement from applying further actions to this item\r\n */\n\n\n Sprite.prototype.raiseCriticalError = function (e, closable) {\n if (this.svgContainer) {\n if (!this._adapterO) {\n this.modal.content = e.message;\n } else {\n this.modal.content = this._adapterO.apply(\"criticalError\", e).message;\n }\n\n if (!closable) {\n this.disabled = true;\n } else {\n this.modal.closable = true;\n }\n\n if (!options.suppressErrors) {\n this.modal.open();\n }\n }\n\n if (options.verbose) {\n console.log(e);\n }\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n Sprite.prototype.processConfig = function (config) {\n if (config) {\n // Tooltip color source\n if ($type.hasValue(config.tooltipColorSource) && $type.isString(config.tooltipColorSource) && this.map.hasKey(config.tooltipColorSource)) {\n config.tooltipColorSource = this.map.getKey(config.tooltipColorSource);\n } // Cursor styles\n\n\n if ($type.hasValue(config.cursorOverStyle) && $type.isString(config.cursorOverStyle)) {\n config.cursorOverStyle = this.getCursorStyle(config.cursorOverStyle);\n }\n\n if ($type.hasValue(config.cursorDowntyle) && $type.isString(config.cursorDowntyle)) {\n config.cursorDowntyle = this.getCursorStyle(config.cursorDowntyle);\n }\n\n if ($type.hasValue(config.cursorOptions)) {\n if ($type.hasValue(config.cursorOptions.overStyle) && $type.isString(config.cursorOptions.overStyle)) {\n config.cursorOptions.overStyle = this.getCursorStyle(config.cursorOptions.overStyle);\n }\n\n if ($type.hasValue(config.cursorOptions.downStyle) && $type.isString(config.cursorOptions.downStyle)) {\n config.cursorOptions.downStyle = this.getCursorStyle(config.cursorOptions.downStyle);\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n\n this.processDelayedMap();\n };\n /**\r\n * Converts string name of the cursor into actual [[MouseCursorStyle]].\r\n *\r\n * @param style Cursor type\r\n * @return Cursor definition\r\n */\n\n\n Sprite.prototype.getCursorStyle = function (style) {\n switch (style) {\n case \"grab\":\n return MouseCursorStyle.grab;\n\n case \"grabbing\":\n return MouseCursorStyle.grabbing;\n\n case \"pointer\":\n return MouseCursorStyle.pointer;\n\n case \"horizontalResize\":\n return MouseCursorStyle.horizontalResize;\n\n case \"verticalResize\":\n return MouseCursorStyle.verticalResize;\n\n default:\n return MouseCursorStyle.default;\n }\n };\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\n\n\n Sprite.prototype.configOrder = function (a, b) {\n if (a == b) {\n return 0;\n } // Must come last\n else if (a == \"tooltipColorSource\") {\n return 1;\n } else if (b == \"tooltipColorSource\") {\n return -1;\n } else {\n return _super.prototype.configOrder.call(this, a, b);\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"isHidden\", {\n /**\r\n * If `sprite.hide()` is called, we set isHidden to true when sprite is hidden.\r\n * This was added becaus hidden state might have visibility set to true and so\r\n * there would not be possible to find out if a sprite is technically hidden or not.\r\n */\n get: function get() {\n if (this._isHidden) {\n return this._isHidden;\n } else if (this._parent) {\n return this._parent.isHidden;\n }\n\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"showOnInit\", {\n /**\r\n * @return Show on init?\r\n */\n get: function get() {\n return this.getPropertyValue(\"showOnInit\");\n },\n\n /**\r\n * If this is set to `true`, Sprite, when inited will be instantly hidden\r\n * (\"hidden\" state applied) and then shown (\"default\" state applied).\r\n *\r\n * If your \"default\" state's `transitionDuration > 0` this will result in\r\n * initial animation from \"hidden\" state to \"default\" state.\r\n *\r\n * If you need a Sprite which has `showOnInit = true` not to be shown\r\n * initially, set `sprite.hidden = true`. Setting `sprite.visible = false`\r\n * will not prevent the animation and the sprite will be shown.\r\n *\r\n * @param value show on init?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n this.setShowOnInit(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n Sprite.prototype.setShowOnInit = function (value) {\n if (this.setPropertyValue(\"showOnInit\", value)) {\n if (!this.isTemplate) {\n if (value && !this.inited && !this.hidden) {\n this._showOnInitDisposer = new MultiDisposer([registry.events.once(\"enterframe\", this.hideInitially, this), this.events.once(\"beforevalidated\", this.hideInitially, this, false), this.events.on(\"inited\", this.appear, this, false)]);\n\n this._disposers.push(this._showOnInitDisposer);\n } else {\n if (this._showOnInitDisposer) {\n this._showOnInitDisposer.dispose();\n }\n }\n }\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Sprite.prototype.hideInitially = function () {\n if (!this.isDisposed()) {\n this.appeared = false; //if (!this.hidden && !this._isHidden) { // not good for series, as on enterframe it doesn't have data items yet.\n\n if (!this.inited) {\n this.hide(0);\n }\n }\n };\n /**\r\n * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state.\r\n */\n\n\n Sprite.prototype.appear = function () {\n var _this = this;\n\n this.appeared = false;\n\n if (!this.hidden && !this.isHidden) {\n this.hide(0);\n }\n\n if (!this.hidden) {\n var animation = this.show();\n\n if (animation && !animation.isFinished()) {\n this.addDisposer(animation.events.on(\"animationended\", function () {\n _this.appeared = true;\n\n _this.dispatch(\"appeared\");\n }));\n } else {\n this.appeared = true;\n this.dispatch(\"appeared\");\n }\n } else {\n this.appeared = true;\n this.dispatch(\"appeared\");\n }\n };\n\n Object.defineProperty(Sprite.prototype, \"hidden\", {\n /**\r\n * @return Is initially hidden?\r\n */\n get: function get() {\n return this.getPropertyValue(\"hidden\");\n },\n\n /**\r\n * If a sprite has `showOnInit = true`, it will animate from \"hidden\" to\r\n * \"default\" state when initialized. To prevent this but keep\r\n * `showOnInit = true`, you can set `sprite.hidden = true`.\r\n *\r\n * @param value initially hidden?\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n this.setPropertyValue(\"hidden\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"bbox\", {\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n if (this.definedBBox) {\n return this.definedBBox;\n }\n\n return this._bbox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sprite.prototype, \"plugins\", {\n /**\r\n * A list of plugins (objects that implement [[IPlugin]] interface) attached\r\n * to this object.\r\n *\r\n * @since 4.2.2\r\n * @return List of plugins\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._plugins) {\n this._plugins = new List();\n\n this._disposers.push(this._plugins.events.on(\"inserted\", function (ev) {\n ev.newValue.target = _this;\n ev.newValue.init();\n }));\n\n this._disposers.push(new ListDisposer(this._plugins));\n }\n\n return this._plugins;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Called during the System.update method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Sprite.prototype._systemUpdate = function (skippedSprites) {\n this.validate();\n };\n /**\r\n * Called during the System.update method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype._systemCheckIfValidate = function () {\n return true;\n };\n /**\r\n * Called during the System.validatePositions method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype._systemValidatePositions = function () {\n this.validatePosition();\n };\n /**\r\n * Called during the System.validateLayouts method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Sprite.prototype._systemValidateLayouts = function () {};\n\n return Sprite;\n}(BaseObjectEvents);\n\nexport { Sprite };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Sprite\"] = Sprite;","/**\r\n * Functionality for drawing rectangles.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a rectangle.\r\n *\r\n * @see {@link IRectangleEvents} for a list of available events\r\n * @see {@link IRectangleAdapters} for a list of available Adapters\r\n */\n\nvar Rectangle =\n/** @class */\nfunction (_super) {\n __extends(Rectangle, _super);\n /**\r\n * Constructor\r\n * * Creates a `<rect>` element\r\n * * Creates default state\r\n */\n\n\n function Rectangle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Rectangle\";\n _this.element = _this.paper.add(\"rect\"); //this.pixelPerfect = false;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Rectangle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var precision = this._positionPrecision;\n\n if (this.pixelPerfect) {\n precision = 0;\n }\n\n var w = $math.round(this.innerWidth, precision);\n var h = $math.round(this.innerHeight, precision);\n this.element.attr({\n \"width\": w,\n \"height\": h\n });\n };\n /**\r\n * Measures the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Rectangle.prototype.measureElement = function () {};\n\n Object.defineProperty(Rectangle.prototype, \"bbox\", {\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n if (this.definedBBox) {\n return this.definedBBox;\n }\n\n if (this.isMeasured) {\n return {\n x: 0,\n y: 0,\n width: this.innerWidth,\n height: this.innerHeight\n };\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n },\n enumerable: true,\n configurable: true\n });\n return Rectangle;\n}(Sprite);\n\nexport { Rectangle };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Rectangle\"] = Rectangle;","/**\r\n * Container module\r\n * @todo Needs description\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"./Sprite\";\nimport { SpriteState } from \"./SpriteState\";\nimport { List } from \"./utils/List\";\nimport { MultiDisposer } from \"./utils/Disposer\";\nimport { Dictionary, DictionaryDisposer } from \"./utils/Dictionary\";\nimport { getInteraction } from \"./interaction/Interaction\";\nimport { Rectangle } from \"./elements/Rectangle\";\nimport { Percent } from \"./utils/Percent\";\nimport { registry } from \"./Registry\";\nimport { InterfaceColorSet } from \"../core/utils/InterfaceColorSet\";\nimport * as $iter from \"./utils/Iterator\";\nimport * as $array from \"./utils/Array\";\nimport * as $math from \"./utils/Math\";\nimport * as $type from \"./utils/Type\";\nimport * as $dom from \"./utils/DOM\";\nimport { system } from \"./System\";\nimport { options } from \"./Options\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Container can contain multiple sprites and arrange them in various layouts.\r\n *\r\n * @see {@link IContainerEvents} for a list of available events\r\n * @see {@link IContainerAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar Container =\n/** @class */\nfunction (_super) {\n __extends(Container, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Container() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Container children. (sorted by layout)\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n _this._childrenByLayout = [];\n /**\r\n * Container's disposers for its child elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._childrenDisposers = new Dictionary();\n /**\r\n * Indicates if this container contains any focused elements, including\r\n * itself.\r\n */\n\n _this.hasFocused = false;\n /**\r\n * An array of references to elements the state should be set, when it is set\r\n * on this element.\r\n */\n\n _this.setStateOnSprites = [];\n /*\r\n * @ignore\r\n */\n\n _this.layoutInvalid = false;\n _this._absoluteWidth = 0;\n _this._absoluteHeight = 0;\n /**\r\n * An array of child Sprites that should be ready before this object can\r\n * fire a \"ready\" event.\r\n */\n\n _this._shouldBeReady = [];\n /**\r\n * Enables touch tap protection.\r\n */\n\n _this._tapToActivate = false;\n /**\r\n * If `tapToActivate` is used, this setting will determine how long the chart\r\n * will stay in \"active\" mode.\r\n *\r\n * @default 3000\r\n * @since 4.4.0\r\n */\n\n _this.tapTimeout = 3000;\n _this.className = \"Container\";\n _this._element = _this.paper.addGroup(\"g\");\n\n _this.group.add(_this.element);\n\n _this.setPropertyValue(\"pixelPerfect\", false);\n\n _this.setPropertyValue(\"layout\", \"absolute\");\n\n _this.setPropertyValue(\"fixedWidthGrid\", false);\n\n _this.setPropertyValue(\"verticalCenter\", \"none\");\n\n _this.setPropertyValue(\"horizontalCenter\", \"none\");\n\n _this._positionPrecision = 4;\n\n _this._disposers.push(new DictionaryDisposer(_this._childrenDisposers));\n\n _this.children.events.on(\"inserted\", _this.handleChildAdded, _this);\n\n _this.children.events.on(\"removed\", _this.handleChildRemoved, _this);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Handles adding of a new child into `children`. Adding new children might\r\n * affect the whole layout so it needs to be revalidated.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event object\r\n * @todo Throw an exception on adding a disposed object. Of course it's better NOT TO add disposed objects, so that what we should focus on.\r\n */\n\n\n Container.prototype.handleChildAdded = function (event) {\n this.processChild(event.newValue);\n };\n /**\r\n * @ignore\r\n */\n\n\n Container.prototype.processChild = function (child) {\n // try solves the problem when somedy adds child directly to children\n try {\n this._childrenDisposers.insertKey(child.uid, new MultiDisposer([// it's not enough to listen to POSITION_CHANGED only, as some extra redrawals will happen.\n child.events.on(\"transformed\", this.handleChildTransform, this), child.events.on(\"zIndexChanged\", this.sortAndAdd, this)]));\n } catch (err) {// void\n }\n\n if (this.element) {\n var group = this.element;\n group.add(child.group);\n }\n\n child.parent = this;\n child.paper = this.paper;\n this.dispatchImmediately(\"childadded\", {\n type: \"childadded\",\n newValue: child\n });\n this.invalidate();\n };\n /**\r\n * @ignore\r\n */\n\n\n Container.prototype.sortAndAdd = function () {\n this.sortChildren();\n this.addChildren();\n };\n /**\r\n * Handles child removal. Changing size of the child may change the\r\n * whole layout of the Container, hence layout needs to be invalidated.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event object\r\n */\n\n\n Container.prototype.handleChildRemoved = function (event) {\n var child = event.oldValue; // TODO figure out why the key sometimes doesn't exist\n\n this._childrenDisposers.removeKey(child.uid);\n\n if (this.element) {\n var group = this.element;\n group.removeElement(child.group);\n }\n\n if (child.isMeasured) {\n this.invalidateLayout();\n }\n\n this.dispatchImmediately(\"childremoved\", {\n type: \"childremoved\",\n oldValue: child\n });\n };\n /**\r\n * Handles child transformation. Changing size of the child may change the\r\n * whole layout of the Container, hence layout needs to be invalidated.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event object\r\n */\n\n\n Container.prototype.handleChildTransform = function (event) {\n var child = event.target;\n\n if (child.isMeasured) {\n // && this.layout != \"none\" && this.layout != \"absolute\") {\n this.invalidateLayout();\n }\n };\n /**\r\n * Invalidates Container's layout, causing it to be re-evaluated again.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.invalidateLayout = function () {\n if (this.layoutInvalid || this.disabled || this.isTemplate || this.layout == \"none\" || this.__disabled) {\n return;\n }\n\n this.layoutInvalid = true;\n registry.addToInvalidLayouts(this);\n system.requestFrame();\n };\n /**\r\n * Invalidates element.\r\n *\r\n * Object will be redrawn during the next update cycle.\r\n *\r\n * Please note that in most cases elements will auto-invalidate when needed. If\r\n * everything works, DO NOT use this method. Use it only if some changes do\r\n * not take otherwise.\r\n */\n\n\n Container.prototype.invalidate = function () {\n _super.prototype.invalidate.call(this);\n\n this.invalidateLayout();\n };\n /**\r\n * Invalidates the whole element, including layout AND all its child\r\n * elements.\r\n *\r\n * As this will essentially force all elements to redraw, use only if\r\n * absolutely necessary.\r\n */\n\n\n Container.prototype.deepInvalidate = function () {\n _super.prototype.invalidate.call(this); //this.sortChildren();\n\n\n $array.each(this._childrenByLayout, function (child) {\n if (child instanceof Container) {\n child.deepInvalidate();\n } else {\n child.invalidate();\n }\n });\n this.invalidateLayout();\n };\n\n Object.defineProperty(Container.prototype, \"children\", {\n /**\r\n * Returns a list of the child [[Sprite]] elements contained in this\r\n * Container.\r\n *\r\n * @return List of child elements (Sprites)\r\n */\n get: function get() {\n // @todo Review if we can add all children to disposers\n if (!this._children) {\n this._children = new List(); //this._disposers.push(new ListDisposer(this._children));\n }\n\n return this._children;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"minWidth\", {\n /**\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minWidth\");\n },\n\n /**\r\n * Minimum width (px) for the Container. A container will not\r\n * auto-shrink beyond this value, even if child elements are smaller.\r\n *\r\n * @param value Width (px)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"minWidth\", value)) {\n this.invalidateLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"minHeight\", {\n /**\r\n * @return Height (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minHeight\");\n },\n\n /**\r\n * Minimum height (px) for the Container. A container will not\r\n * auto-shrink beyond this value, even if child elements are smaller.\r\n *\r\n * @param value Height (px)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"minHeight\", value)) {\n this.invalidateLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Overrides the original `removeElement` so that Container's actual element\r\n * is not removed. We do not need to remove element of a Container.\r\n *\r\n * We do this because remove element each time will fail the `getBBox`.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Container.prototype.removeElement = function () {};\n /**\r\n * Sorts Container's children: the ones with variable width and height are\r\n * put at the end of the list (depending on layout type), so that fixed-width\r\n * ones can be drawn first.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.sortChildren = function () {\n var _this = this;\n\n this._childrenByLayout = [];\n\n if (this.layout == \"none\" || this.layout == \"absolute\" || !this.layout) {\n //$iter.each(this.children.iterator(), (child) => {\n //\tthis._childrenByLayout.push(child);\n //});\n this._childrenByLayout = this.children.values;\n } else {\n // Assemble fixed-size and relative lists\n var fixed_1 = [];\n var relative_1 = [];\n $iter.each(this.children.iterator(), function (child) {\n if (_this.layout == \"horizontal\" || _this.layout == \"grid\") {\n if (!$type.isNumber(child.percentWidth)) {\n fixed_1.push(child);\n } else {\n relative_1.push(child);\n }\n } else if (_this.layout == \"vertical\") {\n if (!$type.isNumber(child.percentHeight)) {\n fixed_1.push(child);\n } else {\n relative_1.push(child);\n }\n } else {\n fixed_1.push(child);\n }\n }); // Concat everything into list\n\n this._childrenByLayout = fixed_1.concat(relative_1);\n }\n\n this.calculateRelativeSize();\n };\n /**\r\n * Calculates relative sizes for all Container's children.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make it protected?\r\n */\n\n\n Container.prototype.calculateRelativeSize = function () {\n var _this = this;\n\n var totalRelativeWidth = 0;\n var totalRelativeHeight = 0;\n $array.each(this._childrenByLayout, function (child) {\n // if child is not measured, we do not care about it at all.\n if (child.isMeasured) {\n if ($type.isNumber(child.percentWidth)) {\n totalRelativeWidth += child.percentWidth;\n }\n\n if ($type.isNumber(child.percentHeight)) {\n totalRelativeHeight += child.percentHeight;\n }\n }\n });\n $array.each(this._childrenByLayout, function (child) {\n if (child.isMeasured) {\n if (_this.layout == \"horizontal\") {\n if ($type.isNumber(child.percentWidth)) {\n child.relativeWidth = child.percentWidth / totalRelativeWidth;\n }\n\n if ($type.isNumber(child.percentHeight)) {\n child.relativeHeight = child.percentHeight / 100;\n }\n }\n\n if (_this.layout == \"vertical\") {\n if ($type.isNumber(child.percentHeight)) {\n child.relativeHeight = child.percentHeight / totalRelativeHeight;\n }\n\n if ($type.isNumber(child.percentWidth)) {\n child.relativeWidth = child.percentWidth / 100;\n }\n }\n\n if (_this.layout == \"grid\") {\n if ($type.isNumber(child.percentHeight)) {\n child.relativeHeight = child.percentHeight / 100;\n }\n\n if ($type.isNumber(child.percentWidth)) {\n child.relativeWidth = child.percentWidth / 100;\n }\n }\n }\n\n if (_this.layout == \"absolute\" || !child.isMeasured) {\n if ($type.isNumber(child.percentWidth)) {\n child.relativeWidth = child.percentWidth / 100;\n }\n\n if ($type.isNumber(child.percentHeight)) {\n child.relativeHeight = child.percentHeight / 100;\n }\n }\n });\n };\n /**\r\n * Adds all children to Container's SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.addChildren = function () {\n /*\r\n Need this check because a child might be assigned to parent even before element is created, for example a theme\r\n access scrollbar.thumb\r\n */\n if (this.element) {\n var zindexed = $array.copy(this.children.values); // not children by layout!\n\n var sortArray = zindexed.map(function (data, idx) {\n return {\n idx: idx,\n data: data\n };\n });\n sortArray.sort(function (a, b) {\n var ai = a.data.zIndex || 0;\n var bi = b.data.zIndex || 0;\n\n if (ai < bi) {\n return -1;\n }\n\n if (ai > bi) {\n return 1;\n }\n\n return a.idx - b.idx;\n });\n zindexed = sortArray.map(function (val) {\n return val.data;\n });\n var group_1 = this.element; // check, maybe the order is good already\n\n var isCorrect = true;\n\n if (group_1.node && group_1.node.childNodes) {\n for (var i = 0, len = group_1.node.childNodes.length; i < len; i++) {\n if (group_1.node.childNodes[i] != zindexed[i].group.node) {\n isCorrect = false;\n break;\n }\n }\n }\n\n if (!isCorrect) {\n $array.each(zindexed, function (child) {\n if (child.group) {\n group_1.add(child.group);\n }\n });\n\n if (this._background) {\n this.group.addToBack(this._background.group);\n }\n\n this.invalidateLayout();\n }\n }\n };\n /**\r\n * Creates a new element of specific type and assigns as a child to the\r\n * Container.\r\n *\r\n * @param Class type for the new element\r\n * @return New element\r\n */\n\n\n Container.prototype.createChild = function (classType) {\n var sprite = new classType();\n sprite.parent = this;\n return sprite;\n };\n /**\r\n * Removes all Container's children without actually destroying them.\r\n *\r\n * To destroy children use `disposeChildren()` instead.\r\n */\n\n\n Container.prototype.removeChildren = function () {\n // remove all children\n // TODO use iteration instead\n while (this.children.length > 0) {\n var child = this.children.getIndex(0);\n child.parent = undefined;\n this.children.removeValue(child);\n }\n };\n /**\r\n * Removes and destroys all Container's children.\r\n *\r\n * To remove children from Container without destroying them, use\r\n * `removeChildren()`.\r\n */\n\n\n Container.prototype.disposeChildren = function () {\n // TODO use iteration instead\n while (this.children.length > 0) {\n var child = this.children.getIndex(0);\n child.dispose();\n this.children.removeValue(child);\n }\n };\n\n Object.defineProperty(Container.prototype, \"background\", {\n /**\r\n * @return Background element\r\n */\n get: function get() {\n if (!this._background) {\n this._background = this.createBackground();\n this.processBackground();\n }\n\n return this._background;\n },\n\n /**\r\n * An element to use as container background.\r\n *\r\n * @param background Background element\r\n */\n set: function set(background) {\n if (this._background && this.background != background) {\n this.removeDispose(this._background);\n }\n\n if (background) {\n this._background = background;\n\n this._disposers.push(background);\n\n this.processBackground();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles the situation where parent element is resized.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Container.prototype.handleGlobalScale = function () {\n _super.prototype.handleGlobalScale.call(this);\n\n this.children.each(function (child) {\n child.handleGlobalScale();\n });\n };\n /**\r\n * Creates and returns a [[Rectangle]] to use as a background for Container.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background Rectangle element\r\n */\n\n\n Container.prototype.createBackground = function () {\n return new Rectangle();\n };\n /**\r\n * Decorates background element with required properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.processBackground = function () {\n var background = this._background;\n\n if (background) {\n background.isMeasured = false;\n this._background.fill = new InterfaceColorSet().getFor(\"background\");\n background.parent = this;\n background.isMeasured = false;\n this.children.removeValue(background);\n\n this._disposers.push(background);\n\n this.group.addToBack(this._background.group);\n }\n };\n /**\r\n * Measures the size of container and informs its children of how much size\r\n * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n * properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.validateLayout = function () {\n var _this = this;\n\n registry.removeFromInvalidLayouts(this);\n this.layoutInvalid = false; // prevents from drawing if topparent is 0x0\n\n /*\r\n let topParent = this.topParent;\r\n if (topParent) {\r\n if (!topParent.maxWidth || !topParent.maxHeight) {\r\n this._disposers.push(topParent.events.once(\"maxsizechanged\", this.invalidateLayout, this));\r\n }\r\n }*/\n\n this._availableWidth = this.innerWidth;\n this._availableHeight = this.innerHeight;\n var measuredWidth = 0;\n var measuredHeight = 0;\n var allValid = true;\n\n if (this.children) {\n this.sortChildren(); // we itterate through list of children, sorted by layout priority. sprites which width non-relative width/height will go first, so we will reduce available width before proceeding to sprites with relative width/height\n\n $array.each(this._childrenByLayout, function (child) {\n var maxWidth;\n var maxHeight;\n\n if ($type.isNumber(child.relativeWidth)) {\n maxWidth = $math.round(_this._availableWidth * child.relativeWidth, 2);\n\n if (_this.layout == \"horizontal\") {\n // || this.layout == \"absolute\") {\n maxWidth -= child.pixelMarginRight + child.pixelMarginLeft;\n }\n } else {\n if (_this.layout == \"horizontal\") {\n if (child.invalid) {\n child.validate();\n }\n }\n }\n\n if ($type.isNumber(child.relativeHeight)) {\n maxHeight = $math.round(_this._availableHeight * child.relativeHeight, 2);\n\n if (_this.layout == \"vertical\") {\n // || this.layout == \"absolute\") {\n maxHeight -= child.pixelMarginTop + child.pixelMarginBottom;\n }\n } else {\n if (_this.layout == \"vertical\") {\n if (child.invalid) {\n child.validate();\n }\n }\n } // if child is valid\n\n\n if (child.invalid == false) {\n if ($type.isNumber(child.relativeWidth)) {\n child.maxWidth = maxWidth;\n }\n\n if ($type.isNumber(child.relativeHeight)) {\n child.maxHeight = maxHeight;\n }\n\n if (child.isMeasured) {\n // reduce available width if this is horizontal layout\n if (_this.layout == \"horizontal\") {\n if (!$type.isNumber(child.percentWidth)) {\n if (child.measuredWidth > 0) {\n _this._availableWidth -= child.measuredWidth + child.pixelMarginLeft + child.pixelMarginRight;\n }\n }\n } // reduce available height if this is vertical layout\n\n\n if (_this.layout == \"vertical\") {\n if (!$type.isNumber(child.percentHeight)) {\n if (child.measuredHeight > 0) {\n _this._availableHeight -= child.measuredHeight + child.pixelMarginTop + child.pixelMarginBottom;\n }\n }\n }\n\n var childMeasuredWidth = child.measuredWidth;\n var childMeasuredHeight = child.measuredHeight;\n\n if (child.align != \"none\") {\n childMeasuredWidth += child.pixelMarginLeft + child.pixelMarginRight;\n }\n\n if (child.valign != \"none\") {\n childMeasuredHeight += child.pixelMarginTop + child.pixelMarginBottom;\n }\n\n measuredWidth = Math.max(measuredWidth, childMeasuredWidth);\n measuredHeight = Math.max(measuredHeight, childMeasuredHeight);\n }\n } // if child is not valid\n else {\n // tell child what maximum width/ height it can occupy\n if (child.isMeasured) {\n if ($type.isNumber(child.relativeWidth)) {\n if (child.maxWidth != maxWidth) {\n // need to check this because of allValid\n child.maxWidth = maxWidth;\n allValid = false;\n }\n }\n\n if ($type.isNumber(child.relativeHeight)) {\n if (child.maxHeight != maxHeight) {\n // need to check this because of allValid\n child.maxHeight = maxHeight;\n allValid = false;\n }\n }\n }\n }\n });\n }\n\n this._absoluteWidth = measuredWidth;\n this._absoluteHeight = measuredHeight; // arrange after measuring, only if all children are valid already\n\n if (allValid) {\n this.arrange();\n }\n };\n /**\r\n * Arranges children according to layout specs and available space / child\r\n * sizes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.arrange = function () {\n var _this = this;\n\n var children = this.children;\n /*\r\n in this method we not only arrange children but also find out the size of the container\r\n it might seem it would be easier to get container size using sprite's measure method,\r\n however it would return only actual size of the bbox. However as each child meight have\r\n margins set, we need to check each child - we do it here.\r\n This method doesn't do anything with DOM, so it's not expensive\r\n */\n\n var measuredWidth = 0;\n var measuredHeight = 0; //let innerWidth: number = this.innerWidth; //$math.max(this.innerWidth, this._measuredWidth - paddingLeft - paddingRight);\n //let innerHeight: number = this.innerHeight; //$math.max(this.innerHeight, this._measuredHeight - paddingTop - paddingBottom);\n // above is wrong, as if a w/h is not specified, it is 0 and alignment doesn't work at all.\n\n var innerWidth = $math.max(this.innerWidth, this._absoluteWidth);\n var innerHeight = $math.max(this.innerHeight, this._absoluteHeight);\n var left; // = 0;\n\n var right; // = innerWidth;\n\n var top; // = 0;\n\n var bottom; // = innerHeight;\n\n var paddingLeft = this.pixelPaddingLeft;\n var paddingRight = this.pixelPaddingRight;\n var paddingTop = this.pixelPaddingTop;\n var paddingBottom = this.pixelPaddingBottom;\n var nextX = 0;\n var nextY = 0;\n var row = 0;\n var column = 0;\n var columnWidth = [];\n var rowHeight = [];\n var maxCellWidth;\n var minCellWidth;\n var columnCount;\n var maxWidth = this.maxWidth;\n var maxHeight = this.maxHeight;\n var minWidth = this.minWidth;\n var minHeight = this.minHeight;\n var childrenCopy = $array.copy(children.values);\n\n if (this.reverseOrder) {\n childrenCopy.reverse();\n } // GRID PRECALCULATIONS\n\n\n if (this.layout == \"grid\") {\n minCellWidth = maxWidth;\n maxCellWidth = 1;\n\n for (var i = 0, len = childrenCopy.length; i < len; i++) {\n var child = childrenCopy[i];\n\n if (child.isMeasured && !child.disabled && !child.__disabled) {\n var childMeasuredWidth = child.measuredWidth;\n\n if (childMeasuredWidth < minCellWidth) {\n minCellWidth = childMeasuredWidth;\n }\n\n if (childMeasuredWidth > maxCellWidth) {\n maxCellWidth = childMeasuredWidth;\n }\n }\n }\n\n minCellWidth = $math.fitToRange(minCellWidth, 1, maxWidth);\n maxCellWidth = $math.fitToRange(maxCellWidth, 1, maxWidth);\n\n if (this.fixedWidthGrid) {\n columnCount = maxWidth / maxCellWidth;\n } else {\n columnCount = maxWidth / minCellWidth; // predicted number of columns, yes it is usually much more than real number, but we fix that later\n }\n\n columnCount = $math.max(1, Math.floor(columnCount));\n columnCount = $math.min(this.maxColumns, columnCount);\n columnWidth = this.getColumnWidth(childrenCopy, columnCount, maxCellWidth);\n }\n\n var contentLeft;\n var contentRight;\n var contentTop;\n var contentBottom; // we itterate through array of children\n // TODO use iterator instead\n\n for (var i = 0, len = childrenCopy.length; i < len; i++) {\n var child = childrenCopy[i];\n\n if (child.isMeasured && !child.disabled && !child.__disabled) {\n var x = undefined; //child.pixelX; // must reset\n\n var y = undefined; //child.pixelY; // must reset\n\n var childMarginLeft = child.pixelMarginLeft;\n var childMarginRight = child.pixelMarginRight;\n var childMarginTop = child.pixelMarginTop;\n var childMarginBottom = child.pixelMarginBottom;\n var childWidth = child.measuredWidth;\n var childHeight = child.measuredHeight;\n var childLeft = void 0;\n var childRight = void 0;\n var childTop = void 0;\n var childBottom = void 0;\n\n switch (this.layout) {\n case \"none\":\n break;\n // absolute layout\n\n case \"absolute\":\n // horizontal alignment\n switch (child.align) {\n case \"left\":\n x = childMarginLeft - child.maxLeft;\n break;\n\n case \"center\":\n x = (innerWidth - childWidth) / 2 - child.maxLeft;\n break;\n\n case \"right\":\n x = innerWidth - childMarginRight - child.maxRight;\n break;\n\n default:\n if (!(child.x instanceof Percent)) {\n x = child.pixelX;\n }\n\n break;\n } // vertical alignment\n\n\n switch (child.valign) {\n case \"top\":\n y = childMarginTop - child.maxTop;\n break;\n\n case \"middle\":\n y = (innerHeight - childHeight) / 2 - child.maxTop;\n break;\n\n case \"bottom\":\n y = innerHeight - childMarginBottom - child.maxBottom;\n break;\n\n default:\n if (!(child.y instanceof Percent)) {\n y = child.pixelY;\n }\n\n break;\n }\n\n break;\n // vertical layout\n\n case \"vertical\":\n //if ($type.isNumber(child.relativeHeight)) {\n //\tchildHeight = child.maxHeight;\n //}\n switch (child.align) {\n case \"left\":\n x = childMarginLeft - child.maxLeft;\n break;\n\n case \"center\":\n x = (innerWidth - childWidth) / 2 - child.maxLeft;\n break;\n\n case \"right\":\n x = innerWidth - childMarginRight - child.maxRight;\n break;\n\n default:\n x = child.pixelX;\n break;\n }\n\n y = nextY + childMarginTop - child.maxTop;\n nextY = y + child.maxBottom + childMarginBottom;\n break;\n // horizontal layout\n\n case \"horizontal\":\n //if ($type.isNumber(child.relativeHeight)) {\n //\tchildHeight = child.maxHeight;\n //}\n switch (child.valign) {\n case \"top\":\n y = childMarginTop - child.maxTop;\n break;\n\n case \"middle\":\n y = (innerHeight - childHeight) / 2 - child.maxTop;\n break;\n\n case \"bottom\":\n y = innerHeight - childMarginBottom - child.maxBottom;\n break;\n\n default:\n y = child.pixelY;\n break;\n }\n\n x = nextX + childMarginLeft - child.maxLeft;\n nextX = x + child.maxRight + childMarginRight;\n break;\n\n case \"grid\":\n x = nextX + childMarginLeft - child.maxLeft;\n\n switch (child.valign) {\n case \"top\":\n y = nextY + childMarginTop - child.maxTop;\n break;\n\n case \"middle\":\n y = nextY + (innerHeight - childHeight) / 2 - child.maxTop;\n break;\n\n case \"bottom\":\n y = nextY + innerHeight - childMarginBottom - child.maxBottom;\n break;\n\n default:\n y = nextY - child.maxTop;\n break;\n }\n\n nextX += columnWidth[column];\n rowHeight[row] = $math.max(rowHeight[row], childHeight);\n column++;\n var nextColumnWidth = columnWidth[column];\n\n if (!$type.isNumber(nextColumnWidth)) {\n nextColumnWidth = maxCellWidth;\n }\n\n if (nextX > $math.min(this.innerWidth, maxWidth) - nextColumnWidth + 1 && column < columnCount) {\n columnCount = column;\n nextX = 0;\n nextY = 0;\n row = 0;\n column = 0;\n columnWidth = this.getColumnWidth(childrenCopy, columnCount, maxCellWidth);\n rowHeight = [];\n i = -1;\n continue;\n }\n\n if (column >= columnCount) {\n column = 0;\n nextY += rowHeight[row];\n row++;\n nextX = 0;\n }\n\n break;\n }\n\n if (this.layout !== \"none\") {\n child.moveTo({\n x: x,\n y: y\n }); // must use moveTo, otherwise x/y set in percent won't work\n\n childLeft = x + child.maxLeft - childMarginLeft;\n childRight = x + child.maxRight + childMarginRight;\n childTop = y + child.maxTop - childMarginTop;\n childBottom = y + child.maxBottom + childMarginBottom;\n\n if (childRight > right || !$type.isNumber(right)) {\n right = childRight;\n }\n\n if (childLeft < left || !$type.isNumber(left)) {\n left = childLeft;\n }\n\n if (childTop < top || !$type.isNumber(top)) {\n top = childTop;\n }\n\n if (childBottom > bottom || !$type.isNumber(bottom)) {\n bottom = childBottom;\n }\n\n if (childRight > contentRight || !$type.isNumber(contentRight)) {\n contentRight = childRight;\n }\n\n if (childLeft < contentLeft || !$type.isNumber(contentLeft)) {\n contentLeft = childLeft;\n }\n\n if (childTop < contentTop || !$type.isNumber(contentTop)) {\n contentTop = childTop;\n }\n\n if (childBottom > contentBottom || !$type.isNumber(contentBottom)) {\n contentBottom = contentBottom;\n }\n }\n } else {\n child.validatePosition();\n }\n }\n\n if (this.layout == \"none\") {\n var noneBBox = this.bbox;\n left = noneBBox.x;\n right = noneBBox.x + noneBBox.width;\n top = noneBBox.y;\n bottom = noneBBox.y + noneBBox.height;\n }\n\n if (!$type.isNumber(left)) {\n left = 0;\n contentLeft = 0;\n }\n\n if (!$type.isNumber(right)) {\n right = this._availableWidth;\n contentRight = right;\n }\n\n if (!$type.isNumber(top)) {\n top = 0;\n contentTop = 0;\n }\n\n if (!$type.isNumber(bottom)) {\n bottom = this._availableHeight;\n contentBottom = bottom;\n }\n\n if (!$type.isNumber(contentTop)) {\n contentTop = 0;\n }\n\n if (!$type.isNumber(contentBottom)) {\n contentBottom = contentTop;\n }\n\n if (!$type.isNumber(contentLeft)) {\n contentLeft = 0;\n }\n\n if (!$type.isNumber(contentRight)) {\n contentRight = contentLeft;\n }\n\n measuredWidth = right - left;\n measuredHeight = bottom - top;\n\n if ($type.isNumber(this.relativeWidth)) {\n measuredWidth = maxWidth - paddingLeft - paddingRight;\n left = 0;\n right = measuredWidth;\n }\n\n if ($type.isNumber(this.relativeHeight)) {\n measuredHeight = maxHeight - paddingTop - paddingBottom;\n top = 0;\n bottom = measuredHeight;\n }\n\n if ($type.isNumber(this._pixelWidth)) {\n left = 0;\n measuredWidth = this._pixelWidth - paddingLeft - paddingRight;\n }\n\n if ($type.isNumber(minWidth) && measuredWidth < minWidth) {\n left = 0;\n measuredWidth = this.minWidth - paddingLeft - paddingRight;\n }\n\n if ($type.isNumber(this._pixelHeight)) {\n top = 0;\n measuredHeight = this._pixelHeight - paddingTop - paddingBottom;\n }\n\n if ($type.isNumber(minHeight) && measuredHeight < minHeight) {\n top = 0;\n measuredHeight = minHeight - paddingTop - paddingBottom;\n }\n\n var measuredContentWidth = contentRight - contentLeft;\n var measuredContentHeight = contentBottom - contentTop; /// handle content alignment\n\n if (this.layout != \"none\" && (this.contentAlign || this.contentValign) && children.length > 0) {\n var dx_1;\n var dy_1;\n var mwa = measuredWidth;\n var mha = measuredHeight;\n\n if (mwa < measuredContentWidth) {\n mwa = measuredContentWidth;\n }\n\n if (mha < measuredContentHeight) {\n mha = measuredContentHeight;\n }\n\n if (this.contentAlign == \"center\") {\n dx_1 = (mwa - measuredContentWidth) / 2;\n }\n\n if (this.contentAlign == \"right\") {\n dx_1 = mwa - measuredContentWidth;\n }\n\n if (this.contentValign == \"middle\") {\n dy_1 = (mha - measuredContentHeight) / 2;\n }\n\n if (this.contentValign == \"bottom\") {\n dy_1 = mha - measuredContentHeight;\n }\n\n if ($type.isNumber(dx_1)) {\n $iter.each(children.iterator(), function (child) {\n var childLeft = child.maxLeft;\n var ddx = dx_1;\n\n if (_this.layout == \"horizontal\") {\n child.x = child.pixelX + ddx;\n } // individual grid elements can not be aligned vertically, that's why it's different from horizontal\n\n\n if (_this.layout == \"grid\") {\n child.x = child.pixelX + ddx;\n }\n\n if (_this.layout == \"vertical\") {\n ddx += child.pixelMarginLeft;\n\n if (child.align == \"none\") {\n child.x = ddx - childLeft;\n }\n }\n\n if (_this.layout == \"absolute\") {\n ddx += child.pixelMarginLeft;\n\n if (child.align == \"none\") {\n child.x = ddx - childLeft;\n }\n }\n });\n }\n\n if ($type.isNumber(dy_1)) {\n $iter.each(children.iterator(), function (child) {\n var childTop = child.maxTop;\n var ddy = dy_1;\n\n if (_this.layout == \"horizontal\") {\n ddy += child.pixelMarginTop;\n\n if (child.valign == \"none\") {\n child.y = ddy - childTop;\n }\n } // individual grid elements can not be aligned vertically, that's why it's different from horizontal\n\n\n if (_this.layout == \"grid\") {\n ddy += child.pixelMarginTop;\n child.y = ddy - childTop;\n }\n\n if (_this.layout == \"vertical\") {\n child.y = child.pixelY + ddy;\n }\n\n if (_this.layout == \"absolute\") {\n ddy += child.pixelMarginTop;\n\n if (child.valign == \"none\") {\n child.y = ddy - childTop;\n }\n }\n });\n }\n }\n\n var oldBBox = this.bbox; // this will mess up maxw/maxh set by container layout, we need a separate min/maxwidth for users\n // this prevents invalidating layout in such cases as scrolling category axis, when labels go outside bounds and results transformed event\n // todo: need to check if this doesn't cause other problems.\n //if (this.maxWidth > 0) {\n //measuredWidth = $math.min(measuredWidth, this.maxWidth);\n //measuredWidth = $math.max(measuredWidth, this.minWidth);\n //}\n //if (this.maxHeight > 0) {\n //measuredHeight = $math.min(measuredHeight, this.maxHeight);\n //measuredHeight = $math.max(measuredHeight, this.minHeight);\n //}\n\n measuredWidth = $math.max(measuredWidth, minWidth);\n measuredHeight = $math.max(measuredHeight, minHeight);\n this.contentWidth = measuredWidth;\n this.contentHeight = measuredHeight; // new\n\n measuredWidth = $math.min(measuredWidth, maxWidth);\n measuredHeight = $math.min(measuredHeight, maxHeight);\n this._bbox = {\n x: left,\n y: top,\n width: measuredWidth,\n height: measuredHeight\n };\n var prevLeft = this.maxLeft;\n var prevTop = this.maxTop;\n var prevBotttom = this.maxBottom;\n var prevRight = this.maxRight;\n this.measure();\n\n if (prevLeft != this.maxLeft || prevRight != this.maxRight || prevTop != this.maxTop || prevBotttom != this.maxBottom) {\n if (this.events.isEnabled(\"transformed\")) {\n var event_1 = {\n type: \"transformed\",\n target: this\n };\n\n if (oldBBox) {\n event_1.dummyData = oldBBox.width + \" \" + measuredWidth + \" \" + oldBBox.height + \" \" + measuredHeight;\n }\n\n this.events.dispatchImmediately(\"transformed\", event_1);\n }\n }\n\n this.dispatchImmediately(\"layoutvalidated\");\n };\n /**\r\n * Positions element according its center settings.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.updateCenter = function () {\n _super.prototype.updateCenter.call(this);\n\n this.updateBackground();\n };\n /**\r\n * Update the background to fit into specific dimensions.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make it protected?\r\n */\n\n\n Container.prototype.updateBackground = function () {\n var background = this._background; // accessing protected, as getter creates instance if it doesn't exist\n\n if (background) {\n background.x = this.maxLeft;\n background.y = this.maxTop;\n background.width = this.maxRight - this.maxLeft;\n background.height = this.maxBottom - this.maxTop;\n }\n };\n /**\r\n * Returns widths of all columns in a horizontal Container layout.\r\n *\r\n * @ignore Exclude from docs\r\n * @param columnCount Number of columns\r\n * @param maxCellWidth Maximum width of one grid cell\r\n * @return An array of column widths\r\n */\n\n\n Container.prototype.getColumnWidth = function (children, columnCount, maxCellWidth) {\n var _this = this;\n\n var columnWidth = [];\n var column = 0;\n $array.each(children, function (child) {\n if (child.isMeasured && !child.disabled && !child.__disabled) {\n if (_this.fixedWidthGrid) {\n columnWidth[column] = maxCellWidth;\n } else {\n columnWidth[column] = $math.max(columnWidth[column], child.measuredWidth + child.pixelMarginRight + child.pixelMarginLeft);\n }\n\n column++;\n\n if (column == columnCount) {\n column = 0;\n }\n }\n });\n return columnWidth;\n };\n\n Object.defineProperty(Container.prototype, \"layout\", {\n /**\r\n * @return Layout\r\n */\n get: function get() {\n return this.getPropertyValue(\"layout\");\n },\n\n /**\r\n * Container layout.\r\n *\r\n * Options: \"absolute\" (default), \"vertical\", \"horizontal\", \"grid\", \"none\". \"none\" is quite the same as \"absolute\" - the objects will\r\n * be positioned at their x, y coordinates, the difference is that with \"absolute\" you can still use align/valign for children and with \"none\" you can not.\r\n * Use \"none\" as much as you can as it's most cpu-saving layout.\r\n *\r\n * @default \"absolute\"\r\n * @param value Layout\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"layout\", value)) {\n this.invalidateLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"contentValign\", {\n /**\r\n * @return Vertical alignment\r\n */\n get: function get() {\n return this.getPropertyValue(\"contentValign\");\n },\n\n /**\r\n * Vertical alignment of the elements for the vertical Container.\r\n *\r\n * This is used when Container is larger than the height of all its children.\r\n *\r\n * @param value vertical alignment\r\n */\n set: function set(value) {\n this.setPropertyValue(\"contentValign\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"contentAlign\", {\n /**\r\n * @return Horizontal alignment\r\n */\n get: function get() {\n return this.getPropertyValue(\"contentAlign\");\n },\n\n /**\r\n * Horizontal alignment of the elements for the horizontal Container.\r\n *\r\n * This is used when Container is larger than the height of all its children.\r\n *\r\n * @param value Horizontal alignment\r\n */\n set: function set(value) {\n this.setPropertyValue(\"contentAlign\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"fixedWidthGrid\", {\n /**\r\n * @return Should use fixed width grid?\r\n */\n get: function get() {\n return this.getPropertyValue(\"fixedWidthGrid\");\n },\n\n /**\r\n * Controls if the grid of the Container should use fixed width. Fixed width\r\n * grid will divide available space to all its columns/rows equally, without\r\n * adapting to actual child sizes or size requirements.\r\n *\r\n * @default false\r\n * @param value Should use fixed width grid?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"fixedWidthGrid\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"maxColumns\", {\n /**\r\n * @return Should use fixed width grid?\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxColumns\");\n },\n\n /**\r\n * Maximum number of columns (when using `\"grid\"` layout).\r\n *\r\n * @param value Should use fixed width grid?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"maxColumns\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"reverseOrder\", {\n /**\r\n * @return Reverse children?\r\n */\n get: function get() {\n return this.getPropertyValue(\"reverseOrder\");\n },\n\n /**\r\n * If set to `true`, the children of the container will be drawn in reverse\r\n * order.\r\n *\r\n * @default false\r\n * @param value Reverse children?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"reverseOrder\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"setStateOnChildren\", {\n /**\r\n * @return Set state on children\r\n */\n get: function get() {\n return this.getPropertyValue(\"setStateOnChildren\");\n },\n\n /**\r\n * Specifies if, when state is applied on this container, the same state\r\n * should be applied to container's children as well as `background`.\r\n *\r\n * @default false\r\n * @param value Set state on children\r\n */\n set: function set(value) {\n this.setPropertyValue(\"setStateOnChildren\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if point is within bounds of a container.\r\n *\r\n * @param point A coordinate to check\r\n * @return `true` if it fits within container\r\n */\n\n Container.prototype.fitsToBounds = function (point) {\n var x = point.x;\n var y = point.y;\n var deviation = 0.5; // sometimes coordinates are rounded to numbers like .999 so we add deviation here\n\n if (x >= -deviation && x <= this.pixelWidth + deviation && y >= -deviation && y <= this.pixelHeight + deviation) {\n return true;\n } else {\n return false;\n }\n };\n /**\r\n * Copies all properties from different Container, including background\r\n * clone.\r\n *\r\n * @param source Source Container to copy from\r\n */\n\n\n Container.prototype.copyFrom = function (source) {\n var _this = this;\n\n _super.prototype.copyFrom.call(this, source);\n\n this.layout = source.layout;\n this.setStateOnChildren = source.setStateOnChildren;\n\n if (source._background) {\n this.background = source._background.clone();\n this.background.copyFrom(source._background); // won't work without this\n }\n\n $iter.each(source.children.iterator(), function (child) {\n if (child.shouldClone) {\n var clonedChild = child.clone();\n clonedChild.parent = _this;\n }\n });\n };\n\n Object.defineProperty(Container.prototype, \"preloader\", {\n /**\r\n * @return Preloader instance\r\n */\n get: function get() {\n var preloader = this._preloader;\n\n if (preloader) {\n return preloader;\n } else if (this.parent) {\n return this.parent.preloader;\n }\n },\n\n /**\r\n * A [[Preloader]] instance to be used when Container is busy.\r\n *\r\n * @param preloader Preloader instance\r\n */\n set: function set(preloader) {\n if (this._preloader) {\n this.removeDispose(this._preloader);\n }\n\n this._preloader = preloader;\n\n if (preloader) {\n preloader.parent = this.tooltipContainer;\n\n this._disposers.push(preloader);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\n\n Container.prototype.setPaper = function (paper) {\n var _this = this;\n\n var changed = _super.prototype.setPaper.call(this, paper);\n\n if (changed) {\n if (this._background) {\n this._background.paper = paper;\n this._background.topParent = this.topParent;\n }\n\n this.children.each(function (child) {\n child.setPaper(paper);\n child.topParent = _this.topParent;\n });\n }\n\n return changed;\n };\n /**\r\n * Removes Container from the system-wide list of invalid Containers.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.removeFromInvalids = function () {\n _super.prototype.removeFromInvalids.call(this);\n\n registry.removeFromInvalidLayouts(this);\n };\n /**\r\n * Sets a [[DataItem]] to be used as data for the Container.\r\n *\r\n * @todo Description\r\n * @param dataItem DataItem\r\n */\n\n\n Container.prototype.setDataItem = function (dataItem) {\n // this place is potentially dangerous, as if we set datItem for some dummy container, all children dataItems will be overriden\n // the main reason for doing this is that we need a setDataItem code to be called for each sprite, otherwise property fields won't be\n // applied. Also, getting dataItem from parent all the time is more expensive than saving value.\n if (this._dataItem != dataItem) {\n $iter.each(this.children.iterator(), function (child) {\n child.dataItem = dataItem;\n });\n\n if (this._background) {\n this._background.dataItem = dataItem;\n }\n }\n\n _super.prototype.setDataItem.call(this, dataItem);\n };\n /**\r\n * Measures the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype.measureElement = function () {\n if (this.disabled || this.isTemplate || this.layout == \"none\" || this.__disabled) {// void\n } else {\n this.validateLayout();\n }\n };\n\n Object.defineProperty(Container.prototype, \"fontFamily\", {\n /**\r\n * @return Font family\r\n */\n get: function get() {\n return this.getPropertyValue(\"fontFamily\");\n },\n\n /**\r\n * Font family to be used for the text.\r\n *\r\n * Parts of the text may override this setting using in-line formatting.\r\n *\r\n * @param value Font family value\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"fontFamily\", value, true)) {\n this.setSVGAttribute({\n \"font-family\": value\n });\n this.invalidateLabels();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"fontSize\", {\n /**\r\n * @return Font size\r\n */\n get: function get() {\n return this.getPropertyValue(\"fontSize\");\n },\n\n /**\r\n * Font size to be used for the text. The size can either be numeric, in\r\n * pixels, or other measurements.\r\n *\r\n * Parts of the text may override this setting using in-line formatting.\r\n *\r\n * @param value Font size value\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"fontSize\", value, true)) {\n this.setSVGAttribute({\n \"font-size\": value\n });\n this.invalidateLabels();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * When fontSize of fontFamily changes we need to hard-invalidate all Labels of this container to position them properly.\r\n */\n\n Container.prototype.invalidateLabels = function () {\n this.children.each(function (child) {\n // can't import Label because of Circular dependencies\n if (child[\"hardInvalidate\"]) {\n child[\"hardInvalidate\"](); // this fixes firefox and viewport issue\n\n child.events.once(\"validated\", child.handleValidate, child, false);\n } else if (child instanceof Container) {\n child.invalidateLabels();\n }\n });\n };\n\n Object.defineProperty(Container.prototype, \"fontWeight\", {\n /**\r\n * @return Font weight\r\n */\n get: function get() {\n return this.getPropertyValue(\"fontWeight\");\n },\n\n /**\r\n * Font weight to use for text.\r\n *\r\n * Parts of the text may override this setting using in-line formatting.\r\n *\r\n * @param value Font weight\r\n */\n set: function set(value) {\n this.setPropertyValue(\"fontWeight\", value);\n this.setSVGAttribute({\n \"font-weight\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Container.prototype, \"textDecoration\", {\n /**\r\n * @return Decoration\r\n */\n get: function get() {\n return this.getPropertyValue(\"textDecoration\");\n },\n\n /**\r\n * A text decoration to use for text.\r\n *\r\n * Parts of the text may override this setting using in-line formatting.\r\n *\r\n * @param value Decoration\r\n */\n set: function set(value) {\n this.setPropertyValue(\"textDecoration\", value);\n this.setSVGAttribute({\n \"text-decoration\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Disposes (destroys) the element and all its children.\r\n */\n\n Container.prototype.dispose = function () {\n if (this._background) {\n this._background.dispose();\n }\n\n this._shouldBeReady = [];\n this.disposeChildren();\n\n _super.prototype.dispose.call(this);\n };\n /**\r\n * Applies a [[SpriteState]] on this element.\r\n *\r\n * The first parameter can either be a name of the state or a [[SpriteState]]\r\n * instance.\r\n *\r\n * When run, this method will apply SVG properties defined in a\r\n * [[SpriteState]], but only those that are relevant to this particular\r\n * element, that is are listed in its respective `properties` array.\r\n *\r\n * @see {@link SpriteState}\r\n * @param value A state - name key or instance\r\n * @param transitionDuration Duration of the transition between current and new state\r\n * @param easing An easing function\r\n */\n\n\n Container.prototype.setState = function (value, transitionDuration, easing) {\n var stateName = value;\n\n if (value instanceof SpriteState) {\n stateName = value.name;\n }\n\n if (this.setStateOnChildren) {\n $iter.each(this.children.iterator(), function (child) {\n child.setState(stateName, transitionDuration, easing); // not good to set it in child setState\n\n if (stateName != \"active\") {\n child.isActive = false;\n }\n });\n }\n\n if (this._background) {\n this._background.setState(stateName);\n }\n\n if (this.setStateOnSprites.length) {\n $array.each(this.setStateOnSprites, function (item) {\n item.setState(stateName, transitionDuration, easing);\n });\n }\n\n return _super.prototype.setState.call(this, value, transitionDuration, easing);\n }; // otherwise isActive won't work properly with background\n\n\n Container.prototype.setActive = function (value) {\n _super.prototype.setActive.call(this, value);\n\n if (this._background) {\n this._background.isActive = value;\n }\n };\n /**\r\n * Dispatches ready event. Dispatches when all children are ready.\r\n */\n\n\n Container.prototype.dispatchReady = function () {\n var _this = this;\n\n if (!this.isReady() && !this.isDisposed()) {\n var allReady_1 = true;\n $iter.eachContinue(this.children.iterator(), function (sprite) {\n if (!sprite.__disabled && !sprite.disabled && !sprite.isReady()) {\n allReady_1 = false;\n return false;\n } else {\n return true;\n }\n });\n $array.eachContinue(this._shouldBeReady, function (sprite) {\n if (!sprite.__disabled && !sprite.disabled && !sprite.isReady()) {\n allReady_1 = false;\n return false;\n } else {\n return true;\n }\n });\n\n if (allReady_1) {\n _super.prototype.dispatchReady.call(this);\n } else {\n registry.events.once(\"exitframe\", function () {\n _this.dispatchReady();\n\n system.requestFrame();\n }, undefined, false);\n }\n }\n };\n /**\r\n * Called during the System.update method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype._systemUpdate = function (skippedSprites) {\n this.children.each(function (child) {\n if (child.invalid) {\n if (!child._systemCheckIfValidate()) {\n skippedSprites.push(child);\n } else if (child.dataItem && child.dataItem.component && child.dataItem.component.dataInvalid) {\n skippedSprites.push(child);\n } else {\n child.validate();\n }\n }\n });\n\n _super.prototype._systemUpdate.call(this, skippedSprites);\n };\n /**\r\n * Called during the System.validatePositions method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype._systemValidatePositions = function () {\n this.children.each(function (sprite) {\n if (sprite.positionInvalid) {\n sprite.validatePosition();\n }\n });\n\n _super.prototype._systemValidatePositions.call(this);\n };\n /**\r\n * Called during the System.validateLayouts method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Container.prototype._systemValidateLayouts = function () {\n if (this.layoutInvalid && !this.isDisposed()) {\n this.validateLayout();\n }\n };\n\n Object.defineProperty(Container.prototype, \"tapToActivate\", {\n /**\r\n * @return Enable touch protection?\r\n */\n get: function get() {\n return this._tapToActivate;\n },\n\n /**\r\n * If set to `true` the chart's regular touch functionality will be suspended\r\n * so that the whole page it is located in remains scrollable, even when\r\n * swiping over the chart's body.\r\n *\r\n * User will need to tap the chart in order to activate its regular touch\r\n * functionality.\r\n *\r\n * The chart will remain \"active\" as long as user keeps interacting with the\r\n * chart. After `tapTimeout` milliseconds the chart will return to its\r\n * \"protected\" mode.\r\n *\r\n * @default false\r\n * @since 4.4.0\r\n * @param value Enable touch protection?\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/touch/} For more information.\r\n */\n set: function set(value) {\n if (this._tapToActivate != value) {\n this.setTapToActivate(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Container.prototype.setTapToActivate = function (value) {\n var _this = this;\n\n this._tapToActivate = value;\n this.interactions.isTouchProtected = value; // setEventDisposer will also remove listeners if value == false\n\n if (value) {\n this.interactions.setEventDisposer(\"container-tapToActivate\", value, function () {\n return new MultiDisposer([_this.events.on(\"hit\", _this.handleTapToActivate, _this, false), _this.events.on(\"down\", _this.initTapTimeout, _this, false), _this.events.on(\"track\", _this.initTapTimeout, _this, false), //this.events.on(\"drag\", this.initTapTimeout, this, false),\n getInteraction().body.events.on(\"down\", function (ev) {\n if (!getInteraction().isLocalElement(ev.pointer, _this.paper.svg, _this.uid)) {\n _this.handleTapToActivateDeactivation();\n }\n }, _this, false)]);\n });\n }\n\n getInteraction();\n };\n /**\r\n * @todo Ignore on non-touch events\r\n */\n\n\n Container.prototype.handleTapToActivate = function () {\n this.interactions.isTouchProtected = false;\n this.initTapTimeout();\n };\n\n Container.prototype.handleTapToActivateDeactivation = function () {\n this.interactions.isTouchProtected = true;\n };\n\n Container.prototype.initTapTimeout = function () {\n var _this = this;\n\n if (this._tapToActivateTimeout) {\n this._tapToActivateTimeout.dispose();\n }\n\n if (this.tapToActivate && !this.interactions.isTouchProtected && this.tapTimeout) {\n this._tapToActivateTimeout = this.setTimeout(function () {\n _this.handleTapToActivateDeactivation();\n }, this.tapTimeout);\n }\n };\n /**\r\n * Moves the whole chart to other HTML container.\r\n *\r\n * `htmlElement` can either be a reference to a DOM element, or an id of\r\n * such element.\r\n *\r\n * @since 4.9.24\r\n * @param htmlElement Target element\r\n */\n\n\n Container.prototype.moveHtmlContainer = function (htmlElement) {\n var newContainer = $dom.getElement(htmlElement);\n\n if (newContainer) {\n this.htmlContainer = newContainer;\n var svgDiv = this.svgContainer;\n svgDiv.htmlElement = newContainer;\n svgDiv.htmlElement.appendChild(svgDiv.SVGContainer);\n svgDiv.initSensor();\n svgDiv.measure();\n } else if ($type.isString(htmlElement) && htmlElement != \"\") {\n system.log(\"html container '\" + htmlElement + \"' not found\"); //throw new Error(\"html container not found\");\n }\n };\n /**\r\n * @ignore\r\n * @return Has license?\r\n */\n\n\n Container.prototype.hasLicense = function () {\n if (options.commercialLicense) {\n return true;\n }\n\n for (var i = 0; i < options.licenses.length; i++) {\n if (options.licenses[i].match(/^CH.{5,}/i)) {\n return true;\n }\n }\n\n return false;\n };\n\n return Container;\n}(Sprite);\n\nexport { Container };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Container\"] = Container;","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { registry, is } from \"./Registry\";\nimport { Container } from \"./Container\";\nimport { raf } from \"./utils/AsyncPending\";\nimport { triggerIdle } from \"./utils/AsyncPending\";\nimport * as $array from \"./utils/Array\";\nimport * as $object from \"./utils/Object\";\nimport * as $log from \"./utils/Log\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * The main class that handles system-wide tasks, like caching, heartbeats, etc.\r\n * @important\r\n */\n\nvar System =\n/** @class */\nfunction () {\n /**\r\n * Performs initialization of the System object.\r\n *\r\n * Called when the first [[Sprite]] object is created.\r\n *\r\n * @ignore Exclude from docs\r\n */\n function System() {\n /**\r\n * A flag indicating if the system is on pause.\r\n */\n this._isPaused = false;\n /**\r\n * Holds the list of currently playing animations.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this.animations = [];\n /**\r\n * Unique ID of the object.\r\n */\n\n this.uid = registry.getUniqueId();\n /**\r\n * @todo Description\r\n * @todo Needed?\r\n * @ignore Exclude from docs\r\n */\n\n this.dummyCounter = 0;\n this._frameRequested = false;\n this.updateStepDuration = 45;\n this.time = Date.now();\n }\n /**\r\n * Reports time elapsed since timer was reset.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Needed?\r\n * @param msg Message to report in console\r\n * @param reset Reset time counter\r\n */\n\n\n System.prototype.reportTime = function (msg, reset) {\n if (this.dummyCounter < 6) {//console.log(Date.now() - this.time, msg, this.dummyCounter2);\n }\n\n if (reset) {\n this.time = Date.now();\n }\n };\n /**\r\n * Performs \"heartbeat\" operations `frameRate` number of times per second.\r\n *\r\n * When the chart element is invalidated, it is not immediately redrawn.\r\n *\r\n * Instead it waits for the next `update()` cycle to be re-validated.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Maybe should be private?\r\n */\n\n\n System.prototype.update = function () {\n var _this = this;\n\n if (this._isPaused) {\n return;\n }\n\n this._frameRequested = false;\n var time = Date.now();\n registry.dispatchImmediately(\"enterframe\"); //this.validateLayouts();\n //this.validatePositions();\n\n /*\r\n for (let key in registry.invalidLayouts) {\r\n this.validateLayouts(key);\r\n }\r\n for (let key in registry.invalidPositions) {\r\n this.validatePositions(key);\r\n }\r\n */\n\n var skippedComponents = []; // data objects first - do all calculations\n // only data is parsed in chunks, thats why we do for loop instead of a while like with other invalid items.\n // important to go backwards, as items are removed!\n // TODO use iterator instead\n\n for (var key in registry.invalidDatas) {\n if ($object.hasKey(registry.invalidDatas, key)) {\n var invalidData = registry.invalidDatas[key];\n\n while (invalidData.length > 0) {\n var component = invalidData[0];\n var dataProvider = component.dataProvider;\n\n if (!component.isDisposed()) {\n if (dataProvider && dataProvider.dataInvalid) {\n try {\n dataProvider.validateData();\n\n if (dataProvider.dataValidationProgress < 1) {\n break;\n }\n } catch (e) {\n $array.remove(invalidData, dataProvider);\n dataProvider.raiseCriticalError(e);\n }\n } else {\n try {\n component.validateData();\n\n if (component.dataValidationProgress < 1) {\n break;\n }\n } catch (e) {\n $array.remove(invalidData, component);\n component.raiseCriticalError(e);\n }\n }\n } else {\n $array.remove(invalidData, component);\n }\n }\n\n if (Date.now() - time > this.updateStepDuration) {\n break;\n }\n }\n }\n\n while (registry.invalidRawDatas.length > 0) {\n var component = registry.invalidRawDatas[0];\n\n if (!component.isDisposed()) {\n try {\n component.validateRawData();\n } catch (e) {\n $array.remove(registry.invalidRawDatas, component);\n component.raiseCriticalError(e);\n }\n } else {\n $array.remove(registry.invalidRawDatas, component);\n }\n } // TODO use iterator instead\n\n\n while (registry.invalidDataItems.length > 0) {\n var component = registry.invalidDataItems[0];\n var dataProvider = component.dataProvider; // this is needed to avoid partial value validation when data is parsed in chunks\n\n if (component.isDisposed() || component.dataInvalid || dataProvider && dataProvider.dataInvalid) {// void\n } else {\n try {\n component.validateDataItems();\n } catch (e) {\n $array.remove(registry.invalidDataItems, component);\n component.raiseCriticalError(e);\n }\n } // this might seem too much, as validateValues removes from invalidDataItems aswell, but just to be sure (in case validateData is overriden and no super is called)\n\n\n $array.remove(registry.invalidDataItems, component);\n } // TODO use iterator instead\n\n\n while (registry.invalidDataRange.length > 0) {\n var component = registry.invalidDataRange[0];\n var dataProvider = component.dataProvider;\n\n if (component.isDisposed() || component.dataInvalid || dataProvider && dataProvider.dataInvalid) {// void\n } else {\n try {\n component.validateDataRange();\n\n if (!component.skipRangeEvent) {\n component.dispatchImmediately(\"datarangechanged\");\n }\n\n component.skipRangeEvent = false;\n } catch (e) {\n $array.remove(registry.invalidDataRange, component);\n component.raiseCriticalError(e);\n }\n } // this might seem too much, as validateDataRange removes from invalidDataRange aswell, but just to be sure (in case validateData is overriden and no super is called)\n\n\n $array.remove(registry.invalidDataRange, component);\n }\n\n var skippedSprites = []; // display objects later\n // TODO use iterator instead\n\n $object.each(registry.invalidLayouts, function (key) {\n _this.validateLayouts(key);\n });\n $object.each(registry.invalidPositions, function (key) {\n _this.validatePositions(key);\n });\n var hasSkipped = false;\n time = Date.now();\n $object.each(registry.invalidSprites, function (key, invalidSprites) {\n var count = 0;\n\n while (invalidSprites.length > 0) {\n _this.validateLayouts(key);\n\n _this.validatePositions(key);\n\n count++;\n\n if (count == 5) {\n if (Date.now() - time > _this.updateStepDuration) {\n break;\n }\n\n count = 0;\n }\n\n var sprite = invalidSprites[invalidSprites.length - 1]; // we need to check this, as validateLayout might validate sprite\n\n if (sprite && !sprite.isDisposed()) {\n if (!sprite._systemCheckIfValidate()) {\n // void\n skippedSprites.push(sprite);\n } else {\n if (!_this.checkIfValidate2(sprite)) {\n // void\n skippedSprites.push(sprite);\n } else {\n try {\n sprite._systemUpdate(skippedSprites);\n } catch (e) {\n sprite.invalid = false;\n $array.remove(invalidSprites, sprite);\n sprite.raiseCriticalError(e);\n }\n }\n } // this might seem too much, but it's ok\n\n\n sprite.invalid = false;\n }\n\n $array.remove(invalidSprites, sprite);\n }\n\n registry.invalidSprites[key] = registry.invalidSprites[key].concat(skippedSprites);\n });\n $object.each(registry.invalidSprites, function (key, value) {\n if (value.length > 0) {\n hasSkipped = true;\n }\n });\n $object.each(registry.invalidDatas, function (key, value) {\n if (value.length > 0) {\n hasSkipped = true;\n }\n }); // TODO make this more efficient\n // TODO don't copy the array\n\n $array.each($array.copy(this.animations), function (x) {\n x.update();\n }); //if(!hasSkipped){\n\n $object.each(registry.invalidLayouts, function (key) {\n _this.validateLayouts(key);\n });\n $object.each(registry.invalidPositions, function (key) {\n _this.validatePositions(key);\n }); //}\n\n triggerIdle();\n $object.each(registry.invalidLayouts, function (key) {\n _this.validateLayouts(key);\n });\n $object.each(registry.invalidPositions, function (key) {\n _this.validatePositions(key);\n });\n registry.dispatchImmediately(\"exitframe\");\n\n if (hasSkipped || this.animations.length > 0 || skippedComponents.length > 0) {\n this.requestFrame();\n }\n\n if (this.updateStepDuration < 200) {\n var all0_1 = true;\n $object.each(registry.invalidDatas, function (key, value) {\n if (value.length > 0) {\n all0_1 = false;\n }\n });\n $object.each(registry.invalidSprites, function (key, value) {\n if (value.length > 0) {\n all0_1 = false;\n }\n });\n\n if (all0_1) {\n this.updateStepDuration = 200;\n }\n }\n };\n\n System.prototype.checkIfValidate2 = function (sprite) {\n if (sprite.dataItem && sprite.dataItem.component && sprite.dataItem.component.dataInvalid && !sprite.dataItem.component.isTemplate) {\n return false;\n } else {\n return true;\n }\n };\n /**\r\n * Requests new animation frame\r\n */\n\n\n System.prototype.requestFrame = function () {\n var _this = this;\n\n if (!this._frameRequested) {\n raf(function () {\n _this.update();\n });\n this._frameRequested = true;\n }\n };\n /**\r\n * Call this method if you update data or config of a chart that is in\r\n * hidden container, after revealing the container, so that labels and\r\n * possibly other elements can correctly arrange themselves.\r\n *\r\n * @since 4.7.10\r\n * @param container Target container\r\n */\n\n\n System.prototype.softInvalidate = function (container) {\n var _this = this;\n\n container.children.each(function (child) {\n if (child instanceof Container) {\n _this.softInvalidate(child);\n }\n\n if (child.measureFailed) {\n if (is(child, \"Label\")) {\n child.hardInvalidate();\n } else {\n child.invalidate();\n }\n\n child.measureFailed = false;\n }\n });\n };\n /**\r\n * Triggers position re-validation on all [[Sprite]] elements that have\r\n * invalid(ated) positions.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Maybe should be private?\r\n */\n\n\n System.prototype.validatePositions = function (id) {\n // invalid positions\n // TODO use iterator instead\n var invalidPositions = registry.invalidPositions[id];\n\n while (invalidPositions.length > 0) {\n var sprite = invalidPositions[invalidPositions.length - 1];\n\n if (!sprite.isDisposed()) {\n try {\n sprite._systemValidatePositions();\n } catch (e) {\n sprite.positionInvalid = false;\n $array.remove(invalidPositions, sprite);\n sprite.raiseCriticalError(e);\n }\n } else {\n $array.remove(invalidPositions, sprite);\n }\n }\n };\n /**\r\n * Triggers position re-validation on all [[Container]] elements that have\r\n * invalid(ated) layouts.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Maybe should be private?\r\n */\n\n\n System.prototype.validateLayouts = function (id) {\n // invalid positions\n // TODO use iterator instead\n var invalidLayouts = registry.invalidLayouts[id];\n\n while (invalidLayouts.length > 0) {\n var container = invalidLayouts[invalidLayouts.length - 1];\n\n if (!container.isDisposed()) {\n try {\n container.children.each(function (sprite) {\n sprite._systemValidateLayouts();\n });\n container.validateLayout();\n } catch (e) {\n container.layoutInvalid = false;\n $array.remove(invalidLayouts, container);\n container.raiseCriticalError(e);\n }\n } else {\n $array.remove(invalidLayouts, container);\n }\n }\n };\n /**\r\n * Outputs string to console if `verbose` is `true`.\r\n *\r\n * @param value Message to output to console\r\n */\n\n\n System.prototype.log = function (value) {\n $log.log(value);\n };\n\n Object.defineProperty(System.prototype, \"isPaused\", {\n /**\r\n * @return Is system on pause?\r\n */\n get: function get() {\n return this._isPaused;\n },\n\n /**\r\n * Pauses all the processes of all the amCharts objects on the page\r\n *\r\n * @return is paused?\r\n */\n set: function set(value) {\n this._isPaused = value;\n\n if (!value) {\n this._frameRequested = false;\n this.requestFrame();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * amCharts Version.\r\n *\r\n * This follows npm's semver specification.\r\n *\r\n * @see {@link https://docs.npmjs.com/misc/semver}\r\n */\n\n System.VERSION = \"4.10.24\";\n return System;\n}();\n\nexport { System };\n/**\r\n * A singleton global instance of [[System]].\r\n *\r\n * All code should use this, rather than instantiating their\r\n * own System objects.\r\n */\n\nexport var system = new System();","/**\r\n * Data parser module.\r\n */\n\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\nimport { DateFormatter } from \"../formatters/DateFormatter\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Base class for the data parsers.\r\n */\n\nvar DataParser =\n/** @class */\nfunction () {\n function DataParser() {}\n /**\r\n * A \"placeholder\" function for real parsers to override.\r\n *\r\n * @ignore Exclude from docs\r\n * @param data Source data\r\n * @return Parsed data (empty)\r\n */\n\n\n DataParser.prototype.parse = function (data) {\n return [];\n };\n\n ;\n Object.defineProperty(DataParser.prototype, \"parsableNumbers\", {\n /**\r\n * Checks if there are any numeric fields that need to be converted to\r\n * numbers.\r\n *\r\n * @return Numeric fields?\r\n */\n get: function get() {\n return this.options.numberFields && this.options.numberFields.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts a value to 'number' if it is in `numberFields`.\r\n *\r\n * @param field Field name\r\n * @param value Value\r\n * @return Parsed or original value\r\n */\n\n DataParser.prototype.maybeToNumber = function (field, value) {\n if (this.options.numberFields.indexOf(field) !== -1) {\n return $utils.anyToNumber(value);\n }\n\n return value;\n };\n\n Object.defineProperty(DataParser.prototype, \"parsableDates\", {\n /**\r\n * Checks if there are any date fields that need to be converted to `Date`\r\n * objects.\r\n *\r\n * @return Date fields?\r\n */\n get: function get() {\n return this.options.dateFields && this.options.dateFields.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts a value to `Date` if it is in `dateFields`.\r\n *\r\n * @param field Field name\r\n * @param value Value\r\n * @return Parsed or original value\r\n */\n\n DataParser.prototype.maybeToDate = function (field, value) {\n if (this.options.dateFields.indexOf(field) !== -1) {\n return this.options.dateFormatter.parse(value, this.dateFormat);\n }\n\n return value;\n };\n /**\r\n * Replaces empty value with something else.\r\n *\r\n * @param value Source value\r\n * @return Source value or replacement\r\n */\n\n\n DataParser.prototype.maybeToEmpty = function (value) {\n if ((!$type.hasValue(value) || value == \"\") && $type.hasValue(this.options.emptyAs)) {\n return this.options.emptyAs;\n }\n\n return value;\n };\n\n Object.defineProperty(DataParser.prototype, \"dateFormatter\", {\n /**\r\n * [[DateFormatter]] object for date parsing.\r\n *\r\n * If there was not [[DateFormatter]] supplied in parser options, a new one\r\n * is created.\r\n *\r\n * @return Date formatter\r\n * @see {@link DateFormatter}\r\n */\n get: function get() {\n if (!this.options.dateFormatter) {\n this.options.dateFormatter = new DateFormatter();\n\n if (this.options.dateFormat) {\n this.options.dateFormat = this.options.dateFormat;\n }\n }\n\n return this.options.dateFormatter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataParser.prototype, \"dateFormat\", {\n /**\r\n * A date format to use when parsing dates.\r\n *\r\n * @return Date format\r\n * @see {@link DateFormatter}\r\n */\n get: function get() {\n return this.options.dateFormat || this.dateFormatter.inputDateFormat;\n },\n enumerable: true,\n configurable: true\n });\n return DataParser;\n}();\n\nexport { DataParser };","/**\r\n * CSV parser.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { DataParser } from \"./DataParser\";\nimport * as $type from \"../utils/Type\";\nimport * as $array from \"../utils/Array\";\n/**\r\n * Define possible separators.\r\n */\n\nvar separators = [\",\", \";\", \"\\t\"];\n/**\r\n * A parser for CSV format.\r\n *\r\n * @important\r\n */\n\nvar CSVParser =\n/** @class */\nfunction (_super) {\n __extends(CSVParser, _super);\n\n function CSVParser() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Content-type suitable for CSV format.\r\n */\n\n\n _this.contentType = \"text/csv\";\n /**\r\n * Parser options.\r\n *\r\n * @see {@link ICSVOptions} for description of each option\r\n */\n\n _this.options = {\n delimiter: \"\",\n reverse: false,\n skipRows: 0,\n skipEmpty: true,\n useColumnNames: false\n };\n return _this;\n }\n /**\r\n * Tests if the format is CSV.\r\n *\r\n * @param data Source data\r\n * @return Is it CSV?\r\n */\n\n\n CSVParser.isCSV = function (data) {\n return CSVParser.getDelimiterFromData(data) ? true : false;\n };\n /**\r\n * Tries to determine a column separator.\r\n *\r\n * @param data Source data\r\n * @return Separator\r\n */\n\n\n CSVParser.getDelimiterFromData = function (data) {\n // We're going to take first few lines of the CSV with different\n // possible separators and check if it results in same number of columns.\n // If it does, we're going to assume it's a CSV\n var lines = data.split(\"\\n\");\n var len = lines.length;\n var separator;\n $array.each(separators, function (sep) {\n var columns = 0,\n lineColums = 0; // TODO replace with iterators\n\n for (var i = 0; i < len; ++i) {\n // Get number of columns in a line\n columns = lines[i].split(sep).length;\n\n if (columns > 1) {\n // More than one column - possible candidate\n if (lineColums === 0) {\n // First line\n lineColums = columns;\n } else if (columns != lineColums) {\n // Incorrect number of columns, give up on this separator\n lineColums = 0;\n break;\n }\n } else {\n // Not this separator\n // Not point in continuing\n lineColums = 0;\n break;\n }\n } // Check if we have a winner\n\n\n if (lineColums) {\n separator = sep;\n }\n });\n return separator;\n };\n /**\r\n * Parses and returns data.\r\n *\r\n * @param data Unparsed data\r\n * @return Parsed data\r\n */\n\n\n CSVParser.prototype.parse = function (csv) {\n // Check if we have delimiter set\n if (!this.options.delimiter) {\n this.options.delimiter = CSVParser.getDelimiterFromData(csv);\n } // Get CSV data as array\n\n\n var data = this.CSVToArray(csv, this.options.delimiter); // Do we need to cast some fields to numbers?\n\n var empty = $type.hasValue(this.options.emptyAs);\n var numbers = this.parsableNumbers;\n var dates = this.parsableDates; // Init resuling array\n\n var res = [],\n cols = [],\n col,\n i; // Skip rows\n\n for (i = 0; i < this.options.skipRows; i++) {\n data.shift();\n } // First row holds column names?\n\n\n if (this.options.useColumnNames) {\n cols = data.shift(); // Normalize column names\n\n for (var x = 0; x < cols.length; x++) {\n // trim\n col = $type.hasValue(cols[x]) ? cols[x].replace(/^\\s+|\\s+$/gm, \"\") : \"\"; // Check for empty\n\n if (\"\" === col) {\n col = \"col\" + x;\n }\n\n cols[x] = col;\n }\n } // Iterate through the result set\n\n\n var row;\n\n while (true) {\n row = this.options.reverse ? data.pop() : data.shift();\n\n if (!row) {\n break;\n }\n\n if (this.options.skipEmpty && row.length === 1 && row[0] === \"\") {\n continue;\n }\n\n var dataPoint = {};\n\n for (i = 0; i < row.length; i++) {\n col = undefined === cols[i] ? \"col\" + i : cols[i];\n dataPoint[col] = row[i] === \"\" ? this.options.emptyAs : row[i]; // Convert\n\n if (empty) {\n dataPoint[col] = this.maybeToEmpty(dataPoint[col]);\n }\n\n if (numbers) {\n dataPoint[col] = this.maybeToNumber(col, dataPoint[col]);\n }\n\n if (dates) {\n dataPoint[col] = this.maybeToDate(col, dataPoint[col]);\n }\n }\n\n res.push(dataPoint);\n }\n\n return res;\n };\n /**\r\n * Converts CSV into array.\r\n *\r\n * The functionality of this function is taken from here:\r\n * http://www.bennadel.com/blog/1504-ask-ben-parsing-csv-strings-with-javascript-exec-regular-expression-command.htm\r\n *\r\n * @param data Source data\r\n * @param delimiter Column delimiter\r\n * @return Parsed array\r\n */\n\n\n CSVParser.prototype.CSVToArray = function (data, delimiter) {\n // Check to see if the delimiter is defined. If not,\n // then default to comma.\n delimiter = delimiter || ','; // Create a regular expression to parse the CSV values.\n\n var objPattern = new RegExp( // Delimiters.\n \"(\\\\\" + delimiter + \"|\\\\r?\\\\n|\\\\r|^)\" + // Quoted fields.\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" + // Standard fields.\n \"([^\\\"\\\\\" + delimiter + \"\\\\r\\\\n]*))\", \"gi\"); // Create an array to hold our data. Give the array\n // a default empty first row.\n\n var arrData = [[]]; // Create an array to hold our individual pattern\n // matching groups.\n\n var arrMatches = null; // Keep looping over the regular expression matches\n // until we can no longer find a match.\n\n while (true) {\n arrMatches = objPattern.exec(data);\n\n if (!arrMatches) {\n break;\n } // Get the delimiter that was found.\n\n\n var strMatchedDelimiter = arrMatches[1]; // Check to see if the given delimiter has a length\n // (is not the start of string) and if it matches\n // field delimiter. If id does not, then we know\n // that this delimiter is a row delimiter.\n\n if (strMatchedDelimiter.length && strMatchedDelimiter !== delimiter) {\n // Since we have reached a new row of data,\n // add an empty row to our data array.\n arrData.push([]);\n } // Now that we have our delimiter out of the way,\n // let's check to see which kind of value we\n // captured (quoted or unquoted).\n\n\n var strMatchedValue = void 0;\n\n if (arrMatches[2]) {\n // We found a quoted value. When we capture\n // this value, unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(new RegExp(\"\\\"\\\"\", \"g\"), \"\\\"\");\n } else {\n // We found a non-quoted value.\n strMatchedValue = arrMatches[3];\n } // Now that we have our value string, let's add\n // it to the data array.\n\n\n arrData[arrData.length - 1].push(strMatchedValue);\n } // Return the parsed data.\n\n\n return arrData;\n };\n\n return CSVParser;\n}(DataParser);\n\nexport { CSVParser };","/**\r\n * JSON parser.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { DataParser } from \"./DataParser\";\nimport * as $object from \"../utils/Object\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * A parser for JSON.\r\n *\r\n * @important\r\n */\n\nvar JSONParser =\n/** @class */\nfunction (_super) {\n __extends(JSONParser, _super);\n\n function JSONParser() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Content-type suitable for JSON format.\r\n */\n\n\n _this.contentType = \"application/json\";\n /**\r\n * Parser options.\r\n *\r\n * @see {@link IJSONOptions} for description of each option\r\n */\n\n _this.options = {};\n return _this;\n }\n /**\r\n * Tests if the data is valid JSON.\r\n *\r\n * @param data Source data\r\n * @return Is it JSON?\r\n */\n\n\n JSONParser.isJSON = function (data) {\n try {\n // Try parsing JSON\n JSON.parse(data); // If we got to this point it means it's a valid JSON\n\n return true;\n } catch (e) {\n return false;\n }\n };\n /**\r\n * Parses and returns data.\r\n *\r\n * @param data Unparsed data\r\n * @return Parsed data\r\n */\n\n\n JSONParser.prototype.parse = function (data) {\n var _this = this; // Init return\n\n\n var res; // Try parsing\n\n try {\n if ($type.hasValue(JSON)) {\n res = JSON.parse(data);\n }\n } catch (e) {\n return undefined;\n } // Do we need to cast some fields to numbers or dates?\n\n\n var empty = $type.hasValue(this.options.emptyAs);\n var numbers = this.parsableNumbers;\n var dates = this.parsableDates;\n\n if (Array.isArray(res) && (numbers || dates || empty)) {\n var _loop_1 = function _loop_1(i, len) {\n var row = res[i];\n $object.each(row, function (key, value) {\n if (empty) {\n row[key] = _this.maybeToEmpty(row[key]);\n }\n\n if (numbers) {\n row[key] = _this.maybeToNumber(key, row[key]);\n }\n\n if (dates) {\n row[key] = _this.maybeToDate(key, row[key]);\n }\n });\n }; // Iterate through the data and check if it needs to be converted\n\n\n for (var i = 0, len = res.length; i < len; i++) {\n _loop_1(i, len);\n }\n } // Convert to array\n //return Array.isArray(res) ? res : [res];\n\n\n return res;\n };\n\n return JSONParser;\n}(DataParser);\n\nexport { JSONParser };","/**\r\n * Data Loader is responsible for loading and parsing external data\r\n */\nimport { CSVParser } from \"./CSVParser\";\nimport { JSONParser } from \"./JSONParser\";\nimport { Adapter } from \"../utils/Adapter\";\nimport * as $net from \"../utils/Net\";\nimport * as $array from \"../utils/Array\";\n;\n/**\r\n * Data Loader is responsible for loading and parsing external data.\r\n *\r\n * There is just one instance of DataLoader per system. Unless you have a\r\n * speicific reason, do not instantiate additional instances.\r\n *\r\n * The global instance of Data Loader is accessible via:\r\n *\r\n * ```TypeScript\r\n * am4core.dataLoader;\r\n * ```\r\n * ```JavaScript\r\n * am4core.dataLoader;\r\n * ```\r\n *\r\n * A loading of specific data source is done via [[DataSource]].\r\n *\r\n Please refer to [[DataSource]] for information how to use it.\r\n *\r\n * @see {@link IDataLoaderAdapters} for a list of available Adapters\r\n */\n\nvar DataLoader =\n/** @class */\nfunction () {\n function DataLoader() {\n /**\r\n * Adapter.\r\n */\n this.adapter = new Adapter(this);\n }\n /**\r\n * Loads a supplied [[DataSource]] or an array of data sources, then calls\r\n * their respective `parse` methods.\r\n *\r\n * @param source A single data source or an array of multiple of data sources\r\n */\n\n\n DataLoader.prototype.load = function (source) {\n var sources = Array.isArray(source) ? source : [source]; // Add each Source to the list to be loaded simultaneously\n\n var promises = $array.map(sources, function (x) {\n // Dispatch events\n x.dispatchImmediately(\"started\");\n x.dispatchImmediately(\"loadstarted\");\n return $net.load(x.url, x, x.requestOptions);\n }); // Run all promises in parallel\n\n Promise.all(promises).then(function (res) {\n // Process each loaded source\n $array.each(res, function (result) {\n // Get Source\n var source = result.target; // Dispatch events\n\n source.dispatchImmediately(\"loadended\");\n\n if (result.error) {\n if (source.events.isEnabled(\"error\")) {\n source.events.dispatchImmediately(\"error\", {\n type: \"error\",\n code: result.xhr.status,\n message: source.language.translate(\"Unable to load file: %1\", null, source.url),\n target: source\n });\n }\n } else {\n // Initiate parsing of the loaded data\n source.processData(result.response, result.type);\n }\n\n source.dispatchImmediately(\"ended\");\n });\n }).catch(function (res) {\n if (res.target) {\n res.target.dispatchImmediately(\"loadended\");\n\n if (res.target.events.isEnabled(\"error\")) {\n res.target.events.dispatchImmediately(\"error\", {\n type: \"error\",\n code: res.xhr.status,\n message: res.target.language.translate(\"Unable to load file: %1\", null, res.target.url),\n target: res.target\n });\n }\n\n res.target.dispatchImmediately(\"ended\");\n }\n });\n };\n /**\r\n * Instantiates a [[DataParser]] object based on the data type.\r\n * Built-in parser types are as follows:\r\n *\r\n * * \"csv\" or \"text/csv\"\r\n * * \"json\" or \"application/json\"\r\n *\r\n * @param contentType A format type\r\n * @return A parser object\r\n */\n\n\n DataLoader.prototype.getParserByType = function (contentType) {\n // Let some plugin decide\n var parser = this.adapter.apply(\"getParserByType\", {\n parser: null,\n type: contentType\n }).parser;\n\n if (parser) {\n return parser;\n }\n\n if (contentType == \"csv\" || contentType == \"text/csv\" || contentType == \"application/vnd.ms-excel\") {\n return new CSVParser();\n }\n\n if (contentType == \"json\" || contentType == \"application/json\") {\n return new JSONParser();\n }\n\n return;\n };\n /**\r\n * Tries to determine a parser out of content type and/or actual data.\r\n *\r\n * @param data Data\r\n * @param contentType Content-type\r\n * @return Parser instance\r\n */\n\n\n DataLoader.prototype.getParserByData = function (data, contentType) {\n // Let some plugin decide\n var parser = this.adapter.apply(\"getParserByData\", {\n parser: null,\n data: data,\n type: contentType\n }).parser; // Check if we have parser from outside code\n\n if (!parser) {\n // No, let's try to figure it out\n parser = this.getParserByType(contentType);\n\n if (parser) {\n // We're able to figure out parser by content-type\n return parser;\n } else if (JSONParser.isJSON(data)) {\n return this.getParserByType(\"json\");\n } else if (CSVParser.isCSV(data)) {\n return this.getParserByType(\"csv\");\n }\n }\n\n return parser;\n };\n\n return DataLoader;\n}();\n\nexport { DataLoader };\n/**\r\n * Create instance of Data Loader\r\n */\n\nexport var dataLoader = new DataLoader();","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { dataLoader } from \"./DataLoader\";\nimport { JSONParser } from \"./JSONParser\";\nimport { CSVParser } from \"./CSVParser\";\nimport { BaseObjectEvents } from \"../Base\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { Language } from \"../utils/Language\";\nimport { DateFormatter } from \"../formatters/DateFormatter\";\nimport { registry } from \"../Registry\";\nimport * as $type from \"../utils/Type\";\nimport * as $object from \"../utils/Object\";\n;\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Represents a single data source - external file with all of its settings,\r\n * such as format, data parsing, etc.\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JavaScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * \"url\": \"http://www.myweb.com/data.json\",\r\n * \"parser\": \"JSONParser\"\r\n * },\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link IDataSourceEvents} for a list of available events\r\n * @see {@link IDataSourceAdapters} for a list of available Adapters\r\n */\n\nvar DataSource =\n/** @class */\nfunction (_super) {\n __extends(DataSource, _super);\n /**\r\n * Constructor\r\n */\n\n\n function DataSource(url, parser) {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Adapter.\r\n */\n\n\n _this.adapter = new Adapter(_this);\n /**\r\n * Custom options for HTTP(S) request.\r\n */\n\n _this._requestOptions = {};\n /**\r\n * If set to `true`, any subsequent data loads will be considered incremental\r\n * (containing only new data points that are supposed to be added to existing\r\n * data).\r\n *\r\n * NOTE: this setting works only with element's `data` property. It won't\r\n * work with any other externally-loadable data property.\r\n *\r\n * @default false\r\n */\n\n _this._incremental = false;\n /**\r\n * A collection of key/value pairs to attach to a data source URL when making\r\n * an incremental request.\r\n */\n\n _this._incrementalParams = {};\n /**\r\n * This setting is used only when `incremental = true`. If set to `true`,\r\n * it will try to retain the same number of data items across each load.\r\n *\r\n * E.g. if incremental load yeilded 5 new records, then 5 items from the\r\n * beginning of data will be removed so that we end up with the same number\r\n * of data items.\r\n *\r\n * @default false\r\n */\n\n _this._keepCount = false;\n /**\r\n * If set to `true`, each subsequent load will be treated as an update to\r\n * currently loaded data, meaning that it will try to update values on\r\n * existing data items, not overwrite the whole data.\r\n *\r\n * This will work faster than complete update, and also will animate the\r\n * values to their new positions.\r\n *\r\n * Data sources across loads must contain the same number of data items.\r\n *\r\n * Loader will not truncate the data set if loaded data has fewer data items,\r\n * and if it is longer, the excess data items will be ignored.\r\n *\r\n * @default false\r\n * @since 4.5.5\r\n */\n\n _this._updateCurrentData = false;\n /**\r\n * Will show loading indicator when loading files.\r\n */\n\n _this.showPreloader = true;\n _this.className = \"DataSource\"; // Set defaults\n\n if (url) {\n _this.url = url;\n } // Set parser\n\n\n if (parser) {\n if (typeof parser == \"string\") {\n _this.parser = dataLoader.getParserByType(parser);\n } else {\n _this.parser = parser;\n }\n }\n\n return _this;\n }\n /**\r\n * Processes the loaded data.\r\n *\r\n * @ignore Exclude from docs\r\n * @param data Raw (unparsed) data\r\n * @param contentType Content type of the loaded data (optional)\r\n */\n\n\n DataSource.prototype.processData = function (data, contentType) {\n // Parsing started\n this.dispatchImmediately(\"parsestarted\"); // Check if parser is set\n\n if (!this.parser) {\n // Try to resolve from data\n this.parser = dataLoader.getParserByData(data, contentType);\n\n if (!this.parser) {\n // We have a problem - nobody knows what to do with the data\n // Raise error\n if (this.events.isEnabled(\"parseerror\")) {\n var event_1 = {\n type: \"parseerror\",\n message: this.language.translate(\"No parser available for file: %1\", null, this.url),\n target: this\n };\n this.events.dispatchImmediately(\"parseerror\", event_1);\n }\n\n this.dispatchImmediately(\"parseended\");\n return;\n }\n } // Apply options adapters\n\n\n this.parser.options = this.adapter.apply(\"parserOptions\", this.parser.options);\n this.parser.options.dateFields = this.adapter.apply(\"dateFields\", this.parser.options.dateFields || []);\n this.parser.options.numberFields = this.adapter.apply(\"numberFields\", this.parser.options.numberFields || []); // Check if we need to pass in date formatter\n\n if (this.parser.options.dateFields && !this.parser.options.dateFormatter) {\n this.parser.options.dateFormatter = this.dateFormatter;\n } // Parse\n\n\n this.data = this.adapter.apply(\"parsedData\", this.parser.parse(this.adapter.apply(\"unparsedData\", data))); // Check for parsing errors\n\n if (!$type.hasValue(this.data) && this.events.isEnabled(\"parseerror\")) {\n var event_2 = {\n type: \"parseerror\",\n message: this.language.translate(\"Error parsing file: %1\", null, this.url),\n target: this\n };\n this.events.dispatchImmediately(\"parseerror\", event_2);\n } // Wrap up\n\n\n this.dispatchImmediately(\"parseended\");\n\n if ($type.hasValue(this.data)) {\n this.dispatchImmediately(\"done\", {\n \"data\": this.data\n });\n } // The component is responsible for updating its own data vtriggered via\n // events.\n // Update last data load\n\n\n this.lastLoad = new Date();\n };\n\n Object.defineProperty(DataSource.prototype, \"url\", {\n /**\r\n * @return URL\r\n */\n get: function get() {\n // Get URL\n var url = this.disableCache ? this.timestampUrl(this._url) : this._url; // Add incremental params\n\n if (this.incremental && this.component.data.length) {\n url = this.addUrlParams(url, this.incrementalParams);\n }\n\n return this.adapter.apply(\"url\", url);\n },\n\n /**\r\n * URL of the data source.\r\n *\r\n * @param value URL\r\n */\n set: function set(value) {\n this._url = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"requestOptions\", {\n /**\r\n * @return Options\r\n */\n get: function get() {\n return this.adapter.apply(\"requestOptions\", this._requestOptions);\n },\n\n /**\r\n * Custom options for HTTP(S) request.\r\n *\r\n * At this moment the only option supported is: `requestHeaders`, which holds\r\n * an array of objects for custom request headers, e.g.:\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.requestOptions.requestHeaders = [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }];\r\n * ``````JavaScript\r\n * chart.dataSource.requestOptions.requestHeaders = [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }];\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * // ...\r\n * \"requestOptions\": {\r\n * \"requestHeaders\": [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }]\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * NOTE: setting this options on an-already loaded DataSource will not\r\n * trigger a reload.\r\n *\r\n * @param value Options\r\n */\n set: function set(value) {\n this._requestOptions = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"parser\", {\n /**\r\n * @return Data parser\r\n */\n get: function get() {\n if (!this._parser) {\n this._parser = new JSONParser();\n }\n\n return this.adapter.apply(\"parser\", this._parser);\n },\n\n /**\r\n * A parser to be used to parse data.\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JavaScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * \"url\": \"http://www.myweb.com/data.json\",\r\n * \"parser\": {\r\n * \"type\": \"JSONParser\"\r\n * }\r\n * },\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @default JSONParser\r\n * @param value Data parser\r\n */\n set: function set(value) {\n this._parser = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"reloadFrequency\", {\n /**\r\n * @return Reload frequency (ms)\r\n */\n get: function get() {\n return this.adapter.apply(\"reloadTimeout\", this._reloadFrequency);\n },\n\n /**\r\n * Data source reload frequency.\r\n *\r\n * If set, it will reload the same URL every X milliseconds.\r\n *\r\n * @param value Reload frequency (ms)\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this._reloadFrequency != value) {\n this._reloadFrequency = value; // Should we schedule a reload?\n\n if (value) {\n if (!$type.hasValue(this._reloadDisposer)) {\n this._reloadDisposer = this.events.on(\"ended\", function (ev) {\n _this._reloadTimeout = setTimeout(function () {\n _this.load();\n }, _this.reloadFrequency);\n });\n }\n } else if ($type.hasValue(this._reloadDisposer)) {\n this._reloadDisposer.dispose();\n\n this._reloadDisposer = undefined;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"incremental\", {\n /**\r\n * @return Incremental load?\r\n */\n get: function get() {\n return this.adapter.apply(\"incremental\", this._incremental);\n },\n\n /**\r\n * Should subsequent reloads be treated as incremental?\r\n *\r\n * Incremental loads will assume that they contain only new data items\r\n * since the last load.\r\n *\r\n * If `incremental = false` the loader will replace all of the target's\r\n * data with each load.\r\n *\r\n * This setting does not have any effect trhe first time data is loaded.\r\n *\r\n * NOTE: this setting works only with element's `data` property. It won't\r\n * work with any other externally-loadable data property.\r\n *\r\n * @default false\r\n * @param Incremental load?\r\n */\n set: function set(value) {\n this._incremental = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"incrementalParams\", {\n /**\r\n * @return Incremental request parameters\r\n */\n get: function get() {\n return this.adapter.apply(\"incrementalParams\", this._incrementalParams);\n },\n\n /**\r\n * An object consisting of key/value pairs to apply to an URL when data\r\n * source is making an incremental request.\r\n *\r\n * @param value Incremental request parameters\r\n */\n set: function set(value) {\n this._incrementalParams = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"keepCount\", {\n /**\r\n * @return keepCount load?\r\n */\n get: function get() {\n return this.adapter.apply(\"keepCount\", this._keepCount);\n },\n\n /**\r\n * This setting is used only when `incremental = true`. If set to `true`,\r\n * it will try to retain the same number of data items across each load.\r\n *\r\n * E.g. if incremental load yeilded 5 new records, then 5 items from the\r\n * beginning of data will be removed so that we end up with the same number\r\n * of data items.\r\n *\r\n * @default false\r\n * @param Keep record count?\r\n */\n set: function set(value) {\n this._keepCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"updateCurrentData\", {\n /**\r\n * @return Update current data?\r\n */\n get: function get() {\n return this.adapter.apply(\"updateCurrentData\", this._updateCurrentData);\n },\n\n /**\r\n * If set to `true`, each subsequent load will be treated as an update to\r\n * currently loaded data, meaning that it will try to update values on\r\n * existing data items, not overwrite the whole data.\r\n *\r\n * This will work faster than complete update, and also will animate the\r\n * values to their new positions.\r\n *\r\n * Data sources across loads must contain the same number of data items.\r\n *\r\n * Loader will not truncate the data set if loaded data has fewer data items,\r\n * and if it is longer, the excess data items will be ignored.\r\n *\r\n * NOTE: this setting is ignored if `incremental = true`.\r\n *\r\n * @default false\r\n * @since 2.5.5\r\n * @param Update current data?\r\n */\n set: function set(value) {\n this._updateCurrentData = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"language\", {\n /**\r\n * @return A [[Language]] instance to be used\r\n */\n get: function get() {\n if (this._language) {\n return this._language;\n } else if (this.component) {\n this._language = this.component.language;\n return this._language;\n }\n\n this.language = new Language();\n return this.language;\n },\n\n /**\r\n * Language instance to use.\r\n *\r\n * Will inherit and use chart's language, if not set.\r\n *\r\n * @param value An instance of Language\r\n */\n set: function set(value) {\n this._language = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"dateFormatter\", {\n /**\r\n * @return A [[DateFormatter]] instance to be used\r\n */\n get: function get() {\n if (this._dateFormatter) {\n return this._dateFormatter;\n } else if (this.component) {\n this._dateFormatter = this.component.dateFormatter;\n return this._dateFormatter;\n }\n\n this.dateFormatter = new DateFormatter();\n return this.dateFormatter;\n },\n\n /**\r\n * A [[DateFormatter]] to use when parsing dates from string formats.\r\n *\r\n * Will inherit and use chart's DateFormatter if not ser.\r\n *\r\n * @param value An instance of [[DateFormatter]]\r\n */\n set: function set(value) {\n this._dateFormatter = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Adds current timestamp to the URL.\r\n *\r\n * @param url Source URL\r\n * @return Timestamped URL\r\n */\n\n DataSource.prototype.timestampUrl = function (url) {\n var tstamp = new Date().getTime().toString();\n var params = {};\n params[tstamp] = \"\";\n return this.addUrlParams(url, params);\n };\n /**\r\n * Disposes of this object.\r\n */\n\n\n DataSource.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n if (this._reloadTimeout) {\n clearTimeout(this._reloadTimeout);\n }\n\n if ($type.hasValue(this._reloadDisposer)) {\n this._reloadDisposer.dispose();\n\n this._reloadDisposer = undefined;\n }\n };\n /**\r\n * Initiate the load.\r\n *\r\n * All loading in JavaScript is asynchronous. This function will trigger the\r\n * load and will exit immediately.\r\n *\r\n * Use DataSource's events to watch for loaded data and errors.\r\n */\n\n\n DataSource.prototype.load = function () {\n if (this.url) {\n if (this._reloadTimeout) {\n clearTimeout(this._reloadTimeout);\n }\n\n dataLoader.load(this);\n }\n };\n /**\r\n * Adds parameters to `url` as query strings. Will take care of proper\r\n * separators.\r\n *\r\n * @param url Source URL\r\n * @param params Parameters\r\n * @return New URL\r\n */\n\n\n DataSource.prototype.addUrlParams = function (url, params) {\n var join = url.match(/\\?/) ? \"&\" : \"?\";\n var add = [];\n $object.each(params, function (key, value) {\n if (value != \"\") {\n add.push(key + \"=\" + encodeURIComponent(value));\n } else {\n add.push(key);\n }\n });\n\n if (add.length) {\n return url + join + add.join(\"&\");\n }\n\n return url;\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n DataSource.prototype.processConfig = function (config) {\n registry.registeredClasses[\"json\"] = JSONParser;\n registry.registeredClasses[\"JSONParser\"] = JSONParser;\n registry.registeredClasses[\"csv\"] = CSVParser;\n registry.registeredClasses[\"CSVParser\"] = CSVParser;\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return DataSource;\n}(BaseObjectEvents);\n\nexport { DataSource };","/**\r\n * Responsive functionality module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"../Base\";\nimport { List } from \"../utils/List\";\nimport { Adapter } from \"../utils/Adapter\";\nimport { registry } from \"../Registry\";\nimport * as $iter from \"../utils/Iterator\";\nimport * as $array from \"../utils/Array\";\nimport * as $type from \"../utils/Type\";\nimport * as $object from \"../utils/Object\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Responsive is responsible for overriding certain properties when conditions\r\n * are met.\r\n *\r\n * This class is used to dynamically apply and change certain chart properties\r\n * based on the current values of properties.\r\n *\r\n * Mainly, this is used with [[Sprite]]'s dimensional properties, like\r\n * `pixelWidth` and `pixelHeight`. However, it can be used to dynamically\r\n * change any property, based on any other property's value.\r\n *\r\n * A default responsive rules are disabled.\r\n *\r\n * To enable, set `enabled = false`. E.g.:\r\n *\r\n * ```TypeScript\r\n * chart.responsive.enabled = true;\r\n * ```\r\n * ```JavaScript\r\n * chart.responsive.enabled = true;\r\n * ```\r\n *\r\n * @see {@link IResponsiveEvents} for a list of available events\r\n * @see {@link IResponsiveAdapters} for a list of available Adapters\r\n * @todo Add default rules\r\n * @todo Watch for rule modification\r\n * @important\r\n */\n\nvar Responsive =\n/** @class */\nfunction (_super) {\n __extends(Responsive, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Responsive() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Holds a list of responsive rules organized by object type.\r\n */\n\n\n _this._rules = new List();\n /**\r\n * Holds the list of the default responsive rules.\r\n * @deprecated\r\n */\n //protected _defaultRules = new List<IResponsiveRule>();\n\n /**\r\n * Holds the list of currently applied rules.\r\n */\n\n _this._appliedRules = {};\n /**\r\n * Used to keep track of objects that have rules applied at the moment.\r\n */\n\n _this._appliedTargets = [];\n /**\r\n * Use default rules in addition to the user-defined ones?\r\n */\n\n _this._useDefault = true;\n /**\r\n * Adapter.\r\n */\n\n _this.adapter = new Adapter(_this);\n /**\r\n * Indicates of responsive rules application is enabled.\r\n */\n\n _this._enabled = false;\n /**\r\n * Holds disposers for all events added by this class.\r\n */\n\n _this._responsiveDisposers = [];\n /**\r\n * Collection of objects and state ids that do not have any properties set.\r\n */\n\n _this._noStates = [];\n _this.className = \"Responsive\"; // Set up rules list events\n\n _this.rules.events.on(\"inserted\", function () {\n _this.checkRules();\n }, true);\n\n _this.rules.events.on(\"removed\", function () {\n _this.checkRules();\n }, true);\n\n _this._disposers.push(_this.rules.events); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Responsive.prototype, \"component\", {\n /**\r\n * @return Target object\r\n */\n get: function get() {\n return this._component;\n },\n\n /**\r\n * A target object that responsive rules will need to be applied to.\r\n *\r\n * @param value Target object\r\n */\n set: function set(value) {\n var _this = this; // Check if it's the same\n\n\n if (value == this._component) {\n return;\n } // Check if we already have a set up component and remove its events\n\n\n this.disposeResponsiveHandlers(); // Set\n\n this._component = value; // Set up resize monitoring events\n\n this._responsiveDisposers.push($type.getValue(this.component).events.on(\"sizechanged\", function () {\n _this.checkRules();\n }, this));\n\n this._responsiveDisposers.push($type.getValue(this.component).events.on(\"datavalidated\", function () {\n if (_this._component.isReady()) {\n _this.checkRules(true);\n }\n }, this)); // Enable resoponsive\n\n\n this.enabled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Responsive.prototype, \"enabled\", {\n /**\r\n * @return Apply responsive rules?\r\n */\n get: function get() {\n return this.adapter.apply(\"enabled\", this._enabled);\n },\n\n /**\r\n * Should responsive rules be checked against and applied?\r\n *\r\n * @default false\r\n * @param value Apply responsive rules?\r\n */\n set: function set(value) {\n if (this._enabled != value) {\n this._enabled = value; // Run `applyRules` so that any currently applied rules can be reset\n\n this.applyRules();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Responsive.prototype, \"useDefault\", {\n /**\r\n * @return Use default rules?\r\n */\n get: function get() {\n return this.adapter.apply(\"useDefault\", this._useDefault);\n },\n\n /**\r\n * Should default responsive rules be applied in addition to user-defined\r\n * ones.\r\n *\r\n * User-defined rules will take precedence over default rules whenever they\r\n * produce conflicting settings.\r\n *\r\n * @default true\r\n * @param value Use default rules?\r\n */\n set: function set(value) {\n if (this._useDefault != value) {\n this._useDefault = value; // Run `applyRules` so that any currently applied rules can be reset\n\n this.applyRules();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Responsive.prototype, \"rules\", {\n /**\r\n * @return User-defined rules\r\n */\n get: function get() {\n return this.adapter.apply(\"rules\", this._rules);\n },\n\n /**\r\n * User-defined responsive rules.\r\n *\r\n * User-defined rules will take precedence over default rules whenever they\r\n * produce conflicting settings.\r\n *\r\n * Use `allRules` to get all applicable rules including default and\r\n * user-defined ones.\r\n *\r\n * @param value User-defined rules\r\n */\n set: function set(value) {\n this._rules = value;\n this._enabled = true;\n this.applyRules();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Responsive.prototype, \"defaultRules\", {\n /**\r\n * Default responsive rules.\r\n *\r\n * @readonly\r\n * @return List of responsive rules\r\n */\n get: function get() {\n return this.adapter.apply(\"defaultRules\", defaultRules);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Responsive.prototype, \"allRules\", {\n /**\r\n * Returns all rules: default rules (if not disabled) combined with\r\n * user-defined ones.\r\n *\r\n * @readonly\r\n * @return List of all applicable rules\r\n */\n get: function get() {\n // Create empty list\n var rules = new List(); // Add default rules if not disabled\n // A code, requesting `allRules` must ensure loading of default rules\n // by calling `loadDefaultRules()`\n\n if (this.useDefault) {\n rules.copyFrom(this.defaultRules);\n } // Add user-defined ones\n\n\n rules.copyFrom(this.rules);\n return this.adapter.apply(\"allRules\", rules);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Checks if rule by the particular id currently applied.\r\n *\r\n * @param ruleId Rule ID\r\n * @return Is currently applied?\r\n */\n\n Responsive.prototype.isApplied = function (ruleId) {\n var rule = this._appliedRules[ruleId];\n return $type.hasValue(rule) ? rule : false;\n };\n /**\r\n * Checks which responsive rules currently satisfy their conditions and\r\n * should be applied, or unapplied.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Responsive.prototype.checkRules = function (force) {\n var _this = this;\n\n if (force === void 0) {\n force = false;\n } // Check if there are any rules\n\n\n var rules = this.allRules;\n\n if (!rules || rules.length == 0) {\n return;\n } // Init a list of rules to be applied\n\n\n var rulesChanged = false;\n var component = $type.getValue(this.component); // Check which rules match\n\n $iter.each(rules.iterator(), function (rule) {\n // Check if rule has an id\n if (!rule.id) {\n rule.id = registry.getUniqueId();\n } // Init indicator if this rule should be applied\n\n\n var apply = rule.relevant(component); // Let's check if this rule needs to be applied\n\n if (apply && !_this.isApplied(rule.id) || !apply && _this.isApplied(rule.id)) {\n rulesChanged = true;\n }\n\n _this._appliedRules[rule.id] = apply;\n });\n\n if (force) {\n rulesChanged = true;\n } // Check if we need to re-apply the rules\n\n\n if (rulesChanged) {\n if (!this.component.isReady()) {\n // The chart is not yet ready (built)\n // We will hide the chart and delay application of rules\n // until \"ready\" event kicks in\n //component.hide(0);\n component.hidden = true;\n component.events.once(\"ready\", function (ev) {\n ev.target.show(0);\n\n _this.applyRules();\n });\n return;\n }\n\n this.dispatchImmediately(\"ruleschanged\");\n this.applyRules();\n }\n };\n /**\r\n * Applies current rules to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param target Target object\r\n * @todo Better type check\r\n */\n\n\n Responsive.prototype.applyRules = function (target) {\n var _this = this; // If no target supplied, we assume the top-level element\n\n\n var newTarget = $type.hasValue(target) ? target : $type.getValue(this.component); // Check each rule\n\n var defaultStateApplied = false;\n\n if (this.enabled) {\n var isApplied_1 = false;\n $iter.each(this.allRules.iterator(), function (rule) {\n // Get relevant state\n var state = _this.getState(rule, newTarget); // If there's a state, it means it needs to be applied\n\n\n if (state) {\n // Check if default state was already applied to this element.\n // We don't want to go resetting default states to ALL element,\n // if they don't have responsive states.\n if (!defaultStateApplied) {\n // Nope, reset states (instantly).\n if ($array.indexOf(_this._appliedTargets, newTarget.uid) !== -1) {\n // But only if this element has any rules applied, otherwise no\n // point in setting current state\n newTarget.setState(_this.getDefaultState(newTarget), 0);\n }\n\n defaultStateApplied = true;\n } // Is this rule currently applied?\n\n\n if (_this.isApplied($type.getValue(rule.id))) {\n // Yes. Apply the responsive state\n state.transitionDuration = 0;\n\n _this.setTargetState(newTarget, state);\n\n _this.dispatchImmediately(\"ruleapplied\", {\n rule: rule\n });\n\n isApplied_1 = true;\n }\n }\n });\n\n if (isApplied_1) {\n $array.replace(this._appliedTargets, newTarget.uid);\n } else {\n $array.remove(this._appliedTargets, newTarget.uid);\n }\n } // Apply rules to the children\n\n\n if (newTarget.children) {\n $iter.each(newTarget.children.iterator(), function (child) {\n _this.applyRules(child);\n });\n }\n };\n /**\r\n * Returns a relative state for the rule/target, or `undefined` if no state is\r\n * needed.\r\n *\r\n * @param rule [description]\r\n * @param target [description]\r\n * @return [description]\r\n */\n\n\n Responsive.prototype.getState = function (rule, target) {\n var stateId = \"responsive-\" + rule.id;\n var tmpId = target.uid + \"_\" + stateId;\n\n if ($array.indexOf(this._noStates, tmpId) !== -1) {\n return;\n } else if (!target.states.hasKey(stateId)) {\n var state = rule.state(target, stateId);\n\n if (!state) {\n this._noStates.push(tmpId);\n }\n\n return state;\n } else {\n return target.states.getKey(stateId);\n }\n };\n /**\r\n * Creates and returns default responsive rule for the target.\r\n *\r\n * This rule will be used to \"reset\" to non-responsive values.\r\n * @param target Target Sprite\r\n * @return State\r\n */\n\n\n Responsive.prototype.getDefaultState = function (target) {\n if (target.states.hasKey(\"responsive-default\")) {\n return target.states.getKey(\"responsive-default\");\n }\n\n return target.states.create(\"responsive-default\");\n };\n /**\r\n * Sets state on the target element and updates default state with the\r\n * overwritten values if needed.\r\n *\r\n * @param target Target\r\n * @param state State\r\n */\n\n\n Responsive.prototype.setTargetState = function (target, state) {\n var _this = this; // Update default state\n\n\n var defaultState = this.getDefaultState(target);\n $object.each(state.properties, function (key, val) {\n if (!$type.hasValue(defaultState.properties[key])) {\n defaultState.properties[key] = _this.getValue(target, key);\n }\n });\n target.setState(state);\n };\n /**\r\n * Gets a value from an element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param target Target object\r\n * @param property Property\r\n * @return Property value\r\n */\n\n\n Responsive.prototype.getValue = function (target, property) {\n // This is a bit hacky, first we check if the property exist.\n // If it doesn't we try accessing target's property directly\n var value = target.getPropertyValue(property);\n\n if (!$type.hasValue(value) && $type.hasValue(target[property])) {\n value = target[property];\n }\n\n return value;\n };\n /**\r\n * Disposes the object.\r\n */\n\n\n Responsive.prototype.dispose = function () {\n this.disposeResponsiveHandlers();\n\n _super.prototype.dispose.call(this);\n };\n /**\r\n * Disposes all event handlers.\r\n */\n\n\n Responsive.prototype.disposeResponsiveHandlers = function () {\n var disposer = this._responsiveDisposers.pop();\n\n while (disposer) {\n disposer.dispose();\n disposer = this._responsiveDisposers.pop();\n }\n };\n\n return Responsive;\n}(BaseObjectEvents);\n\nexport { Responsive };\n/**\r\n * [defaultRules description]\r\n *\r\n * @todo description\r\n */\n\nexport var defaultRules = new List();\ndefaultRules.events.on(\"inserted\", function (ev) {\n ev.newValue.id = registry.getUniqueId();\n});\n/**\r\n *\r\n * @todo description\r\n */\n\nvar ResponsiveBreakpoints =\n/** @class */\nfunction () {\n function ResponsiveBreakpoints() {} // Breakpoint functions (for use in `relevant` clause of the responsive rules)\n\n\n ResponsiveBreakpoints.widthXXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXS;\n };\n\n ResponsiveBreakpoints.widthXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XS;\n };\n\n ResponsiveBreakpoints.widthS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.S;\n };\n\n ResponsiveBreakpoints.widthM = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.M;\n };\n\n ResponsiveBreakpoints.widthL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.L;\n };\n\n ResponsiveBreakpoints.widthXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XL;\n };\n\n ResponsiveBreakpoints.widthXXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXL;\n };\n\n ResponsiveBreakpoints.heightXXS = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.XXS;\n };\n\n ResponsiveBreakpoints.heightXS = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.XS;\n };\n\n ResponsiveBreakpoints.heightS = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.S;\n };\n\n ResponsiveBreakpoints.heightM = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.M;\n };\n\n ResponsiveBreakpoints.heightL = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.L;\n };\n\n ResponsiveBreakpoints.heightXL = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.XL;\n };\n\n ResponsiveBreakpoints.heightXXL = function (container) {\n return container.pixelHeight <= ResponsiveBreakpoints.XXL;\n };\n\n ResponsiveBreakpoints.isXXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXS && container.pixelHeight <= ResponsiveBreakpoints.XXS;\n };\n\n ResponsiveBreakpoints.isXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XS && container.pixelHeight <= ResponsiveBreakpoints.XS;\n };\n\n ResponsiveBreakpoints.isS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.S && container.pixelHeight <= ResponsiveBreakpoints.S;\n };\n\n ResponsiveBreakpoints.isM = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.M && container.pixelHeight <= ResponsiveBreakpoints.M;\n };\n\n ResponsiveBreakpoints.isL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.L && container.pixelHeight <= ResponsiveBreakpoints.L;\n };\n\n ResponsiveBreakpoints.isXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XL && container.pixelHeight <= ResponsiveBreakpoints.XL;\n };\n\n ResponsiveBreakpoints.isXXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXL && container.pixelHeight <= ResponsiveBreakpoints.XXL;\n };\n\n ResponsiveBreakpoints.maybeXXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXS || container.pixelHeight <= ResponsiveBreakpoints.XXS;\n };\n\n ResponsiveBreakpoints.maybeXS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XS || container.pixelHeight <= ResponsiveBreakpoints.XS;\n };\n\n ResponsiveBreakpoints.maybeS = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.S || container.pixelHeight <= ResponsiveBreakpoints.S;\n };\n\n ResponsiveBreakpoints.maybeM = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.M || container.pixelHeight <= ResponsiveBreakpoints.M;\n };\n\n ResponsiveBreakpoints.maybeL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.L || container.pixelHeight <= ResponsiveBreakpoints.L;\n };\n\n ResponsiveBreakpoints.maybeXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XL || container.pixelHeight <= ResponsiveBreakpoints.XL;\n };\n\n ResponsiveBreakpoints.maybeXXL = function (container) {\n return container.pixelWidth <= ResponsiveBreakpoints.XXL || container.pixelHeight <= ResponsiveBreakpoints.XXL;\n }; // Named pixel breakpoints\n\n\n ResponsiveBreakpoints.XXS = 100;\n ResponsiveBreakpoints.XS = 200;\n ResponsiveBreakpoints.S = 300;\n ResponsiveBreakpoints.M = 400;\n ResponsiveBreakpoints.L = 600;\n ResponsiveBreakpoints.XL = 800;\n ResponsiveBreakpoints.XXL = 1000;\n return ResponsiveBreakpoints;\n}();\n\nexport { ResponsiveBreakpoints };","/**\r\n * Defines functionality for \"Data Item\"\r\n *\r\n * A Data Item can be any object that can hold data. For example [[LineSeries]]\r\n * holds a number of values, that comprise a line graph. Each of those values\r\n * (data points) is a {DataItem}.\r\n *\r\n * Furthermore the [[LineSeries]] itself can be represented as a entry in the\r\n * legend. Since legend needs access to Line Series' value, a DataItem is\r\n * created for the series.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObjectEvents } from \"./Base\";\nimport { Adapter } from \"./utils/Adapter\";\nimport { Animation, AnimationDisposer } from \"./utils/Animation\";\nimport * as $utils from \"./utils/Utils\";\nimport * as $array from \"./utils/Array\"; //import * as $object from \"./utils/Object\";\n\nimport * as $type from \"./utils/Type\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * DataItem represents single element in data, for example a data point in a\r\n * Serial Chart Series, e.g. a column.\r\n *\r\n * DataItem defines relationship between structured data, required for specific\r\n * chart type or task, and raw source data.\r\n *\r\n * It also implements required calculations, updates related visual elements,\r\n * etc.\r\n *\r\n * @todo Description\r\n * @important\r\n */\n\nvar DataItem =\n/** @class */\nfunction (_super) {\n __extends(DataItem, _super);\n /**\r\n * Constructor\r\n * @todo Adding events to disposers produces errors in some cases, which means that chart is using disposed Data Items which is not right\r\n */\n\n\n function DataItem() {\n var _this = _super.call(this) || this;\n /**\r\n * This Data Item is currently disabled.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n _this._disabled = false;\n /**\r\n * Indicates whether Data Item has any properties set.\r\n *\r\n * If it does not have any, the code can use this property to check whether\r\n * they need to apply costly operation of re-applying properties, whenever\r\n * Data Item-related element is redrawn, e.g. series.\r\n */\n\n _this.hasProperties = false;\n /**\r\n * An object containing calculated values.\r\n */\n\n _this.values = {};\n /**\r\n * An object container current working values.\r\n */\n //public readonly workingValues: { [index: string]: { [index: string]: number } } = {};\n\n /**\r\n * An object containing categories.\r\n */\n\n _this.categories = {};\n /**\r\n * An object containing dates.\r\n */\n\n _this.dates = {};\n /**\r\n * An object containing locations for the Data Item.\r\n *\r\n * A location is a position within date or category, or, in some other cases,\r\n * where there is no single point but rather some period.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/series/#Data_item_locations} for info how data item locations work\r\n */\n\n _this.locations = {};\n /**\r\n * Current working locations.\r\n */\n\n _this.workingLocations = {};\n /**\r\n * An object containing Data Item specific appearance properties in key-value\r\n * pairs.\r\n *\r\n * Sometimes a single Data Item needs to apply different properties than the\r\n * rest of the data [[Series]] it is part of. E.g. a single column,\r\n * represented by a Data Item needs to be filled with a different color than\r\n * the reset of the [[ColumnSeries]] it belongs to.\r\n *\r\n * That's where Data Item's `properties` come into play.\r\n *\r\n * Please note that you should set Data Item-specific properties using\r\n * `setProperty()` method, rather than access `properties` object directly.\r\n */\n\n _this.properties = {};\n /**\r\n * A list of [[Sprite]] elements that are associated with this Data Item.\r\n *\r\n * E.g. an [[Axis]] Data Item has several separate elements associated with\r\n * it, like [[AxisTick]], [[AxisLabel]], and [[Grid]].\r\n *\r\n * Data Item keeps track of all of them, so it can toggle all related visual\r\n * elements when it itself is toggled.\r\n */\n\n _this.sprites = [];\n /**\r\n * Identifies if this object is a \"template\" and should not be treated as\r\n * real object that is drawn or actually used in the chart.\r\n */\n\n _this.isTemplate = false;\n /**\r\n * The current index within the dataItems\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._index = null;\n /**\r\n * Is Data Item currently visible?\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._visible = true;\n /**\r\n * Is Data Item currently hidden?\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._hidden = false;\n /**\r\n * Should this Data Item be used when calculating data ranges and scales?\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._ignoreMinMax = false;\n /**\r\n * Some of the Data Item's data fields may contain an array of children. This\r\n * property contains an object indicating which fields hold an array, so that\r\n * they can be processed properly.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.hasChildren = {};\n /**\r\n * Indicates whether Data Item is currently animiting from visible to hidden\r\n * state.\r\n */\n\n _this.isHiding = false;\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._valueAnimations = {};\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._locationAnimations = {};\n _this.className = \"DataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(DataItem.prototype, \"adapter\", {\n /**\r\n * Holds Adapter.\r\n */\n get: function get() {\n if (!this._adapterO) {\n this._adapterO = new Adapter(this);\n }\n\n return this._adapterO;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"index\", {\n /**\r\n * Data Item's position index in Component's data.\r\n *\r\n * @return Index\r\n */\n get: function get() {\n if (this.component) {\n if (this._index != null) {\n return this._index;\n } else {\n return -1;\n }\n } else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"animations\", {\n /**\r\n * A list of [[Animations]] objects currently mutating Data Item's values.\r\n *\r\n * @return [description]\r\n */\n get: function get() {\n if (!this._animations) {\n this._animations = [];\n\n this._disposers.push(new AnimationDisposer(this._animations));\n }\n\n return this._animations;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"visible\", {\n /**\r\n * Returns `true` if this Data Item is currently visible.\r\n *\r\n * @return Visible?\r\n */\n get: function get() {\n if (this._hidden) {\n return false;\n }\n\n return this._visible;\n },\n\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Visible?\r\n */\n set: function set(value) {\n if (value) {\n this.hidden = false;\n }\n\n if (this._visible != value) {\n this.setVisibility(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"hidden\", {\n /**\r\n * Returns `true` if this Data Item is currently hidden.\r\n *\r\n * @return Hidden?\r\n */\n get: function get() {\n return this._hidden;\n },\n\n /**\r\n * Sets hidden flag for data item. Mostly used to initially hide data item.\r\n *\r\n * @param value Hidden?\r\n */\n set: function set(value) {\n if (this._hidden != value) {\n this._hidden = value;\n\n if (value) {\n this.setVisibility(false);\n } else {\n this.setVisibility(true, true);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"__disabled\", {\n /**\r\n * Is this Data Item currently disabled?\r\n *\r\n * @ignore Exclude from docs\r\n * @param {boolean}\r\n */\n get: function get() {\n return this._disabled;\n },\n\n /**\r\n * Disables all Sprites associated with this Data Item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {boolean}\r\n */\n set: function set(value) {\n //\tif (this._disabled != value) { // not good\n this._disabled = value;\n $array.each(this.sprites, function (sprite) {\n sprite.__disabled = value;\n }); //\t}\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Data Item\r\n */\n\n DataItem.prototype.setVisibility = function (value, noChangeValues) {\n $array.each(this.sprites, function (sprite) {\n if (value) {\n sprite.visible = sprite.defaultState.properties.visible;\n } else {\n if (sprite.hiddenState) {\n sprite.visible = sprite.hiddenState.properties.visible;\n } else {\n sprite.visible = false;\n }\n }\n });\n this._visible = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"visibilitychanged\")) {\n var event_1 = {\n type: \"visibilitychanged\",\n target: this,\n visible: value\n };\n this.events.dispatchImmediately(\"visibilitychanged\", event_1);\n }\n }\n };\n /**\r\n * Shows the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param fields A list of fields to set values of\r\n */\n\n\n DataItem.prototype.show = function (duration, delay, fields) {\n var _this = this;\n\n if (!this.hidden) {\n this.setVisibility(true, true);\n this.isHiding = false;\n\n if (this._hideDisposer) {\n this.removeDispose(this._hideDisposer);\n }\n\n var animation_1;\n\n if (fields) {\n $array.each(fields, function (field) {\n animation_1 = _this.setWorkingValue(field, _this.values[field].value, duration, delay);\n });\n }\n\n $array.each(this.sprites, function (sprite) {\n var animation = sprite.show(duration);\n\n if (animation != null && !animation.isFinished()) {\n _this._disposers.push(animation);\n\n if (delay != null && delay > 0) {\n animation.delay(delay);\n }\n }\n });\n return animation_1;\n }\n };\n /**\r\n * Destroys this object and all related data.\r\n */\n\n\n DataItem.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n $array.each(this.sprites, function (sprite) {\n sprite.dispose();\n });\n this.sprites = [];\n };\n /**\r\n * Hides the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param toValue A value to set to `fields` when hiding\r\n * @param fields A list of data fields to set value to `toValue`\r\n */\n\n\n DataItem.prototype.hide = function (duration, delay, toValue, fields) {\n var _this = this;\n\n this.isHiding = true;\n $array.each(this.sprites, function (sprite) {\n var animation = sprite.hide(duration);\n\n if (animation != null && !animation.isFinished()) {\n _this._disposers.push(animation);\n\n if (delay != null && delay > 0) {\n animation.delay(delay);\n }\n }\n });\n\n if ($type.isNumber(toValue) && fields) {\n var animation_2;\n $array.each(fields, function (field) {\n var anim = _this.setWorkingValue(field, toValue, duration, delay);\n\n if (anim) {\n animation_2 = anim;\n }\n });\n\n if (animation_2 && !animation_2.isFinished()) {\n this._hideDisposer = animation_2.events.on(\"animationended\", function () {\n _this.setVisibility(false, true);\n\n _this.isHiding = false;\n });\n\n this._disposers.push(this._hideDisposer);\n\n return animation_2;\n } else {\n this.isHiding = false;\n this.setVisibility(false, true);\n }\n } else {\n this.isHiding = false;\n this.setVisibility(false);\n }\n };\n /**\r\n * Returns a duration (ms) the Data Item should take to animate from one\r\n * value to another.\r\n *\r\n * If the duration is not specified via parameter, this method will try to\r\n * request a default duration from the related `Component`.\r\n *\r\n * @param duration Default duration (ms)\r\n * @return Duration (ms)\r\n */\n\n\n DataItem.prototype.getDuration = function (duration) {\n if (!$type.isNumber(duration)) {\n var component = this.component;\n\n if (component) {\n duration = component.interpolationDuration;\n }\n }\n\n if (duration != null) {\n if (!this._adapterO) {\n return duration;\n } else {\n return this._adapterO.apply(\"duration\", duration);\n }\n }\n };\n /**\r\n * Returns a numeric value for specific data field.\r\n *\r\n * If `calculated` is not set, it will return a raw value, as it is in\r\n * source data.\r\n *\r\n * If `calculated` is set, it will return a pre-calculated specific value.\r\n *\r\n * @param name Data field name\r\n * @param calculated A calculated value name\r\n * @return Value\r\n */\n\n\n DataItem.prototype.getValue = function (name, calculated) {\n if (name && this.component) {\n if (!calculated) {\n calculated = this.component.dataFields[name + \"Show\"];\n\n if (!calculated) {\n calculated = \"value\";\n }\n }\n\n var value = this.values[name][calculated];\n\n if (this._adapterO && this._adapterO.isEnabled(\"value\")) {\n return this._adapterO.apply(\"value\", {\n value: value,\n field: name\n }).value;\n } else {\n return value;\n }\n }\n };\n /**\r\n * Returns a current working value for a specific data field.\r\n *\r\n * The actual value may differ from the one returned by `getValue()`. The\r\n * latter returns static values from the data source.\r\n *\r\n * `getWorkingValue()` returns current value, which is usually different if\r\n * Data Item is animating from one state to another.\r\n *\r\n * @param name Data field name\r\n * @return Value\r\n */\n\n\n DataItem.prototype.getWorkingValue = function (name) {\n if (name && this.component) {\n var realName = this.component.dataFields[name + \"Show\"];\n\n if (!realName) {\n realName = \"workingValue\";\n }\n\n if (this._adapterO) {\n return this._adapterO.apply(\"workingValue\", {\n workingValue: this.values[name][realName],\n field: name\n }).workingValue;\n } else {\n return this.values[name][realName];\n }\n }\n };\n /**\r\n * @ignore\r\n * @return Value\r\n */\n\n\n DataItem.prototype.getActualWorkingValue = function (name) {\n return this.values[name].workingValue;\n };\n /**\r\n * Sets a numeric value for specific data field.\r\n *\r\n * @param name Data field name\r\n * @param value Value\r\n * @param calculated Calculated data field name\r\n * @param duration Duration (ms) to animate to new value to\r\n * @param delay Delay animation (ms)\r\n */\n\n\n DataItem.prototype.setValue = function (name, value, duration, delay) {\n var currentValue = this.values[name].value;\n var newDuration = this.getDuration(duration);\n value = $type.toNumber(value);\n\n if (currentValue !== value) {\n this.values[name].value = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"valuechanged\")) {\n var event_2 = {\n type: \"valuechanged\",\n target: this,\n property: name\n };\n this.events.dispatchImmediately(\"valuechanged\", event_2);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemValueChange(this, name);\n }\n }\n\n this.setWorkingValue(name, value, newDuration, delay);\n };\n\n DataItem.prototype.setCalculatedValue = function (name, value, calculated) {\n var currentValue = this.values[name][calculated];\n\n if (currentValue !== value && $type.isNumber(value)) {\n this.values[name][calculated] = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"calculatedvaluechanged\")) {\n var event_3 = {\n type: \"calculatedvaluechanged\",\n target: this,\n property: name\n };\n this.events.dispatchImmediately(\"calculatedvaluechanged\", event_3);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemCalculatedValueChange(this, name);\n }\n }\n };\n /**\r\n * Set current working numeric value for a specific data field.\r\n *\r\n * @param name Data field name\r\n * @param value Value\r\n * @param calculated Calculated data field name\r\n * @param duration Duration (ms) to animate to new value to\r\n * @param delay Delay animation (ms)\r\n * @return An [[Animation]] object used for transition to new values\r\n */\n\n\n DataItem.prototype.setWorkingValue = function (name, value, duration, delay) {\n if ($type.isNumber(this.values[name].value)) {\n var newDuration = this.getDuration(duration);\n var workingValue = this.values[name].workingValue;\n\n if (newDuration != null && newDuration > 0 && $type.isNumber(workingValue) && this.component) {\n // sometimes NaN is passed, so only change this to != null if all cases of NaN are handled, otherwise animation won't stop\n if (workingValue != value) {\n var animation = this.animate({\n childObject: this.values[name],\n property: \"workingValue\",\n from: workingValue,\n to: value,\n dummyData: name\n }, newDuration, this.component.interpolationEasing);\n\n if (delay != null) {\n animation.delay(delay);\n }\n\n animation.events.on(\"animationstarted\", this.handleInterpolationProgress, this);\n animation.events.on(\"animationprogress\", this.handleInterpolationProgress, this);\n animation.events.on(\"animationended\", this.handleInterpolationProgress, this);\n this._valueAnimations[name] = animation;\n return animation;\n } else {\n var valueAnimation = this._valueAnimations[name];\n\n if (valueAnimation) {\n valueAnimation.stop();\n }\n\n this.values[name].workingValue = value;\n }\n } else {\n var valueAnimation = this._valueAnimations[name];\n\n if (valueAnimation) {\n valueAnimation.stop();\n }\n\n this.values[name].workingValue = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"workingvaluechanged\")) {\n var event_4 = {\n type: \"workingvaluechanged\",\n target: this,\n property: name\n };\n this.events.dispatchImmediately(\"workingvaluechanged\", event_4);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemWorkingValueChange(this, name);\n }\n }\n }\n };\n /**\r\n * Sets a relative location for a data field.\r\n *\r\n * A location is always relative on a 0 to 1 scale, with 0 being beginning,\r\n * 0.5 middle and 1 end.\r\n *\r\n * @todo Rewiew description\r\n * @param name Data field name\r\n * @param value Location (0-1)\r\n * @param duration Duration (ms) to animate to new value to\r\n * @param delay Delay animation (ms)\r\n */\n\n\n DataItem.prototype.setLocation = function (name, value, duration, delay) {\n var currentLocation = this.locations[name];\n\n if (currentLocation !== value) {\n this.locations[name] = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"locationchanged\")) {\n var event_5 = {\n type: \"locationchanged\",\n target: this,\n property: name\n };\n this.events.dispatchImmediately(\"locationchanged\", event_5);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemValueChange(this, name); // correct\n }\n\n this.setWorkingLocation(name, value, duration, delay);\n }\n };\n /**\r\n * Sets a current working location for a data field.\r\n *\r\n * @todo Rewiew description\r\n * @param name Data field name\r\n * @param value Location (0-1)\r\n * @param duration Duration (ms) to animate to new value to\r\n * @param delay Delay animation (ms)\r\n */\n\n\n DataItem.prototype.setWorkingLocation = function (name, value, duration, delay) {\n var newDuration = this.getDuration(duration);\n var workingLocation = this.workingLocations[name];\n\n if (newDuration != null && newDuration > 0 && $type.isNumber(workingLocation) && this.component) {\n // sometimes NaN is passed, so only change this to != null if all cases of NaN are handled, otherwise animation won't stop\n if (workingLocation != value) {\n var animation = this.animate({\n childObject: this.workingLocations,\n property: name,\n from: workingLocation,\n to: value,\n dummyData: name\n }, newDuration, this.component.interpolationEasing);\n\n if (delay != null) {\n animation.delay(delay);\n }\n\n animation.events.on(\"animationstarted\", this.handleInterpolationProgress, this);\n animation.events.on(\"animationprogress\", this.handleInterpolationProgress, this);\n animation.events.on(\"animationended\", this.handleInterpolationProgress, this);\n this._locationAnimations[name] = animation;\n return animation;\n } else {\n var locationAnimation = this._locationAnimations[name];\n\n if (locationAnimation) {\n locationAnimation.stop();\n }\n\n this.workingLocations[name] = value;\n }\n } else {\n var locationAnimation = this._locationAnimations[name];\n\n if (locationAnimation) {\n locationAnimation.stop();\n }\n\n this.workingLocations[name] = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"workinglocationchanged\")) {\n var event_6 = {\n type: \"workinglocationchanged\",\n target: this,\n property: name\n };\n this.events.dispatchImmediately(\"workinglocationchanged\", event_6);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemWorkingLocationChange(this, name);\n }\n }\n };\n /**\r\n * Sets Date value to a data field.\r\n *\r\n * @param name Data field name\r\n * @param date Date object\r\n * @param duration Duration (ms) to animate to new value to\r\n */\n\n\n DataItem.prototype.setDate = function (name, date, duration) {\n if (!$type.isDate(date) && this.component) {\n date = this.component.dateFormatter.parse(date);\n }\n\n var currentDate = this.dates[name];\n\n if (currentDate !== date) {\n this.dates[name] = date;\n this.setValue(name, date.getTime(), duration);\n }\n };\n /**\r\n * Returns a Date value of the data field.\r\n *\r\n * @param name Data field name\r\n * @return Date object\r\n */\n\n\n DataItem.prototype.getDate = function (name) {\n if (this._adapterO) {\n return this._adapterO.apply(\"date\", {\n date: this.dates[name],\n field: name\n }).date;\n } else {\n return this.dates[name];\n }\n };\n /**\r\n * Sets a Data Item-specific visual properties to apply to related elements.\r\n *\r\n * @param name Property name\r\n * @param value Property value\r\n */\n\n\n DataItem.prototype.setProperty = function (name, value) {\n if (this.properties[name] !== value) {\n this.hasProperties = true;\n this.properties[name] = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"propertychanged\")) {\n var event_7 = {\n type: \"propertychanged\",\n target: this,\n property: name,\n value: value\n };\n this.events.dispatchImmediately(\"propertychanged\", event_7);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemPropertyChange(this, name);\n }\n }\n };\n /**\r\n * Sets a related category for this Data Item.\r\n *\r\n * @todo Review description\r\n * @param name Data field name\r\n * @param value Category\r\n */\n\n\n DataItem.prototype.setCategory = function (name, value) {\n if (!$type.isString(value)) {\n value = $type.castString(value);\n }\n\n if (this.categories[name] !== value) {\n this.categories[name] = value;\n }\n };\n /**\r\n * Clones the Data Item, including all related data.\r\n *\r\n * @return New Data Item clone\r\n */\n //public clone(cloneId?: string): this {\n //\tlet dataItem: this = super.clone(cloneId);\n //\tdataItem.copyFrom(this);\n //\treturn dataItem;\n //}\n\n /**\r\n * Copies all properties and related data from different data item.\r\n *\r\n * @param object Source data item\r\n */\n\n\n DataItem.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n if (source.dataContext) {\n this.dataContext = $utils.copy(source.dataContext, {});\n }\n\n $utils.copyProperties(source.locations, this.locations);\n /*\r\n $utils.copyProperties(source.properties, this.properties);\r\n $utils.copyProperties(source.categories, this.categories);\r\n $utils.copyProperties(source.values, this.values);\r\n $utils.copyProperties(source.dates, this.dates);\r\n $object.each(source.values, (name, value) => {\r\n this.values[name] = $object.copy(value);\r\n });*/\n\n if (source._adapterO) {\n this.adapter.copyFrom(source._adapterO);\n } //this.events.copyFrom(source.events); // because copied in Base\n\n\n this.component = source.component;\n };\n\n Object.defineProperty(DataItem.prototype, \"opacity\", {\n /**\r\n * Sets opacity for all Data Item's related elements (Sprites).\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n $array.each(this.sprites, function (sprite) {\n sprite.opacity = value;\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"ignoreMinMax\", {\n /**\r\n * Exclude from min/max calculations?\r\n * @return Exclude from min/max calculations?\r\n */\n get: function get() {\n return this._ignoreMinMax;\n },\n\n /**\r\n * Sets whether this data point should not be included in the scale and\r\n * minimum/maximum calculations.\r\n *\r\n * E.g. some we may want to exclude a particular data point from influencing\r\n * [[ValueAxis]] scale.\r\n *\r\n * @param value Exclude from min/max calculations?\r\n */\n set: function set(value) {\n this._ignoreMinMax = value;\n\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"propertychanged\")) {\n var event_8 = {\n type: \"propertychanged\",\n target: this,\n property: \"ignoreMinMax\",\n value: value\n };\n this.events.dispatchImmediately(\"propertychanged\", event_8);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemPropertyChange(this, \"ignoreMinMax\");\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates and starts an [[Animation]] to interpolate (morph) Data Item's\r\n * properties and/or values.\r\n *\r\n * @see {@link Animation}\r\n * @param animationOptions Animation options\r\n * @param duration Animation duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\n\n DataItem.prototype.animate = function (animationOptions, duration, easing) {\n return new Animation(this, animationOptions, duration, easing).start();\n };\n /**\r\n * Handles intermediate steps when Data Item is interpolating (morphing) from\r\n * one value to another.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event object\r\n */\n\n\n DataItem.prototype.handleInterpolationProgress = function (event) {\n var animation = event.target; // it's always only one options, no need cycle\n\n var animationOptions = animation.animationOptions[0];\n\n if (animationOptions) {\n if (this._eventDispatcher && !this.__disabled) {\n if (this.events.isEnabled(\"workingvaluechanged\")) {\n var event_9 = {\n type: \"workingvaluechanged\",\n target: this,\n property: animationOptions.dummyData\n };\n this.events.dispatchImmediately(\"workingvaluechanged\", event_9);\n }\n }\n\n if (this.component) {\n this.component.handleDataItemWorkingValueChange(this, animationOptions.dummyData);\n }\n }\n };\n /**\r\n * Checks whether Data Item has values set for all of the data fields,\r\n * supplied via argument.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fields Field list to check\r\n * @return Has values for all fields?\r\n */\n\n\n DataItem.prototype.hasValue = function (fields) {\n // todo: what about categories?\n for (var i = 0, len = fields.length; i < len; i++) {\n var values = this.values[fields[i]];\n\n if (!values || !$type.hasValue(values.value)) {\n return false;\n }\n }\n\n return true;\n };\n\n Object.defineProperty(DataItem.prototype, \"depth\", {\n /**\r\n * Depth of the Data Item.\r\n *\r\n * In nested data structures, like TreeMap, this indicates the level this\r\n * data point is at, in relation to the parent Data Item.\r\n *\r\n * @return Depth\r\n */\n get: function get() {\n if (!this.parent) {\n return 0;\n } else {\n return this.parent.depth + 1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataItem.prototype, \"dataContext\", {\n /**\r\n * Sets to a reference to an original object from Component's data.\r\n *\r\n * @return [description]\r\n */\n get: function get() {\n return this._dataContext;\n },\n\n /**\r\n * A reference to an original object in Component's data, that this Data Item\r\n * is derived from.\r\n *\r\n * @param value Original data object\r\n */\n set: function set(value) {\n this._dataContext = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * adds a sprite to dataItem.sprites array\r\n * @ignore\r\n */\n\n DataItem.prototype.addSprite = function (sprite) {\n if (sprite.dataItem && sprite.dataItem != this) {\n $array.remove(sprite.dataItem.sprites, sprite);\n }\n\n if (!this.visible) {\n sprite.hide(0);\n }\n\n if (this.isHiding) {\n sprite.hide();\n }\n\n this.sprites.push(sprite);\n sprite.dataItem = this;\n };\n\n return DataItem;\n}(BaseObjectEvents);\n\nexport { DataItem };","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"./Container\";\nimport { List, ListDisposer } from \"./utils/List\";\nimport { OrderedListTemplate } from \"./utils/SortedList\";\nimport { Dictionary } from \"./utils/Dictionary\";\nimport { Disposer, MultiDisposer } from \"./utils/Disposer\";\nimport { DataSource } from \"./data/DataSource\";\nimport { Responsive } from \"./utils/Responsive\";\nimport { system } from \"./System\";\nimport { DataItem } from \"./DataItem\";\nimport { registry } from \"./Registry\";\nimport * as $math from \"./utils/Math\";\nimport * as $array from \"./utils/Array\";\nimport * as $ease from \"./utils/Ease\";\nimport * as $utils from \"./utils/Utils\";\nimport * as $iter from \"./utils/Iterator\";\nimport * as $object from \"./utils/Object\";\nimport * as $type from \"./utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A Component represents an independent functional element or control, that\r\n * can have it's own behavior, children, data, etc.\r\n *\r\n * A few examples of a Component: [[Legend]], [[Series]], [[Scrollbar]].\r\n *\r\n * @see {@link IComponentEvents} for a list of available events\r\n * @see {@link IComponentAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar Component =\n/** @class */\nfunction (_super) {\n __extends(Component, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Component() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Holds data field names.\r\n *\r\n * Data fields define connection beween [[DataItem]] and actual properties\r\n * in raw data.\r\n */\n\n\n _this.dataFields = {};\n /**\r\n * A list of [[DataSource]] definitions of external data source.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._dataSources = {};\n /**\r\n * This is used when only new data is invalidated (if added using `addData`\r\n * method).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._parseDataFrom = 0;\n /**\r\n * Holds the disposers for the dataItems and dataUsers\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._dataDisposers = [];\n /**\r\n * Currently selected \"data set\".\r\n *\r\n * If it's set to `\"\"`, main data set (unaggregated data) is used.\r\n */\n\n _this._currentDataSetId = \"\";\n /**\r\n * [_start description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._start = 0;\n /**\r\n * [_end description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this._end = 1;\n /**\r\n * If set to `true`, changing data range in element will not trigger\r\n * `daterangechanged` event.\r\n */\n\n _this.skipRangeEvent = false;\n /**\r\n * Whenever selected scope changes (chart is zoomed or panned), for example\r\n * by interaction from a Scrollbar, or API, a chart needs to reposition\r\n * its contents.\r\n *\r\n * `rangeChangeDuration` influences how this is performed.\r\n *\r\n * If set to zero (0), the change will happen instantenously.\r\n *\r\n * If set to non-zero value, the chart will gradually animate into new\r\n * position for the set amount of milliseconds.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.rangeChangeDuration = 0;\n /**\r\n * An easing function to use for range change animation.\r\n *\r\n * @see {@link Ease}\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.rangeChangeEasing = $ease.cubicOut;\n /**\r\n * A duration (ms) of each data parsing step. A Component parses its data in\r\n * chunks in order to avoid completely freezing the machine when large data\r\n * sets are used. This setting will control how many milliseconds should pass\r\n * when parsing data until parser stops for a brief moment to let other\r\n * processes catch up.\r\n */\n\n _this.parsingStepDuration = 50;\n /**\r\n * [dataInvalid description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this.dataInvalid = false;\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.rawDataInvalid = false;\n /**\r\n * [dataRangeInvalid description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this.dataRangeInvalid = false;\n /**\r\n * [dataItemsInvalid description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this.dataItemsInvalid = false;\n /**\r\n * If set to a non-zero number the element will \"animate\" data values of its\r\n * children.\r\n *\r\n * This will happen on first load and whenever data values change.\r\n *\r\n * Enabling interpolation will mean that elements will transit smoothly into\r\n * new values rather than updating instantly.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.interpolationDuration = 0;\n /**\r\n * An easing function to use for interpolating values when transiting from\r\n * one source value to another.\r\n *\r\n * @default cubicOut\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n * @see {@link Ease}\r\n */\n\n _this.interpolationEasing = $ease.cubicOut;\n /**\r\n * Indicates whether transition between data item's values should start and\r\n * play out all at once, or with a small delay (as defined by\r\n * `sequencedInterpolationDelay`) for each subsequent data item.\r\n *\r\n * @default true\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.sequencedInterpolation = true;\n /**\r\n * A delay (ms) to wait between animating each subsequent data item's\r\n * interpolation animation.\r\n *\r\n * Relative only if `sequencedInterpolation = true`.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/animations/} for more info about animations\r\n */\n\n _this.sequencedInterpolationDelay = 0;\n /**\r\n * A progress (0-1) for the data validation process.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n _this.dataValidationProgress = 0;\n _this._addAllDataItems = true;\n _this._usesData = true;\n _this.className = \"Component\";\n _this.minZoomCount = 1;\n _this.maxZoomCount = 0;\n _this._dataItems = new OrderedListTemplate(_this.createDataItem());\n\n _this._dataItems.events.on(\"inserted\", _this.handleDataItemAdded, _this, false);\n\n _this._dataItems.events.on(\"removed\", _this.handleDataItemRemoved, _this, false);\n\n _this._disposers.push(new ListDisposer(_this._dataItems));\n\n _this._disposers.push(_this._dataItems.template);\n\n _this.invalidateData(); // TODO what about remove ?\n\n\n _this.dataUsers.events.on(\"inserted\", _this.handleDataUserAdded, _this, false); // Set up disposers\n\n\n _this._disposers.push(new MultiDisposer(_this._dataDisposers));\n\n _this._start = 0;\n _this._end = 1;\n _this.maxZoomDeclination = 1; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n Component.prototype.createDataItem = function () {\n return new DataItem();\n };\n /**\r\n * [handleDataUserAdded description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param event Event object\r\n */\n\n\n Component.prototype.handleDataUserAdded = function (event) {\n var dataUser = event.newValue;\n dataUser.dataProvider = this;\n };\n /**\r\n * [handleDataItemValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Component.prototype.handleDataItemValueChange = function (dataItem, name) {\n if (!this.dataItemsInvalid) {\n this.invalidateDataItems();\n }\n };\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {};\n /**\r\n * [handleDataItemWorkingLocationChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.handleDataItemWorkingLocationChange = function (dataItem, name) {};\n /**\r\n * [handleDataItemCalculatedValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.handleDataItemCalculatedValueChange = function (dataItem, name) {};\n /**\r\n * [handleDataItemPropertyChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.handleDataItemPropertyChange = function (dataItem, name) {};\n /**\r\n * Populates a [[DataItem]] width data from data source.\r\n *\r\n * Loops through all the fields and if such a field is found in raw data\r\n * object, a corresponding value on passed in `dataItem` is set.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item\r\n */\n\n\n Component.prototype.processDataItem = function (dataItem, dataContext) {\n var _this = this;\n\n if (dataItem) {\n if (!dataContext) {\n dataContext = {};\n } // store reference to original data item\n\n\n dataItem.dataContext = dataContext;\n var hasSomeValues_1 = false;\n $object.each(this.dataFields, function (key, fieldValue) {\n var fieldName = key;\n var value = dataContext[fieldValue]; // Apply adapters to a retrieved value\n\n if (_this._adapterO) {\n if (_this._adapterO.isEnabled(\"dataContextValue\")) {\n value = _this._adapterO.apply(\"dataContextValue\", {\n field: fieldName,\n value: value,\n dataItem: dataItem\n }).value;\n }\n }\n\n if ($type.hasValue(value)) {\n hasSomeValues_1 = true;\n\n if (dataItem.hasChildren[fieldName]) {\n var template = _this.createDataItem();\n\n template.copyFrom(_this.mainDataSet.template);\n var children = new OrderedListTemplate(template);\n children.events.on(\"inserted\", _this.handleDataItemAdded, _this, false);\n children.events.on(\"removed\", _this.handleDataItemRemoved, _this, false);\n\n _this._dataDisposers.push(new ListDisposer(children));\n\n var count = value.length;\n\n for (var i = 0; i < count; i++) {\n var rawDataItem = value[i];\n var childDataItem = children.create();\n childDataItem.parent = dataItem;\n\n _this.processDataItem(childDataItem, rawDataItem);\n }\n\n var anyDataItem = dataItem;\n anyDataItem[fieldName] = children;\n } else {\n // data is converted to numbers/dates in each dataItem\n dataItem[fieldName] = value;\n }\n }\n });\n $object.each(this.propertyFields, function (key, fieldValue) {\n var f = key;\n var value = dataContext[fieldValue];\n\n if ($type.hasValue(value)) {\n hasSomeValues_1 = true;\n dataItem.setProperty(f, value);\n }\n }); // @todo we might need some flag which would tell whether we should create empty data items or not.\n\n if (!this._addAllDataItems && !hasSomeValues_1) {\n this.mainDataSet.remove(dataItem);\n }\n }\n };\n /**\r\n *\r\n * When validating raw data, instead of processing data item, we update it\r\n *\r\n * @ignore Exclude from docs\r\n * @param item\r\n */\n\n\n Component.prototype.updateDataItem = function (dataItem) {\n var _this = this;\n\n if (dataItem) {\n var dataContext_1 = dataItem.dataContext;\n $object.each(this.dataFields, function (key, fieldValue) {\n var fieldName = key;\n var value = dataContext_1[fieldValue]; // Apply adapters to a retrieved value\n\n if (_this._adapterO) {\n value = _this._adapterO.apply(\"dataContextValue\", {\n field: fieldName,\n value: value,\n dataItem: dataItem\n }).value;\n }\n\n if ($type.hasValue(value)) {\n if (dataItem.hasChildren[fieldName]) {\n var anyDataItem = dataItem;\n var children = anyDataItem[fieldName];\n children.each(function (child) {\n _this.updateDataItem(child);\n });\n } else {\n // data is converted to numbers/dates in each dataItem\t\t\t\t\t\n dataItem[fieldName] = value;\n }\n }\n });\n $object.each(this.propertyFields, function (key, fieldValue) {\n var f = key;\n var value = dataContext_1[fieldValue];\n\n if ($type.hasValue(value)) {\n dataItem.setProperty(f, value);\n }\n });\n }\n };\n /**\r\n * [validateDataElements description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Component.prototype.validateDataElements = function () {\n var count = this.endIndex;\n\n for (var i = this.startIndex; i < count; i++) {\n var dataItem = this.dataItems.getIndex(i); // TODO is this correct\n\n if (dataItem) {\n this.validateDataElement(dataItem);\n }\n }\n };\n /**\r\n * Validates this element and its related elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.validate = function () {\n this.validateDataElements();\n\n _super.prototype.validate.call(this);\n };\n /**\r\n * [validateDataElement description]\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem [description]\r\n */\n\n\n Component.prototype.validateDataElement = function (dataItem) {};\n /**\r\n * Adds one or several (array) of data items to the existing data.\r\n *\r\n * @param rawDataItem One or many raw data item objects\r\n */\n\n\n Component.prototype.addData = function (rawDataItem, removeCount, skipRaw) {\n var _this = this; // need to check if data is invalid, as addData might be called multiple times\n\n\n if (!this.dataInvalid && this.inited) {\n this._parseDataFrom = this.data.length; // save length of parsed data\n }\n\n if (!skipRaw) {\n if (rawDataItem instanceof Array) {\n // can't use concat because new array is returned\n $array.each(rawDataItem, function (dataItem) {\n _this.data.push(dataItem);\n });\n } else {\n this.data.push(rawDataItem); // add to raw data array\n }\n }\n\n if (this.inited) {\n this.removeData(removeCount, skipRaw);\n } else {\n if ($type.isNumber(removeCount)) {\n while (removeCount > 0) {\n this.data.shift();\n removeCount--;\n }\n }\n }\n\n this.invalidateData();\n };\n /**\r\n * Removes elements from the beginning of data\r\n *\r\n * @param count number of elements to remove\r\n */\n\n\n Component.prototype.removeData = function (count, skipRaw) {\n if ($type.isNumber(count) && count > 0) {\n while (count > 0) {\n var dataItem = this.mainDataSet.getIndex(0);\n\n if (dataItem) {\n this.mainDataSet.remove(dataItem);\n }\n\n this.dataUsers.each(function (dataUser) {\n if (!dataUser.data || dataUser.data.length == 0) {\n var dataItem_1 = dataUser.mainDataSet.getIndex(0);\n\n if (dataItem_1) {\n dataUser.mainDataSet.remove(dataItem_1);\n }\n }\n });\n\n if (!skipRaw) {\n this.data.shift();\n }\n\n if (this._parseDataFrom > 0) {\n this._parseDataFrom--;\n }\n\n count--;\n } // changed from invalidateData since 4.7.19 to solve #51551\n\n\n this.invalidateDataItems();\n }\n };\n /**\r\n * Triggers a data (re)parsing.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.invalidateData = function () {\n if (this.disabled || this.isTemplate) {\n return;\n } //if(!this.dataInvalid){\n\n\n registry.addToInvalidComponents(this);\n system.requestFrame();\n this.dataInvalid = true;\n $iter.each(this.dataUsers.iterator(), function (x) {\n x.invalidateDataItems();\n }); //}\n };\n /**\r\n * [invalidateDataUsers description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Component.prototype.invalidateDataUsers = function () {\n $iter.each(this.dataUsers.iterator(), function (x) {\n x.invalidate();\n });\n };\n /**\r\n * Invalidates data values. When data array is not changed, but values within\r\n * it changes, we invalidate data so that component would process changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.invalidateDataItems = function () {\n if (this.disabled || this.isTemplate) {\n return;\n } //if(!this.dataItemsInvalid){\n\n\n $array.move(registry.invalidDataItems, this);\n system.requestFrame();\n this.dataItemsInvalid = true;\n $iter.each(this.dataUsers.iterator(), function (x) {\n x.invalidateDataItems();\n }); //}\n };\n /**\r\n * Invalidates data range. This is done when data which must be shown\r\n * changes (chart is zoomed for example).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.invalidateDataRange = function () {\n if (this.disabled || this.isTemplate) {\n return;\n } //if(!this.dataRangeInvalid){\n\n\n this.dataRangeInvalid = true;\n $array.move(registry.invalidDataRange, this);\n system.requestFrame(); //}\n };\n /**\r\n * Processes data range.\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.validateDataRange = function () {\n $array.remove(registry.invalidDataRange, this);\n this.dataRangeInvalid = false;\n\n if (this.startIndex != this._prevStartIndex || this.endIndex != this._prevEndIndex) {\n this.rangeChangeUpdate();\n this.appendDataItems();\n this.invalidate();\n this.dispatchImmediately(\"datarangechanged\");\n }\n };\n /**\r\n * [sliceData description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.sliceData = function () {\n this._workingStartIndex = this.startIndex;\n this._workingEndIndex = this.endIndex;\n };\n /**\r\n * [rangeChangeUpdate description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.rangeChangeUpdate = function () {\n this.sliceData();\n this._prevStartIndex = this.startIndex;\n this._prevEndIndex = this.endIndex;\n };\n /**\r\n * [appendDataItems description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.appendDataItems = function () {\n // TODO use an iterator instead\n var count = this.endIndex;\n\n for (var i = this.startIndex; i < count; i++) {\n // data item\n var dataItem = this.dataItems.getIndex(i);\n\n if (dataItem) {\n dataItem.__disabled = false;\n }\n }\n\n for (var i = 0; i < this.startIndex; i++) {\n var dataItem = this.dataItems.getIndex(i);\n\n if (dataItem) {\n dataItem.__disabled = true;\n }\n }\n\n for (var i = this.endIndex; i < this.dataItems.length; i++) {\n var dataItem = this.dataItems.getIndex(i);\n\n if (dataItem) {\n dataItem.__disabled = true;\n }\n }\n };\n /**\r\n * If you want to have a smooth transition from one data values to another, you change your raw data and then you must call this method.\r\n * then instead of redrawing everything, the chart will check raw data and smoothly transit from previous to new data\r\n */\n\n\n Component.prototype.invalidateRawData = function () {\n if (this.disabled || this.isTemplate) {\n return;\n } //if(!this.rawDataInvalid){\n\n\n $array.move(registry.invalidRawDatas, this);\n system.requestFrame();\n this.rawDataInvalid = true;\n $iter.each(this.dataUsers.iterator(), function (x) {\n x.invalidateRawData();\n }); //}\n };\n /**\r\n * @ignore\r\n */\n\n\n Component.prototype.validateRawData = function () {\n var _this = this;\n\n $array.remove(registry.invalidRawDatas, this);\n $iter.each(this.mainDataSet.iterator(), function (dataItem) {\n if (dataItem) {\n _this.updateDataItem(dataItem);\n }\n });\n };\n /**\r\n * Destroys this object and all related data.\r\n */\n\n\n Component.prototype.dispose = function () {\n var _this = this;\n\n this.mainDataSet.template.clones.clear();\n $object.each(this._dataSources, function (key, source) {\n _this.removeDispose(source);\n });\n this.disposeData();\n\n _super.prototype.dispose.call(this);\n };\n /**\r\n * @ignore\r\n */\n\n\n Component.prototype.disposeData = function () {\n this.mainDataSet.template.clones.clear();\n $array.each(this._dataDisposers, function (x) {\n x.dispose();\n }); // and for all components\n\n $iter.each(this.dataUsers.iterator(), function (dataUser) {\n dataUser.disposeData();\n });\n this._dataDisposers.length = 0;\n this._startIndex = undefined;\n this._endIndex = undefined; // dispose old\n\n this.mainDataSet.clear();\n this.mainDataSet.template.clones.clear();\n\n if (this._dataSets) {\n this._dataSets.clear();\n }\n };\n\n Component.prototype.getDataItem = function (dataContext) {\n return this.mainDataSet.create();\n };\n /**\r\n * Validates (processes) data.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.validateData = function () {\n this.dispatchImmediately(\"beforedatavalidated\");\n this.dataInvalid = false;\n registry.removeFromInvalidComponents(this);\n\n if (this.__disabled) {\n return;\n }\n\n this.dataValidationProgress = 0; // need this to slice new data\n\n this._prevStartIndex = undefined;\n this._prevEndIndex = undefined; // todo: this needs some overthinking, maybe some extra settings like zoomOotonDataupdate like in v3 or so. some charts like pie chart probably should act like this always\n\n this._startIndex = undefined;\n this._endIndex = undefined;\n\n if (this.dataFields.data && this.dataItem) {\n var dataContext = this.dataItem.dataContext;\n this._data = dataContext[this.dataFields.data];\n } // data items array is reset only if all data is validated, if _parseDataFrom is not 0, we append new data only\n // check heatmap demo if uncommented\n // fixed both issues by adding && this.data.length > 0\n // check adding series example if changed\n\n\n if (this._parseDataFrom === 0 && this.data.length > 0) {\n this.disposeData();\n }\n\n if (this.data.length > 0) {\n var preloader = this.preloader; // and for all components\n\n $iter.each(this.dataUsers.iterator(), function (dataUser) {\n // todo: this needs some overthinking, maybe some extra settings like zoomOUtonDataupdate like in v3 or so. some charts like pie chart probably should act like this always\n dataUser._startIndex = undefined;\n dataUser._endIndex = undefined;\n });\n var counter = 0;\n var startTime = Date.now(); // parse data\n\n var i = this._parseDataFrom;\n var n = this.data.length;\n\n var _loop_1 = function _loop_1() {\n var rawDataItem = this_1.data[i];\n\n if (this_1._usesData) {\n var dataItem = this_1.getDataItem(rawDataItem);\n this_1.processDataItem(dataItem, rawDataItem);\n }\n\n this_1.dataUsers.each(function (dataUser) {\n if (dataUser.data.length == 0) {\n // checking if data is not set directly\n var dataUserDataItem = dataUser.getDataItem(rawDataItem);\n dataUser.processDataItem(dataUserDataItem, rawDataItem);\n }\n });\n counter++; // show preloader if this takes too many time\n\n if (counter == 100) {\n // no need to check it on each data item\n counter = 0;\n var elapsed = Date.now() - startTime;\n\n if (elapsed > this_1.parsingStepDuration) {\n if (i < this_1.data.length - 10) {\n this_1._parseDataFrom = i + 1; // update preloader\n\n if (preloader) {\n if (i / this_1.data.length > 0.5 && !preloader.visible) {// do not start showing\n } else {\n preloader.progress = i / this_1.data.length;\n }\n }\n\n this_1.dataValidationProgress = i / this_1.data.length;\n i = this_1.data.length; // stops cycle\n\n this_1.invalidateData();\n return {\n value: void 0\n };\n }\n }\n }\n };\n\n var this_1 = this;\n\n for (i; i < n; i++) {\n var state_1 = _loop_1();\n\n if (_typeof(state_1) === \"object\") return state_1.value;\n }\n\n if (preloader) {\n preloader.progress = 1;\n }\n\n this.dataUsers.each(function (dataUser) {\n if (dataUser.hidden) {\n dataUser.hide(0);\n }\n });\n }\n\n this.dataValidationProgress = 1;\n this._parseDataFrom = 0; // reset this index, it is set to dataItems.length if addData() method was used.\n\n this.invalidateDataItems();\n\n if (!this._internalDefaultsApplied) {\n this.applyInternalDefaults();\n }\n\n this.dispatch(\"datavalidated\"); // can't zoom chart if dispatched immediately\n };\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.validateDataItems = function () {\n $array.remove(registry.invalidDataItems, this);\n this.dataItemsInvalid = false;\n this.invalidateDataRange();\n this.invalidate();\n this.dispatch(\"dataitemsvalidated\");\n };\n\n Object.defineProperty(Component.prototype, \"data\", {\n /**\r\n * Returns element's source (raw) data.\r\n *\r\n * @return Data\r\n */\n get: function get() {\n if (!this._data) {\n this._data = [];\n }\n\n if (!this._adapterO) {\n return this._data;\n } else {\n return this._adapterO.apply(\"data\", this._data);\n }\n },\n\n /**\r\n * Sets source (raw) data for the element. The \"data\" is always an `Array`\r\n * of objects.\r\n *\r\n * IMPORTANT: The order of data items in `data` array is important as it\r\n * might affect chart look and behavior. [More details](https://www.amcharts.com/docs/v4/concepts/data/#Order_of_data_items).\r\n *\r\n * @param value Data\r\n */\n set: function set(value) {\n this.setData(value);\n },\n enumerable: true,\n configurable: true\n });\n\n Component.prototype.setData = function (value) {\n // array might be the same, but there might be items added\n // todo: check if array changed, toString maybe?\n if (!this.isDisposed()) {\n this._parseDataFrom = 0;\n this.disposeData();\n this._data = value;\n\n if (value && value.length > 0) {\n this.invalidateData();\n } else {\n this.dispatchImmediately(\"beforedatavalidated\");\n this.dispatch(\"datavalidated\");\n }\n }\n };\n /**\r\n * Returns (creates if necessary) a [[DataSource]] bound to any specific\r\n * property.\r\n *\r\n * For example if I want to bind `data` to an external JSON file, I'd create\r\n * a DataSource for it.\r\n *\r\n * @param property Property to bind external data to\r\n * @return A DataSource for property\r\n */\n\n\n Component.prototype.getDataSource = function (property) {\n var _this = this;\n\n if (!$type.hasValue(this._dataSources[property])) {\n this._dataSources[property] = new DataSource();\n this._dataSources[property].component = this;\n this.setDataSourceEvents(this._dataSources[property], property);\n\n this._dataSources[property].adapter.add(\"dateFields\", function (val) {\n return _this.dataSourceDateFields(val);\n });\n\n this._dataSources[property].adapter.add(\"numberFields\", function (val) {\n return _this.dataSourceNumberFields(val);\n });\n\n this.events.on(\"inited\", function () {\n _this.loadData(property);\n }, this, false);\n }\n\n return this._dataSources[property];\n };\n\n Object.defineProperty(Component.prototype, \"dataSource\", {\n /**\r\n * @return Data source\r\n */\n get: function get() {\n if (!this._dataSources[\"data\"]) {\n this.getDataSource(\"data\");\n }\n\n return this._dataSources[\"data\"];\n },\n\n /**\r\n *A [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/loading-external-data/} for more on loading external data\r\n * @param value Data source\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this._dataSources[\"data\"]) {\n this.removeDispose(this._dataSources[\"data\"]);\n }\n\n this._dataSources[\"data\"] = value;\n this._dataSources[\"data\"].component = this;\n this.events.on(\"inited\", function () {\n _this.loadData(\"data\");\n }, this, false);\n this.setDataSourceEvents(value, \"data\");\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Initiates loading of the external data via [[DataSource]].\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Component.prototype.loadData = function (property) {\n this._dataSources[property].load();\n };\n /**\r\n * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Array of date fields\r\n * @return Array of date fields populated with chart's date fields\r\n */\n\n\n Component.prototype.dataSourceDateFields = function (value) {\n return value;\n };\n /**\r\n * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Array of number fields\r\n * @return Array of number fields populated with chart's number fields\r\n */\n\n\n Component.prototype.dataSourceNumberFields = function (value) {\n return value;\n };\n /**\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param list [description]\r\n * @param dataFields [description]\r\n * @param targetList [description]\r\n * @return [description]\r\n */\n\n\n Component.prototype.populateDataSourceFields = function (list, dataFields, targetList) {\n $array.each(targetList, function (value) {\n if (dataFields[value] && $array.indexOf(list, dataFields[value]) === -1) {\n list.push(dataFields[value]);\n }\n });\n return list;\n };\n /**\r\n * Sets events on a [[DataSource]].\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.setDataSourceEvents = function (ds, property) {\n var _this = this;\n\n ds.events.on(\"started\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 0; //preloader.label.text = this.language.translate(\"Loading\");\n }\n }, undefined, false);\n ds.events.on(\"loadstarted\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 0.25;\n }\n }, undefined, false);\n ds.events.on(\"loadended\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 0.5;\n }\n }, undefined, false);\n ds.events.on(\"parseended\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 0.75;\n }\n }, undefined, false);\n ds.events.on(\"ended\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 1;\n }\n }, undefined, false);\n ds.events.on(\"error\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 1;\n }\n\n _this.openModal(ev.message);\n }, undefined, false);\n\n if (property) {\n ds.events.on(\"done\", function (ev) {\n var preloader = _this.preloader;\n\n if (preloader) {\n preloader.progress = 1;\n }\n\n if (property == \"data\" && !$type.isArray(ev.data)) {\n ev.data = [ev.data];\n }\n\n if (ds.incremental && property == \"data\" && _this.data.length) {\n _this.addData(ev.data, ds.keepCount ? ev.data.length : 0);\n } else if (ds.updateCurrentData && property == \"data\" && _this.data.length) {\n // cycle through existing data items\n $array.each(_this.data, function (item, index) {\n if ($type.hasValue(ev.data[index])) {\n $object.each(item, function (key, val) {\n if ($type.hasValue(ev.data[index][key])) {\n item[key] = ev.data[index][key];\n }\n });\n }\n });\n\n _this.invalidateRawData();\n } else {\n _this[property] = ev.data;\n }\n });\n }\n };\n\n Object.defineProperty(Component.prototype, \"responsive\", {\n /**\r\n * @return Responsive rules handler\r\n */\n get: function get() {\n if (!this._responsive) {\n this._responsive = new Responsive();\n this._responsive.component = this;\n }\n\n return this._responsive;\n },\n\n /**\r\n * A [[Responsive]] instance to be used when applying conditional\r\n * property values.\r\n *\r\n * NOTE: Responsive features are currently in development and may not work\r\n * as expected, if at all.\r\n *\r\n * @param value Responsive rules handler\r\n */\n set: function set(value) {\n this._responsive = value;\n this._responsive.component = this;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets current zoom.\r\n *\r\n * The range uses relative values from 0 to 1, with 0 marking beginning and 1\r\n * marking end of the available data range.\r\n *\r\n * This method will not have any effect when called on a chart object.\r\n * Since the chart can have a number of axes and series, each with its own\r\n * data, the meaning of \"range\" is very ambiguous.\r\n *\r\n * To zoom the chart use `zoom*` methods on its respective axes.\r\n *\r\n * @param range Range\r\n * @param skipRangeEvent Should rangechanged event not be triggered?\r\n * @param instantly Do not animate?\r\n * @return Actual modidied range (taking `maxZoomFactor` into account)\r\n */\n\n Component.prototype.zoom = function (range, skipRangeEvent, instantly, declination) {\n var _this = this;\n\n if (skipRangeEvent === void 0) {\n skipRangeEvent = false;\n }\n\n if (instantly === void 0) {\n instantly = false;\n }\n\n var start = range.start;\n var end = range.end;\n var priority = range.priority;\n\n if (range.start == range.end) {\n range.start = range.start - 0.5 / this.maxZoomFactor;\n range.end = range.end + 0.5 / this.maxZoomFactor;\n }\n\n if (priority == \"end\" && end == 1 && start != 0) {\n if (start < this.start) {\n priority = \"start\";\n }\n }\n\n if (priority == \"start\" && start == 0) {\n if (end > this.end) {\n priority = \"end\";\n }\n }\n\n if (!$type.isNumber(declination)) {\n declination = this.maxZoomDeclination;\n }\n\n if (!$type.isNumber(start) || !$type.isNumber(end)) {\n return {\n start: this.start,\n end: this.end\n };\n }\n\n if (this._finalStart != start || this._finalEnd != end) {\n var maxZoomFactor = this.maxZoomFactor / this.minZoomCount;\n var minZoomFactor = this.maxZoomFactor / this.maxZoomCount; // most likely we are dragging left scrollbar grip here, so we tend to modify end\n\n if (priority == \"start\") {\n if (this.maxZoomCount > 0) {\n // add to the end\n if (1 / (end - start) < minZoomFactor) {\n end = start + 1 / minZoomFactor;\n }\n } // add to the end\n\n\n if (1 / (end - start) > maxZoomFactor) {\n end = start + 1 / maxZoomFactor;\n } //unless end is > 0\n\n\n if (end > 1 && end - start < 1 / maxZoomFactor) {\n //end = 1;\n start = end - 1 / maxZoomFactor;\n }\n } // most likely we are dragging right, so we modify left\n else {\n if (this.maxZoomCount > 0) {\n // add to the end\n if (1 / (end - start) < minZoomFactor) {\n start = end - 1 / minZoomFactor;\n }\n } // remove from start\n\n\n if (1 / (end - start) > maxZoomFactor) {\n start = end - 1 / maxZoomFactor;\n }\n\n if (start < 0 && end - start < 1 / maxZoomFactor) {\n //start = 0;\n end = start + 1 / maxZoomFactor;\n }\n }\n\n if (start < -declination) {\n start = -declination;\n }\n\n if (1 / (end - start) > maxZoomFactor) {\n end = start + 1 / maxZoomFactor;\n }\n\n if (end > 1 + declination) {\n end = 1 + declination;\n }\n\n if (1 / (end - start) > maxZoomFactor) {\n start = end - 1 / maxZoomFactor;\n }\n\n this._finalEnd = end;\n this._finalStart = start;\n this.skipRangeEvent = skipRangeEvent;\n this.dispatchImmediately(\"rangechangestarted\");\n\n if (this.rangeChangeDuration > 0 && !instantly) {\n // todo: maybe move this to Animation\n var rangeChangeAnimation = this.rangeChangeAnimation;\n\n if (rangeChangeAnimation && rangeChangeAnimation.progress < 1) {\n var options = rangeChangeAnimation.animationOptions;\n\n if (options.length > 1) {\n if (options[0].to == start && options[1].to == end) {\n return {\n start: start,\n end: end\n };\n } else {\n if (!rangeChangeAnimation.isDisposed()) {\n rangeChangeAnimation.stop();\n }\n }\n }\n }\n\n if (this.rangeChangeAnimation) {\n this.rangeChangeAnimation.kill();\n }\n\n rangeChangeAnimation = this.animate([{\n property: \"start\",\n to: start\n }, {\n property: \"end\",\n to: end\n }], this.rangeChangeDuration, this.rangeChangeEasing);\n this.rangeChangeAnimation = rangeChangeAnimation;\n\n if (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\n rangeChangeAnimation.events.on(\"animationended\", function () {\n _this.dispatchImmediately(\"rangechangeended\");\n });\n } else {\n this.dispatchImmediately(\"rangechangeended\");\n }\n } else {\n this.start = start;\n this.end = end;\n this.dispatch(\"rangechangeended\");\n }\n }\n\n return {\n start: start,\n end: end\n };\n };\n /**\r\n * Zooms to specific data items using their index in data.\r\n *\r\n * This method will not have any effect when called on a chart object.\r\n * Since the chart can have a number of axes and series, each with its own\r\n * data, the meaning of \"index\" is very ambiguous.\r\n *\r\n * To zoom the chart use `zoom*` methods on its respective axes.\r\n *\r\n * @param startIndex Index of the starting data item\r\n * @param endIndex Index of the ending data item\r\n * @param skipRangeEvent Should rangechanged event not be triggered?\r\n * @param instantly Do not animate?\r\n */\n\n\n Component.prototype.zoomToIndexes = function (startIndex, endIndex, skipRangeEvent, instantly) {\n if (!$type.isNumber(startIndex) || !$type.isNumber(endIndex)) {\n return;\n }\n\n var start = startIndex / this.dataItems.length;\n var end = endIndex / this.dataItems.length;\n this.zoom({\n start: start,\n end: end\n }, skipRangeEvent, instantly);\n };\n\n Object.defineProperty(Component.prototype, \"zoomFactor\", {\n /**\r\n * A current zoom factor (0-1). 1 meaning fully zoomed out. (showing all of\r\n * the available data)\r\n *\r\n * @return Zoom factor\r\n */\n get: function get() {\n return $math.fitToRange(1 / (this.end - this.start), 1, this.maxZoomFactor);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"maxZoomFactor\", {\n /**\r\n * @return Maximum zoomFactor\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxZoomFactor\");\n },\n\n /**\r\n * Max available `zoomFactor`.\r\n *\r\n * The element will not allow zoom to occur beyond this factor.\r\n *\r\n * [[DateAxis]] and [[CategoryAxis]] calculate this atutomatically so that\r\n * category axis could be zoomed to one category and date axis allows to be\r\n * zoomed up to one base interval.\r\n *\r\n * In case you want to restrict category or date axis to be zoomed to more\r\n * than one category or more than one base interval, use `minZoomCount`\r\n * property (set it to `> 1`).\r\n *\r\n * Default value of [[ValueAxis]]'s `maxZoomFactor` is `1000`.\r\n *\r\n * Feel free to modify it to allow bigger zoom or to restrict zooming.\r\n *\r\n * @param value Maximum zoomFactor\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"maxZoomFactor\", value)) {\n if (value == 1) {\n this.maxZoomDeclination = 0;\n }\n\n this.invalidateDataRange();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"maxZoomDeclination\", {\n /**\r\n * @ignore\r\n * @return Maximum zoom declination\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxZoomDeclination\");\n },\n\n /**\r\n * Max zoom declination.\r\n *\r\n * @ignore\r\n * @default 1\r\n * @param value Maximum zoom declination\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"maxZoomDeclination\", value)) {\n this.invalidateDataRange();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"startIndex\", {\n /**\r\n * Current starting index.\r\n *\r\n * @return Start index\r\n */\n get: function get() {\n if (!$type.isNumber(this._startIndex)) {\n this._startIndex = 0;\n }\n\n return this._startIndex;\n },\n\n /**\r\n * Sets current starting index.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Start index\r\n */\n set: function set(value) {\n this._startIndex = $math.fitToRange(Math.round(value), 0, this.dataItems.length); //this._workingStartIndex = this._startIndex; // not good, breaks adjusted working start index of line series\n\n this.start = this.indexToPosition(this._startIndex);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n * @todo:review description\r\n * returns item's relative position by the index of the item\r\n * @param index\r\n */\n\n Component.prototype.indexToPosition = function (index) {\n return index / this.dataItems.length;\n };\n\n Object.defineProperty(Component.prototype, \"endIndex\", {\n /**\r\n * Current ending index.\r\n *\r\n * @return End index\r\n */\n get: function get() {\n var count = this.dataItems.length;\n\n if (!$type.isNumber(this._endIndex) || this._endIndex > count) {\n this._endIndex = count;\n }\n\n return this._endIndex;\n },\n\n /**\r\n * Sets current ending index.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value End index\r\n */\n set: function set(value) {\n this._endIndex = $math.fitToRange(Math.round(value), 0, this.dataItems.length); //this._workingEndIndex = this._endIndex; // not good, breaks adjusted workingend index of line series\n\n this.end = this.indexToPosition(this._endIndex);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"start\", {\n /**\r\n * @return Start (0-1)\r\n */\n get: function get() {\n if (!this._adapterO) {\n return this._start;\n } else {\n return this._adapterO.apply(\"start\", this._start);\n }\n },\n\n /**\r\n * Start of the current data range (zoom).\r\n *\r\n * These are relative values from 0 (beginning) to 1 (end).\r\n *\r\n * @param value Start (0-1)\r\n */\n set: function set(value) {\n // value = $math.round(value, 10); not good\n //if (1 / (this.end - value) > this.maxZoomFactor) {\n //\tvalue = this.end - 1 / this.maxZoomFactor;\n //}\n if (this._start != value) {\n this._start = value;\n var startIndex = Math.max(0, Math.floor(this.dataItems.length * value) || 0);\n this._startIndex = Math.min(startIndex, this.dataItems.length);\n this.invalidateDataRange();\n this.invalidate();\n this.dispatchImmediately(\"startchanged\");\n this.dispatch(\"startendchanged\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"end\", {\n /**\r\n * @return End (0-1)\r\n */\n get: function get() {\n if (!this._adapterO) {\n return this._end;\n } else {\n return this._adapterO.apply(\"end\", this._end);\n }\n },\n\n /**\r\n * End of the current data range (zoom).\r\n *\r\n * These are relative values from 0 (beginning) to 1 (end).\r\n *\r\n * @param value End (0-1)\r\n */\n set: function set(value) {\n // value = $math.round(value, 10); // not good\n //if (1 / (value - this.start) > this.maxZoomFactor) {\n //\tvalue = 1 / this.maxZoomFactor + this.start;\n //}\n if (this._end != value) {\n this._end = value;\n this._endIndex = Math.min(this.dataItems.length, Math.ceil(this.dataItems.length * value) || 0);\n this.invalidateDataRange();\n this.invalidate();\n this.dispatchImmediately(\"endchanged\");\n this.dispatch(\"startendchanged\");\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * [removeFromInvalids description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n Component.prototype.removeFromInvalids = function () {\n _super.prototype.removeFromInvalids.call(this);\n\n registry.removeFromInvalidComponents(this);\n $array.remove(registry.invalidDataItems, this);\n $array.remove(registry.invalidDataRange, this);\n $array.remove(registry.invalidRawDatas, this);\n };\n\n Object.defineProperty(Component.prototype, \"dataItems\", {\n /**\r\n * Returns a list of source [[DataItem]] objects currently used in the chart.\r\n *\r\n * @return List of data items\r\n */\n get: function get() {\n if (this._currentDataSetId != \"\") {\n var dataItems = this.dataSets.getKey(this._currentDataSetId);\n\n if (dataItems) {\n return dataItems;\n }\n }\n\n return this._dataItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"dataSets\", {\n /**\r\n * Holds data items for data sets (usually aggregated data).\r\n *\r\n * @ignore\r\n * @since 4.7.0\r\n * @return Data sets\r\n */\n get: function get() {\n if (!this._dataSets) {\n this._dataSets = new Dictionary();\n }\n\n return this._dataSets;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Makes the chart use particular data set.\r\n *\r\n * If `id` is not provided or there is no such data set, main data will be\r\n * used.\r\n *\r\n * @ignore\r\n * @since 4.7.0\r\n * @param id Data set id\r\n */\n\n Component.prototype.setDataSet = function (id) {\n if (this._currentDataSetId != id) {\n var dataSet = this.dataSets.getKey(id);\n\n if (!dataSet) {\n if (this._currentDataSetId != \"\") {\n this.dataItems.each(function (dataItem) {\n dataItem.__disabled = true;\n });\n this._currentDataSetId = \"\";\n this.invalidateDataRange();\n this._prevStartIndex = undefined;\n this.dataItems.each(function (dataItem) {\n dataItem.__disabled = false;\n });\n return true;\n }\n } else {\n this.dataItems.each(function (dataItem) {\n dataItem.__disabled = true;\n });\n this._currentDataSetId = id;\n this.invalidateDataRange();\n this._prevStartIndex = undefined;\n this.dataItems.each(function (dataItem) {\n dataItem.__disabled = false;\n });\n return true;\n }\n }\n\n return false;\n };\n\n Object.defineProperty(Component.prototype, \"currentDataSetId\", {\n /**\r\n * Returns id of the currently used data set, or `undefined` if main data set\r\n * is in use.\r\n *\r\n * @since 4.7.0\r\n * @return Current data set id\r\n */\n get: function get() {\n return this._currentDataSetId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"mainDataSet\", {\n /**\r\n * Returns reference to \"main\" data set (unaggregated data as it was supplied\r\n * in `data`).\r\n *\r\n * @since 4.7.0\r\n * @return Main data set\r\n */\n get: function get() {\n return this._dataItems;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates the indexes for the dataItems\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Component.prototype._updateDataItemIndexes = function (startIndex) {\n var dataItems = this.mainDataSet.values;\n var length = dataItems.length;\n\n for (var i = startIndex; i < length; ++i) {\n dataItems[i]._index = i;\n }\n };\n /**\r\n * Processes newly added [[DataItem]] as well as triggers data re-validation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event [description]\r\n */\n\n\n Component.prototype.handleDataItemAdded = function (event) {\n event.newValue.component = this;\n\n this._updateDataItemIndexes(event.index);\n\n if (!this.dataItemsInvalid) {\n this.invalidateDataItems();\n }\n };\n /**\r\n * removes [[DataItem]] as well as triggers data re-validation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event [description]\r\n */\n\n\n Component.prototype.handleDataItemRemoved = function (event) {\n //\t\tevent.oldValue.component = undefined; // not good, as some items might be not removed from component lists\n this._updateDataItemIndexes(event.index);\n\n if (!this.dataItemsInvalid) {\n this.invalidateDataItems();\n }\n };\n /**\r\n * Binds a data element's field to a specific field in raw data.\r\n * For example, for the very basic column chart you'd want to bind a `value`\r\n * field to a field in data, such as `price`.\r\n *\r\n * Some more advanced Components, like [[CandlestickSeries]] need several\r\n * data fields bound to data, such as ones for open, high, low and close\r\n * values.\r\n *\r\n * @todo Example\r\n * @param field Field name\r\n * @param value Field name in data\r\n */\n\n\n Component.prototype.bindDataField = function (field, value) {\n this.dataFields[field] = value;\n this.invalidateDataRange();\n };\n /**\r\n * Invalidates processed data.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Component.prototype.invalidateProcessedData = function () {\n this.resetProcessedRange();\n this.invalidateDataRange();\n };\n /**\r\n * [resetProcessedRange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Component.prototype.resetProcessedRange = function () {\n this._prevEndIndex = null;\n this._prevStartIndex = null;\n };\n\n Object.defineProperty(Component.prototype, \"dataUsers\", {\n /**\r\n * Returns all other [[Component]] objects that are using this element's\r\n * data.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @return [description]\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._dataUsers) {\n this._dataUsers = new List(); //this._disposers.push(new ListDisposer(this._dataUsers));\n // TODO better way of handling this? e.g. move into another module ?\n\n this._disposers.push(new Disposer(function () {\n // TODO clear the list ?\n $iter.each(_this._dataUsers.iterator(), function (x) {\n x.dispose();\n });\n }));\n }\n\n return this._dataUsers;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a clone of this element.\r\n *\r\n * @return Clone\r\n */\n\n Component.prototype.clone = function () {\n var component = _super.prototype.clone.call(this);\n\n component.dataFields = $utils.copyProperties(this.dataFields, {});\n return component;\n };\n /**\r\n * Copies all parameters from another [[Component]].\r\n *\r\n * @param source Source Component\r\n */\n\n\n Component.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.data = source.data;\n this.sequencedInterpolation = source.sequencedInterpolation;\n this.sequencedInterpolationDelay = source.sequencedInterpolationDelay;\n this.interpolationDuration = source.interpolationDuration;\n this.interpolationEasing = source.interpolationEasing;\n };\n /**\r\n * Invalidates the whole element, including all its children, causing\r\n * complete re-parsing of data and redraw.\r\n *\r\n * Use sparingly!\r\n */\n\n\n Component.prototype.reinit = function () {\n this._inited = false;\n this.deepInvalidate();\n };\n /**\r\n * Add an adapter for data.\r\n *\r\n * @return Exporting\r\n */\n\n\n Component.prototype.getExporting = function () {\n var _export = _super.prototype.getExporting.call(this);\n\n if (!_export.adapter.has(\"data\", this._exportData, -1, this)) {\n _export.adapter.add(\"data\", this._exportData, -1, this);\n\n this.events.on(\"datavalidated\", function (ev) {\n _export.handleDataUpdated();\n });\n }\n\n return _export;\n };\n\n Component.prototype._exportData = function (arg) {\n arg.data = this.data;\n return arg;\n };\n\n Component.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (changed) {\n this.invalidateData();\n }\n\n return changed;\n };\n /**\r\n * @ignore\r\n */\n\n\n Component.prototype.setShowOnInit = function (value) {\n if (value != this.getPropertyValue(\"showOnInit\")) {\n if (value && !this.inited && !this.hidden) {\n this._showOnInitDisposer2 = this.events.once(\"dataitemsvalidated\", this.hideInitially, this, false);\n\n this._disposers.push(this._showOnInitDisposer2);\n } else {\n if (this._showOnInitDisposer2) {\n this.removeDispose(this._showOnInitDisposer2);\n }\n }\n } // important order here\n\n\n _super.prototype.setShowOnInit.call(this, value);\n };\n\n Component.prototype.setBaseId = function (value) {\n if (value != this._baseId) {\n if (this.dataInvalid) {\n this.dataInvalid = false;\n registry.removeFromInvalidComponents(this);\n this._baseId = value;\n this.invalidateData();\n }\n }\n\n _super.prototype.setBaseId.call(this, value);\n };\n\n Object.defineProperty(Component.prototype, \"minZoomCount\", {\n /**\r\n * @return Min zoom count\r\n */\n get: function get() {\n return this.getPropertyValue(\"minZoomCount\");\n },\n\n /**\r\n * Use this for [[CategoryAxis]] or [[DateAxis]].\r\n *\r\n * Allows restricting zoom in beyond certain number of categories or base\r\n * intervals.\r\n *\r\n * @default 1\r\n * @param value Min zoom count\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minZoomCount\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"maxZoomCount\", {\n /**\r\n * @return Max zoom count\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxZoomCount\");\n },\n\n /**\r\n * Use this for [[CategoryAxis]] or [[DateAxis]].\r\n *\r\n * Limits how many categories or base intervals can be shown at the same\r\n * time.\r\n *\r\n * If there are more items in the chart, the chart will auto-zoom.\r\n *\r\n * @default 0 (no limit)\r\n * @since 4.6.2\r\n * @param value Max zoom count\r\n */\n set: function set(value) {\n this.setPropertyValue(\"maxZoomCount\", value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Called during the System.update method\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Component.prototype._systemCheckIfValidate = function () {\n if (this.dataInvalid || this.dataProvider && this.dataProvider.dataInvalid) {\n return false;\n } else {\n return true;\n }\n };\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n Component.prototype.asFunction = function (field) {\n return field == \"interpolationEasing\" || field == \"rangeChangeEasing\" || _super.prototype.asIs.call(this, field);\n };\n\n return Component;\n}(Container);\n\nexport { Component };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Component\"] = Component;","/**\r\n * Text class deals with all text placed on chart.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { registry } from \"../Registry\";\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\nimport { MultiDisposer } from \"../utils/Disposer\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $math from \"../utils/Math\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\nimport * as $dom from \"../utils/DOM\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../utils/Responsive\";\nimport { options } from \"../Options\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Text is used to display highly configurable, data-enabled textual elements.\r\n *\r\n * ## Data Binding\r\n *\r\n * A Text element can dynamically parse and populate its contents with values\r\n * from a [[DataItem]].\r\n *\r\n * To activate such binding, set element's `dataItem` property.\r\n *\r\n * When activated, text contents will be parsed for special tags, e.g.:\r\n *\r\n * ```TypeScript\r\n * label.dataItem = myDataItem;\r\n * label.text = \"The title is: {title}\";\r\n * ```\r\n * ```JavaScript\r\n * label.dataItem = myDataItem;\r\n * label.text = \"The title is: {title}\";\r\n * ```\r\n *\r\n * The above will automatically replace \"{title}\" in the string with the\r\n * actual data value from `myDataItem`.\r\n *\r\n * Note, that most often dataItem is set by the Component.\r\n *\r\n *\r\n * @see {@link ILabelEvents} for a list of available events\r\n * @see {@link ILabelAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-strings/} for info on string formatting and data binding\r\n * @todo Vertical align\r\n * @important\r\n */\n\nvar Label =\n/** @class */\nfunction (_super) {\n __extends(Label, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Label() {\n var _this = // Execute super's constructor\n _super.call(this) || this;\n /**\r\n * Indicates if the whole text does not fit into max dimenstions set for it.\r\n */\n\n\n _this.isOversized = false; // Set this class name\n\n _this.className = \"Label\";\n _this.fill = new InterfaceColorSet().getFor(\"text\"); // not good to set this, as then these will appear on each label and values set on container won't be applied.\n //this.textDecoration = \"none\";\n //this.fontWeight = \"normal\";\n // Set defaults\n\n _this.wrap = false;\n _this.truncate = false;\n _this.fullWords = true;\n _this.ellipsis = \"…\";\n _this.textAlign = \"start\";\n _this.textValign = \"top\";\n _this.layout = \"absolute\";\n _this.baseLineRatio = -0.27; //this.pixelPerfect = true;\n\n _this._positionPrecision = 1; // Add events to watch for maxWidth/maxHeight changes so that we can\n // invalidate this\n\n _this.events.on(\"maxsizechanged\", function () {\n if (_this.inited) {\n _this.handleMaxSize();\n }\n }, _this, false); // this solves strange bug when text just added to svg is 0x0\n\n\n _this.events.once(\"validated\", _this.handleValidate, _this, false); // Aply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * A placeholder method that is called **after** element finishes drawing\r\n * itself.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Label.prototype.afterDraw = function () {\n // since we removed validatePosition from sprite, we still need it here to handle rotated text\n _super.prototype.afterDraw.call(this);\n\n this.validatePosition();\n };\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\n\n\n Label.prototype.setPaper = function (paper) {\n var changed = _super.prototype.setPaper.call(this, paper);\n\n if (changed) {\n this.hardInvalidate();\n }\n\n return changed;\n };\n /**\r\n * @ignore\r\n */\n\n\n Label.prototype.handleValidate = function () {\n if ((this.currentText || this.text) && (this.bbox.width == 0 || this.bbox.height == 0)) {\n registry.events.once(\"exitframe\", this.hardInvalidate, this);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Label.prototype.handleMaxSize = function () {\n if (this.bbox.width > this.availableWidth || this.bbox.width < this.availableWidth && (this.isOversized || this.truncate) || this.bbox.height > this.availableHeight || this.bbox.height < this.availableHeight && this.isOversized) {\n this.invalidate();\n } else {//this.alignSVGText();\n }\n };\n /**\r\n * [arrange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Label.prototype.arrange = function () {};\n /**\r\n * Updates current text according to data item and supported features.\r\n * Returns `true` if current text has changed.\r\n *\r\n * @return Text changed?\r\n */\n\n\n Label.prototype.updateCurrentText = function () {\n // Determine output format\n var output, text;\n\n if ($utils.isNotEmpty(this.html) && this.paper.supportsForeignObject()) {\n // We favor HTML text if it's set and browser supports `foreignObject`\n output = \"html\";\n text = this.html;\n } else {\n output = \"svg\";\n text = this.text;\n } // Need to toString source?\n\n\n if ($type.isObject(text)) {\n text = text.toString();\n } // Need to format text all the time\n\n\n if ($type.hasValue(text) && text !== \"\") {\n text = this.populateString(text, this.dataItem);\n }\n\n if (output == \"html\") {\n if (this._adapterO) {\n text = this._adapterO.apply(\"htmlOutput\", text);\n }\n } else {\n if (this._adapterO) {\n text = this._adapterO.apply(\"textOutput\", text);\n }\n } // Update the text\n\n\n var changed = text != this.currentText || output != this._currentFormat;\n this.currentText = text;\n this._currentFormat = output;\n return changed;\n };\n /**\r\n * Hard invalidate means the text will be redrawn even if it hasn't changed.\r\n * This is used when we change `fontSize`, `fontFamily`, or for some other\r\n * reasons.\r\n */\n\n\n Label.prototype.hardInvalidate = function () {\n this._prevStatus = \"\";\n this.invalidate();\n };\n /**\r\n * Gets line bbox, uses caching to save cpu\r\n * @ignore\r\n */\n\n\n Label.prototype.getLineBBox = function (lineInfo) {\n //let cacheKey = lineInfo.text + lineInfo.style;\n //let lineBBox = this.getCache(cacheKey);\n //if (!lineBBox) {\n //lineBBox = lineInfo.element.getBBox();\n //if (lineBBox.width != 0 && lineBBox.height != 0) {\n //\tthis.setCache(cacheKey, lineBBox, 5000);\n //}\n //}\n var element = lineInfo && lineInfo.element;\n var node = element && element.node; // Check for the parent Node to avoid FF from throwing errors\n\n if (node && node.parentNode) {\n lineInfo.bbox = element.getBBox();\n }\n };\n /**\r\n * Draws the textual label.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Label.prototype.draw = function () {\n // Draw super\n _super.prototype.draw.call(this);\n\n var oldW = this.bbox.width;\n var oldH = this.bbox.height;\n var topParent = this.topParent;\n\n if (topParent) {\n if (!topParent.maxWidth || !topParent.maxHeight) {\n topParent.events.once(\"maxsizechanged\", this.hardInvalidate, this, false);\n return;\n }\n } // Calculate max width and height\n\n\n var maxWidth = $math.max(this.availableWidth - this.pixelPaddingLeft - this.pixelPaddingRight, 0);\n var maxHeight = $math.max(this.availableHeight - this.pixelPaddingTop - this.pixelPaddingBottom, 0); // save\n\n var status = maxHeight + \",\" + maxWidth + this.wrap + this.truncate + this.fullWords + this.rtl + this.ellipsis; // Update text\n\n if (!this.updateCurrentText() && this.inited && this._prevStatus == status) {\n return;\n }\n\n this._measuredWidth = 0;\n this._measuredHeight = 0; // Reset\n\n this.isOversized = false; // Determine output format\n\n var output = this._currentFormat;\n var text = this.currentText; // Empty string\n\n if (!$type.hasValue(text) || text == \"\") {\n this.element.attr({\n display: \"none\"\n });\n return;\n } // Chop up text into lines\n // We're still processing SVG and HTML in the same way for now\n\n\n var lines = text.split(\"\\n\"); // Do we need to go through the trouble of measuring lines\n //let measure: boolean = true;// (lines.length > 1) || this.wrap;\n\n this._prevStatus = status;\n this.textAlign = this.textAlign; // need this to measure\n\n var display = this.group.getAttr(\"display\");\n\n if (display == \"none\") {\n this.group.removeAttr(\"display\");\n }\n\n if (this.textPathElement) {\n this.textPathElement.removeChildren();\n } // SVG or HTML?\n\n\n if (output === \"svg\") {\n /**\r\n * SVG\r\n */\n this.element.removeAttr(\"display\"); // Clear the element\n\n var group = this.element;\n this.resetBBox(); // Init state variables\n\n var currentHeight = 0;\n var currentFormat = \"\"; // Process each line\n\n for (var i = 0; i < lines.length; i++) {\n // Get line\n var line = lines[i]; // Check if line is empty\n\n if (line == \"\") {\n // It is, let's just update currentHeight and go to the next one\n // If it's the first line, we'll have to use arbirary line height,\n // since there's nothing to measure. For subsequent lines we can take\n // previous line's height\n var tempElement = this.getSVGLineElement(\"\", 0);\n tempElement.add(this.getSvgElement(\".\", getTextFormatter().translateStyleShortcuts(currentFormat)));\n group.add(tempElement);\n var offset = Math.ceil(tempElement.getBBox().height);\n\n if (offset > 0) {\n currentHeight += offset;\n }\n\n group.removeElement(tempElement); // Clear cache if necessary\n\n var lineInfo_1 = this.getLineInfo(i);\n\n if (lineInfo_1) {\n lineInfo_1.text = \"\";\n lineInfo_1.element.textContent = \"\";\n }\n\n continue;\n } // Chunk up the line and process each chunk\n\n\n var chunks = getTextFormatter().chunk(line, null, this.ignoreFormatting);\n var currentLineHeight = 0;\n var firstChunk = true;\n var skipTextChunks = false; // Create line element or grab it from cache\n\n var lineInfo = this.getLineInfo(i);\n\n if (lineInfo) {\n // Empty line\n lineInfo.text = \"\";\n lineInfo.element.textContent = \"\";\n } else {\n // Init new line info\n lineInfo = {\n \"text\": \"\",\n \"element\": this.getSVGLineElement(\"\", 0),\n \"complex\": false\n }; // Create the line element\n //lineInfo.element = this.getSVGLineElement(\"\", 0);\n //lineElement = this.getSVGLineElement(\"\", 0);\n\n group.add(lineInfo.element);\n }\n\n lineInfo.element.removeAttr(\"display\");\n lineInfo.element.removeChildren(); // memory leak without this\n\n if (this.textPathElement) {\n lineInfo.element.add(this.textPathElement);\n }\n /*// @todo not needed anymore\r\n if (this.rtl) {\r\n chunks.reverse();\r\n }*/\n // Process each chunk\n\n\n for (var x = 0; x < chunks.length; x++) {\n // If there's more than one chunk, means the line is \"complex\"\n if (x) {\n lineInfo.complex = true;\n } // Get chunk\n\n\n var chunk = chunks[x]; // Is this chunk format or text?\n\n if (chunk.type === \"format\") {\n // Log current format, so that we can apply it to multiple lines if\n // necessary\n currentFormat = chunk.text;\n } else {\n // It's text block\n // Need to skip?\n // We do this when truncating. We can't just simply go ahead and\n // abandon chunk processing as they might have formatting\n // instructions in them that are relevant for subsequent lines\n if (skipTextChunks) {\n continue;\n } // Add chunk to the current element\n //lineInfo.element.content += $utils.trim(getTextFormatter().format(currentFormat + chunk.text, output));\n\n\n lineInfo.text = chunk.text;\n lineInfo.style = getTextFormatter().translateStyleShortcuts(currentFormat);\n\n if (this.textPathElement) {\n this.getSvgElement(lineInfo.text, lineInfo.style, this.textPathElement);\n } else {\n this.getSvgElement(lineInfo.text, lineInfo.style, lineInfo.element);\n }\n\n this.getLineBBox(lineInfo);\n lineInfo.bbox.width = Math.ceil(lineInfo.bbox.width); // Updated current line height\n\n if (currentLineHeight < lineInfo.bbox.height) {\n currentLineHeight = lineInfo.bbox.height;\n } // Wrapping?\n\n\n if ((this.wrap || this.truncate) && lineInfo.bbox.width > maxWidth) {\n // Set oversized\n this.isOversized = true; // Take temporary measurements\n\n var lineText = lineInfo.element.textContent;\n var avgCharWidth = lineInfo.bbox.width / lineText.length; // * .9;\n // Calculate average number of symbols / width\n\n var excessChars = $math.min(Math.ceil((lineInfo.bbox.width - maxWidth) / avgCharWidth), lineText.length); // Are we truncating or auto-wrapping text?\n\n if (this.truncate) {\n /**\r\n * Processing line truncation\r\n * With the addition of each text chunk we measure if current\r\n * line does not exceed maxWidth. If it does, we will stop\r\n * addition of further chunks as well as try to truncate\r\n * current or any number of previous chunks with an added\r\n * ellipsis\r\n */\n // Indicator whether we need to add ellipsis to the current\n // element, even if it fits. This is needed to indicate\n // whether we have already removed some subsequent chunks in\n // which case we need to add ellipsis.\n var addEllipsis = false; // Process each child in the temporary line, until the whole\n // line fits, preferably with an ellipsis\n // TODO use iterator instead\n\n var node_1 = lineInfo.element.node;\n\n if (node_1 && node_1.childNodes) {\n for (var e = lineInfo.element.node.childNodes.length - 1; e >= 0; e--) {\n // Get current element\n var node_2 = lineInfo.element.node.childNodes[e]; // Add ellipsis only if previous chunk was removed in full\n // and this chunk already fits\n //if (addEllipsis && (bbox.width <= maxWidth)) {\n\n if (addEllipsis && lineInfo.bbox.width <= maxWidth) {\n // Add ellipsis\n node_2.textContent += \" \" + this.ellipsis; // Measure again (we need to make sure ellipsis fits)\n\n lineInfo.bbox = lineInfo.element.getBBox();\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width); // If it fits, we're done here\n // If it doesn't we continue rolling\n\n if (lineInfo.bbox.width <= maxWidth) {\n break;\n }\n }\n\n addEllipsis = false; // Get element text\n\n var elementText = node_2.textContent; // Calculate average number of symbols / width\n\n lineText = lineInfo.element.textContent;\n excessChars = $math.min(Math.ceil((lineInfo.bbox.width - maxWidth) / avgCharWidth), lineText.length); // Do this until we fit\n\n while (lineInfo.bbox.width > maxWidth && excessChars <= lineText.length && excessChars > 0) {\n // Calculate max available chars\n var maxChars = $math.max(lineText.length - excessChars - this.ellipsis.length, 1); // Is there anything left?\n\n if (maxChars <= 1) {\n // Nope, let's jump to the previous item\n // Set excess characters to zero so that this loop does\n // not repeat when it over\n excessChars = 0; // Add ellipsis to previous item\n // Subsequent iterations will check if the ellipsis fits\n\n if (e > 0) {\n // Indicating to add ellipsis to previous item\n addEllipsis = true; // Removing this node\n\n lineInfo.element.node.removeChild(node_2);\n }\n } // Truncate the text\n\n\n elementText = $utils.truncateWithEllipsis(elementText, maxChars, this.ellipsis, this.fullWords, this.rtl);\n\n if (elementText.length > maxChars && this.fullWords) {\n // Still too long?\n // Let's try truncating breaking words anyway\n elementText = $utils.truncateWithEllipsis(elementText, maxChars, this.ellipsis, false, this.rtl);\n } // Set truncated text\n\n\n node_2.textContent = elementText; // Measure again\n\n lineInfo.bbox = lineInfo.element.getBBox();\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width); // Increase excess characters count, just in case it still\n // doesn't fit and we have to go at it again\n\n excessChars = Math.ceil(excessChars * 1.1);\n } // Do not process further chunks\n\n\n skipTextChunks = true;\n }\n }\n } else {\n /**\r\n * Processign auto-wrap\r\n * In this case we're going to be adding text chunks until\r\n * they don't fit into current line. Once that happens we will\r\n * inject the rest of the chunks to the next line\r\n */\n // Get last node added and measure it\n var node_3 = lineInfo.element.node;\n\n if (node_3) {\n var lastNode = lineInfo.element.node.lastChild; // Init split lines\n\n var splitLines = void 0;\n\n while (lineInfo.bbox.width > maxWidth && excessChars <= lineText.length && excessChars > 0) {\n // Calculate max available chars\n var maxChars = $math.max(chunk.text.length - excessChars, 1); // Don't split the words mid-word if it's not the first chunk\n // in the line\n\n if (firstChunk) {\n // Split mid-word if necessary\n splitLines = $utils.splitTextByCharCount(chunk.text, maxChars, true, this.rtl);\n } else {\n // Don't split mid-word\n splitLines = $utils.splitTextByCharCount(chunk.text, maxChars, true, this.rtl, false); // Check if the first word is too long\n\n if (splitLines[0].length > maxChars || maxChars === 1) {\n // Yes - move the whole chunk to the next line\n // Remove the element we just added\n lineInfo.element.node.removeChild(lastNode); // Break out of the while on next cycle\n\n excessChars = 0;\n }\n } // Use the first line to update last item\n\n\n if (excessChars > 0) {\n var lineText_1 = splitLines.shift();\n\n if (firstChunk) {\n lineText_1 = $utils.trim(lineText_1);\n }\n\n lastNode.textContent = getTextFormatter().cleanUp(lineText_1);\n } // Measure again, just in case\n\n\n lineInfo.bbox = lineInfo.element.getBBox();\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width); // Increase excess characters count, just in case it still\n // doesn't fit and we have to go at it again\n //excessChars = Math.ceil(excessChars * 1.05);\n\n excessChars++;\n } // Construct the rest of the line\n\n\n if (splitLines.length > 0) {\n var restOfLine = \"\"; // Add leftovers from splitting the current chunk\n\n if ($type.hasValue(splitLines)) {\n if (this.rtl) {\n restOfLine += splitLines.join(\"\") + currentFormat;\n } else {\n restOfLine += currentFormat + splitLines.join(\"\").replace(/([\\[\\]]{1})/g, \"$1$1\");\n }\n } // Add the rest of the chunks\n\n\n for (var c = x + 1; c < chunks.length; c++) {\n if (chunks[c].type == \"value\") {\n // We're escaping single square brackets that were\n // cleaned up by chunk() back to double square brackets\n // so that they are not being treated as format on\n // next pass.\n restOfLine += chunks[c].text.replace(/([\\[\\]]{1})/g, \"$1$1\");\n } else {\n restOfLine += chunks[c].text;\n }\n } // Inject the rest of the lines as chunks for subsequent\n\n\n lines.splice(i + 1, 0, restOfLine);\n } // Skip processing the rest of the chunks\n\n\n skipTextChunks = true;\n }\n }\n } // Let's update the text's bbox with the line's one\n\n\n if (this.bbox.width < lineInfo.bbox.width) {\n this.bbox.width = lineInfo.bbox.width;\n } // commented to avoid bug (seen on sankey link) where text is incorrectly aligned\n //if (this.bbox.x > lineInfo.bbox.x) {\n //this.bbox.x = lineInfo.bbox.x;\n //}\n\n\n this.bbox.height = currentHeight + currentLineHeight; // Position current line\n\n if (!this.textPathElement) {\n lineInfo.element.attr({\n \"x\": \"0\",\n \"y\": currentHeight + currentLineHeight,\n \"dy\": $math.round(this.baseLineRatio * currentLineHeight, 3).toString()\n });\n } else {\n lineInfo.element.attr({\n \"dy\": -this.paddingBottom.toString()\n });\n }\n\n firstChunk = false;\n }\n } // Trim the last item\n\n\n var node = lineInfo.element.node;\n\n if (node) {\n var lastNode = node.lastChild;\n\n if (lastNode) {\n lastNode.textContent = this.rtl ? $utils.ltrim(lastNode.textContent) : $utils.rtrim(lastNode.textContent);\n }\n } // Increment collective height\n\n\n currentHeight += currentLineHeight; // Save line cache\n\n this.addLineInfo(lineInfo, i);\n } // Check if maybe we need to hide the whole label if it doesn't fit\n\n\n this.maybeHideOversized();\n this.measureFailed = false;\n\n if (this.bbox.width == 0 || this.bbox.height == 0) {\n this.measureFailed = true;\n } // Updated measured dims\n\n\n this._measuredWidth = $math.round($math.max(this.bbox.width, this.pixelWidth - this.pixelPaddingLeft - this.pixelPaddingRight));\n this._measuredHeight = $math.round($math.max(this.bbox.height, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom)); // Align the lines\n\n this.alignSVGText();\n this.bbox.width = this._measuredWidth;\n this.bbox.height = this._measuredHeight;\n\n if (oldH != this._measuredHeight || oldW != this._measuredWidth) {\n this.dispatch(\"transformed\");\n }\n\n this.hideUnused(lines.length);\n } else {\n /**\r\n * HTML\r\n */\n this.element.removeAttr(\"display\");\n this.resetBBox(); // Clear the element\n\n var group = this.element;\n group.removeChildren(); // Create a ForeignObject to use as HTML container\n\n var fo = this.paper.foreignObject();\n group.add(fo); // Set widths on foreignObject so that autosizing measurements work\n // This will bet reset to actual content width/height\n\n if (this.maxWidth) {\n fo.attr({\n width: this.maxWidth - this.pixelPaddingLeft - this.pixelPaddingRight\n });\n }\n\n if (this.maxHeight) {\n fo.attr({\n height: this.maxHeight - this.pixelPaddingTop - this.pixelPaddingBottom\n });\n } // Create line element\n //let lineElement: HTMLElement = this.getHTMLLineElement(getTextFormatter().format(this.html, output));\n\n\n var lineElement = this.getHTMLLineElement(text);\n fo.node.appendChild(lineElement); // Temporarily set to inline-block so we can measure real width and height\n\n lineElement.style.display = \"inline-block\";\n var clientWidth = lineElement.clientWidth;\n var clientHeight = lineElement.clientHeight;\n lineElement.style.display = \"block\";\n this._bbox = {\n x: 0,\n y: 0,\n width: clientWidth,\n height: clientHeight\n }; // Set exact dimensions of foreignObject so it is sized exactly as\n // the content within (add one pixel to width so it does not wrap)\n\n fo.attr({\n width: clientWidth + 1,\n height: clientHeight\n }); // Check if maybe we need to hide the whole label if it doesn't fit\n\n this.maybeHideOversized(); // Set measurements and update bbox\n\n this._measuredWidth = $math.max(this.bbox.width, this.pixelWidth - this.pixelPaddingLeft - this.pixelPaddingRight);\n this._measuredHeight = $math.max(this.bbox.height, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom);\n this.bbox.width = this._measuredWidth;\n this.bbox.height = this._measuredHeight; // Don't let labels bleed out of the alotted area\n\n if (this.truncate) {\n lineElement.style.overflow = \"hidden\";\n }\n\n if (clientWidth > maxWidth || clientHeight > maxHeight) {\n this.isOversized = true;\n }\n } // Set applicable styles\n\n\n this.setStyles();\n this.updateCenter();\n this.updateBackground();\n\n if (display == \"none\") {\n this.group.attr({\n display: \"none\"\n });\n }\n\n if (this.pathElement) {\n this.paper.appendDef(this.pathElement);\n }\n };\n /**\r\n * Hides element if it does not fit into available space\r\n */\n\n\n Label.prototype.maybeHideOversized = function () {\n if (this.hideOversized) {\n if (this.availableWidth < this.bbox.width || this.availableHeight < this.bbox.height) {\n this.element.attr({\n display: \"none\"\n });\n this.isOversized = true;\n } else {\n this.element.removeAttr(\"display\");\n this.isOversized = false;\n }\n }\n };\n /**\r\n * Aligns the lines horizontally and vertically, based on properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Label.prototype.alignSVGText = function () {\n // Get Group\n var group = this.element;\n var children = group.node.children || group.node.childNodes; // Is there anything to align?\n\n if (!children || children && children.length == 0) {\n return;\n }\n\n var width = this._measuredWidth;\n var height = this._measuredHeight; // TODO maybe these aren't needed ?\n\n $utils.used(this.pixelPaddingLeft);\n $utils.used(this.pixelPaddingRight);\n $utils.used(this.pixelPaddingTop);\n $utils.used(this.pixelPaddingBottom);\n\n if (this.rtl) {\n group.attr({\n \"direction\": \"rtl\"\n });\n } else {\n group.removeAttr(\"direction\");\n } // Process each line\n //$iter.each(group.children.backwards().iterator(), (element) => {\n\n\n for (var i = children.length - 1; i >= 0; i--) {\n // Align horizontally\n // Since we are using `text-anchor` for horizontal alignment, all we need\n // to do here is move the `x` position\n var node = children[i];\n node.setAttribute(\"text-anchor\", this.textAlign);\n\n if (this.textPathElement) {\n node.removeAttribute(\"x\");\n node.removeAttribute(\"y\");\n } else {\n switch (this.textAlign) {\n case \"middle\":\n node.setAttribute(\"x\", (width / 2).toString() + \"px\");\n break;\n\n case \"end\":\n if (this.rtl) {} else {\n node.setAttribute(\"x\", width.toString());\n }\n\n break;\n\n default:\n if (this.rtl) {\n node.setAttribute(\"x\", width.toString());\n } else {\n node.removeAttribute(\"text-anchor\");\n }\n\n break;\n }\n\n var y = $type.toNumber(node.getAttribute(\"y\"));\n\n switch (this.textValign) {\n case \"middle\":\n node.setAttribute(\"y\", ((y || 0) + (height - this.bbox.height) / 2).toString());\n break;\n\n case \"bottom\":\n node.setAttribute(\"y\", ((y || 0) + height - this.bbox.height).toString());\n break;\n\n default:\n node.setAttribute(\"y\", (y || 0).toString());\n break;\n }\n }\n }\n };\n /**\r\n * Produces an SVG line element with formatted text.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap into line\r\n * @param y Current line vertical position\r\n * @return A DOM element\r\n * @todo Implement HTML support\r\n */\n\n\n Label.prototype.getSVGLineElement = function (text, y) {\n // Create a <text> node and set text\n var element = this.paper.addGroup(\"text\");\n element.textContent = text; // Set parameters\n\n element.attr({\n \"x\": \"0\" //\"alignment-baseline\": \"hanging\",\n //\"baseline-shift\": \"-20%\",\n //\"text-anchor\": \"center\"\n\n }); // Set `y` position\n\n if ($type.hasValue(y)) {\n element.attr({\n \"y\": y.toString()\n });\n } // Don't let labels blled out of the alotted area\n\n\n if (this.truncate || this.wrap) {\n element.attr({\n \"overflow\": \"hidden\"\n });\n } // Add RTL?\n // This has now been moved to this.alignSVGText()\n // if (this.rtl) {\n // \telement.attr({\n // \t\t\"direction\": \"rtl\",\n // \t\t//\"unicode-bidi\": \"bidi-override\"\n // \t});\n // }\n\n\n return element;\n };\n\n Object.defineProperty(Label.prototype, \"rtl\", {\n /**\r\n * @return RTL?\r\n */\n get: function get() {\n if ($type.hasValue(this._rtl)) {\n return this._rtl;\n } else if (this._topParent) {\n return this._topParent.rtl;\n }\n\n return false;\n },\n\n /**\r\n * An RTL (right-to-left) setting.\r\n *\r\n * RTL may affect alignment, text, and other visual properties.\r\n *\r\n * If you set this on a top-level chart object, it will be used for all\r\n * child elements, e.g. labels, unless they have their own `rtl` setting\r\n * set directly on them.\r\n *\r\n * @param value `true` for to use RTL\r\n */\n set: function set(value) {\n value = $type.toBoolean(value);\n this._rtl = value;\n\n if (this.element) {\n this.alignSVGText();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Resets cached BBox.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Label.prototype.resetBBox = function () {\n this._bbox = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n };\n /**\r\n * Creates and returns an HTML line element (`<div>`).\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to add\r\n * @return `<div>` element reference\r\n */\n\n\n Label.prototype.getHTMLLineElement = function (text) {\n // Create the <div> element\n var div = document.createElement(\"div\");\n div.innerHTML = text; // Set text alignment\n\n switch (this.textAlign) {\n case \"middle\":\n div.style.textAlign = \"center\";\n break;\n\n case \"end\":\n div.style.textAlign = \"right\";\n break;\n } // Disable or enable wrapping\n\n\n if (this.wrap) {\n div.style.wordWrap = \"break-word\";\n } else {\n div.style.whiteSpace = \"nowrap\";\n } // Don't let labels bleed out of the alotted area\n // Moved to `draw()` because setting \"hidden\" kills all measuring\n\n /*if (this.truncate) {\r\n div.style.overflow = \"hidden\";\r\n }*/\n // Set RTL-related styles\n\n\n if (this.rtl) {\n div.style.direction = \"rtl\"; //div.style.unicodeBidi = \"bidi-override\";\n } // Translate some of the SVG styles into CSS\n\n\n if ($type.hasValue(this.fill)) {\n div.style.color = this.fill.toString();\n }\n\n return div;\n };\n /**\r\n * Applies specific styles to text to make it not selectable, unless it is\r\n * explicitly set as `selectable`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Set styles via AMElement\r\n */\n\n\n Label.prototype.setStyles = function () {\n var group = this.element;\n\n if (!this.selectable || this.draggable || this.resizable || this.swipeable) {\n group.addStyle({\n \"webkitUserSelect\": \"none\",\n \"msUserSelect\": \"none\"\n });\n } else if (this.selectable) {\n group.removeStyle(\"webkitUserSelect\");\n group.removeStyle(\"msUserSelect\");\n }\n };\n /**\r\n * Hides unused lines\r\n */\n\n\n Label.prototype.hideUnused = function (index) {\n this.initLineCache();\n var lines = this.getCache(\"lineInfo\");\n\n if (lines.length >= index) {\n for (var i = index; i < lines.length; i++) {\n var line = lines[i];\n\n if (line && line.element) {\n line.element.attr({\n \"display\": \"none\"\n });\n }\n }\n }\n };\n\n Object.defineProperty(Label.prototype, \"text\", {\n /**\r\n * @return SVG text\r\n */\n get: function get() {\n return this.getPropertyValue(\"text\");\n },\n\n /**\r\n * An SVG text.\r\n *\r\n * Please note that setting `html` will override this setting if browser\r\n * supports `foreignObject` in SGV, such as most modern browsers excluding\r\n * IEs.\r\n *\r\n * @param value SVG Text\r\n */\n set: function set(value) {\n //this.setPropertyValue(\"html\", undefined);\n this.setPropertyValue(\"text\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"path\", {\n /**\r\n * @return Path\r\n */\n get: function get() {\n return this.getPropertyValue(\"path\");\n },\n\n /**\r\n * An SVG path string to position text along. If set, the text will follow\r\n * the curvature of the path.\r\n *\r\n * Location along the path can be set using `locationOnPath`.\r\n *\r\n * IMPORTANT: Only SVG text can be put on path. If you are using HTML text\r\n * this setting will be ignored.\r\n *\r\n * @since 4.1.2\r\n * @param value Path\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"path\", value, true)) {\n if (this.pathElement) {\n this.pathElement.dispose();\n }\n\n if (this.textPathElement) {\n this.textPathElement.dispose();\n }\n\n this.pathElement = this.paper.add(\"path\");\n this.pathElement.attr({\n \"d\": value\n });\n this.pathElement.attr({\n \"id\": \"text-path-\" + this.uid\n });\n\n this._disposers.push(this.pathElement);\n\n this.textPathElement = this.paper.addGroup(\"textPath\");\n this.textPathElement.attrNS($dom.XLINK, \"xlink:href\", \"#text-path-\" + this.uid); // TODO remove after https://bugzilla.mozilla.org/show_bug.cgi?id=455986 is fixed\n\n this.textPathElement.attr({\n \"path\": value\n });\n\n this._disposers.push(this.textPathElement);\n\n this.hardInvalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"locationOnPath\", {\n /**\r\n * @return Relatvie location on path\r\n */\n get: function get() {\n return this.getPropertyValue(\"locationOnPath\");\n },\n\n /**\r\n * Relative label location on `path`. Value range is from 0 (beginning)\r\n * to 1 (end).\r\n *\r\n * Works only if you set `path` setting to an SVG path.\r\n *\r\n * @since 4.1.2\r\n * @default 0\r\n * @param value Relatvie location on path\r\n */\n set: function set(value) {\n this.setPropertyValue(\"locationOnPath\", value);\n\n if (this.textPathElement) {\n this.textPathElement.attr({\n \"startOffset\": value * 100 + \"%\"\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"baseLineRatio\", {\n /**\r\n * @return Base line ratio\r\n */\n get: function get() {\n return this.getPropertyValue(\"baseLineRatio\");\n },\n\n /**\r\n * A ratio to calculate text baseline. Ralative distance from the bottom of\r\n * the label.\r\n *\r\n * @since 4.4.2\r\n * @default -0.27\r\n * @param value Base line ratio\r\n */\n set: function set(value) {\n this.setPropertyValue(\"baseLineRatio\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"wrap\", {\n /**\r\n * @return Auto-wrap enabled or not\r\n */\n get: function get() {\n return this.getPropertyValue(\"wrap\");\n },\n\n /**\r\n * Enables or disables autowrapping of text.\r\n *\r\n * @param value Auto-wrapping enabled\r\n */\n set: function set(value) {\n this.resetBBox();\n this.setPropertyValue(\"wrap\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"truncate\", {\n /**\r\n * @return Truncate text?\r\n */\n get: function get() {\n return this.getPropertyValue(\"truncate\");\n },\n\n /**\r\n * Indicates if text lines need to be truncated if they do not fit, using\r\n * configurable `ellipsis` string.\r\n *\r\n * `truncate` overrides `wrap` if both are set to `true`.\r\n *\r\n * NOTE: For HTML text, this setting **won't** trigger a parser and actual\r\n * line truncation with ellipsis. It will just hide everything that goes\r\n * outside the label.\r\n *\r\n * @param value trincate text?\r\n */\n set: function set(value) {\n this.resetBBox();\n this.setPropertyValue(\"truncate\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"fullWords\", {\n /**\r\n * @return Truncate on full words?\r\n */\n get: function get() {\n return this.getPropertyValue(\"fullWords\");\n },\n\n /**\r\n * If `truncate` is enabled, should Label try to break only on full words\r\n * (`true`), or whenever needed, including middle of the word. (`false`)\r\n *\r\n * @default true\r\n * @param value Truncate on full words?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"fullWords\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"ellipsis\", {\n /**\r\n * @return Ellipsis string\r\n */\n get: function get() {\n return this.getPropertyValue(\"ellipsis\");\n },\n\n /**\r\n * Ellipsis character to use if `truncate` is enabled.\r\n *\r\n * @param value Ellipsis string\r\n * @default \"...\"\r\n */\n set: function set(value) {\n this.setPropertyValue(\"ellipsis\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"selectable\", {\n /**\r\n * @return Text selectable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"selectable\");\n },\n\n /**\r\n * Forces the text to be selectable. This setting will be ignored if the\r\n * object has some kind of interaction attached to it, such as it is\r\n * `draggable`, `swipeable`, `resizable`.\r\n *\r\n * @param value Text selectable?\r\n * @default false\r\n */\n set: function set(value) {\n this.setPropertyValue(\"selectable\", value, true);\n this.setStyles();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"textAlign\", {\n /**\r\n * @return Alignment\r\n */\n get: function get() {\n return this.getPropertyValue(\"textAlign\");\n },\n\n /**\r\n * Horizontal text alignment.\r\n *\r\n * Available choices:\r\n * * \"start\"\r\n * * \"middle\"\r\n * * \"end\"\r\n *\r\n * @param value Alignment\r\n */\n set: function set(value) {\n this.setPropertyValue(\"textAlign\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"textValign\", {\n /**\r\n * @ignore Exclude from docs (not used)\r\n * @return Alignment\r\n * @deprecated\r\n */\n get: function get() {\n return this.getPropertyValue(\"textValign\");\n },\n\n /**\r\n * Vertical text alignment.\r\n *\r\n * @ignore Exclude from docs (not used)\r\n * @param value Alignment\r\n * @deprecated\r\n */\n set: function set(value) {\n this.setPropertyValue(\"textValign\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"html\", {\n /**\r\n * @return HTML content\r\n */\n get: function get() {\n return this.getPropertyValue(\"html\");\n },\n\n /**\r\n * Raw HTML to be used as text.\r\n *\r\n * NOTE: HTML text is subject to browser support. It relies on browsers\r\n * supporting SVG `foreignObject` nodes. Some browsers (read IEs) do not\r\n * support it. On those browsers, the text will fall back to basic SVG text,\r\n * striping out all HTML markup and styling that goes with it.\r\n *\r\n * For more information about `foreignObject` and its browser compatibility\r\n * refer to [this page](https://developer.mozilla.org/en/docs/Web/SVG/Element/foreignObject#Browser_compatibility).\r\n *\r\n * @param value HTML text\r\n */\n set: function set(value) {\n this.setPropertyValue(\"html\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"hideOversized\", {\n /**\r\n * @return Hide if text does not fit?\r\n */\n get: function get() {\n return this.getPropertyValue(\"hideOversized\");\n },\n\n /**\r\n * Indicates whether the whole text should be hidden if it does not fit into\r\n * its allotted space.\r\n *\r\n * @param value Hide if text does not fit?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"hideOversized\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"ignoreFormatting\", {\n /**\r\n * @return Ignore formatting?\r\n */\n get: function get() {\n return this.getPropertyValue(\"ignoreFormatting\");\n },\n\n /**\r\n * If set to `true` square-bracket formatting blocks will be treated as\r\n * regular text.\r\n *\r\n * @default false\r\n * @param value Ignore formatting?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"ignoreFormatting\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Override `mesaureElement` so it does not get measure again, because\r\n * internal `_bbox` is being updated by measuring routines in Text itself.\r\n */\n\n Label.prototype.measureElement = function () {};\n /**\r\n * Returns information about a line element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param index Line index\r\n * @return Line info object\r\n */\n\n\n Label.prototype.getLineInfo = function (index) {\n this.initLineCache();\n var lines = this.getCache(\"lineInfo\");\n return lines.length > index ? lines[index] : undefined;\n };\n /**\r\n * Adds a line to line info cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @param line Line info object\r\n * @param index Insert at specified index\r\n */\n\n\n Label.prototype.addLineInfo = function (line, index) {\n this.initLineCache();\n this.getCache(\"lineInfo\")[index] = line;\n };\n /**\r\n * Checks if line cache is initialized and initializes it.\r\n */\n\n\n Label.prototype.initLineCache = function () {\n if (!$type.hasValue(this.getCache(\"lineInfo\"))) {\n this.setCache(\"lineInfo\", [], 0);\n }\n };\n /**\r\n * Sets a [[DataItem]] to use for populating dynamic sections of the text.\r\n *\r\n * Check the description for [[Text]] class, for data binding.\r\n *\r\n * @param dataItem Data item\r\n */\n\n\n Label.prototype.setDataItem = function (dataItem) {\n if (this._sourceDataItemEvents) {\n this._sourceDataItemEvents.dispose();\n }\n\n if (dataItem) {\n this._sourceDataItemEvents = new MultiDisposer([dataItem.events.on(\"valuechanged\", this.invalidate, this, false), dataItem.events.on(\"workingvaluechanged\", this.invalidate, this, false), dataItem.events.on(\"calculatedvaluechanged\", this.invalidate, this, false), dataItem.events.on(\"propertychanged\", this.invalidate, this, false)]);\n }\n\n _super.prototype.setDataItem.call(this, dataItem);\n };\n\n Object.defineProperty(Label.prototype, \"availableWidth\", {\n /**\r\n * Returns available horizontal space.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Available width (px)\r\n */\n get: function get() {\n return $type.hasValue(this.maxWidth) ? this.maxWidth : this.pixelWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Label.prototype, \"availableHeight\", {\n /**\r\n * Returns available vertical space.\r\n *\r\n * @return Available height (px)\r\n */\n get: function get() {\n return $type.hasValue(this.maxHeight) ? this.maxHeight : this.pixelHeight;\n },\n enumerable: true,\n configurable: true\n }); // temp, replacing textFormatter method\n\n Label.prototype.getSvgElement = function (text, style, parent) {\n var element = this.paper.add(\"tspan\");\n element.textContent = text;\n\n if (style) {\n if (options.nonce && parent) {\n //element.node.setAttribute(\"nonce\", \"test123\");\n var classid = \"amcharts_element_style_\" + btoa(style).replace(/[^\\w]*/g, \"\");\n element.node.setAttribute(\"class\", classid);\n var defs = document.createElementNS($dom.SVGNS, \"defs\");\n parent.node.appendChild(defs);\n var e = document.createElement(\"style\");\n e.type = \"text/css\";\n e.innerHTML = \".\" + classid + \" { \" + style + \"}\";\n e.setAttribute(\"nonce\", options.nonce);\n defs.appendChild(e);\n } else {\n element.node.setAttribute(\"style\", style);\n }\n }\n\n if (parent) {\n parent.add(element);\n }\n\n return element;\n };\n /**\r\n * Invalidates the whole element, including layout AND all its child\r\n * elements.\r\n */\n\n\n Label.prototype.deepInvalidate = function () {\n _super.prototype.deepInvalidate.call(this);\n\n this.hardInvalidate();\n };\n\n Object.defineProperty(Label.prototype, \"readerTitle\", {\n /**\r\n * @return Title\r\n */\n get: function get() {\n var title = this.getPropertyValue(\"readerTitle\");\n\n if (!title) {\n title = this.populateString($utils.plainText($utils.isNotEmpty(this.html) ? this.html : this.text));\n } else if (this.dataItem) {\n title = this.populateString(title);\n }\n\n return title;\n },\n\n /**\r\n * Screen reader title of the element.\r\n *\r\n * @param value Title\r\n */\n set: function set(value) {\n value = $type.toText(value);\n\n if (this.setPropertyValue(\"readerTitle\", value)) {\n this.applyAccessibility();\n }\n },\n enumerable: true,\n configurable: true\n });\n return Label;\n}(Container);\n\nexport { Label };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Label\"] = Label;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Hide labels added directly to chart, like titles if chart is short.\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXS,\n state: function state(target, stateId) {\n if (target instanceof Label && target.parent && target.parent.isBaseSprite) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * Rounded rectangle module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport * as $math from \"../utils/Math\";\nimport * as $type from \"../utils/Type\";\nimport * as $utils from \"../utils/Utils\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a rectangle with rounded corners.\r\n *\r\n * @see {@link IRoundedRectangleEvents} for a list of available events\r\n * @see {@link IRoundedRectangleAdapters} for a list of available Adapters\r\n */\n\nvar RoundedRectangle =\n/** @class */\nfunction (_super) {\n __extends(RoundedRectangle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function RoundedRectangle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"RoundedRectangle\";\n _this.element = _this.paper.add(\"path\");\n\n _this.cornerRadius(3, 3, 3, 3);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n RoundedRectangle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var w = this.innerWidth;\n var h = this.innerHeight;\n\n if ($type.isNumber(w) && $type.isNumber(h)) {\n var minSide = $math.min(w, h) / 2;\n var cornerRadiusTopLeft = $utils.relativeToValue(this.cornerRadiusTopLeft, minSide);\n var cornerRadiusTopRight = $utils.relativeToValue(this.cornerRadiusTopRight, minSide);\n var cornerRadiusBottomRight = $utils.relativeToValue(this.cornerRadiusBottomRight, minSide);\n var cornerRadiusBottomLeft = $utils.relativeToValue(this.cornerRadiusBottomLeft, minSide);\n var maxcr = $math.min(Math.abs(w / 2), Math.abs(h / 2));\n var crtl = $math.fitToRange(cornerRadiusTopLeft, 0, maxcr);\n var crtr = $math.fitToRange(cornerRadiusTopRight, 0, maxcr);\n var crbr = $math.fitToRange(cornerRadiusBottomRight, 0, maxcr);\n var crbl = $math.fitToRange(cornerRadiusBottomLeft, 0, maxcr);\n var lineT = \"M\" + crtl + \",0 L\" + (w - crtr) + \",0\";\n var lineB = \" L\" + crbl + \",\" + h;\n var lineL = \" L0,\" + crtl;\n var lineR = \" L\" + w + \",\" + (h - crbr);\n var arcTR = \" a\" + crtr + \",\" + crtr + \" 0 0 1 \" + crtr + \",\" + crtr;\n var arcBR = \" a\" + crbr + \",\" + crbr + \" 0 0 1 -\" + crbr + \",\" + crbr;\n var arcBL = \" a\" + crbl + \",\" + crbl + \" 0 0 1 -\" + crbl + \",-\" + crbl;\n var arcTL = \" a\" + crtl + \",\" + crtl + \" 0 0 1 \" + crtl + \",-\" + crtl;\n var path = lineT + arcTR + lineR + arcBR + lineB + arcBL + lineL + arcTL + \" Z\";\n this.path = path;\n }\n };\n /**\r\n * Sets radius for all four corners at ones.\r\n *\r\n * All numbers are in pixels.\r\n *\r\n * @param tl Top-left corner\r\n * @param tr Top-right corner\r\n * @param bl Bottom-left corner\r\n * @param br Bottom-right corner\r\n */\n\n\n RoundedRectangle.prototype.cornerRadius = function (tl, tr, bl, br) {\n this.cornerRadiusTopLeft = tl;\n this.cornerRadiusTopRight = tr;\n this.cornerRadiusBottomLeft = bl;\n this.cornerRadiusBottomRight = br;\n };\n\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusTopLeft\", {\n /**\r\n * @return Radius (px or Percent)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadiusTopLeft\");\n },\n\n /**\r\n * Radius of the top-left corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\n set: function set(value) {\n this.setPercentProperty(\"cornerRadiusTopLeft\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusTopRight\", {\n /**\r\n * @return Radius (px or Percent)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadiusTopRight\");\n },\n\n /**\r\n * Radius of the top-right corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\n set: function set(value) {\n this.setPercentProperty(\"cornerRadiusTopRight\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusBottomRight\", {\n /**\r\n * @return Radius (px or Percent)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadiusBottomRight\");\n },\n\n /**\r\n * Radius of the bottom-right corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\n set: function set(value) {\n this.setPercentProperty(\"cornerRadiusBottomRight\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusBottomLeft\", {\n /**\r\n * @return Radius (px or Percent)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadiusBottomLeft\");\n },\n\n /**\r\n * Radius of the bottom-left corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\n set: function set(value) {\n this.setPercentProperty(\"cornerRadiusBottomLeft\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Measures the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n RoundedRectangle.prototype.measureElement = function () {};\n\n Object.defineProperty(RoundedRectangle.prototype, \"bbox\", {\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n if (this.definedBBox) {\n return this.definedBBox;\n }\n\n if (this.isMeasured) {\n return {\n x: 0,\n y: 0,\n width: this.innerWidth,\n height: this.innerHeight\n };\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n },\n enumerable: true,\n configurable: true\n });\n return RoundedRectangle;\n}(Sprite);\n\nexport { RoundedRectangle };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"RoundedRectangle\"] = RoundedRectangle;","/**\r\n * Functionality for drawing simple buttons.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { Label } from \"./Label\";\nimport { RoundedRectangle } from \"../elements/RoundedRectangle\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Button class is capable of drawing a simple rectangular button with\r\n * optionally rounded corners and an icon in it.\r\n *\r\n * @see {@link IButtonEvents} for a list of available events\r\n * @see {@link IButtonAdapters} for a list of available Adapters\r\n */\n\nvar Button =\n/** @class */\nfunction (_super) {\n __extends(Button, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Button() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Button\";\n _this.tooltipY = 0; // Set defaults\n\n _this.iconPosition = \"left\";\n _this.layout = \"horizontal\";\n _this.contentAlign = \"center\";\n _this.contentValign = \"middle\";\n\n _this.padding(8, 16, 8, 16);\n\n _this.setStateOnChildren = true;\n var interfaceColors = new InterfaceColorSet(); // Create background\n\n var background = _this.background;\n background.fill = interfaceColors.getFor(\"secondaryButton\");\n background.stroke = interfaceColors.getFor(\"secondaryButtonStroke\");\n background.fillOpacity = 1;\n background.strokeOpacity = 1;\n background.cornerRadius(3, 3, 3, 3); // Create the label element\n\n _this.label = new Label();\n _this.label.fill = interfaceColors.getFor(\"secondaryButtonText\");\n ;\n _this.label.shouldClone = false; // Create default states\n\n var hoverState = background.states.create(\"hover\");\n hoverState.properties.fillOpacity = 1;\n hoverState.properties.fill = interfaceColors.getFor(\"secondaryButtonHover\");\n var downState = background.states.create(\"down\");\n downState.transitionDuration = 100;\n downState.properties.fill = interfaceColors.getFor(\"secondaryButtonDown\");\n downState.properties.fillOpacity = 1; // Set up accessibility\n // A button should be always focusable\n\n _this.role = \"button\";\n _this.focusable = true; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Button.prototype, \"icon\", {\n /**\r\n * @return Icon Sprite\r\n */\n get: function get() {\n return this._icon;\n },\n\n /**\r\n * A [[Sprite]] to be used as an icon on button.\r\n *\r\n * @param icon Icon Sprite\r\n */\n set: function set(icon) {\n var currentIcon = this._icon;\n\n if (currentIcon) {\n //this._icon.dispose();\n //this.removeDispose(currentIcon);\n currentIcon.parent = undefined;\n }\n\n if (icon) {\n this._icon = icon;\n icon.parent = this;\n icon.interactionsEnabled = false;\n icon.shouldClone = false;\n this.iconPosition = this.iconPosition;\n\n this._disposers.push(icon);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Button.prototype, \"iconPosition\", {\n /**\r\n * @return Icon position\r\n */\n get: function get() {\n return this.getPropertyValue(\"iconPosition\");\n },\n\n /**\r\n * Icon position: \"left\" or \"right\".\r\n *\r\n * @default \"left\"\r\n * @param position Icon position\r\n */\n set: function set(position) {\n this.setPropertyValue(\"iconPosition\", position);\n\n if (this.icon) {\n if (position == \"left\") {\n this.icon.toBack();\n } else {\n this.icon.toFront();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Button.prototype, \"label\", {\n /**\r\n * @return Label element\r\n */\n get: function get() {\n return this._label;\n },\n\n /**\r\n * [[Label]] element to be used for text.\r\n *\r\n * @param label element\r\n */\n set: function set(label) {\n if (this._label) {\n //this._label.dispose();\n this.removeDispose(this._label);\n }\n\n this._label = label;\n\n if (label) {\n label.parent = this;\n label.interactionsEnabled = false;\n\n this._disposers.push(this._label);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates a background element for the button.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background element\r\n */\n\n Button.prototype.createBackground = function () {\n return new RoundedRectangle();\n };\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\n\n\n Button.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n if (source.label) {\n this.label.copyFrom(source.label);\n }\n\n if (source.icon) {\n this.icon = source.icon.clone();\n }\n };\n\n return Button;\n}(Container);\n\nexport { Button };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Button\"] = Button;","/**\r\n * Functionality for drawing circles.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { percent } from \"../utils/Percent\";\nimport { registry } from \"../Registry\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to create a circle\r\n * @see {@link ICircleEvents} for a list of available events\r\n * @see {@link ICircleAdapters} for a list of available Adapters\r\n */\n\nvar Circle =\n/** @class */\nfunction (_super) {\n __extends(Circle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Circle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Circle\";\n _this.element = _this.paper.add(\"circle\");\n\n _this.setPercentProperty(\"radius\", percent(100));\n\n _this.setPropertyValue(\"horizontalCenter\", \"middle\");\n\n _this.setPropertyValue(\"verticalCenter\", \"middle\");\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the circle.\r\n */\n\n\n Circle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n this.element.attr({\n \"r\": this.pixelRadius\n });\n };\n\n Object.defineProperty(Circle.prototype, \"radius\", {\n /**\r\n * @return Radius\r\n */\n get: function get() {\n return this.getPropertyValue(\"radius\");\n },\n\n /**\r\n * Radius of the circle.\r\n *\r\n * Can be either absolute (pixels) or relative ([Percent]).\r\n *\r\n * @param value Radius\r\n */\n set: function set(value) {\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Circle.prototype, \"pixelRadius\", {\n /**\r\n * Radius of the circle in pixels.\r\n *\r\n * This is a read-only property. To set radius in pixels, use `radius`\r\n * property.\r\n *\r\n * @readonly\r\n * @return Radius (px)\r\n */\n get: function get() {\n return $utils.relativeToValue(this.radius, $math.min(this.innerWidth / 2, this.innerHeight / 2));\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates bounding box.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Circle.prototype.measureElement = function () {\n var pixelRadius = this.pixelRadius;\n this._bbox = {\n x: -pixelRadius,\n y: -pixelRadius,\n width: pixelRadius * 2,\n height: pixelRadius * 2\n };\n };\n\n return Circle;\n}(Sprite);\n\nexport { Circle };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Circle\"] = Circle;","/**\r\n * Ellipse module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Circle } from \"./Circle\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws an ellipse\r\n * @see {@link IEllipseEvents} for a list of available events\r\n * @see {@link IEllipseAdapters} for a list of available Adapters\r\n */\n\nvar Ellipse =\n/** @class */\nfunction (_super) {\n __extends(Ellipse, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Ellipse() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Ellipse\";\n _this.element = _this.paper.add(\"ellipse\");\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the ellipsis.\r\n */\n\n\n Ellipse.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n this.element.attr({\n \"rx\": this.radius\n });\n this.element.attr({\n \"ry\": this.radiusY\n });\n };\n\n Object.defineProperty(Ellipse.prototype, \"radiusY\", {\n /**\r\n * @return Vertical radius\r\n */\n get: function get() {\n return this.innerHeight / 2;\n },\n\n /**\r\n * Vertical radius.\r\n *\r\n * It's a relative size to the `radius`.\r\n *\r\n * E.g. 0.8 will mean the height of the ellipsis will be 80% of it's\r\n * horizontal radius.\r\n *\r\n * @param value Vertical radius\r\n */\n set: function set(value) {\n this.height = value * 2;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Ellipse.prototype, \"radius\", {\n /**\r\n * @return Horizontal radius\r\n */\n get: function get() {\n return this.innerWidth / 2;\n },\n\n /**\r\n * Horizontal radius.\r\n *\r\n * @param value Horizontal radius\r\n */\n set: function set(value) {\n this.width = value * 2;\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n return Ellipse;\n}(Circle);\n\nexport { Ellipse };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Ellipse\"] = Ellipse;","/**\r\n * Functionality for adding images in SVG tree.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport * as $dom from \"../utils/DOM\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to add `<image>` elements to SVG.\r\n *\r\n * @see {@link IImageEvents} for a list of available events\r\n * @see {@link IImageAdapters} for a list of available Adapters\r\n */\n\nvar Image =\n/** @class */\nfunction (_super) {\n __extends(Image, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Image() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Image\";\n _this.element = _this.paper.add(\"image\");\n\n _this.applyTheme();\n\n _this.width = 50;\n _this.height = 50;\n return _this;\n }\n /**\r\n * Draws an `<image>` element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Image.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (this.href) {\n var width = this.innerWidth;\n var height = this.innerHeight;\n\n if ($type.isNumber(this.widthRatio)) {\n width = height * this.widthRatio;\n this.width = width;\n }\n\n if ($type.isNumber(this.heightRatio)) {\n height = width * this.heightRatio;\n this.height = height;\n }\n\n this.element.attr({\n \"width\": width,\n \"height\": height\n });\n this.element.attrNS($dom.XLINK, \"xlink:href\", this.href);\n }\n };\n\n Object.defineProperty(Image.prototype, \"href\", {\n /**\r\n * @return Image URI\r\n */\n get: function get() {\n return this.getPropertyValue(\"href\");\n },\n\n /**\r\n * An image URI.\r\n *\r\n * @param value Image URI\r\n */\n set: function set(value) {\n this.setPropertyValue(\"href\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Image.prototype, \"widthRatio\", {\n /**\r\n * @return Ratio\r\n */\n get: function get() {\n return this.getPropertyValue(\"widthRatio\");\n },\n\n /**\r\n * Sets image `width` relatively to its `height`.\r\n *\r\n * If image's `height = 100` and `widthRatio = 0.5` the actual width will be\r\n * `50`.\r\n *\r\n * @param value Ratio\r\n */\n set: function set(value) {\n this.setPropertyValue(\"widthRatio\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Image.prototype, \"heightRatio\", {\n /**\r\n * @return Ratio\r\n */\n get: function get() {\n return this.getPropertyValue(\"heightRatio\");\n },\n\n /**\r\n * Sets image `height` relatively to its `width`.\r\n *\r\n * If image's `width = 100` and `heightRatio = 0.5` the actual height will be\r\n * `50`.\r\n *\r\n * @param value Ratio\r\n */\n set: function set(value) {\n this.setPropertyValue(\"heightRatio\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Image.prototype, \"bbox\", {\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n return {\n x: 0,\n y: 0,\n width: this.pixelWidth,\n height: this.pixelHeight\n };\n },\n enumerable: true,\n configurable: true\n });\n return Image;\n}(Sprite);\n\nexport { Image };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Image\"] = Image;","/**\r\n * Line drawing functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { color } from \"../utils/Color\";\nimport { LinearGradient } from \"../rendering/fills/LinearGradient\";\nimport { registry } from \"../Registry\";\nimport * as $type from \"../utils/Type\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a line.\r\n *\r\n * @see {@link ILineEvents} for a list of available events\r\n * @see {@link ILineAdapters} for a list of available Adapters\r\n */\n\nvar Line =\n/** @class */\nfunction (_super) {\n __extends(Line, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Line() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Line\";\n _this.element = _this.paper.add(\"line\");\n _this.fill = color(); //\"none\";\n\n _this.x1 = 0;\n _this.y1 = 0;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the line.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Line.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (this.x1 == this.x2 || this.y1 == this.y2) {\n this.pixelPerfect = true;\n } else {\n this.pixelPerfect = false;\n }\n\n this.x1 = this.x1;\n this.x2 = this.x2;\n this.y1 = this.y1;\n this.y2 = this.y2;\n };\n\n Object.defineProperty(Line.prototype, \"x1\", {\n /**\r\n * @return X\r\n */\n get: function get() {\n return this.getPropertyValue(\"x1\");\n },\n\n /**\r\n * X coordinate of first end.\r\n *\r\n * @param value X\r\n */\n set: function set(value) {\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n var delta = 0;\n\n if (this.pixelPerfect && this.stroke instanceof LinearGradient) {\n delta = 0.00001;\n }\n\n this.setPropertyValue(\"x1\", value, true);\n this.element.attr({\n \"x1\": value + delta\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"x2\", {\n /**\r\n * @return X\r\n */\n get: function get() {\n var value = this.getPropertyValue(\"x2\");\n\n if (!$type.isNumber(value)) {\n value = this.pixelWidth;\n }\n\n return value;\n },\n\n /**\r\n * X coordinate of second end.\r\n *\r\n * @param value X\r\n */\n set: function set(value) {\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n this.setPropertyValue(\"x2\", value, true);\n this.element.attr({\n \"x2\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"y1\", {\n /**\r\n * @return Y\r\n */\n get: function get() {\n return this.getPropertyValue(\"y1\");\n },\n\n /**\r\n * Y coordinate of first end.\r\n *\r\n * @param value Y\r\n */\n set: function set(value) {\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n var delta = 0;\n\n if (this.pixelPerfect && this.stroke instanceof LinearGradient) {\n delta = 0.00001;\n }\n\n this.setPropertyValue(\"y1\", value, true);\n this.element.attr({\n \"y1\": value + delta\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"y2\", {\n /**\r\n * @return Y\r\n */\n get: function get() {\n var value = this.getPropertyValue(\"y2\");\n\n if (!$type.isNumber(value)) {\n value = this.pixelHeight;\n }\n\n return value;\n },\n\n /**\r\n * Y coordinate of second end.\r\n *\r\n * @param value Y\r\n */\n set: function set(value) {\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n this.setPropertyValue(\"y2\", value, true);\n this.element.attr({\n \"y2\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n Line.prototype.positionToPoint = function (position) {\n var point1 = {\n x: this.x1,\n y: this.y1\n };\n var point2 = {\n x: this.x2,\n y: this.y2\n };\n var point = $math.getMidPoint(point1, point2, position);\n var angle = $math.getAngle(point1, point2);\n return {\n x: point.x,\n y: point.y,\n angle: angle\n };\n };\n\n return Line;\n}(Sprite);\n\nexport { Line };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Line\"] = Line;","/**\r\n * Pointed shape module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a shape with a pointer.\r\n *\r\n * @see {@link IPointedShapeEvents} for a list of available events\r\n * @see {@link IPointedShapeAdapters} for a list of available Adapters\r\n */\n\nvar PointedShape =\n/** @class */\nfunction (_super) {\n __extends(PointedShape, _super);\n /**\r\n * Constructor\r\n */\n\n\n function PointedShape() {\n var _this = _super.call(this) || this;\n\n _this.className = \"PointedShape\";\n _this.pointerBaseWidth = 15;\n _this.pointerLength = 10;\n _this.pointerY = 0;\n _this.pointerX = 0;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n PointedShape.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (!$type.isNumber(this.pointerX)) {\n this.pointerX = this.pixelWidth / 2;\n }\n\n if (!$type.isNumber(this.pointerY)) {\n this.pointerY = this.pixelHeight + 10;\n }\n };\n\n Object.defineProperty(PointedShape.prototype, \"pointerBaseWidth\", {\n /**\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"pointerBaseWidth\");\n },\n\n /**\r\n * A width of the pinter's (stem's) thick end (base) in pixels.\r\n *\r\n * @default 15\r\n * @param value Width (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"pointerBaseWidth\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PointedShape.prototype, \"pointerLength\", {\n /**\r\n * @return Length (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"pointerLength\");\n },\n\n /**\r\n * A length of the pinter (stem) in pixels.\r\n *\r\n * @default 10\r\n * @param value Length (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"pointerLength\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PointedShape.prototype, \"pointerX\", {\n /**\r\n * @return X\r\n */\n get: function get() {\n return this.getPropertyValue(\"pointerX\");\n },\n\n /**\r\n * X coordinate the shape is pointing to.\r\n *\r\n * @param value X\r\n */\n set: function set(value) {\n this.setPropertyValue(\"pointerX\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PointedShape.prototype, \"pointerY\", {\n /**\r\n * @return Y\r\n */\n get: function get() {\n return this.getPropertyValue(\"pointerY\");\n },\n\n /**\r\n * Y coordinate the shape is pointing to.\r\n *\r\n * @param value Y\r\n */\n set: function set(value) {\n this.setPropertyValue(\"pointerY\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return PointedShape;\n}(Sprite);\n\nexport { PointedShape };","/**\r\n * Pointed rectangle module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { PointedShape } from \"./PointedShape\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a rectangle with a pointer.\r\n *\r\n * @see {@link IPointedRectangleEvents} for a list of available events\r\n * @see {@link IPointedRectangleAdapters} for a list of available Adapters\r\n */\n\nvar PointedRectangle =\n/** @class */\nfunction (_super) {\n __extends(PointedRectangle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function PointedRectangle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"PointedRectangle\";\n _this.element = _this.paper.add(\"path\");\n _this.cornerRadius = 6;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n PointedRectangle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var cr = this.cornerRadius;\n var w = this.innerWidth;\n var h = this.innerHeight;\n\n if (w > 0 && h > 0) {\n var x = this.pointerX;\n var y = this.pointerY;\n var bwh = this.pointerBaseWidth / 2;\n var maxcr = $math.min(w / 2, h / 2);\n var crtl = $math.fitToRange(cr, 0, maxcr);\n var crtr = $math.fitToRange(cr, 0, maxcr);\n var crbr = $math.fitToRange(cr, 0, maxcr);\n var crbl = $math.fitToRange(cr, 0, maxcr); // corner coordinates\n // top left\n\n var xtl = 0;\n var ytl = 0; // top right\n\n var xtr = w;\n var ytr = 0; // bottom right\n\n var xbr = w;\n var ybr = h; // bottom left\n\n var xbl = 0;\n var ybl = h;\n var lineT = void 0;\n var lineR = void 0;\n var lineB = void 0;\n var lineL = void 0; // find stem base side: http://$math.stackexchange.com/questions/274712/calculate-on-which-side-of-straign-line-is-dot-located\n // d=(x−x1)(y2−y1)−(y−y1)(x2−x1)\n\n var d1 = (x - xtl) * (ybr - ytl) - (y - ytl) * (xbr - xtl);\n var d2 = (x - xbl) * (ytr - ybl) - (y - ybl) * (xtr - xbl); // top\n\n if (d1 > 0 && d2 > 0) {\n var stemX = $math.fitToRange(x, crtl + bwh, w - bwh - crtr);\n y = $math.fitToRange(y, -Infinity, 0);\n lineT = \"M\" + crtl + \",0 L\" + (stemX - bwh) + \",0 L\" + x + \",\" + y + \" L\" + (stemX + bwh) + \",0 L\" + (w - crtr) + \",0\";\n } else {\n lineT = \"M\" + crtl + \",0 L\" + (w - crtr) + \",0\";\n } // bottom\n\n\n if (d1 < 0 && d2 < 0) {\n var stemX = $math.fitToRange(x, crbl + bwh, w - bwh - crbr);\n y = $math.fitToRange(y, h, Infinity);\n lineB = \" L\" + (w - crbr) + \",\" + h + \" L\" + (stemX + bwh) + \",\" + h + \" L\" + x + \",\" + y + \" L\" + (stemX - bwh) + \",\" + h + \" L\" + crbl + \",\" + h;\n } else {\n lineB = \" L\" + crbl + \",\" + h;\n } // left\n\n\n if (d1 < 0 && d2 > 0) {\n var stemY = $math.fitToRange(y, crtl + bwh, h - crbl - bwh);\n x = $math.fitToRange(x, -Infinity, 0);\n lineL = \" L0,\" + (h - crbl) + \" L0,\" + (stemY + bwh) + \" L\" + x + \",\" + y + \" L0,\" + (stemY - bwh) + \" L0,\" + crtl;\n } else {\n lineL = \" L0,\" + crtl;\n } // right\n\n\n if (d1 > 0 && d2 < 0) {\n var stemY = $math.fitToRange(y, crtr + bwh, h - bwh - crbr);\n x = $math.fitToRange(x, w, Infinity);\n lineR = \" L\" + w + \",\" + crtr + \" L\" + w + \",\" + (stemY - bwh) + \" L\" + x + \",\" + y + \" L\" + w + \",\" + (stemY + bwh) + \" L\" + w + \",\" + (h - crbr);\n } else {\n lineR = \" L\" + w + \",\" + (h - crbr);\n }\n\n var arcTR = \" a\" + crtr + \",\" + crtr + \" 0 0 1 \" + crtr + \",\" + crtr;\n var arcBR = \" a\" + crbr + \",\" + crbr + \" 0 0 1 -\" + crbr + \",\" + crbr;\n var arcBL = \" a\" + crbl + \",\" + crbl + \" 0 0 1 -\" + crbl + \",-\" + crbl;\n var arcTL = \" a\" + crtl + \",\" + crtl + \" 0 0 1 \" + crtl + \",-\" + crtl;\n this.path = lineT + arcTR + lineR + arcBR + lineB + arcBL + lineL + arcTL;\n }\n };\n\n Object.defineProperty(PointedRectangle.prototype, \"cornerRadius\", {\n /**\r\n * @return Corner radius (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadius\");\n },\n\n /**\r\n * Radius of rectangle's border in pixels.\r\n *\r\n * @default 0\r\n * @param value Corner radius (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"cornerRadius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return PointedRectangle;\n}(PointedShape);\n\nexport { PointedRectangle };","/**\r\n * A collection of functions that deals with path calculations.\r\n */\nimport * as $math from \"../utils/Math\";\nimport * as $type from \"../utils/Type\";\nimport { getGhostPaper } from \"../rendering/Paper\";\nimport { options } from \"../Options\";\n/**\r\n * ============================================================================\r\n * PATH FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Returns an SVG path from a number of points.\r\n *\r\n * @ignore Exclude from docs\r\n * @param points An array of line elbow points\r\n * @return SVG path\r\n */\n\nexport function polyline(points) {\n var path = lineTo(points[0]);\n var prevPoint = {\n x: 0,\n y: 0\n };\n var minStep = options.minPolylineStep;\n\n if (!$type.isNumber(minStep)) {\n minStep = 0.5;\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if ($math.getDistance(point, prevPoint) > minStep) {\n path += lineTo(point);\n prevPoint = point;\n }\n }\n\n return path;\n}\n/**\r\n * Returns a starting point of an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Starting point\r\n * @return SVG path\r\n */\n\nexport function moveTo(point) {\n return \" M\" + $math.round(point.x, 4) + \",\" + $math.round(point.y, 4) + \" \";\n}\n/**\r\n * Returns a line part of SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point SVG path\r\n * @return SVG path\r\n */\n\nexport function lineTo(point) {\n return \" L\" + $math.round(point.x, 4) + \",\" + $math.round(point.y, 4) + \" \";\n}\n/**\r\n * Returns a quadratic curve part of an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point End point of the curve\r\n * @param controlPoint Control point\r\n * @return SVG path\r\n */\n\nexport function quadraticCurveTo(point, controlPoint) {\n return \" Q\" + $math.round(controlPoint.x, 4) + \",\" + $math.round(controlPoint.y, 4) + \" \" + $math.round(point.x, 4) + \",\" + $math.round(point.y, 4);\n}\n/**\r\n * Returns a cubic curve part of an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point End point of the curve\r\n * @param controlPointA Control point A\r\n * @param controlPointB Control point B\r\n * @return SVG path\r\n */\n\nexport function cubicCurveTo(point, controlPointA, controlPointB) {\n return \" C\" + $math.round(controlPointA.x, 4) + \",\" + $math.round(controlPointA.y, 4) + \" \" + $math.round(controlPointB.x, 4) + \",\" + $math.round(controlPointB.y, 4) + \" \" + $math.round(point.x, 4) + \",\" + $math.round(point.y, 4);\n}\n/**\r\n * Returns a terminator for an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @return SVG path\r\n */\n\nexport function closePath() {\n return \" Z\";\n}\n/**\r\n * Returns an arc part of an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Better parameter descriptions\r\n * @param startAngle Starting angle\r\n * @param arc Arc\r\n * @param radius Radius\r\n * @param radiusY Vertical radius\r\n * @return SVG path\r\n */\n\nexport function arcTo(startAngle, arc, radius, radiusY) {\n if (arc == 0) {\n return \"\";\n }\n\n if (!$type.isNumber(radiusY)) {\n radiusY = radius;\n }\n\n var path = \"\";\n var c = \",\";\n var segments = Math.ceil(Math.abs(arc) / 180);\n var l = 1;\n\n if (arc < 0) {\n l = 0;\n } // previous, as we use a not A\n\n\n var pax = 0;\n var pay = 0; // center\n\n var cx = -$math.cos(startAngle) * radius;\n var cy = -$math.sin(startAngle) * radiusY; // foir very short angles and big radius, solves artefacts\n\n if (arc < 0.5 && radius > 3000) {\n var endAngle = startAngle + arc;\n var ax = $math.round($math.cos(endAngle) * radius, 4);\n var ay = $math.round($math.sin(endAngle) * radiusY, 4);\n return lineTo({\n x: ax,\n y: ay\n });\n }\n\n for (var i = 0; i < segments; i++) {\n var endAngle = startAngle + arc / segments * (i + 1);\n var ax = $math.round($math.cos(endAngle) * radius + cx - pax, 4);\n var ay = $math.round($math.sin(endAngle) * radiusY + cy - pay, 4);\n path += \" a\" + radius + c + radiusY + c + 0 + c + 0 + c + l + c + ax + c + ay;\n pax = ax;\n pay = ay;\n }\n\n return path;\n}\n/**\r\n * Creates an arc path.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startAngle [description]\r\n * @param arc [description]\r\n * @param radius [description]\r\n * @param innerRadius [description]\r\n * @param radiusY [description]\r\n * @param cornerRadius [description]\r\n * @param innerCornerRadius [description]\r\n * @return SVG path\r\n */\n\nexport function arc(startAngle, arc, radius, innerRadius, radiusY, cornerRadius, innerCornerRadius) {\n if (arc == 0) {\n return \"\";\n }\n\n if (!$type.isNumber(innerRadius)) {\n innerRadius = 0;\n }\n\n if (radius == 0 && innerRadius <= 0) {\n return \"\";\n }\n\n if (radius < innerRadius) {\n var temp = radius;\n radius = innerRadius;\n innerRadius = temp;\n\n if ($type.isNumber(radiusY)) {\n radiusY = radiusY / innerRadius * radius;\n }\n }\n\n arc = $math.min(arc, 360);\n\n if (arc == 360) {\n cornerRadius = 0;\n innerCornerRadius = 0;\n }\n\n var endAngle = startAngle + arc;\n var crSin = $math.sin($math.min(arc, 45) / 2);\n radiusY = $type.isNumber(radiusY) ? radiusY : radius;\n cornerRadius = cornerRadius || 0;\n innerCornerRadius = $type.isNumber(innerCornerRadius) ? innerCornerRadius : cornerRadius;\n var innerRadiusY = radiusY / radius * innerRadius;\n var cornerRadiusY = radiusY / radius * cornerRadius;\n var innerCornerRadiusY = radiusY / radius * innerCornerRadius;\n cornerRadius = $math.fitToRange(cornerRadius, 0, (radius - innerRadius) / 2);\n cornerRadiusY = $math.fitToRange(cornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\n innerCornerRadius = $math.fitToRange(innerCornerRadius, 0, (radius - innerRadius) / 2);\n innerCornerRadiusY = $math.fitToRange(innerCornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\n cornerRadius = $math.round($math.fitToRange(cornerRadius, 0, radius * crSin), 4);\n cornerRadiusY = $math.round($math.fitToRange(cornerRadiusY, 0, radiusY * crSin), 4);\n innerCornerRadius = $math.round($math.fitToRange(innerCornerRadius, 0, innerRadius * crSin), 4);\n innerCornerRadiusY = $math.round($math.fitToRange(innerCornerRadiusY, 0, innerRadiusY * crSin), 4);\n var crAngle = Math.asin(cornerRadius / radius / 2) * $math.DEGREES * 2;\n var crAngleY = Math.asin(cornerRadiusY / radiusY / 2) * $math.DEGREES * 2;\n\n if (innerRadius < innerCornerRadius) {\n innerRadius = innerCornerRadius;\n }\n\n if (innerRadiusY < innerCornerRadiusY) {\n innerRadiusY = innerCornerRadiusY;\n }\n\n var crInnerAngle = Math.asin(innerCornerRadius / innerRadius / 2) * $math.DEGREES * 2;\n var crInnerAngleY = Math.asin(innerCornerRadiusY / innerRadiusY / 2) * $math.DEGREES * 2;\n\n if (!$type.isNumber(crInnerAngle)) {\n crInnerAngle = 0;\n }\n\n if (!$type.isNumber(crInnerAngleY)) {\n crInnerAngleY = 0;\n }\n\n var middleAngle = startAngle + arc / 2;\n var mPoint = {\n x: $math.round($math.cos(middleAngle) * innerRadius, 4),\n y: $math.sin(middleAngle) * innerRadiusY\n };\n var a0 = {\n x: $math.cos(startAngle) * (innerRadius + innerCornerRadius),\n y: $math.sin(startAngle) * (innerRadiusY + innerCornerRadiusY)\n };\n var b0 = {\n x: $math.cos(startAngle) * (radius - cornerRadius),\n y: $math.sin(startAngle) * (radiusY - cornerRadiusY)\n };\n var c0 = {\n x: $math.cos(endAngle) * (radius - cornerRadius),\n y: $math.sin(endAngle) * (radiusY - cornerRadiusY)\n };\n var d0 = {\n x: $math.cos(endAngle) * (innerRadius + innerCornerRadius),\n y: $math.sin(endAngle) * (innerRadiusY + innerCornerRadiusY)\n };\n var b1 = {\n x: $math.cos(startAngle + crAngle) * radius,\n y: $math.sin(startAngle + crAngleY) * radiusY\n };\n var d1 = {\n x: $math.cos(endAngle - crInnerAngle) * innerRadius,\n y: $math.sin(endAngle - crInnerAngleY) * innerRadiusY\n }; // some magic math\n\n innerCornerRadius += innerCornerRadius * $math.sin(crInnerAngle / 2);\n innerCornerRadiusY += innerCornerRadiusY * $math.sin(crInnerAngleY / 2);\n\n if (crInnerAngle > (endAngle - startAngle) / 2) {\n d1 = mPoint;\n }\n\n var path = \"\"; // start from b if this is full circle\n\n if (arc == 360) {\n path = moveTo(b0);\n } // otherwise start from a\n else {\n path = moveTo(a0);\n path += lineTo(b0);\n path += arcToPoint(b1, cornerRadius, cornerRadiusY, true);\n } // draw arc\n\n\n path += arcTo(startAngle + crAngle, arc - 2 * crAngle, radius, radiusY); // draw inner arc\n\n if ($type.isNumber(innerRadius) && innerRadius != 0) {\n // move to B if this is full circle\n if (arc == 360 && cornerRadius == 0) {\n path += moveTo(d0);\n } // draw line otherwise\n else {\n path += arcToPoint(c0, cornerRadius, cornerRadiusY, true);\n path += lineTo(d0);\n path += arcToPoint(d1, innerCornerRadius, innerCornerRadiusY, true);\n }\n\n path += arcTo(endAngle - crInnerAngle, -(arc - 2 * crInnerAngle), innerRadius, innerRadiusY);\n\n if (arc < 360 || cornerRadius > 0) {\n path += arcToPoint(a0, innerCornerRadius, innerCornerRadiusY, true);\n }\n\n path += lineTo(a0);\n } else {\n path += arcToPoint(c0, cornerRadius, cornerRadiusY, true);\n\n if (arc < 360) {\n path += lineTo(a0);\n }\n }\n\n return path;\n}\n/**\r\n * Creates a path for an arc to specific coordinate.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param point Reference point\r\n * @param radius Radius\r\n * @param radiusY Vertical radius (for skewed arcs)\r\n * @param sweepFlag [description]\r\n * @param largeArcFlag [description]\r\n * @param xAxisRotation [description]\r\n * @return Arc path\r\n */\n\nexport function arcToPoint(point, radius, radiusY, sweepFlag, largeArcFlag, xAxisRotation) {\n if (radius == 0) {\n return \"\";\n }\n\n xAxisRotation = xAxisRotation || 0;\n largeArcFlag = Boolean(largeArcFlag);\n sweepFlag = Boolean(sweepFlag);\n var c = \",\";\n var sweepFlagValue = +sweepFlag; // converts to 1 or 0\n\n var largeArcFlagValue = +largeArcFlag; // converts to 1 or 0\n\n return \" A\" + radius + c + radiusY + c + xAxisRotation + c + largeArcFlagValue + c + sweepFlagValue + c + $math.round(point.x, 4) + c + $math.round(point.y, 4);\n}\n/**\r\n * Creates a new rectangle.\r\n *\r\n * @ignore Exclude from docs\r\n * @param width Width (px)\r\n * @param height Height (px)\r\n * @param x X position\r\n * @param y Y position\r\n * @return Rectangle\r\n */\n\nexport function rectangle(width, height, x, y) {\n if (!$type.isNumber(x)) {\n x = 0;\n }\n\n if (!$type.isNumber(y)) {\n y = 0;\n }\n\n return moveTo({\n x: x,\n y: y\n }) + lineTo({\n x: x + width,\n y: y\n }) + lineTo({\n x: x + width,\n y: y + height\n }) + lineTo({\n x: x,\n y: y + height\n }) + closePath();\n}\n/**\r\n * Converts a rectangle to an SVG path.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rect Rectangle\r\n * @param ccw Counter-clockwise?\r\n * @return SVG path\r\n */\n\nexport function rectToPath(rect, ccw) {\n var c = \",\";\n var L = \" L\";\n\n if (ccw) {\n return \"M\" + rect.x + c + rect.y + L + rect.x + c + (rect.y + rect.height) + L + (rect.x + rect.width) + c + (rect.y + rect.height) + L + (rect.x + rect.width) + c + rect.y + L + rect.x + c + rect.y;\n } else {\n return \"M\" + rect.x + c + rect.y + L + (rect.x + rect.width) + c + rect.y + L + (rect.x + rect.width) + c + (rect.y + rect.height) + L + rect.x + c + (rect.y + rect.height) + L + rect.x + c + rect.y;\n }\n}\n/**\r\n * Converts SVG path to array of points.\r\n *\r\n * Note, this is experimental feature based on method which is deprecated\r\n * on some browsers and some browsers do not support it at all.\r\n *\r\n * You can save the output of this function, but not rely on it completely.\r\n */\n\nexport function pathToPoints(path, pointCount) {\n var paper = getGhostPaper();\n var svgPath = paper.add(\"path\").node;\n svgPath.setAttribute(\"d\", path);\n\n if (svgPath.getPointAtLength && svgPath.getTotalLength) {\n var length_1 = svgPath.getTotalLength();\n var toPoints = [];\n\n for (var i = 0; i < pointCount; i++) {\n var point = svgPath.getPointAtLength(i / pointCount * length_1);\n toPoints.push({\n x: point.x,\n y: point.y\n });\n }\n\n return toPoints;\n }\n\n svgPath.remove();\n}\nexport function spiralPoints(cx, cy, radius, radiusY, innerRadius, step, radiusStep, startAngle, endAngle) {\n if (!$type.isNumber(startAngle)) {\n startAngle = 0;\n }\n\n if (!$type.isNumber(startAngle)) {\n endAngle = startAngle;\n }\n\n var r = innerRadius + 0.01;\n var angle = startAngle * $math.RADIANS;\n var points = [];\n\n while (r < radius + radiusStep) {\n var stepSize = step;\n\n if (stepSize / 2 > r) {\n stepSize = 2 * r;\n }\n\n angle += 2 * Math.asin(stepSize / 2 / r);\n\n if (angle * $math.DEGREES > endAngle + (radius - innerRadius) / radiusStep * 360) {\n break;\n }\n\n var degrees = angle * $math.DEGREES;\n var point = {\n x: cx + r * Math.cos(angle),\n y: cy + r * radiusY / radius * Math.sin(angle)\n };\n points.push(point);\n r = innerRadius + degrees / 360 * radiusStep;\n }\n\n points.shift();\n return points;\n}\nexport function pointsToPath(points) {\n if (!points || points.length == 0) {\n return \"\";\n }\n\n var path = moveTo(points[0]);\n\n if (points && points.length > 0) {\n for (var i = 1; i < points.length; i++) {\n path += lineTo(points[i]);\n }\n }\n\n return path;\n}","/**\r\n * Polyline module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { color } from \"../utils/Color\";\nimport { registry } from \"../Registry\";\nimport * as $path from \"../rendering/Path\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a polyline.\r\n *\r\n * @see {@link IPolylineEvents} for a list of available events\r\n * @see {@link IPolylineAdapters} for a list of available Adapters\r\n */\n\nvar Polyline =\n/** @class */\nfunction (_super) {\n __extends(Polyline, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Polyline() {\n var _this = _super.call(this) || this;\n /**\r\n * [_distance description]\r\n *\r\n * @todo Description\r\n */\n\n\n _this._distance = 0;\n _this.className = \"Polyline\";\n _this.element = _this.paper.add(\"path\");\n _this.shapeRendering = \"auto\";\n _this.fill = color();\n _this.strokeOpacity = 1;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Polyline.prototype.makePath = function () {\n this._distance = 0;\n var segments = this.segments;\n\n if (segments && segments.length > 0) {\n var path = \"\";\n\n for (var i = 0, len = segments.length; i < len; i++) {\n var points = segments[i];\n\n if (points.length > 0) {\n path += $path.moveTo(points[0]);\n\n for (var p = 1; p < points.length; p++) {\n var point = points[p];\n path += $path.lineTo(point);\n this._distance += $math.getDistance(points[p - 1], point);\n }\n }\n }\n\n this.path = path;\n }\n\n this._realSegments = segments;\n };\n\n Object.defineProperty(Polyline.prototype, \"segments\", {\n /**\r\n * @return Segments\r\n */\n get: function get() {\n return this.getPropertyValue(\"segments\");\n },\n\n /**\r\n * A list of segment coordinates for the multi-part line.\r\n *\r\n * @todo Example\r\n * @param segments Segments\r\n */\n set: function set(segments) {\n this.setPropertyValue(\"segments\", segments);\n this.makePath();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Polyline.prototype, \"distance\", {\n /**\r\n * [distance description]\r\n *\r\n * @todo Description\r\n * @return [description]\r\n */\n get: function get() {\n return this._distance;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n Polyline.prototype.positionToPoint = function (position) {\n var deltaAngle = 0;\n\n if (position < 0) {\n position = Math.abs(position);\n deltaAngle = 180;\n }\n\n var segments = this._realSegments;\n\n if (segments) {\n var totalDistance = this.distance;\n var currentDistance = 0;\n var distanceAB = void 0;\n var positionA = 0;\n var positionB = 0;\n var pointA = void 0;\n var pointB = void 0;\n\n for (var s = 0; s < segments.length; s++) {\n var points = segments[s];\n\n if (points.length > 1) {\n for (var p = 1; p < points.length; p++) {\n pointA = points[p - 1];\n pointB = points[p];\n positionA = currentDistance / totalDistance;\n distanceAB = $math.getDistance(pointA, pointB);\n currentDistance += distanceAB;\n positionB = currentDistance / totalDistance;\n\n if (positionA <= position && positionB > position) {\n s = segments.length;\n break;\n }\n }\n } else if (points.length == 1) {\n pointA = points[0];\n pointB = points[0];\n positionA = 0;\n positionB = 1;\n }\n }\n\n if (pointA && pointB) {\n var positionAB = (position - positionA) / (positionB - positionA);\n var midPoint = $math.getMidPoint(pointA, pointB, positionAB);\n return {\n x: midPoint.x,\n y: midPoint.y,\n angle: deltaAngle + $math.getAngle(pointA, pointB)\n };\n }\n }\n\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n };\n\n Object.defineProperty(Polyline.prototype, \"realSegments\", {\n /**\r\n * @ignore\r\n */\n get: function get() {\n return this._realSegments;\n },\n enumerable: true,\n configurable: true\n });\n return Polyline;\n}(Sprite);\n\nexport { Polyline };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Polyline\"] = Polyline;","/**\r\n * Module for a multi-part arched line.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Polyline } from \"./Polyline\";\nimport { registry } from \"../Registry\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $path from \"../../core/rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a multi-part arched line.\r\n *\r\n * @see {@link IPolyarcEvents} for a list of available events\r\n * @see {@link IPolyarcAdapters} for a list of available Adapters\r\n */\n\nvar Polyarc =\n/** @class */\nfunction (_super) {\n __extends(Polyarc, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Polyarc() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Polyarc\";\n _this.controlPointDistance = 0.5;\n _this.controlPointPosition = 0.5;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Polyarc.prototype.makePath = function () {\n this._distance = 0;\n var segments = this.segments;\n\n if (segments && segments.length > 0) {\n var path = \"\";\n this._realSegments = [];\n\n for (var i = 0, len = segments.length; i < len; i++) {\n var points = segments[i];\n var realPoints = [];\n\n this._realSegments.push(realPoints);\n\n if (points.length > 0) {\n path += $path.moveTo(points[0]);\n\n for (var p = 1; p < points.length; p++) {\n var pointA = points[p - 1];\n var pointB = points[p];\n var distanceAB = $math.getDistance(pointB, pointA);\n var cpDistance = distanceAB * this.controlPointDistance;\n var controlPointPosition = this.controlPointPosition;\n var angle = -$math.getAngle(pointA, pointB);\n var cpx = pointA.x + (pointB.x - pointA.x) * controlPointPosition * 0.5 - cpDistance * $math.sin(angle);\n var cpy = pointA.y + (pointB.y - pointA.y) * controlPointPosition * 0.5 - cpDistance * $math.cos(angle);\n var controlPoint1 = {\n x: cpx,\n y: cpy\n };\n var cpx2 = pointA.x + (pointB.x - pointA.x) * controlPointPosition * 1.5 - cpDistance * $math.sin(angle);\n var cpy2 = pointA.y + (pointB.y - pointA.y) * controlPointPosition * 1.5 - cpDistance * $math.cos(angle);\n var controlPoint2 = {\n x: cpx2,\n y: cpy2\n };\n path += $path.cubicCurveTo(pointB, controlPoint1, controlPoint2); // we add a lot of points in order to get the position/angle later\n\n var stepCount = Math.ceil(distanceAB);\n var prevPoint = pointA;\n\n if (stepCount > 0) {\n for (var i_1 = 0; i_1 <= stepCount; i_1++) {\n var point = $math.getPointOnCubicCurve(pointA, pointB, controlPoint1, controlPoint2, i_1 / stepCount);\n realPoints.push(point);\n this._distance += $math.getDistance(prevPoint, point);\n prevPoint = point;\n }\n } else {\n realPoints.push(pointA);\n }\n }\n }\n }\n\n this.path = path;\n }\n };\n\n Object.defineProperty(Polyarc.prototype, \"controlPointPosition\", {\n /**\r\n * @return Position (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"controlPointPosition\");\n },\n\n /**\r\n * Relative position along the line the control point is. (0-1)\r\n *\r\n * @default 0.5\r\n * @param value Position (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"controlPointPosition\", value);\n this.makePath();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Polyarc.prototype, \"controlPointDistance\", {\n /**\r\n * @return Distance (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"controlPointDistance\");\n },\n\n /**\r\n * Relative distance of the control point. (0-1)\r\n *\r\n * Default is half the length of the line. (0.5)\r\n *\r\n * @default 0.5\r\n * @param value Distance (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"controlPointDistance\", value);\n this.makePath();\n },\n enumerable: true,\n configurable: true\n });\n return Polyarc;\n}(Polyline);\n\nexport { Polyarc };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Polyarc\"] = Polyarc;","/**\r\n * Morpher module contains functionality that allows morphing one polygon to\r\n * another.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { Animation, AnimationDisposer } from \"../utils/Animation\";\nimport * as $math from \"../utils/Math\";\nimport * as $ease from \"../utils/Ease\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * Morpher can be used to morph one polygon to some other polygon.\r\n */\n\nvar Morpher =\n/** @class */\nfunction (_super) {\n __extends(Morpher, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param morphable An object to morph\r\n */\n\n\n function Morpher(morphable) {\n var _this = _super.call(this) || this;\n /**\r\n * A storage for measurements.\r\n */\n\n\n _this._bboxes = [];\n /**\r\n * Duration of the morphing animation in milliseconds.\r\n */\n\n _this.morphDuration = 800;\n /**\r\n * An easing function to use for morphing animation.\r\n *\r\n * @see {@link Ease}\r\n */\n\n _this.morphEasing = $ease.cubicOut;\n /**\r\n * If set to `true`, all separate parts of the multi-part polygon will\r\n * morph into a single circle or polygon when using built-in methods\r\n * `morphToCircle()` or `morphToPolygon()`.\r\n *\r\n * Otherwise each separate part of polygon will morph to individual target\r\n * circle or polgyon.\r\n */\n\n _this.morphToSingle = true;\n /**\r\n * A ratio to scale morphed object in relation to the source object.\r\n */\n\n _this.scaleRatio = 1;\n _this.className = \"Morpher\";\n _this.morphable = morphable;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Morphs a polygon to another polygon.\r\n *\r\n * @param toPoints Corner points of the target shape\r\n * @param duration Duration in milliseconds\r\n * @param easing Easing function\r\n * @return Animation\r\n */\n\n\n Morpher.prototype.morphToPolygon = function (toPoints, duration, easing) {\n var points = this.morphable.currentPoints;\n\n if (points && toPoints) {\n this.sortPoints(points);\n this.sortPoints(toPoints);\n this._morphFromPointsReal = [];\n this._morphToPointsReal = [];\n\n if (!$type.hasValue(duration)) {\n duration = this.morphDuration;\n }\n\n if (!$type.hasValue(easing)) {\n easing = this.morphEasing;\n }\n\n this._morphFromPointsReal = this.normalizePoints(toPoints, points);\n this._morphToPointsReal = this.normalizePoints(points, toPoints);\n this.morphable.currentPoints = this._morphFromPointsReal;\n var animation = new Animation(this, {\n property: \"morphProgress\",\n from: 0,\n to: 1\n }, duration, easing);\n\n this._disposers.push(animation);\n\n animation.start();\n return animation;\n }\n };\n /**\r\n * [normalizePoints description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointsA Point A\r\n * @param pointsB Point B\r\n * @return Normalized points\r\n */\n\n\n Morpher.prototype.normalizePoints = function (pointsA, pointsB) {\n for (var i = 0, len = pointsA.length; i < len; i++) {\n var surfaceA = pointsA[i][0];\n var holeA = pointsA[i][1];\n var bboxA = $type.getValue($math.getBBox(surfaceA));\n var middleX = bboxA.x + bboxA.width;\n var middleY = bboxA.y + bboxA.height; // check if we have the same in PointsB\n\n if (!pointsB[i]) {\n pointsB[i] = [];\n } // check if we have surface in pointsB\n\n\n if (surfaceA && !pointsB[i][0]) {\n pointsB[i][0] = [{\n x: middleX,\n y: middleY\n }, {\n x: middleX,\n y: middleY\n }];\n }\n\n if (pointsB[i][0]) {\n pointsB[i][0] = this.addPoints(pointsB[i][0], surfaceA.length);\n var distance = Infinity;\n var splitAt = 0;\n\n for (var a = 0; a < pointsB[i][0].length; a++) {\n var newDistance = $math.getDistance(pointsB[i][0][a], surfaceA[0]);\n\n if (newDistance < distance) {\n splitAt = a;\n distance = newDistance;\n }\n }\n\n var partA = pointsB[i][0].slice(0, splitAt);\n var partB = pointsB[i][0].slice(splitAt);\n pointsB[i][0] = partB.concat(partA);\n }\n\n if (holeA) {\n if (!pointsB[i][1]) {\n pointsB[i][1] = [{\n x: middleX,\n y: middleY\n }, {\n x: middleX,\n y: middleY\n }];\n }\n\n pointsB[i][1] = this.addPoints(pointsB[i][1], holeA.length);\n }\n }\n\n return pointsB;\n };\n /**\r\n * [sortPoints description]\r\n *\r\n * @ignore Exclude from doc\r\n * @todo Description\r\n * @param points [description]\r\n * @return common bbox of points\r\n */\n\n\n Morpher.prototype.sortPoints = function (points) {\n points.sort(function (a, b) {\n var bbox1 = $type.getValue($math.getBBox(a[0]));\n var bbox2 = $type.getValue($math.getBBox(b[0]));\n\n if (bbox1.width * bbox1.height > bbox2.width * bbox2.height) {\n return -1;\n } else {\n return 1;\n }\n });\n var bboxes = [];\n\n for (var i = 0, len = points.length; i < len; i++) {\n var surface = points[i][0];\n\n if (surface) {\n bboxes.push($type.getValue($math.getBBox(surface)));\n }\n }\n\n return $math.getCommonRectangle(bboxes);\n };\n /**\r\n * Morphs polygon to a circle (it is actually a polygon which makes a circle).\r\n *\r\n * @param radius Target circle radius (px)\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\n\n\n Morpher.prototype.morphToCircle = function (radius, duration, easing) {\n var points = this.morphable.points;\n var commonBBox = this.sortPoints(points);\n this._morphFromPointsReal = [];\n this._morphToPointsReal = [];\n\n if (!$type.hasValue(duration)) {\n duration = this.morphDuration;\n }\n\n if (!$type.hasValue(easing)) {\n easing = this.morphEasing;\n } // surface\n\n\n for (var i = 0, len = points.length; i < len; i++) {\n var surface = points[i][0];\n var hole = points[i][1];\n this._morphFromPointsReal[i] = [];\n this._morphToPointsReal[i] = [];\n\n if (surface) {\n var toPoints = surface;\n var fromPoints = surface;\n var bbox = $type.getValue($math.getBBox(fromPoints)); // this._bboxes[i];\n\n if (this.morphToSingle) {\n bbox = $type.getValue(commonBBox);\n }\n\n var middleX = bbox.x + bbox.width / 2;\n var middleY = bbox.y + bbox.height / 2;\n var realRadius = radius;\n\n if (!$type.isNumber(realRadius)) {\n realRadius = Math.min(bbox.width / 2, bbox.height / 2);\n }\n\n toPoints = []; // find angle for the first point\n\n var startAngle = $math.getAngle({\n x: middleX,\n y: middleY\n }, surface[0]);\n var count = 100;\n\n if (surface.length > count) {\n count = surface.length;\n }\n\n fromPoints = this.addPoints(surface, count);\n count = fromPoints.length; // add Points might increase number a bit\n\n var angle = 360 / (count - 1);\n\n for (var a = 0; a < count; a++) {\n var realAngle = angle * a + startAngle;\n var pointOnCircle = {\n x: middleX + realRadius * $math.cos(realAngle),\n y: middleY + realRadius * $math.sin(realAngle)\n };\n toPoints[a] = pointOnCircle;\n }\n\n if (hole && hole.length > 0) {\n for (var i_1 = 0, hlen = hole.length; i_1 < hlen; i_1++) {\n toPoints.push({\n x: middleX,\n y: middleY\n });\n }\n }\n\n this._morphFromPointsReal[i][0] = fromPoints;\n this._morphToPointsReal[i][0] = toPoints;\n }\n }\n\n this.morphable.currentPoints = this._morphFromPointsReal;\n var animation = new Animation(this, {\n property: \"morphProgress\",\n from: 0,\n to: 1\n }, duration, easing);\n\n this._disposers.push(animation);\n\n animation.start();\n return animation;\n };\n /**\r\n * [addPoints description]\r\n *\r\n * @ignore Exclude from doc\r\n * @todo Description\r\n * @param points [description]\r\n * @param mustHaveCount [description]\r\n * @return [description]\r\n */\n\n\n Morpher.prototype.addPoints = function (points, mustHaveCount) {\n var addToSegmentCount = Math.round(mustHaveCount / points.length);\n var newPoints = [];\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point0 = points[i];\n var point1 = void 0;\n\n if (i == points.length - 1) {\n point1 = points[0];\n } else {\n point1 = points[i + 1];\n }\n\n newPoints.push(point0);\n\n for (var p = 1; p < addToSegmentCount; p++) {\n var percent = p / addToSegmentCount;\n var extraPoint = {\n x: point0.x + (point1.x - point0.x) * percent,\n y: point0.y + (point1.y - point0.y) * percent\n };\n newPoints.push(extraPoint);\n } // stop adding in case we already added more than left in original\n\n\n if (newPoints.length + points.length - i == mustHaveCount) {\n addToSegmentCount = 0;\n }\n }\n\n if (newPoints.length < mustHaveCount && points.length > 0) {\n var lastPoint = points[points.length - 1];\n\n for (var p = newPoints.length; p < mustHaveCount; p++) {\n // add same as last\n newPoints.push({\n x: lastPoint.x,\n y: lastPoint.y\n });\n }\n }\n\n return newPoints;\n };\n /**\r\n * Morphs polygon into a rectangular polygon.\r\n *\r\n * @param width Width of the target rectangle (px)\r\n * @param height Height of the target rectangle (px)\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\n\n\n Morpher.prototype.morphToRectangle = function (width, height, duration, easing) {\n var points = this.morphable.points;\n this.sortPoints(points);\n this._morphFromPointsReal = [];\n this._morphToPointsReal = [];\n\n if (!$type.hasValue(duration)) {\n duration = this.morphDuration;\n }\n\n if (!$type.hasValue(easing)) {\n easing = this.morphEasing;\n } //\t\tlet biggestBBox: IRectangle = this._bboxes[this._biggestIndex];\n // surface\n\n\n for (var i = 0, len = points.length; i < len; i++) {\n var surface = points[i][0];\n var hole = points[i][1];\n this._morphFromPointsReal[i] = [];\n this._morphToPointsReal[i] = [];\n\n if (surface) {\n var toPoints = surface;\n var fromPoints = surface;\n var bbox = this._bboxes[i]; // we only work with first area. TODO: maybe we should find the biggest one?\n\n if (this.morphToSingle) {//if (i != this._biggestIndex) {\n //\tbbox = { x: biggestBBox.x + biggestBBox.width / 2, y: biggestBBox.y + biggestBBox.height / 2, width: 0, height: 0 };\n //}\n }\n\n var x = bbox.x;\n var y = bbox.y;\n var realWidth = width;\n var realHeight = height;\n\n if (!$type.isNumber(realWidth)) {\n realWidth = bbox.width;\n }\n\n if (!$type.isNumber(realHeight)) {\n realHeight = bbox.height;\n }\n\n toPoints = [{\n x: x,\n y: y\n }, {\n x: x + realWidth,\n y: y\n }, {\n x: x + realWidth,\n y: y + realHeight\n }, {\n x: x,\n y: y + realHeight\n }];\n toPoints = this.addPoints(toPoints, surface.length); // if polygon has less points then count, add\n\n if (surface.length < 4) {\n for (var i_2 = surface.length; i_2 < 4; i_2++) {\n toPoints.push({\n x: surface[i_2].x,\n y: surface[i_2].y\n });\n }\n }\n\n if (hole && hole.length > 0) {\n var middleX = bbox.x + bbox.width / 2;\n var middleY = bbox.y + bbox.height / 2;\n\n for (var i_3 = 0, hlen = hole.length; i_3 < hlen; i_3++) {\n toPoints.push({\n x: middleX,\n y: middleY\n });\n }\n }\n\n this._morphFromPointsReal[i][0] = fromPoints;\n this._morphToPointsReal[i][0] = toPoints;\n }\n }\n\n this.morphable.currentPoints = this._morphFromPointsReal;\n var animation = new Animation(this, {\n property: \"morphProgress\",\n from: 0,\n to: 1\n }, duration, easing);\n\n this._disposers.push(animation);\n\n animation.start();\n return animation;\n };\n\n Object.defineProperty(Morpher.prototype, \"morphProgress\", {\n /**\r\n * Returns the progress of morph transition.\r\n *\r\n * @return Progress (0-1)\r\n */\n get: function get() {\n return this._morphProgress;\n },\n\n /**\r\n * Progress of the morph transition.\r\n *\r\n * Setting this will also trigger actual transformation.\r\n *\r\n * @param value Progress (0-1)\r\n */\n set: function set(value) {\n this._morphProgress = value;\n var currentPoints = [];\n\n if (value != null) {\n var fromPoints = this._morphFromPointsReal;\n var toPoints = this._morphToPointsReal;\n\n if (fromPoints != null && toPoints != null) {\n for (var i = 0, len = fromPoints.length; i < len; i++) {\n var currentArea = [];\n currentPoints.push(currentArea);\n var surfaceFrom = fromPoints[i][0];\n var holeFrom = fromPoints[i][1];\n var surfaceTo = toPoints[i][0];\n var holeTo = toPoints[i][1];\n\n if (surfaceFrom && surfaceFrom.length > 0 && surfaceTo && surfaceTo.length > 0) {\n var currentSurface = [];\n\n for (var i_4 = 0, slen = surfaceFrom.length; i_4 < slen; i_4++) {\n var point0 = surfaceFrom[i_4];\n var point1 = surfaceTo[i_4];\n var currentPoint = {\n x: point0.x + (point1.x * this.scaleRatio - point0.x) * value,\n y: point0.y + (point1.y * this.scaleRatio - point0.y) * value\n };\n currentSurface.push(currentPoint);\n }\n\n currentArea[0] = currentSurface;\n }\n\n if (holeFrom && holeFrom.length > 0 && holeTo && holeTo.length > 0) {\n var currentHole = [];\n\n for (var i_5 = 0, hlen = holeFrom.length; i_5 < hlen; i_5++) {\n var point0 = holeFrom[i_5];\n var point1 = holeTo[i_5];\n var currentPoint = {\n x: point0.x + (point1.x * this.scaleRatio - point0.x) * value,\n y: point0.y + (point1.y * this.scaleRatio - point0.y) * value\n };\n currentHole.push(currentPoint);\n }\n\n currentArea[1] = currentHole;\n }\n }\n }\n }\n\n this.morphable.currentPoints = currentPoints;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Restores the polygon to its original appearance.\r\n *\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\n\n Morpher.prototype.morphBack = function (duration, easing) {\n this._morphToPointsReal = this._morphFromPointsReal;\n this._morphFromPointsReal = this.morphable.currentPoints;\n\n if (!$type.hasValue(duration)) {\n duration = this.morphDuration;\n }\n\n if (!$type.hasValue(easing)) {\n easing = this.morphEasing;\n }\n\n var animation = new Animation(this, {\n property: \"morphProgress\",\n from: 0,\n to: 1\n }, duration, easing);\n\n this._disposers.push(animation);\n\n animation.start();\n return animation;\n };\n\n Object.defineProperty(Morpher.prototype, \"animations\", {\n /**\r\n * Returns a list of morph animations currently being played.\r\n *\r\n * @return List of animations\r\n */\n get: function get() {\n if (!this._animations) {\n this._animations = [];\n\n this._disposers.push(new AnimationDisposer(this._animations));\n }\n\n return this._animations;\n },\n enumerable: true,\n configurable: true\n });\n return Morpher;\n}(BaseObject);\n\nexport { Morpher };","/**\r\n * Polygon module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { Morpher } from \"../utils/Morpher\";\nimport { registry } from \"../Registry\";\nimport * as $path from \"../rendering/Path\";\nimport * as $type from \"../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a polygon.\r\n *\r\n * @see {@link IPolygonEvents} for a list of available events\r\n * @see {@link IPolygonAdapters} for a list of available Adapters\r\n */\n\nvar Polygon =\n/** @class */\nfunction (_super) {\n __extends(Polygon, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Polygon() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Polygon\";\n _this.element = _this.paper.add(\"path\");\n _this.shapeRendering = \"auto\";\n _this._currentPoints = [];\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Polygon.prototype, \"points\", {\n /**\r\n * @return Polygon points\r\n */\n get: function get() {\n var points = this.getPropertyValue(\"points\");\n var path = this.path;\n\n if (path && (!points || points.length == 0)) {\n var valueStr = path.slice(1, path.length - 1);\n var segments = valueStr.split(\"ZM\");\n\n for (var s = 0; s < segments.length; s++) {\n var segment = segments[s];\n\n if (segment.length > 0) {\n var areaHole = segment.split(\"M\");\n var areaArr = areaHole[0];\n var holeArr = areaHole[1];\n\n if (areaArr && areaArr.length > 0) {\n var pointsArr = areaArr.split(\"L\");\n\n if (pointsArr.length > 0) {\n var area = [];\n var areaAndHole = [area];\n points.push(areaAndHole);\n\n for (var p = 0; p < pointsArr.length; p++) {\n var coords = pointsArr[p].split(\",\");\n area.push({\n x: +coords[0],\n y: +coords[1]\n });\n }\n\n if (holeArr && holeArr.length > 0) {\n var pointsArr_1 = holeArr.split(\"L\");\n\n if (pointsArr_1.length > 0) {\n var hole = [];\n areaAndHole.push(hole);\n\n for (var p = pointsArr_1.length - 1; p >= 0; p--) {\n var coords = pointsArr_1[p].split(\",\");\n hole.push({\n x: +coords[0],\n y: +coords[1]\n });\n }\n }\n }\n }\n }\n }\n }\n\n this.setPropertyValue(\"points\", points);\n this._currentPoints = points;\n }\n\n return points;\n },\n\n /**\r\n * An array of X/Y coordinates for each elbow of the polygon.\r\n *\r\n * @todo Example\r\n * @param points Polygon points\r\n */\n set: function set(points) {\n this.setPropertyValue(\"points\", points, true);\n this._currentPoints = points;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Polygon.prototype, \"currentPoints\", {\n /**\r\n * @return Polygon points\r\n */\n get: function get() {\n if ((!this._currentPoints || this._currentPoints.length == 0) && this.path) {\n this._currentPoints = this.points;\n }\n\n return this._currentPoints;\n },\n\n /**\r\n * Current points. Used when morphing the element, so that original `points`\r\n * are not overwritten.\r\n *\r\n * @param points Polygon points\r\n */\n set: function set(points) {\n if (this._currentPoints != points) {\n this._currentPoints = points;\n this.draw();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Polygon.prototype.draw = function () {\n var path = \"\";\n var points = this._currentPoints;\n var left;\n var right;\n var top;\n var bottom;\n\n if (points.length > 0) {\n // separate areas\n for (var i = 0, len = points.length; i < len; i++) {\n // surface\n var surface = points[i][0];\n var hole = points[i][1];\n\n if (surface && surface.length > 0) {\n var point = surface[0];\n path += $path.moveTo(point);\n\n for (var s = 0; s < surface.length; s++) {\n point = surface[s];\n path += $path.lineTo(point);\n\n if (!$type.isNumber(right) || right < point.x) {\n right = point.x;\n }\n\n if (!$type.isNumber(left) || left > point.x) {\n left = point.x;\n }\n\n if (!$type.isNumber(top) || top > point.y) {\n top = point.y;\n }\n\n if (!$type.isNumber(bottom) || bottom < point.y) {\n bottom = point.y;\n }\n }\n } // hole\n\n\n if (hole && hole.length > 0) {\n var point = hole[0];\n path += $path.moveTo(point);\n\n for (var h = 0, hlen = hole.length; h < hlen; h++) {\n point = hole[h];\n path += $path.lineTo(point);\n }\n }\n }\n\n if (path) {\n path += $path.closePath();\n }\n\n this.bbox.x = left;\n this.bbox.y = top;\n this.bbox.width = right - left;\n this.bbox.height = bottom - top;\n\n _super.prototype.setPath.call(this, path);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Polygon.prototype.setPath = function (value) {\n if (_super.prototype.setPath.call(this, value)) {\n this.points = [];\n this._bbox = this.group.getBBox();\n return true;\n }\n\n return false;\n };\n /**\r\n * Measures element\r\n */\n\n\n Polygon.prototype.measureElement = function () {// Overriding to avoid extra measurement.\n };\n\n Object.defineProperty(Polygon.prototype, \"centerPoint\", {\n /**\r\n * A calculated center point for the shape.\r\n *\r\n * @readonly\r\n * @return Center\r\n */\n get: function get() {\n return {\n x: this.bbox.x + this.bbox.width / 2,\n y: this.bbox.y + this.bbox.height / 2\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Polygon.prototype, \"morpher\", {\n /**\r\n * A [[Morpher]] instance that is used to morph polygon into some other\r\n * shape.\r\n *\r\n * @readonly\r\n * @return Morpher instance\r\n */\n get: function get() {\n if (!this._morpher) {\n this._morpher = new Morpher(this);\n\n this._disposers.push(this._morpher);\n }\n\n return this._morpher;\n },\n enumerable: true,\n configurable: true\n });\n return Polygon;\n}(Sprite);\n\nexport { Polygon };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Polygon\"] = Polygon;","/**\r\n * Polyspline (smoothed line) module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Polyline } from \"./Polyline\";\nimport { registry } from \"../Registry\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $path from \"../../core/rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a polysline. (smoothed multi-sigment line)\r\n *\r\n * @see {@link IPolysplineEvents} for a list of available events\r\n * @see {@link IPolysplineAdapters} for a list of available Adapters\r\n */\n\nvar Polyspline =\n/** @class */\nfunction (_super) {\n __extends(Polyspline, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Polyspline() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Polyspline\";\n _this.tensionX = 0.5;\n _this.tensionY = 0.5;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Polyspline.prototype.makePath = function () {\n this._distance = 0;\n var segments = this.segments;\n var tensionX = this.tensionX;\n var tensionY = this.tensionY;\n this.allPoints = [];\n\n if (segments && segments.length > 0) {\n var path = \"\";\n this._realSegments = [];\n\n for (var i = 0, len = segments.length; i < len; i++) {\n var points = segments[i];\n var realPoints = [];\n\n this._realSegments.push(realPoints);\n\n if (points.length > 0) {\n var first = points[0];\n var last = points[points.length - 1];\n var closed_1 = false;\n\n if ($math.round(first.x, 3) == $math.round(last.x) && $math.round(first.y) == $math.round(last.y)) {\n closed_1 = true;\n }\n\n path += $path.moveTo(points[0]);\n\n for (var p = 0; p < points.length - 1; p++) {\n var p0 = points[p - 1];\n var p1 = points[p];\n var p2 = points[p + 1];\n var p3 = points[p + 2];\n\n if (p === 0) {\n p0 = points[p];\n } else if (p == points.length - 2) {\n p3 = points[p + 1];\n }\n\n if (!p3) {\n p3 = p2;\n }\n\n if (p === 0) {\n if (closed_1) {\n p0 = points[points.length - 2];\n } else {\n p0 = points[i];\n }\n } else if (p == points.length - 2) {\n if (closed_1) {\n p3 = points[1];\n } else {\n p3 = points[p + 1];\n }\n }\n\n var controlPointA = $math.getCubicControlPointA(p0, p1, p2, p3, tensionX, tensionY);\n var controlPointB = $math.getCubicControlPointB(p0, p1, p2, p3, tensionX, tensionY);\n path += $path.cubicCurveTo(p2, controlPointA, controlPointB); // now split to small segments so that we could have positionToPoint later\n\n var stepCount = Math.ceil($math.getCubicCurveDistance(p1, p2, controlPointA, controlPointB, 20)) * 1.2;\n var prevPoint = p1;\n\n if (stepCount > 0) {\n // not good for curved charts\n //this.allPoints[0] = { x: points[0].x, y: points[0].y, angle: $math.getAngle(points[0], points[1]) };\n //realPoints.push(this.allPoints[0]);\n for (var s = 0; s <= stepCount; s++) {\n var point = $math.getPointOnCubicCurve(p1, p2, controlPointA, controlPointB, s / stepCount);\n\n if (point.x == prevPoint.x && point.y == prevPoint.y) {\n continue;\n }\n\n realPoints.push(point);\n var angle = $math.round($math.getAngle(prevPoint, point), 5); //this.allPoints.push({ x: point.x, y: point.y, angle: angle });\n\n this._distance += $math.getDistance(prevPoint, point);\n this.allPoints[Math.floor(this._distance)] = {\n x: point.x,\n y: point.y,\n angle: angle\n };\n prevPoint = point;\n }\n } else {\n realPoints.push(p0);\n }\n }\n }\n\n var allPoints = this.allPoints;\n\n if (allPoints.length > 1) {\n for (var i_1 = 0; i_1 < allPoints.length; i_1++) {\n if (!allPoints[i_1]) {\n if (i_1 > 1) {\n allPoints[i_1] = allPoints[i_1 - 1];\n } else {\n for (var k = 1; k < allPoints.length; k++) {\n if (allPoints[k]) {\n allPoints[i_1] = allPoints[k];\n break;\n }\n }\n }\n }\n }\n }\n }\n\n this.path = path;\n }\n };\n /**\r\n * Returns an index of the point that is closest to specified coordinates.\r\n *\r\n * @param point Reference point\r\n * @return Index\r\n */\n\n\n Polyspline.prototype.getClosestPointIndex = function (point) {\n var points = this.allPoints;\n var index;\n var closest = Infinity;\n\n if (points.length > 1) {\n for (var p = 1; p < points.length; p++) {\n var distance = $math.getDistance(point, points[p]);\n\n if (distance < closest) {\n index = p;\n closest = distance;\n }\n }\n }\n\n return index;\n };\n\n Object.defineProperty(Polyspline.prototype, \"tensionX\", {\n /**\r\n * @return Tension\r\n */\n get: function get() {\n return this.getPropertyValue(\"tensionX\");\n },\n\n /**\r\n * Horizontal tension for the spline.\r\n *\r\n * Used by the line smoothing algorithm.\r\n *\r\n * @default 0.5\r\n * @param value Tension\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tensionX\", value);\n this.makePath();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Polyspline.prototype, \"tensionY\", {\n /**\r\n * @return Tension\r\n */\n get: function get() {\n return this.getPropertyValue(\"tensionY\");\n },\n\n /**\r\n * Vertical tension for the spline.\r\n *\r\n * Used by the line smoothing algorithm.\r\n *\r\n * @default 0.5\r\n * @param value Tensions\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tensionY\", value, true);\n this.makePath();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n Polyspline.prototype.positionToPoint = function (position, extend) {\n var deltaAngle = 0;\n var allPoints = this.allPoints;\n var len = allPoints.length;\n\n if (!$type.isNumber(position)) {\n position = 0;\n }\n\n if (len > 1) {\n if (extend && len > 3) {\n if (position < 0) {\n if (position < -0.01) {\n position = -0.01;\n }\n\n var f0 = allPoints[0];\n var f1 = allPoints[1];\n var x = f0.x - (f0.x - f1.x) * len * position;\n var y = f0.y - (f0.y - f1.y) * len * position;\n return {\n x: x,\n y: y,\n angle: $math.getAngle(f0, f1)\n };\n } else if (position > 1) {\n if (position > 1.01) {\n position = 1.01;\n }\n\n var f0 = allPoints[allPoints.length - 2];\n var f1 = allPoints[allPoints.length - 3];\n var x = f0.x + (f0.x - f1.x) * len * (position - 1);\n var y = f0.y + (f0.y - f1.y) * len * (position - 1);\n return {\n x: x,\n y: y,\n angle: $math.getAngle(f0, {\n x: x,\n y: y\n })\n };\n } else if (position == 1) {\n var point_1 = allPoints[allPoints.length - 1];\n return {\n x: point_1.x,\n y: point_1.y,\n angle: point_1.angle\n };\n }\n } else {\n if (position < 0) {\n position = Math.abs(position);\n deltaAngle = 180;\n }\n\n if (position >= 1) {\n position = 0.9999999999999;\n }\n }\n\n var point = allPoints[Math.floor(position * len)];\n return {\n x: point.x,\n y: point.y,\n angle: point.angle + deltaAngle\n };\n } else if (len == 1) {\n var point = allPoints[0];\n return {\n x: point.x,\n y: point.y,\n angle: point.angle\n };\n } else {\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n }\n };\n\n return Polyspline;\n}(Polyline);\n\nexport { Polyspline };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Polyspline\"] = Polyspline;","/**\r\n * Slice module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport * as $math from \"../utils/Math\";\nimport * as $path from \"../rendering/Path\";\nimport * as $type from \"../utils/Type\";\nimport * as $utils from \"../utils/Utils\";\nimport { Percent } from \"../utils/Percent\";\nimport { RadialGradient } from \"../rendering/fills/RadialGradient\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a wedged semi-circle - slice. Usually used for Pie/Donut charts.\r\n *\r\n * @see {@link ISliceEvents} for a list of available events\r\n * @see {@link ISliceAdapters} for a list of available Adapters\r\n */\n\nvar Slice =\n/** @class */\nfunction (_super) {\n __extends(Slice, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Slice() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Slice\"; // Set defaults\n\n _this.setPropertyValue(\"cornerRadius\", 0);\n\n _this.setPropertyValue(\"startAngle\", 0);\n\n _this.setPercentProperty(\"innerRadius\", 0);\n\n _this.setPercentProperty(\"radius\", 0);\n\n _this.setPropertyValue(\"arc\", 0);\n\n _this.setPropertyValue(\"shiftRadius\", 0);\n\n _this.strokeOpacity = 1;\n\n _this.setPropertyValue(\"layout\", \"none\"); // Create a slice wedge element\n\n\n _this.slice = _this.createChild(Sprite);\n _this.slice.isMeasured = false;\n\n _this._disposers.push(_this.slice); //this.element.attr({ \"stroke-linejoin\": \"round\" });\n //this.element.attr({ \"stroke-linecap\": \"round\" });\n // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Slice.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var radiusY = this.radiusY;\n\n if (this.radius > 0 && radiusY == 0) {\n radiusY = 0.01;\n }\n\n this.slice.path = $path.arc(this.startAngle, this.arc, this.radius, this.pixelInnerRadius, radiusY, this.cornerRadius, this.innerCornerRadius);\n this.slice.invalidate();\n this.shiftRadius = this.shiftRadius;\n\n if (this.realFill instanceof RadialGradient) {\n this.updateGradient(this.realFill);\n }\n\n if (this.realStroke instanceof RadialGradient) {\n this.updateGradient(this.realStroke);\n }\n };\n\n Slice.prototype.updateGradient = function (gradient) {\n gradient.element.attr({\n \"gradientUnits\": \"userSpaceOnUse\"\n });\n gradient.element.attr({\n \"r\": this.radius\n });\n gradient.cx = 0;\n gradient.cy = 0;\n gradient.element.attr({\n radius: this.radius\n });\n };\n\n Object.defineProperty(Slice.prototype, \"bbox\", {\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n if (this.definedBBox) {\n return this.definedBBox;\n }\n\n if (this.isMeasured) {\n var innerRect = $math.getArcRect(this.startAngle, this.startAngle + this.arc, this.pixelInnerRadius);\n var outerRect = $math.getArcRect(this.startAngle, this.startAngle + this.arc, this.radius);\n return $math.getCommonRectangle([innerRect, outerRect]);\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"startAngle\", {\n /**\r\n * @return Angle (0-360)\r\n */\n get: function get() {\n return this.getPropertyValue(\"startAngle\");\n },\n\n /**\r\n * The angle at which left edge of the slice is drawn. (0-360)\r\n *\r\n * 0 is to the right of the center.\r\n *\r\n * @param value Angle (0-360)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"arc\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this.getPropertyValue(\"arc\");\n },\n\n /**\r\n * [arc description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\n set: function set(value) {\n if (!$type.isNumber(value)) {\n value = 0;\n }\n\n this.setPropertyValue(\"arc\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"radius\", {\n /**\r\n * @return Radius (px)\r\n */\n get: function get() {\n var radius = this.getPropertyValue(\"radius\");\n\n if (!$type.isNumber(radius)) {\n radius = 0;\n }\n\n return radius;\n },\n\n /**\r\n * Radius of the slice in pixels.\r\n *\r\n * @param value Radius (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"radius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"radiusY\", {\n /**\r\n * @return Vertical radius (0-1)\r\n */\n get: function get() {\n var value = this.getPropertyValue(\"radiusY\");\n\n if (!$type.isNumber(value)) {\n value = this.radius;\n }\n\n return value;\n },\n\n /**\r\n * Vertical radius for creating skewed slices.\r\n *\r\n * This is relevant to `radius`, e.g. 0.5 will set vertical radius to half\r\n * the `radius`.\r\n *\r\n * @param value Vertical radius (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"radiusY\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"innerRadius\", {\n /**\r\n * @return Radius (px or %)\r\n */\n get: function get() {\n return this.getPropertyValue(\"innerRadius\");\n },\n\n /**\r\n * Inner radius of the slice for creating cut out (donut) slices.\r\n *\r\n * @default 0\r\n * @param value Radius (px or %)\r\n */\n set: function set(value) {\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"pixelInnerRadius\", {\n /**\r\n * @return Radius px\r\n */\n get: function get() {\n return $utils.relativeToValue(this.innerRadius, this.radius);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"cornerRadius\", {\n /**\r\n * @return Radius (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cornerRadius\");\n },\n\n /**\r\n * Radius of slice's outer corners in pixels.\r\n *\r\n * @default 0\r\n * @param value Radius (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"cornerRadius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"innerCornerRadius\", {\n /**\r\n * @return Radius (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"innerCornerRadius\");\n },\n\n /**\r\n * Radius of slice's inner corners in pixels.\r\n *\r\n * @default 0\r\n * @param value Radius (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"innerCornerRadius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"shiftRadius\", {\n /**\r\n * @return Radius shift\r\n */\n get: function get() {\n return this.getPropertyValue(\"shiftRadius\");\n },\n\n /**\r\n * Indicates how far (relatively to center) a slice should be moved.\r\n *\r\n * The value is relative to the radius of the slice. Meaning 0 no shift,\r\n * 1 - slice shifted outside by whole of its radius.\r\n *\r\n * @param value Radius shift\r\n */\n set: function set(value) {\n this.setPropertyValue(\"shiftRadius\", value);\n value = this.getPropertyValue(\"shiftRadius\");\n this.dx = value * this.radius * this.ix;\n this.dy = value * this.radiusY * this.iy;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"ix\", {\n /**\r\n * [ix description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\n get: function get() {\n return $math.cos(this.middleAngle);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"iy\", {\n /**\r\n * [iy description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\n get: function get() {\n return $math.sin(this.middleAngle);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice.prototype, \"middleAngle\", {\n /**\r\n * An angle of the slice's middle.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Angle\r\n */\n get: function get() {\n return this.startAngle + this.arc / 2;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @return X\r\n */\n\n Slice.prototype.getTooltipX = function () {\n var value = this.getPropertyValue(\"tooltipX\");\n\n if ($type.isNumber(value)) {\n return value;\n }\n\n var p = 0.5;\n\n if (value instanceof Percent) {\n p = value.value;\n }\n\n var innerRadius = $utils.relativeToValue(this.innerRadius, this.radius);\n return this.ix * (innerRadius + (this.radius - innerRadius) * p);\n };\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @return Y\r\n */\n\n\n Slice.prototype.getTooltipY = function () {\n var value = this.getPropertyValue(\"tooltipY\");\n\n if ($type.isNumber(value)) {\n return value;\n }\n\n var p = 0.5;\n\n if (value instanceof Percent) {\n p = value.value;\n }\n\n var innerRadius = $utils.relativeToValue(this.innerRadius, this.radius);\n return this.iy * (innerRadius + (this.radius - innerRadius) * p) + this.slice.dy;\n };\n\n return Slice;\n}(Container);\n\nexport { Slice };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Slice\"] = Slice;","/**\r\n * Preloader module.\r\n *\r\n * Preloader is a progress indicator.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { Slice } from \"./Slice\";\nimport { Label } from \"./Label\";\nimport { registry } from \"../Registry\";\nimport { percent } from \"../../core/utils/Percent\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A class used to draw and display progress indicator.\r\n *\r\n * @see {@link IPreloaderEvents} for a list of available events\r\n * @see {@link IPreloaderAdapters} for a list of available Adapters\r\n */\n\nvar Preloader =\n/** @class */\nfunction (_super) {\n __extends(Preloader, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Preloader() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Preloader\"; // Set dimensions\n\n _this.width = percent(100);\n _this.height = percent(100);\n var interfaceColors = new InterfaceColorSet(); // Create main container\n\n var sliceContainer = _this.createChild(Container);\n\n sliceContainer.shouldClone = false; // Add background (100%) slice\n\n var backgroundSlice = sliceContainer.createChild(Slice);\n backgroundSlice.shouldClone = false;\n backgroundSlice.radius = 53;\n backgroundSlice.arc = 360;\n backgroundSlice.fill = interfaceColors.getFor(\"fill\");\n backgroundSlice.fillOpacity = 0.8;\n backgroundSlice.innerRadius = 42;\n backgroundSlice.isMeasured = false;\n _this.backgroundSlice = backgroundSlice; // Add progress slice\n\n var progressSlice = sliceContainer.createChild(Slice);\n progressSlice.shouldClone = false;\n progressSlice.radius = 50;\n progressSlice.innerRadius = 45;\n progressSlice.fill = interfaceColors.getFor(\"alternativeBackground\");\n progressSlice.fillOpacity = 0.2;\n progressSlice.isMeasured = false;\n _this.progressSlice = progressSlice; // Add text label element\n\n var label = sliceContainer.createChild(Label);\n label.shouldClone = false;\n label.horizontalCenter = \"middle\";\n label.verticalCenter = \"middle\";\n label.isMeasured = false;\n label.fill = interfaceColors.getFor(\"text\");\n label.align = \"center\";\n label.valign = \"middle\";\n label.textAlign = \"middle\";\n label.fillOpacity = 0.4;\n _this.label = label; // Set defaults\n\n _this.background.opacity = 1;\n _this.background.fill = interfaceColors.getFor(\"background\");\n _this.contentAlign = \"center\";\n _this.contentValign = \"middle\";\n _this.delay = 300; // Create hidden state\n\n var hiddenState = _this.states.create(\"hidden\");\n\n hiddenState.properties.opacity = 0; // Hide by default\n\n _this.visible = false;\n\n _this.hide(0);\n\n _this.__disabled = true; // Make it disposable\n // @todo Maybe it's enough to just dispose `sliceContainer`?\n\n _this._disposers.push(_this.backgroundSlice);\n\n _this._disposers.push(_this.progressSlice);\n\n _this._disposers.push(_this.label);\n\n _this._disposers.push(sliceContainer);\n\n return _this;\n }\n\n Object.defineProperty(Preloader.prototype, \"progress\", {\n /**\r\n * @return Progress (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"progress\");\n },\n\n /**\r\n * Current preload progress. (0-1)\r\n *\r\n * * 0 - 0%\r\n * * 0.5 - 50%\r\n * * 1 - 100%\r\n *\r\n * Setting this to a value less than 1, will automatically reveal the\r\n * preloader, while setting it to 1 (100%) will hide it.\r\n *\r\n * @param value Progress (0-1)\r\n */\n set: function set(value) {\n var _this = this;\n\n this.__disabled = false;\n this.validateLayout(); // show not in center without this\n\n this.setPropertyValue(\"progress\", value);\n /*if (!this.visible && value == 1) {\r\n return;\r\n }*/\n\n this.progressSlice.arc = 360 * value;\n\n if (this.label) {\n this.label.text = Math.round(value * 100) + \"%\";\n }\n\n if (value >= 1) {\n // Cancel the timeout\n if (this._started) {\n this._started = undefined;\n } // TODO remove closure ?\n\n\n registry.events.once(\"enterframe\", function () {\n var animation = _this.hide();\n\n if (animation && !animation.isFinished()) {\n animation.events.once(\"animationended\", function () {\n _this.__disabled = true;\n });\n } else {\n _this.__disabled = true;\n }\n });\n this.interactionsEnabled = false;\n this.setPropertyValue(\"progress\", 0);\n } else if (value > 0) {\n if (this.delay) {\n if (!this._started) {\n this._started = new Date().getTime();\n } else if (this._started + this.delay <= new Date().getTime()) {\n this.__disabled = false;\n this.show();\n this.interactionsEnabled = true;\n }\n } else {\n this.__disabled = false;\n this.show();\n this.interactionsEnabled = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Preloader.prototype, \"delay\", {\n /**\r\n * @return Delay (ms)\r\n */\n get: function get() {\n return this.getPropertyValue(\"delay\");\n },\n\n /**\r\n * Delay display of preloader by X milliseconds.\r\n *\r\n * When loading starts (`progress` is set to <1) and finishes (`progress` is\r\n * set to 1) before `delay` ms, the loader is never shown.\r\n *\r\n * This is used to avoid brief flashing of the preload for very quick loads.\r\n *\r\n * @default 1000\r\n * @param value Delay (ms)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"delay\", value);\n },\n enumerable: true,\n configurable: true\n });\n return Preloader;\n}(Container);\n\nexport { Preloader };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Preloader\"] = Preloader;","/**\r\n * Resize button module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Button } from \"./Button\";\nimport { Sprite } from \"../Sprite\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { registry } from \"../Registry\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a draggable resize/grip button.\r\n *\r\n * @see {@link IResizeButtonEvents} for a list of available events\r\n * @see {@link IResizeButtonAdapters} for a list of available Adapters\r\n */\n\nvar ResizeButton =\n/** @class */\nfunction (_super) {\n __extends(ResizeButton, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ResizeButton() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"ResizeButton\"; // Set defaults\n\n _this.orientation = \"horizontal\";\n _this.layout = \"absolute\";\n _this.horizontalCenter = \"middle\";\n _this.verticalCenter = \"middle\";\n _this.draggable = true;\n\n _this.padding(8, 8, 8, 8);\n\n _this.background.cornerRadius(20, 20, 20, 20); // Create an icon\n\n\n var icon = new Sprite();\n icon.element = _this.paper.add(\"path\");\n var path = $path.moveTo({\n x: -2,\n y: -6\n });\n path += $path.lineTo({\n x: -2,\n y: 6\n });\n path += $path.moveTo({\n x: 2,\n y: -6\n });\n path += $path.lineTo({\n x: 2,\n y: 6\n });\n icon.path = path;\n icon.pixelPerfect = true;\n icon.padding(0, 4, 0, 4);\n icon.stroke = new InterfaceColorSet().getFor(\"alternativeText\");\n icon.strokeOpacity = 0.7; //icon.align = \"center\";\n //icon.valign = \"middle\";\n\n _this.icon = icon;\n\n _this.label.dispose();\n\n _this.label = undefined; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(ResizeButton.prototype, \"orientation\", {\n /**\r\n * Use for setting of direction (orientation) of the resize button.\r\n *\r\n * Available options: \"horizontal\", \"vertical\".\r\n *\r\n * @param value Orientation\r\n */\n set: function set(value) {\n var icon = this.icon;\n\n if (icon) {\n if (value == \"horizontal\") {\n icon.rotation = 0;\n } else {\n icon.rotation = -90;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n return ResizeButton;\n}(Button);\n\nexport { ResizeButton };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ResizeButton\"] = ResizeButton;","/**\r\n * Zoom out button functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Button } from \"./Button\";\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $path from \"../rendering/Path\";\nimport * as $type from \"../../core/utils/Type\";\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link ICloseButtonEvents} for a list of available events\r\n * @see {@link ICloseButtonAdapters} for a list of available Adapters\r\n */\n\nvar CloseButton =\n/** @class */\nfunction (_super) {\n __extends(CloseButton, _super);\n /**\r\n * Constructor\r\n */\n\n\n function CloseButton() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"CloseButton\";\n\n _this.padding(8, 8, 8, 8);\n\n _this.showSystemTooltip = true;\n _this.width = 30;\n _this.height = 30;\n var interfaceColors = new InterfaceColorSet();\n _this.cursorOverStyle = MouseCursorStyle.pointer;\n var background = _this.background;\n background.cornerRadius(20, 20, 20, 20);\n var bgc = interfaceColors.getFor(\"background\");\n background.fill = bgc;\n background.stroke = interfaceColors.getFor(\"primaryButton\");\n background.strokeOpacity = 1;\n background.strokeWidth = 1;\n var downColor = interfaceColors.getFor(\"primaryButtonActive\");\n var bhs = background.states.getKey(\"hover\");\n bhs.properties.strokeWidth = 3;\n bhs.properties.fill = bgc;\n var bds = background.states.getKey(\"down\");\n bds.properties.stroke = downColor;\n bds.properties.fill = bgc; // Create an icon\n\n var icon = new Sprite();\n icon.element = _this.paper.add(\"path\");\n icon.stroke = background.stroke;\n _this.icon = icon; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n CloseButton.prototype.validate = function () {\n _super.prototype.validate.call(this);\n\n var w = this.pixelWidth / 3;\n var h = this.pixelHeight / 3;\n var path = $path.moveTo({\n x: -w / 2,\n y: -h / 2\n });\n path += $path.lineTo({\n x: w / 2,\n y: h / 2\n });\n path += $path.moveTo({\n x: w / 2,\n y: -h / 2\n });\n path += $path.lineTo({\n x: -w / 2,\n y: h / 2\n });\n this.icon.path = path;\n this.invalidateLayout();\n };\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n CloseButton.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Close\");\n }\n };\n\n return CloseButton;\n}(Button);\n\nexport { CloseButton };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"CloseButton\"] = CloseButton;","/**\r\n * Functionality for drawing simple SwitchButtons.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { Label } from \"./Label\";\nimport { Button } from \"../elements/Button\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { Circle } from \"../../core/elements/Circle\";\nimport { percent } from \"../../core/utils/Percent\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * SwitchButton class is capable of drawing a simple rectangular SwitchButton with\r\n * optionally rounded corners and an icon in it.\r\n *\r\n * @see {@link ISwitchButtonEvents} for a list of available events\r\n * @see {@link ISwitchButtonAdapters} for a list of available Adapters\r\n */\n\nvar SwitchButton =\n/** @class */\nfunction (_super) {\n __extends(SwitchButton, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SwitchButton() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"SwitchButton\";\n _this.tooltipY = 0; // Set defaults\n\n _this.layout = \"horizontal\";\n _this.contentAlign = \"center\";\n _this.contentValign = \"middle\";\n\n _this.padding(8, 16, 8, 16);\n\n _this.setStateOnChildren = true;\n\n _this.states.create(\"active\");\n\n var interfaceColors = new InterfaceColorSet(); // Create the label element\n\n var leftLabel = new Label();\n leftLabel.fillOpacity = 0.3;\n var llas = leftLabel.states.create(\"active\");\n llas.properties.fillOpacity = 1;\n leftLabel.isActive = true;\n _this.leftLabel = leftLabel;\n var button = new Button();\n var circle = new Circle();\n button.contentValign = \"none\";\n button.padding(0, 0, 0, 0);\n circle.radius = 10;\n button.icon = circle;\n button.icon.valign = \"middle\";\n button.label = undefined;\n var p100 = percent(100);\n button.background.cornerRadius(p100, p100, p100, p100);\n button.width = circle.radius * 3.5;\n button.height = circle.radius * 2.1;\n button.marginLeft = 8;\n button.marginRight = 8;\n button.togglable = true;\n circle.dx = -circle.radius * 0.7;\n circle.fill = interfaceColors.getFor(\"primaryButton\");\n var hs = circle.states.create(\"hover\");\n hs.properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\n var as = circle.states.create(\"active\");\n as.properties.fill = interfaceColors.getFor(\"primaryButtonActive\");\n as.properties.dx = circle.radius * 0.7;\n _this.switchButton = button;\n\n _this.events.on(\"toggled\", function () {\n _this.leftLabel.isActive = !_this.isActive;\n _this.rightLabel.isActive = _this.isActive;\n }); // Create the label element\n\n\n var rightLabel = new Label();\n rightLabel.fillOpacity = 0.3;\n var rlas = rightLabel.states.create(\"active\");\n rlas.properties.fillOpacity = 1;\n _this.rightLabel = rightLabel; // Set up accessibility\n // A Button should be always focusable\n\n _this.role = \"button\";\n _this.focusable = true;\n rightLabel.valign = \"middle\";\n leftLabel.valign = \"middle\";\n button.valign = \"middle\"; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(SwitchButton.prototype, \"leftLabel\", {\n /**\r\n * @return Left label element\r\n */\n get: function get() {\n return this._leftLabel;\n },\n\n /**\r\n * [[Label]] element to be used for left text.\r\n *\r\n * @param left label element\r\n */\n set: function set(label) {\n if (this._leftLabel) {\n this.removeDispose(this._leftLabel);\n }\n\n this._leftLabel = label;\n\n if (label) {\n label.parent = this;\n label.interactionsEnabled = false;\n label.shouldClone = false;\n\n this._disposers.push(this._leftLabel);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SwitchButton.prototype, \"rightLabel\", {\n /**\r\n * @return Rigth label element\r\n */\n get: function get() {\n return this._rightLabel;\n },\n\n /**\r\n * [[Label]] element to be used for left text.\r\n *\r\n * @param rigth label element\r\n */\n set: function set(label) {\n if (this._rightLabel) {\n this.removeDispose(this._rightLabel);\n }\n\n this._rightLabel = label;\n\n if (label) {\n label.parent = this;\n label.interactionsEnabled = false;\n label.shouldClone = false;\n\n this._disposers.push(this._rightLabel);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SwitchButton.prototype, \"switch\", {\n /**\r\n * @ignore\r\n * @deprecated Use `switchButton` instead\r\n */\n get: function get() {\n return this._switchButton;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SwitchButton.prototype, \"switchButton\", {\n /**\r\n * @return Button\r\n */\n get: function get() {\n return this._switchButton;\n },\n\n /**\r\n * A [[Button]] element for switch.\r\n *\r\n * @param Button\r\n */\n set: function set(button) {\n if (this._switchButton) {\n this.removeDispose(this._switchButton);\n }\n\n this._switchButton = button;\n\n if (button) {\n button.parent = this;\n button.shouldClone = false;\n\n this._disposers.push(this._switchButton);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\n\n SwitchButton.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n if (source.leftLabel) {\n this.leftLabel.copyFrom(source.leftLabel);\n }\n\n if (source.rightLabel) {\n this.rightLabel.copyFrom(source.rightLabel);\n }\n\n if (source.switchButton) {\n this.switchButton.copyFrom(source.switchButton);\n }\n };\n\n return SwitchButton;\n}(Container);\n\nexport { SwitchButton };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"SwitchButton\"] = SwitchButton;","/**\r\n * Provides functionality used to build scrollbars.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { ResizeButton } from \"../elements/ResizeButton\";\nimport { Button } from \"../elements/Button\";\nimport { getInteraction } from \"../interaction/Interaction\";\nimport { MouseCursorStyle } from \"../interaction/Mouse\";\nimport { RoundedRectangle } from \"../elements/RoundedRectangle\";\nimport { registry } from \"../Registry\";\nimport { keyboard } from \"../utils/Keyboard\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { percent, Percent } from \"../utils/Percent\";\nimport * as $math from \"../utils/Math\";\nimport * as $ease from \"../utils/Ease\";\nimport * as $type from \"../utils/Type\";\nimport * as $utils from \"../utils/Utils\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Scrollbar is a generic control allowing to select a range of values or pan\r\n * the selection.\r\n *\r\n * @see {@link IScrollbarEvents} for a list of available events\r\n * @see {@link IScrollbarAdapters} for a list of available Adapters\r\n */\n\nvar Scrollbar =\n/** @class */\nfunction (_super) {\n __extends(Scrollbar, _super);\n /**\r\n * Construtor\r\n */\n\n\n function Scrollbar() {\n var _this = _super.call(this) || this;\n /**\r\n * Previously selected lower (start) value.\r\n */\n\n\n _this._previousStart = 0;\n /**\r\n * Previously selected upper (end) value.\r\n */\n\n _this._previousEnd = 1;\n /**\r\n * A value of previously selected lower value, used for doubleclick function.\r\n */\n\n _this._prevStart = 0;\n /**\r\n * A value of previously selected upper value, used for doubleclick function.\r\n */\n\n _this._prevEnd = 1;\n /**\r\n * Indicates if the Scrollbar is currently \"busy\" (animating and or\r\n * performing zoom by user interaction).\r\n */\n\n _this._isBusy = false;\n /**\r\n * [_skipRangeEvents description]\r\n *\r\n * @todo Description\r\n */\n\n _this._skipRangeEvents = false;\n /**\r\n * Update the selection when dragging the grips.\r\n *\r\n * If set to `false` selection will be updated only when the grip is\r\n * released.\r\n *\r\n * @default true\r\n */\n\n _this.updateWhileMoving = true;\n _this.className = \"Scrollbar\";\n _this.minHeight = 12;\n _this.minWidth = 12;\n _this.animationDuration = 0;\n _this.animationEasing = $ease.cubicOut;\n\n _this.margin(10, 10, 10, 10);\n\n var interfaceColors = new InterfaceColorSet(); // background is also container as it might contain graphs, grid, etc\n\n var background = _this.background;\n background.cornerRadius(10, 10, 10, 10);\n background.fill = interfaceColors.getFor(\"fill\");\n background.fillOpacity = 0.5; // Make system tooltips appear by default\n\n _this.showSystemTooltip = true;\n _this.startGrip = new ResizeButton();\n _this.endGrip = new ResizeButton(); // Default orientation...\n // ... is set in `applyInternalDefaults()` because it accesses `language`\n // and should only be started to access when parent is set\n // Set events\n\n _this.events.on(\"transformed\", function () {\n _this.updateThumb();\n }, _this, false); // Initial positions\n\n\n _this.start = 0;\n _this.end = 1; // Set roles\n\n _this.role = \"scrollbar\";\n _this.thumb.role = \"slider\";\n _this.thumb.readerLive = \"polite\";\n _this.startGrip.role = \"slider\";\n _this.endGrip.role = \"slider\"; // otherwise range changed won't be registered\n\n _this.events.once(\"inited\", function () {\n _this._previousStart = undefined;\n\n _this.dispatchRangeChange();\n }, undefined, false);\n\n _this.hideGrips = false;\n _this.orientation = \"horizontal\"; // Min/max values for accessibility\n\n _this.setSVGAttribute({\n \"aria-valuemin\": \"0\"\n });\n\n _this.setSVGAttribute({\n \"aria-valuemax\": \"100\"\n });\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n Scrollbar.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this); // Set screen reader tetxt accordingly\n\n\n if (this.orientation === \"horizontal\") {\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Use TAB to select grip buttons or left and right arrows to change selection\");\n }\n\n if (!$type.hasValue(this.thumb.readerDescription)) {\n this.thumb.readerDescription = this.language.translate(\"Use left and right arrows to move selection\");\n }\n\n if (!$type.hasValue(this.startGrip.readerDescription)) {\n this.startGrip.readerDescription = this.language.translate(\"Use left and right arrows to move left selection\");\n }\n\n if (!$type.hasValue(this.endGrip.readerDescription)) {\n this.endGrip.readerDescription = this.language.translate(\"Use left and right arrows to move right selection\");\n }\n\n this.readerOrientation = \"horizontal\";\n } else {\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Use TAB select grip buttons or up and down arrows to change selection\");\n }\n\n if (!$type.hasValue(this.thumb.readerDescription)) {\n this.thumb.readerDescription = this.language.translate(\"Use up and down arrows to move selection\");\n }\n\n if (!$type.hasValue(this.startGrip.readerDescription)) {\n this.startGrip.readerDescription = this.language.translate(\"Use up and down arrows to move upper selection\");\n }\n\n if (!$type.hasValue(this.endGrip.readerDescription)) {\n this.endGrip.readerDescription = this.language.translate(\"Use up and down arrows to move lower selection\");\n }\n\n this.readerOrientation = \"vertical\";\n }\n\n this.readerControls = this.baseSprite.uidAttr();\n };\n /**\r\n * Validates the layout of the scrollbar's elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.validateLayout = function () {\n this.updateSize();\n\n _super.prototype.validateLayout.call(this); // when size changes, need to update extremes\n\n\n this.updateExtremes();\n };\n /**\r\n * Update background for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.processBackground = function () {\n _super.prototype.processBackground.call(this);\n\n var background = this.background;\n background.clickable = true;\n background.events.on(\"hit\", this.handleBgHit, this, undefined);\n };\n /**\r\n * Zooms to the particular place when clicked/tapped on the scrollbar\r\n * background.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n Scrollbar.prototype.handleBgHit = function (event) {\n this.makeBusy();\n var point = event.spritePoint;\n point = $utils.spritePointToSprite(point, this.background, this);\n var thumb = this.thumb;\n\n if (this.orientation == \"horizontal\") {\n var thumbX = point.x - thumb.pixelWidth / 2;\n thumbX = $math.fitToRange(thumbX, 0, this.innerWidth - thumb.pixelWidth);\n this._thumbAnimation = thumb.animate({\n property: \"x\",\n to: thumbX\n }, this.animationDuration, this.animationEasing);\n } else {\n var thumbY = point.y - thumb.pixelHeight / 2;\n thumbY = $math.fitToRange(thumbY, 0, this.innerHeight - thumb.pixelHeight);\n this._thumbAnimation = thumb.animate({\n property: \"y\",\n to: thumbY\n }, this.animationDuration, this.animationEasing);\n }\n\n if (this.animationDuration > 0) {\n this._thumbAnimation.events.on(\"animationended\", this.makeUnbusy, this, false);\n } else {\n this._thumb.validate();\n\n this.makeUnbusy();\n }\n };\n /**\r\n * Set scrollbar as busy. (currently zooming)\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.makeBusy = function () {\n this._isBusy = true;\n this._skipRangeEvents = false;\n\n if (this._unbusyTimeout) {\n this.removeDispose(this._unbusyTimeout);\n }\n\n this._unbusyTimeout = undefined;\n this.stopAnimations();\n };\n /**\r\n * Stops all animations, currently playing for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.stopAnimations = function () {\n if (this._thumbAnimation) {\n this._thumbAnimation.stop(true);\n }\n\n if (this._zoomAnimation) {\n this._zoomAnimation.stop(true);\n }\n };\n /**\r\n * Cancels \"busy\" status of the Scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.makeUnbusy = function () {\n /**\r\n * We cannot make Scrollbar not busy right after release, because then axes\r\n * will take over controll and Scrollbar will start to animate.\r\n * Theorethically, it's not right to set timeout by `animationDuration`,\r\n * however we can not know all the durations of elements we scroll, so we\r\n * assume that animation duration will be the same as\r\n * `interpolationDuration` or `rangeChange` duration.\r\n */\n this._unbusyTimeout = this.setTimeout(this.makeUnbusyReal.bind(this), this.animationDuration * 1.1);\n };\n /**\r\n * [makeUnbusyReal description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.makeUnbusyReal = function () {\n this._usingGrip = undefined;\n this._isBusy = false;\n\n if (!this.updateWhileMoving) {\n this.dispatchRangeChange();\n }\n };\n /**\r\n * Disptatches rangechanged event if it really changed\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.dispatchRangeChange = function () {\n if (this._previousEnd != this.end || this._previousStart != this.start) {\n this._previousStart = this.start;\n this._previousEnd = this.end;\n this.dispatch(\"rangechanged\");\n }\n };\n /**\r\n * Updates the \"thumb\" element. A draggable element between the grips.\r\n * @ignore\r\n */\n\n\n Scrollbar.prototype.updateThumb = function (dispatchEvents) {\n if (dispatchEvents === void 0) {\n dispatchEvents = true;\n }\n\n if (!this.parent) {\n return;\n }\n\n var thumb = this.thumb;\n var start = this.start;\n var end = this.end;\n var startGrip = this.startGrip;\n var endGrip = this.endGrip;\n\n if (this.orientation == \"horizontal\") {\n var innerWidth_1 = this.innerWidth;\n thumb.width = innerWidth_1 * (end - start);\n thumb.maxX = innerWidth_1 - thumb.pixelWidth;\n thumb.x = start * innerWidth_1;\n startGrip.moveTo({\n x: thumb.pixelX,\n y: 0\n }, undefined, undefined, true); // overrides dragging\n\n endGrip.moveTo({\n x: thumb.pixelX + thumb.pixelWidth,\n y: 0\n }, undefined, undefined, true);\n startGrip.readerTitle = this.language.translate(\"From %1\", undefined, this.adapter.apply(\"positionValue\", {\n value: Math.round(start * 100) + \"%\",\n position: start\n }).value);\n startGrip.readerValueNow = \"\" + Math.round(start * 100);\n startGrip.readerValueText = startGrip.readerTitle;\n endGrip.readerTitle = this.language.translate(\"To %1\", undefined, this.adapter.apply(\"positionValue\", {\n value: Math.round(end * 100) + \"%\",\n position: end\n }).value);\n endGrip.readerValueNow = \"\" + Math.round(end * 100);\n endGrip.readerValueText = endGrip.readerTitle;\n } else {\n var innerHeight_1 = this.innerHeight;\n thumb.height = innerHeight_1 * (end - start);\n thumb.maxY = innerHeight_1 - thumb.pixelHeight;\n thumb.y = (1 - end) * innerHeight_1;\n startGrip.moveTo({\n x: 0,\n y: thumb.pixelY + thumb.pixelHeight\n }, undefined, undefined, true);\n endGrip.moveTo({\n x: 0,\n y: thumb.pixelY\n }, undefined, undefined, true);\n startGrip.readerTitle = this.language.translate(\"To %1\", undefined, this.adapter.apply(\"positionValue\", {\n value: Math.round((1 - start) * 100) + \"%\",\n position: 1 - start\n }).value);\n startGrip.readerValueNow = \"\" + Math.round(start * 100);\n startGrip.readerValueText = startGrip.readerTitle;\n endGrip.readerTitle = this.language.translate(\"From %1\", undefined, this.adapter.apply(\"positionValue\", {\n value: Math.round((1 - end) * 100) + \"%\",\n position: 1 - end\n }).value);\n endGrip.readerValueNow = \"\" + Math.round(end * 100);\n endGrip.readerValueText = endGrip.readerTitle;\n } // Add accessibility\n\n\n thumb.readerTitle = this.language.translate(\"From %1 to %2\", undefined, this.adapter.apply(\"positionValue\", {\n value: Math.round(start * 100) + \"%\",\n position: start\n }).value, this.adapter.apply(\"positionValue\", {\n value: Math.round(end * 100) + \"%\",\n position: end\n }).value);\n thumb.readerValueNow = \"\" + Math.round(start * 100);\n thumb.readerValueText = thumb.readerTitle;\n this.readerValueNow = \"\" + Math.round(start * 100);\n this.readerValueText = thumb.readerTitle;\n\n if (!this._skipRangeEvents && this.updateWhileMoving && dispatchEvents) {\n this.dispatchRangeChange();\n }\n };\n /**\r\n * Updates extremes of the scrollbar.\r\n */\n\n\n Scrollbar.prototype.updateExtremes = function () {\n var orientation = this.orientation;\n var minX = 0;\n var minY = 0;\n var maxX = 0;\n var maxY = 0;\n\n if (orientation == \"horizontal\") {\n maxX = this.innerWidth;\n minY = maxY = this.innerHeight / 2;\n } else {\n maxY = this.innerHeight;\n minX = maxX = this.innerWidth / 2;\n }\n\n var startGrip = this.startGrip;\n startGrip.minX = minX;\n startGrip.maxX = maxX;\n startGrip.minY = minY;\n startGrip.maxY = maxY;\n var endGrip = this.endGrip;\n endGrip.minX = minX;\n endGrip.maxX = maxX;\n endGrip.minY = minY;\n endGrip.maxY = maxY;\n var thumb = this.thumb;\n thumb.minX = minX;\n thumb.maxX = maxX;\n thumb.minY = minY;\n thumb.maxY = maxY;\n };\n /**\r\n * Updates size of the scrollbar.\r\n */\n\n\n Scrollbar.prototype.updateSize = function () {\n var orientation = this.orientation;\n var startGrip = this.startGrip;\n\n if (startGrip) {\n startGrip.orientation = orientation;\n }\n\n if (this.endGrip) {\n this.endGrip.orientation = orientation;\n }\n\n var thumb = this.thumb;\n\n if (thumb) {\n if (orientation == \"horizontal\") {\n if (!$type.isNumber(this._pixelWidth)) {\n if (!(this.width instanceof Percent)) {\n this.width = percent(100);\n }\n } // this teorethically might be wrong, if user indeed sets height of a horizontal scrollbar in percent\n // however without this height might be equal to 100% if previous orientation was set to horizontal\n // so this is ok solution, in case user really wants to have scrollbar height set in percent,\n // he should do this after orientation.\n\n\n if ($type.hasValue(this.percentHeight)) {\n this.height = this.minHeight;\n }\n\n thumb.height = this.innerHeight;\n thumb.verticalCenter = \"middle\";\n thumb.horizontalCenter = \"left\";\n } else {\n if (!$type.isNumber(this._pixelHeight)) {\n if (!(this.height instanceof Percent)) {\n this.height = percent(100);\n }\n } // same as above with percentHeight\n\n\n if ($type.hasValue(this.percentWidth)) {\n this.width = this.minWidth;\n }\n\n thumb.width = this.innerWidth;\n thumb.verticalCenter = \"top\";\n thumb.horizontalCenter = \"middle\";\n }\n }\n };\n\n Object.defineProperty(Scrollbar.prototype, \"isBusy\", {\n /**\r\n * Indicates if the Scrollbar is currently \"busy\" (animating and or\r\n * performing zoom by user interaction).\r\n * @return boolean\r\n */\n get: function get() {\n return this._isBusy;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"start\", {\n /**\r\n * @return Position (0-1)\r\n */\n get: function get() {\n return Math.min(this.getPosition(this._start), this.getPosition(this._end));\n },\n\n /**\r\n * ==========================================================================\r\n * POSITIONS\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Relative position (0-1) of the start grip.\r\n *\r\n * @param position Position (0-1)\r\n */\n set: function set(position) {\n if (!this._isBusy) {\n this.__start = position;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"__start\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this._start;\n },\n\n /**\r\n * [__start description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n */\n set: function set(position) {\n this._start = this.getPosition(position);\n this.updateThumb();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"end\", {\n /**\r\n * @return Position (0-1)\r\n */\n get: function get() {\n return Math.max(this.getPosition(this._start), this.getPosition(this._end));\n },\n\n /**\r\n * Relative position (0-1) of the end grip.\r\n *\r\n * @param position Position (0-1)\r\n */\n set: function set(position) {\n if (!this._isBusy) {\n this.__end = position;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"__end\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this._end;\n },\n\n /**\r\n * [__end description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n */\n set: function set(position) {\n this._end = this.getPosition(position);\n this.updateThumb();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"range\", {\n /**\r\n * Current selection range.\r\n *\r\n * @readonly\r\n * @return Range\r\n */\n get: function get() {\n return {\n start: this.start,\n end: this.end,\n priority: this._usingGrip\n };\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Disables range change events.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Scrollbar.prototype.skipRangeEvents = function () {\n if (!this._isBusy) {\n this._skipRangeEvents = true;\n }\n };\n /**\r\n * [fixRange description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n * @param range Range\r\n */\n\n\n Scrollbar.prototype.fixRange = function (range) {\n if (range.start != $math.round(this._start, 2) || range.end != $math.round(this._end, 2)) {\n this._start = range.start;\n this._end = range.end;\n this._skipRangeEvents = true;\n this.updateThumb();\n this._skipRangeEvents = false;\n this.thumb.validate();\n this.thumb.background.validate();\n }\n };\n /**\r\n * [getPosition description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\n\n\n Scrollbar.prototype.getPosition = function (position) {\n return $math.fitToRange($math.round(position, 4), 0, 1);\n };\n\n Object.defineProperty(Scrollbar.prototype, \"orientation\", {\n /**\r\n * @return Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"orientation\");\n },\n\n /**\r\n * ==========================================================================\r\n * MISC\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Orientation of the scrollbar.\r\n *\r\n * Available options: \"horizontal\" (default) and \"vertical\".\r\n *\r\n * @default \"horizontal\"\r\n * @param value Orientation\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"orientation\", value)) {\n // Set mouse cursors and screen reader tetxt accordingly\n if (value === \"horizontal\") {\n // Mouse styles\n this.startGrip.cursorOverStyle = MouseCursorStyle.horizontalResize;\n this.endGrip.cursorOverStyle = MouseCursorStyle.horizontalResize; // Reader text\n\n /*this.readerTitle = this.language.translate(\"Use TAB to select grip buttons or left and right arrows to change selection\");\r\n this.thumb.readerDescription = this.language.translate(\"Use left and right arrows to move selection\");\r\n this.startGrip.readerDescription = this.language.translate(\"Use left and right arrows to move left selection\");\r\n this.endGrip.readerDescription = this.language.translate(\"Use left and right arrows to move right selection\");*/\n } else {\n // Mouse styles\n this.startGrip.cursorOverStyle = MouseCursorStyle.verticalResize;\n this.endGrip.cursorOverStyle = MouseCursorStyle.verticalResize; // Reader text\n\n /*this.readerTitle = this.language.translate(\"Use TAB select grip buttons or up and down arrows to change selection\");\r\n this.thumb.readerDescription = this.language.translate(\"Use up and down arrows to move selection\");\r\n this.startGrip.readerDescription = this.language.translate(\"Use up and down arrows to move upper selection\");\r\n this.endGrip.readerDescription = this.language.translate(\"Use up and down arrows to move lower selection\");*/\n }\n\n this.updateByOrientation();\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n Scrollbar.prototype.updateByOrientation = function () {};\n\n Object.defineProperty(Scrollbar.prototype, \"startGrip\", {\n /**\r\n * @return Grip element\r\n */\n get: function get() {\n return this._startGrip;\n },\n\n /**\r\n * ==========================================================================\r\n * GRIPS\r\n * ==========================================================================\r\n * @hidden\r\n */\n\n /**\r\n * Start grip element. (button)\r\n *\r\n * @param button Grip element\r\n */\n set: function set(button) {\n if (this._startGrip) {\n this.removeDispose(this._startGrip);\n }\n\n this._startGrip = button;\n this.processGrip(button);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"endGrip\", {\n /**\r\n * @return Grip element\r\n */\n get: function get() {\n return this._endGrip;\n },\n\n /**\r\n * End grip element. (button)\r\n *\r\n * @param button Grip element\r\n */\n set: function set(button) {\n if (this._endGrip) {\n this.removeDispose(this._endGrip);\n }\n\n this._endGrip = button;\n this.processGrip(button);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Decorates the grip button with properties and events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param button Grip button\r\n */\n\n Scrollbar.prototype.processGrip = function (button) {\n button.parent = this;\n button.isMeasured = false;\n button.focusable = true;\n button.shouldClone = false; // Set button defaults\n //button.showSystemTooltip = true; // setting this here is not right because we break inheritance\n\n button.zIndex = 100;\n button.events.on(\"drag\", this.handleGripDrag, this, false);\n button.events.on(\"dragstop\", this.makeUnbusy, this, false);\n button.events.on(\"down\", this.makeBusy, this, false);\n button.events.on(\"up\", this.makeUnbusy, this, false);\n\n this._disposers.push(button);\n };\n /**\r\n * Updates positions of related elements after grip element is dragged.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n Scrollbar.prototype.handleGripDrag = function (event) {\n this.makeBusy();\n\n if (event.target === this._startGrip) {\n this._usingGrip = \"start\";\n } else {\n this._usingGrip = \"end\";\n }\n\n if (this.orientation == \"horizontal\") {\n this._start = this.startGrip.pixelX / this.innerWidth;\n this._end = this.endGrip.pixelX / this.innerWidth;\n } else {\n this._start = 1 - this.startGrip.pixelY / this.innerHeight;\n this._end = 1 - this.endGrip.pixelY / this.innerHeight;\n }\n\n this.updateThumb();\n };\n\n Object.defineProperty(Scrollbar.prototype, \"thumb\", {\n /**\r\n * @return Thumb element\r\n */\n get: function get() {\n if (!this._thumb) {\n // Create scrollbar controls (setters will handle adding disposers)\n var thumb = new Button();\n thumb.background.cornerRadius(10, 10, 10, 10);\n thumb.padding(0, 0, 0, 0);\n this.thumb = thumb;\n }\n\n return this._thumb;\n },\n\n /**\r\n * A \"thumb\" element.\r\n *\r\n * It's a draggable square space between the grips, that can be used to\r\n * pan the selection.\r\n *\r\n * @param thumb Thumb element\r\n */\n set: function set(thumb) {\n var _this = this;\n\n if (thumb) {\n if (this._thumb) {\n this.removeDispose(this._thumb);\n }\n\n this._thumb = thumb;\n thumb.parent = this;\n thumb.isMeasured = false;\n thumb.inert = true;\n thumb.draggable = true;\n thumb.clickable = true;\n thumb.hoverable = true;\n thumb.focusable = true;\n thumb.shouldClone = false;\n thumb.zIndex = 0; // TODO remove closures ?\n // Add events\n // Add cursor styles to thumb\n\n thumb.cursorOverStyle = MouseCursorStyle.grab;\n thumb.cursorDownStyle = MouseCursorStyle.grabbing;\n thumb.events.on(\"dragstart\", this.makeBusy, this, false);\n thumb.events.on(\"dragstop\", this.makeUnbusy, this, false);\n thumb.events.on(\"positionchanged\", this.handleThumbPosition, this, false);\n thumb.events.on(\"sizechanged\", this.handleThumbPosition, this, false);\n thumb.events.on(\"doublehit\", this.handleDoubleClick, this, false); // Add event for space and ENTER to toggle full zoom out and back\n // (same as doubleclick)\n\n this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\n if (keyboard.isKey(ev.event, [\"space\", \"enter\"]) && _this.thumb.isFocused) {\n ev.event.preventDefault();\n\n _this.handleDoubleClick();\n }\n }));\n\n this._disposers.push(this._thumb);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Zooms-in and out the selection on double-click of the thumb.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Scrollbar.prototype.handleDoubleClick = function () {\n this.makeBusy();\n var newStart = 0;\n var newEnd = 1;\n\n if (this.start != 0 || this.end != 1) {\n this._prevStart = this.start;\n this._prevEnd = this.end;\n } else {\n newStart = this._prevStart;\n newEnd = this._prevEnd;\n }\n\n var zoomAnimation = this.animate([{\n property: \"__start\",\n to: newStart\n }, {\n property: \"__end\",\n to: newEnd\n }], this.animationDuration, this.animationEasing);\n\n if (zoomAnimation && !zoomAnimation.isFinished()) {\n zoomAnimation.events.on(\"animationended\", this.makeUnbusy, this, false);\n this._zoomAnimation = zoomAnimation;\n } else {\n this.makeUnbusy();\n }\n };\n /**\r\n * Updates positions of other elements when thumb is moved.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Scrollbar.prototype.handleThumbPosition = function () {\n var thumb = this.thumb;\n\n if (this.orientation == \"horizontal\") {\n var innerWidth_2 = this.innerWidth;\n var w = thumb.innerWidth;\n var x = thumb.pixelX;\n this._start = x / innerWidth_2;\n this._end = (x + w) / innerWidth_2;\n this.updateThumb();\n } else {\n var innerHeight_2 = this.innerHeight;\n var h = thumb.innerHeight;\n var y = thumb.pixelY;\n this._start = 1 - (y + h) / innerHeight_2;\n this._end = 1 - y / innerHeight_2;\n this.updateThumb();\n }\n };\n /**\r\n * Creates a background element for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\n\n\n Scrollbar.prototype.createBackground = function () {\n return new RoundedRectangle();\n };\n\n Object.defineProperty(Scrollbar.prototype, \"hideGrips\", {\n /**\r\n * @return Show only on hover?\r\n */\n get: function get() {\n return this._hideGrips;\n },\n\n /**\r\n * Use this property to set whether grips should be always visible (`false`),\r\n * or they should just appear on scrollbar hover (`true`).\r\n *\r\n * @param value Show only on hover?\r\n */\n set: function set(value) {\n var _this = this;\n\n this._hideGrips = value;\n\n if (this._overDisposer) {\n this.removeDispose(this._overDisposer);\n }\n\n if (this._outDisposer) {\n this.removeDispose(this._outDisposer);\n }\n\n if (value) {\n this._overDisposer = this.events.on(\"over\", function () {\n _this.startGrip.show();\n\n _this.endGrip.show();\n }, undefined, false);\n this._outDisposer = this.events.on(\"out\", function () {\n _this.startGrip.hide();\n\n _this.endGrip.hide();\n }, undefined, false);\n this.startGrip.hide();\n this.endGrip.hide();\n } else {\n this.startGrip.show();\n this.endGrip.show();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"animationDuration\", {\n /**\r\n * @return Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"animationDuration\");\n },\n\n /**\r\n * Duration in milliseconds of scrollbar animation (happens when user clicks on a background of a scrollbar)\r\n * @default 0\r\n * @param value number\r\n */\n set: function set(value) {\n this.setPropertyValue(\"animationDuration\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"animationEasing\", {\n /**\r\n * @return {Function}\r\n */\n get: function get() {\n return this.getPropertyValue(\"animationEasing\");\n },\n\n /**\r\n * Animation easing function.\r\n * @todo: review description and default\r\n * @default $ease.cubicOut\r\n * @param value (value: number) => number\r\n */\n set: function set(value) {\n this.setPropertyValue(\"animationEasing\", value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n Scrollbar.prototype.asFunction = function (field) {\n return field == \"animationEasing\" || _super.prototype.asIs.call(this, field);\n };\n\n return Scrollbar;\n}(Container);\n\nexport { Scrollbar };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Scrollbar\"] = Scrollbar;","/**\r\n * Slider is a scrollbar with just one selection grip.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Scrollbar } from \"../../core/elements/Scrollbar\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a slider - a version of scrollbar with just one grip.\r\n *\r\n * @see {@link ISliderEvents} for a list of available events\r\n * @see {@link ISliderAdapters} for a list of available Adapters\r\n */\n\nvar Slider =\n/** @class */\nfunction (_super) {\n __extends(Slider, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Slider() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Slider\";\n _this.thumb.opacity = 0;\n _this.thumb.interactionsEnabled = false;\n _this.endGrip.opacity = 0;\n _this.endGrip.interactionsEnabled = false;\n\n _this.startGrip.events.on(\"drag\", function () {\n _this.endGrip.x = _this.startGrip.x;\n _this.endGrip.y = _this.startGrip.y;\n });\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Slider.prototype, \"__end\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this._start;\n },\n set: function set(value) {},\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slider.prototype, \"end\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this._start;\n },\n\n /**\r\n * Relative position (0-1) of the end grip.\r\n *\r\n * @param position Position (0-1)\r\n */\n set: function set(position) {},\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slider.prototype, \"start\", {\n /**\r\n * @return Position (0-1)\r\n */\n get: function get() {\n return this._start;\n },\n\n /**\r\n * Relative position (0-1) of the start grip.\r\n *\r\n * @param position Position (0-1)\r\n */\n set: function set(position) {\n if (!this._isBusy) {\n this.__start = position;\n }\n },\n enumerable: true,\n configurable: true\n });\n return Slider;\n}(Scrollbar);\n\nexport { Slider };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Slider\"] = Slider;","/**\r\n * A module that defines Text element used to indicate links.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Label } from \"../../core/elements/Label\";\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a text element with a link.\r\n *\r\n * @see {@link ITextLinkEvents} for a list of available events\r\n * @see {@link ITextLinkAdapters} for a list of available Adapters\r\n */\n\nvar TextLink =\n/** @class */\nfunction (_super) {\n __extends(TextLink, _super);\n /**\r\n * Constructor\r\n */\n\n\n function TextLink() {\n var _this = _super.call(this) || this;\n\n _this.className = \"TextLink\";\n _this.selectable = true;\n var interfaceColors = new InterfaceColorSet();\n _this.fill = interfaceColors.getFor(\"primaryButton\").brighten(0.3);\n\n var hoverState = _this.states.create(\"hover\");\n\n hoverState.properties.fill = interfaceColors.getFor(\"primaryButtonHover\").brighten(0.3);\n\n var downState = _this.states.create(\"down\");\n\n downState.properties.fill = interfaceColors.getFor(\"primaryButtonDown\").brighten(0.3);\n _this.cursorOverStyle = MouseCursorStyle.pointer;\n\n _this.applyTheme();\n\n return _this;\n }\n\n return TextLink;\n}(Label);\n\nexport { TextLink };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"TextLink\"] = TextLink;","/**\r\n * This module contains a base class for an SVG filter.\r\n *\r\n * Filters can be used to decorate, change and transform just about any DOM\r\n * element.\r\n *\r\n * A Filter works by applying one or more effects (primitives) to SVG element.\r\n *\r\n * For more information on how SVG filters work, refer to\r\n * [this MDN tutorial](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_Filters_Tutorial).\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../../Base\";\nimport { getGhostPaper } from \"../Paper\";\nimport { Animation, AnimationDisposer } from \"../../utils/Animation\";\nimport { List } from \"../../utils/List\";\nimport * as $object from \"../../utils/Object\";\nimport * as $iter from \"../../utils/Iterator\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Base filter class.\r\n *\r\n * This class while can be instantiated will not do anything. It is just a base\r\n * functionality for any other \"real\" filters to extend.\r\n *\r\n * Filters can be used to decorate, change and transform just about any DOM\r\n * element.\r\n *\r\n * A Filter works by applying one or more effects (primitives) to SVG element.\r\n *\r\n * For more information on how SVG filters work, refer to\r\n * [this MDN tutorial](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_Filters_Tutorial).\r\n *\r\n * @todo Example\r\n */\n\nvar Filter =\n/** @class */\nfunction (_super) {\n __extends(Filter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Filter() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A storage for Filter property/value pairs.\r\n *\r\n * @ignore Exclude from docs\r\n * @see {@link FilterProperties}\r\n */\n\n\n _this.properties = {};\n /**\r\n * Identifies if this object is a \"template\" and should not be treated as\r\n * real object that is drawn or actually used in the chart.\r\n */\n\n _this.isTemplate = false;\n /**\r\n * [_scale description]\r\n *\r\n * @todo Description\r\n */\n\n _this._scale = 1;\n /**\r\n * [_nonScaling description]\r\n *\r\n * @todo Description\r\n */\n\n _this._nonScaling = true;\n _this.className = \"Filter\"; // Create a list to hold primitives (effect elements)\n\n _this.filterPrimitives = new List();\n _this.properties.filterUnits = \"objectBoundingBox\"; // Automatically add added primitives to `_disposers` so they are discarded\n // when Filter object is destroyed (disposed)\n\n _this.filterPrimitives.events.on(\"inserted\", function (ev) {\n _this._disposers.push(ev.newValue);\n }); // Set default dimensions\n\n\n _this.width = 120;\n _this.height = 120; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Appends actual filter elements to the filter group.\r\n *\r\n * @ignore Exclude from docs\r\n * @param filterElement An SVG `<group>` element to add filter element to\r\n */\n\n\n Filter.prototype.appendPrimitives = function (filterElement) {\n $iter.each(this.filterPrimitives.iterator(), function (filterPrimitive) {\n filterElement.add(filterPrimitive);\n });\n };\n /**\r\n * Uses Transitions filter's values from current to target. This is used to\r\n * smoothly appear filter, rather than it pop into effect.\r\n *\r\n * @ignore Exclude from docs\r\n * @param animationOptions Animation options\r\n * @param duration Duration in milliseconds\r\n * @param easing Easing function\r\n * @return Animation instance\r\n */\n\n\n Filter.prototype.animate = function (animationOptions, duration, easing) {\n var animation = new Animation(this, animationOptions, duration, easing).start();\n return animation;\n };\n\n Object.defineProperty(Filter.prototype, \"width\", {\n /**\r\n * @return Width (%)\r\n */\n get: function get() {\n return this.properties[\"width\"];\n },\n\n /**\r\n * Width of the filter element in percent.\r\n *\r\n * If the filter is designed to \"bleed out\" of the original target element,\r\n * like for example a shadow, you need this bigger than 100, or the\r\n * non-fitting parts will be clipped.\r\n *\r\n * @default 120\r\n * @param value Width (px)\r\n */\n set: function set(value) {\n this.properties[\"width\"] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"height\", {\n /**\r\n * @return Height\r\n */\n get: function get() {\n return this.properties[\"height\"];\n },\n\n /**\r\n * Height of the filter element in percent.\r\n *\r\n * If the filter is designed to \"bleed out\" of the original target element,\r\n * like for example a shadow, you need this bigger than 100, or the\r\n * non-fitting parts will be clipped.\r\n *\r\n * @default 120\r\n * @param value Height (%)\r\n */\n set: function set(value) {\n this.properties[\"height\"] = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies properties from another [[Filter]] object.\r\n *\r\n * @param filter Source [[Filter]] object\r\n */\n\n Filter.prototype.copyFrom = function (filter) {\n var _this = this;\n\n _super.prototype.copyFrom.call(this, filter);\n\n $object.each(filter.properties, function (key, value) {\n _this[key] = value;\n });\n };\n\n Object.defineProperty(Filter.prototype, \"paper\", {\n /**\r\n * @return Paper\r\n */\n get: function get() {\n if (this._paper) {\n return this._paper;\n }\n\n return getGhostPaper();\n },\n\n /**\r\n * Sets [[Paper]] instance to create filter's elements in.\r\n *\r\n * @ignore Exclude from docs\r\n * @param paper Paper\r\n */\n set: function set(paper) {\n if (this._paper != paper) {\n this._paper = paper;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"animations\", {\n /**\r\n * All animations currently in play.\r\n *\r\n * @ignore Exclude from docs\r\n * @return List of animations\r\n */\n get: function get() {\n if (!this._animations) {\n this._animations = [];\n\n this._disposers.push(new AnimationDisposer(this._animations));\n }\n\n return this._animations;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"scale\", {\n /**\r\n * @ignore Exclude from docs\r\n */\n get: function get() {\n return this._scale;\n },\n\n /**\r\n * [[Sprite]] uses this method to inform filter about it's scale.\r\n *\r\n * @ignore Exclude from docs\r\n */\n set: function set(value) {\n this._scale = value;\n this.updateScale();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates filter properties which depend on scale.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Filter.prototype.updateScale = function () {// Dummy method for extending classes to override.\n };\n\n Object.defineProperty(Filter.prototype, \"filterUnits\", {\n /**\r\n * @return Filter units\r\n */\n get: function get() {\n return this.properties.filterUnits;\n },\n\n /**\r\n * Which units are used when drawing filter.\r\n *\r\n * Use `\"userSpaceOnUse\"` when applying filters on a perfectly straight line.\r\n *\r\n * @since 4.9.17\r\n * @default objectBoundingBox\r\n * @param value Filter units\r\n */\n set: function set(value) {\n this.properties.filterUnits = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"nonScaling\", {\n /**\r\n * @return Non scaling?\r\n */\n get: function get() {\n return this._nonScaling;\n },\n\n /**\r\n * If a filter is non scaling, it will look the same even if the sprite is\r\n * scaled, otherwise filter will scale together with a [[Sprite]].\r\n *\r\n * @default false\r\n * @param value Non scaling?\r\n */\n set: function set(value) {\n this._nonScaling = value;\n\n if (!value) {\n this._scale = 1;\n }\n\n this.updateScale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"sprite\", {\n /**\r\n * A target element this filter is currently attached to.\r\n *\r\n * We need to keep track of it because one filter can be used for just one\r\n * element, so we have to remove it from the old \"parent\" when attaching to\r\n * the new one.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Target element\r\n */\n set: function set(value) {\n this.setSprite(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets filter's target element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Element filter is being attached to\r\n */\n\n Filter.prototype.setSprite = function (value) {\n if (this._sprite && this._sprite != value) {\n this._sprite.filters.removeValue(this);\n }\n\n this._sprite = value;\n };\n\n return Filter;\n}(BaseObject);\n\nexport { Filter };","/**\r\n * Module for \"Drop Shadow\" filter.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Filter } from \"./Filter\";\nimport { color } from \"../../utils/Color\";\nimport { registry } from \"../../Registry\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creats a \"Drop Shadow\" filter.\r\n */\n\nvar DropShadowFilter =\n/** @class */\nfunction (_super) {\n __extends(DropShadowFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function DropShadowFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"DropShadowFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.color = color(\"#000\");\n _this.feGaussianBlur = _this.paper.add(\"feGaussianBlur\");\n\n _this.feGaussianBlur.attr({\n \"result\": \"blurOut\",\n \"in\": \"SourceGraphic\"\n });\n\n _this.filterPrimitives.push(_this.feGaussianBlur);\n\n _this.feOffset = _this.paper.add(\"feOffset\");\n\n _this.feOffset.attr({\n \"result\": \"offsetBlur\"\n });\n\n _this.filterPrimitives.push(_this.feOffset);\n\n _this.feFlood = _this.paper.add(\"feFlood\");\n\n _this.feFlood.attr({\n \"flood-color\": _this.color\n });\n\n _this.filterPrimitives.push(_this.feFlood);\n\n _this.feComposite = _this.paper.add(\"feComposite\");\n\n _this.feComposite.attr({\n \"in2\": \"offsetBlur\",\n operator: \"in\"\n });\n\n _this.filterPrimitives.push(_this.feComposite);\n\n _this.feMerge = _this.paper.addGroup(\"feMerge\");\n\n _this.feMerge.add(_this.paper.add(\"feMergeNode\"));\n\n _this.feMerge.add(_this.paper.add(\"feMergeNode\").attr({\n \"in\": \"SourceGraphic\"\n }));\n\n _this.filterPrimitives.push(_this.feMerge); // Set default properties\n\n\n _this.width = 200;\n _this.height = 200;\n _this.blur = 1.5;\n _this.dx = 3;\n _this.dy = 3;\n _this.opacity = 0.5;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(DropShadowFilter.prototype, \"color\", {\n /**\r\n * @return Color\r\n */\n get: function get() {\n return this.properties.color;\n },\n\n /**\r\n * Shadow color.\r\n *\r\n * @param value Color\r\n */\n set: function set(value) {\n this.properties.color = value;\n\n if (this.feFlood) {\n this.feFlood.attr({\n \"flood-color\": value\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DropShadowFilter.prototype, \"opacity\", {\n /**\r\n * @return Opacity (0-1)\r\n */\n get: function get() {\n return this.properties.opacity;\n },\n\n /**\r\n * Opacity of the shadow. (0-1)\r\n *\r\n * @param value Opacity (0-1)\r\n */\n set: function set(value) {\n this.properties.opacity = value;\n this.feFlood.attr({\n \"flood-opacity\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DropShadowFilter.prototype, \"dx\", {\n /**\r\n * @return Horizontal offset (px)\r\n */\n get: function get() {\n return this.properties.dx;\n },\n\n /**\r\n * Horizontal offset in pixels.\r\n *\r\n * @param value Horizontal offset (px)\r\n */\n set: function set(value) {\n this.properties.dx = value;\n this.feOffset.attr({\n \"dx\": value / this.scale\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DropShadowFilter.prototype, \"dy\", {\n /**\r\n * @return Vertical offset (px)\r\n */\n get: function get() {\n return this.properties.dy;\n },\n\n /**\r\n * Vertical offset in pixels.\r\n *\r\n * @param value Vertical offset (px)\r\n */\n set: function set(value) {\n this.properties.dy = value;\n this.feOffset.attr({\n \"dy\": value / this.scale\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DropShadowFilter.prototype, \"blur\", {\n /**\r\n * @return Blur\r\n */\n get: function get() {\n return this.properties.blur;\n },\n\n /**\r\n * Blur.\r\n *\r\n * @param value Blur\r\n */\n set: function set(value) {\n this.properties.blur = value;\n this.feGaussianBlur.attr({\n \"stdDeviation\": value / this.scale\n });\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * [updateScale description]\r\n *\r\n * @todo Description\r\n */\n\n DropShadowFilter.prototype.updateScale = function () {\n this.dx = this.dx;\n this.dy = this.dy;\n this.blur = this.blur;\n };\n\n return DropShadowFilter;\n}(Filter);\n\nexport { DropShadowFilter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"DropShadowFilter\"] = DropShadowFilter;","/**\r\n * Provides functionality used to creating and showing tooltips (balloons).\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { registry } from \"../../core/Registry\";\nimport { PointedRectangle } from \"./PointedRectangle\";\nimport { Label } from \"../elements/Label\";\nimport { Animation } from \"../utils/Animation\";\nimport { color } from \"../utils/Color\";\nimport { DropShadowFilter } from \"../rendering/filters/DropShadowFilter\";\nimport * as $math from \"../utils/Math\";\nimport * as $ease from \"../utils/Ease\";\nimport * as $utils from \"../utils/Utils\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Tooltip displays text and/or multimedia information in a balloon over chart\r\n * area.\r\n * @see {@link ITooltipEvents} for a list of available events\r\n * @see {@link ITooltipAdapters} for a list of available Adapters\r\n */\n\nvar Tooltip =\n/** @class */\nfunction (_super) {\n __extends(Tooltip, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Tooltip() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Holds numeric boundary values. Calculated from the `boundingContainer`.\r\n * @ignore\r\n */\n\n\n _this._boundingRect = {\n x: -40000,\n y: -40000,\n width: 80000,\n height: 80000\n };\n /**\r\n * Coordinates tooltip's pointer (stem) should point to.\r\n */\n\n _this._pointTo = {\n x: 0,\n y: 0\n };\n /**\r\n * If set to `true` the pointer/stem of the Tooltip will not go outside\r\n * Tooltip's width or height depending on pointer's orientation.\r\n *\r\n * @default false\r\n */\n\n _this.fitPointerToBounds = false;\n /**\r\n * If `tooltipOrientation` is vertical, it can be drawn below or above point\r\n * We need to know this when solving overlapping.\r\n */\n\n _this._verticalOrientation = \"up\";\n /**\r\n * @ignore\r\n */\n\n _this.fixDoc = true;\n _this.className = \"Tooltip\";\n _this.isMeasured = false;\n _this.getFillFromObject = true;\n\n _this.margin(5, 5, 5, 5);\n\n _this.defaultState.transitionDuration = 1;\n _this.hiddenState.transitionDuration = 1; // Create chrome/background\n\n var background = _this.background;\n background.interactionsEnabled = false;\n background.fillOpacity = 0.9;\n background.strokeWidth = 1;\n background.strokeOpacity = 1;\n background.stroke = color(\"#ffffff\");\n background.cornerRadius = 3;\n background.pointerLength = 6;\n background.pointerBaseWidth = 10;\n var dropShadow = new DropShadowFilter();\n dropShadow.dy = 1;\n dropShadow.dx = 1;\n dropShadow.opacity = 0.5;\n background.filters.push(dropShadow);\n _this.autoTextColor = true; // Create text element\n\n var label = _this.createChild(Label);\n\n label.shouldClone = false;\n _this.label = label;\n label.padding(7, 12, 4, 12);\n label.interactionsEnabled = false;\n label.horizontalCenter = \"middle\";\n label.fill = color(\"#ffffff\");\n\n _this._disposers.push(label);\n\n _this.label.events.on(\"sizechanged\", _this.drawBackground, _this);\n\n _this.label.zIndex = 1; // @todo remove this line when bg sorting is solved\n // Set defaults\n\n _this.pointerOrientation = \"vertical\";\n _this.animationDuration = 0;\n _this.animationEasing = $ease.cubicOut;\n\n _this.setPropertyValue(\"showInViewport\", false); // Set accessibility options\n\n\n _this.role = \"tooltip\";\n _this.visible = false;\n _this.opacity = 0;\n _this.x = 0;\n _this.y = 0;\n\n _this.events.on(\"visibilitychanged\", _this.handleVisibility, _this); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n Tooltip.prototype.handleVisibility = function () {\n if (this.visible) {\n this.label.invalidate();\n }\n };\n\n Object.defineProperty(Tooltip.prototype, \"getStrokeFromObject\", {\n /**\r\n * Specifies if tooltip background should get stroke color from the sprite it is pointing to.\r\n *\r\n * @return {boolean}\r\n * @default false\r\n */\n get: function get() {\n return this.getPropertyValue(\"getStrokeFromObject\");\n },\n\n /**\r\n * Specifies if tooltip background should get stroke color from the sprite it is pointing to.\r\n *\r\n * @param value boolean\r\n */\n set: function set(value) {\n this.setPropertyValue(\"getStrokeFromObject\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"autoTextColor\", {\n /**\r\n * @return {boolean}\r\n */\n get: function get() {\n return this.getPropertyValue(\"autoTextColor\");\n },\n\n /**\r\n * Specifies if text color should be chosen automatically for a better\r\n * readability.\r\n *\r\n * IMPORTANT: this feature is generally ignored, if `getFillFromObject = false`.\r\n *\r\n * If inheriting of `fill` color from object tooltip is displayed for is\r\n * disabled, this feature will not work. If you are explicitly setting a\r\n * color for tooltip background, you may set a color for its label as well\r\n * using `tooltip.label.fill` property.\r\n *\r\n *\r\n * @param value boolean\r\n */\n set: function set(value) {\n this.setPropertyValue(\"autoTextColor\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"keepTargetHover\", {\n /**\r\n * @return Keep target hovered?\r\n */\n get: function get() {\n return this.getPropertyValue(\"keepTargetHover\");\n },\n\n /**\r\n * If this tooltip is displayed on hover on some other object, keep that\r\n * element hovered if hovering on the tooltip.\r\n *\r\n * @default false\r\n * @since 4.1.13\r\n * @param value Keep target hovered?\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this.setPropertyValue(\"keepTargetHover\", value, true)) {\n if (value) {\n this.hoverable = true;\n this.background.interactionsEnabled = true;\n\n this._disposers.push(this.events.on(\"over\", function (ev) {\n if (_this.targetSprite && _this.targetSprite.hoverable) {\n _this.targetSprite.isHover = true;\n }\n }));\n\n this._disposers.push(this.events.on(\"out\", function (ev) {\n if (_this.targetSprite && _this.targetSprite.hoverable) {\n //this.hideTooltip();\n //this.targetSprite.handleOut();\n _this.targetSprite.isHover = false;\n }\n }));\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"showInViewport\", {\n /**\r\n * @return Force showing tooltip?\r\n */\n get: function get() {\n return this.getPropertyValue(\"showInViewport\");\n },\n\n /**\r\n * Normally, a tooltip will hide itself if it is pointing to a coordinate\r\n * that is outside viewport.\r\n *\r\n * Setting this setting to `true` will override that and make tooltip\r\n * appear next to the viewport edge closest to the target point.\r\n *\r\n * @default false\r\n * @since 4.5.7\r\n * @param value Force showing tooltip?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"showInViewport\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"getFillFromObject\", {\n /**\r\n * Specifies if tooltip background should get fill color from the sprite it is pointing to.\r\n *\r\n * @return {boolean}\r\n * @default true\r\n */\n get: function get() {\n return this.getPropertyValue(\"getFillFromObject\");\n },\n\n /**\r\n * @param value boolean\r\n */\n set: function set(value) {\n this.setPropertyValue(\"getFillFromObject\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates and returns a background element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\n\n Tooltip.prototype.createBackground = function () {\n return new PointedRectangle();\n };\n\n Object.defineProperty(Tooltip.prototype, \"pointerOrientation\", {\n /**\r\n * @return Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"pointerOrientation\");\n },\n\n /**\r\n * Pointer orientation: `\"horizontal\"`, `\"vertical\"`, `\"up\"`, `\"down\"`,\r\n * `\"right\"`, or `\"left\"`.\r\n *\r\n * Options`\"horizontal\"` or `\"vertical\"` are location-aware, meaning they\r\n * will change position of the Tooltip based on the target point's position\r\n * in relation to chart center.\r\n *\r\n * Options `\"up\"`, `\"down\"`, `\"right\"`, `\"left\"` are static and will point\r\n * in the specified direction regardless of the position, even if that means\r\n * going out of chart/screen bounds.\r\n *\r\n * IMPORTANT: in some situations, like having multiple tooltips stacked for\r\n * multiple series, the `\"up\"` and `\"down\"` values might be ignored in order\r\n * to make tooltip overlap algorithm work.\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\n set: function set(value) {\n this.setPropertyValue(\"pointerOrientation\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"animationDuration\", {\n /**\r\n * @return Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"animationDuration\");\n },\n\n /**\r\n * Duration in milliseconds for the animation to take place when the tooltip\r\n * is moving from one place to another.\r\n *\r\n * @default 0\r\n * @param value number\r\n */\n set: function set(value) {\n this.setPropertyValue(\"animationDuration\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"animationEasing\", {\n /**\r\n * @return {Function}\r\n */\n get: function get() {\n return this.getPropertyValue(\"animationEasing\");\n },\n\n /**\r\n * Tooltip animation (moving from one place to another) easing function.\r\n *\r\n * @default $ease.cubicOut\r\n * @param value (value: number) => number\r\n */\n set: function set(value) {\n this.setPropertyValue(\"animationEasing\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"html\", {\n /**\r\n * @return HTML content\r\n */\n get: function get() {\n return this.label.html;\n },\n\n /**\r\n * HTML content for the Tooltip.\r\n *\r\n * Provided value will be used as is, without applying any further\r\n * formatting to it.\r\n *\r\n * @param value HTML content\r\n */\n set: function set(value) {\n if (this.label.html != value) {\n this.label.html = value;\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"text\", {\n /**\r\n * @return SVG text\r\n */\n get: function get() {\n return this.label.text;\n },\n\n /**\r\n * SVG text content for the Tooltip.\r\n *\r\n * Text can have a number of formatting options supported by\r\n * [[TextFormatter]].\r\n *\r\n * @param value SVG text\r\n */\n set: function set(value) {\n if (this.label.text != value) {\n this.label.text = value;\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates the Tooltip.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Tooltip.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var label = this.label;\n\n if (label.invalid) {\n label.validate();\n }\n\n var x = this._pointTo.x;\n var y = this._pointTo.y;\n var boundingRect = this._boundingRect;\n var textW = label.measuredWidth;\n var textH = label.measuredHeight;\n var pointerLength = this.background.pointerLength;\n var textX;\n var textY;\n\n if (this.ignoreBounds) {\n boundingRect = undefined;\n } // try to handle if text is wider than br\n\n\n if (boundingRect && this.fixDoc && textW > boundingRect.width) {\n // TODO maybe this isn't needed ?\n $utils.spritePointToDocument({\n x: boundingRect.x,\n y: boundingRect.y\n }, this.parent);\n var p1 = $utils.spritePointToDocument({\n x: boundingRect.x + boundingRect.width,\n y: boundingRect.y + boundingRect.height\n }, this.parent);\n var documentWidth = document.body.offsetWidth; // TODO maybe this isn't needed ?\n\n $utils.used(document.body.offsetHeight);\n\n if (p1.x > documentWidth / 2) {\n boundingRect.x = boundingRect.width - textW;\n } else {\n boundingRect.width = boundingRect.x + textW;\n }\n }\n\n var pointerOrientation = this.pointerOrientation; // horizontal\n\n if (pointerOrientation == \"horizontal\" || pointerOrientation == \"left\" || pointerOrientation == \"right\") {\n textY = -textH / 2;\n\n if (pointerOrientation == \"horizontal\") {\n if (boundingRect && x > boundingRect.x + boundingRect.width / 2) {\n textX = -textW / 2 - pointerLength;\n } else {\n textX = textW / 2 + pointerLength;\n }\n } else if (pointerOrientation == \"left\") {\n textX = textW / 2 + pointerLength;\n } else {\n textX = -textW / 2 - pointerLength;\n }\n } // vertical pointer\n else {\n if (boundingRect) {\n textX = $math.fitToRange(0, boundingRect.x - x + textW / 2, boundingRect.x - x + boundingRect.width - textW / 2);\n }\n\n if (pointerOrientation == \"vertical\") {\n if (boundingRect && y > boundingRect.y + textH + pointerLength) {\n textY = -textH - pointerLength;\n this._verticalOrientation = \"up\";\n } else {\n textY = pointerLength;\n this._verticalOrientation = \"down\";\n }\n } else if (pointerOrientation == \"down\") {\n textY = -textH - pointerLength;\n this._verticalOrientation = \"up\";\n } else {\n textY = pointerLength;\n this._verticalOrientation = \"down\";\n }\n }\n\n if (boundingRect) {\n textY = $math.fitToRange(textY, boundingRect.y - y, boundingRect.y + boundingRect.height - textH - y);\n }\n\n label.x = textX;\n label.y = textY;\n this.drawBackground();\n };\n /**\r\n * Overrides functionality from the superclass.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Tooltip.prototype.updateBackground = function () {\n this.group.addToBack(this.background.group);\n };\n /**\r\n * Draws Tooltip background (chrome, background and pointer/stem).\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Tooltip.prototype.drawBackground = function () {\n var label = this.label;\n var background = this.background;\n var textWidth = label.measuredWidth;\n var textHeight = label.measuredHeight;\n var boundingRect = this._boundingRect;\n var bgWidth = textWidth;\n var bgX = label.pixelX - textWidth / 2;\n var bgHeight = textHeight;\n var bgY = label.pixelY;\n var x = this._pointTo.x;\n var y = this._pointTo.y;\n var boundX1 = boundingRect.x - x;\n var boundX2 = boundX1 + boundingRect.width;\n var boundY1 = boundingRect.y - y;\n var boundY2 = boundY1 + boundingRect.height;\n background.x = bgX;\n background.y = bgY;\n background.width = bgWidth;\n background.height = bgHeight;\n\n if (this.fitPointerToBounds) {\n background.pointerX = $math.fitToRange(-background.x, boundX1 - background.x, boundX2 - background.x);\n background.pointerY = $math.fitToRange(-background.y, boundY1 - background.y, boundY2 - background.y);\n } else {\n background.pointerX = -background.x;\n background.pointerY = -background.y;\n }\n\n background.validate();\n };\n /**\r\n *\r\n */\n\n\n Tooltip.prototype.delayedPointTo = function (point, instantly) {\n var _this = this;\n\n if (this._pointToDisposer) {\n this._pointToDisposer.dispose();\n }\n\n this._pointToDisposer = registry.events.once(\"exitframe\", function () {\n _this.pointTo(point, instantly);\n });\n this.addDisposer(this._pointToDisposer);\n };\n /**\r\n * Set nes tooltip's anchor point and moves whole tooltip.\r\n *\r\n * @param x X coordinate\r\n * @param y Y coordinate\r\n */\n\n\n Tooltip.prototype.pointTo = function (point, instantly) {\n if (this._pointTo.x != point.x || this._pointTo.y != point.y) {\n this._pointTo = point;\n this.invalidate(); // this helps to avoid strange animation from nowhere on initial show or when balloon was hidden already\n\n if (!this.visible || instantly) {\n this.moveTo(this._pointTo);\n\n if (this._animation) {\n this._animation.kill();\n }\n } else {\n // helps to avoid flicker on top/left corner\n if (this.pixelX == 0 && this.pixelY == 0) {\n this.moveTo(this._pointTo);\n } else {\n if (this._animation) {\n this._animation.kill();\n }\n\n this._animation = new Animation(this, [{\n property: \"x\",\n to: point.x,\n from: this.pixelX\n }, {\n property: \"y\",\n to: point.y,\n from: this.pixelY\n }], this.animationDuration, this.animationEasing).start();\n }\n }\n }\n };\n /**\r\n * Sets numeric boundaries Tooltip needs to obey (so it does not go outside\r\n * specific area).\r\n *\r\n * @ignore Exclude from docs\r\n * @param rectangle Boundary rectangle\r\n */\n\n\n Tooltip.prototype.setBounds = function (rectangle) {\n var oldRect = this._boundingRect;\n\n if (oldRect.x != rectangle.x || oldRect.y != rectangle.y || oldRect.width != rectangle.width || oldRect.height != rectangle.height) {\n this._boundingRect = rectangle;\n this.invalidate();\n }\n };\n\n Object.defineProperty(Tooltip.prototype, \"boundingContainer\", {\n /**\r\n * Sets a [[Container]] instance to be used when calculating numeric\r\n * boundaries for the Tooltip.\r\n *\r\n * @ignore Exclude from docs\r\n * @param container Boundary container\r\n */\n set: function set(container) {\n this._boundingContainer = container; // TODO remove closures ?\n\n container.events.on(\"sizechanged\", this.updateBounds, this);\n container.events.on(\"positionchanged\", this.updateBounds, this);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates numeric boundaries for the Tooltip, based on the\r\n * `boundingCountrainer`.\r\n */\n\n Tooltip.prototype.updateBounds = function () {\n var boundingContainer = this._boundingContainer; // to global\n\n var rect = $utils.spriteRectToSvg({\n x: boundingContainer.pixelX,\n y: boundingContainer.pixelY,\n width: boundingContainer.maxWidth,\n height: boundingContainer.maxHeight\n }, boundingContainer);\n this.setBounds(rect);\n };\n\n Object.defineProperty(Tooltip.prototype, \"ignoreBounds\", {\n /**\r\n * @return Ignore chart bounds?\r\n */\n get: function get() {\n return this.getPropertyValue(\"ignoreBounds\");\n },\n\n /**\r\n * Normally, a tooltip's position will be adjusted so it always fits into\r\n * chart's coundaries.\r\n *\r\n * Setting this to `false` will disable such checks and will allow tooltip\r\n * to \"bleed over\" the edge of the chart.\r\n *\r\n * @default false\r\n * @since 4.10.8\r\n * @param value Ignore chart bounds?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"ignoreBounds\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"verticalOrientation\", {\n /**\r\n * If tooltipOrientation is vertical, it can be drawn below or above point.\r\n * We need to know this when solving overlapping.\r\n *\r\n * @ignore Exclude from docs\r\n * @return \"up\" | \"down\"\r\n */\n get: function get() {\n return this._verticalOrientation;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"tooltip\", {\n /**\r\n * To avoid stackoverflow\r\n * @ignore\r\n */\n get: function get() {\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\n\n Tooltip.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.label.copyFrom(source.label);\n\n if (source._boundingRect) {\n this._boundingRect = source._boundingRect;\n }\n };\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n Tooltip.prototype.asFunction = function (field) {\n return field == \"animationEasing\" || _super.prototype.asIs.call(this, field);\n };\n\n return Tooltip;\n}(Container);\n\nexport { Tooltip };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Tooltip\"] = Tooltip;","/**\r\n * Functionality for drawing a trapezoid.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { percent } from \"../../core/utils/Percent\";\nimport { registry } from \"../Registry\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $type from \"../utils/Type\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a Trapezoid.\r\n *\r\n * @see {@link ITrapezoidEvents} for a list of available events\r\n * @see {@link ITrapezoidAdapters} for a list of available Adapters\r\n */\n\nvar Trapezoid =\n/** @class */\nfunction (_super) {\n __extends(Trapezoid, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Trapezoid() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Trapezoid\";\n _this.element = _this.paper.add(\"path\");\n _this.topSide = percent(100);\n _this.bottomSide = percent(100);\n _this.leftSide = percent(100);\n _this.rightSide = percent(100);\n _this.isMeasured = false; // todo: add measureElement\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Trapezoid.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var w = this.pixelWidth;\n var h = this.pixelHeight;\n var ts = $utils.relativeToValue(this.topSide, w);\n var bs = $utils.relativeToValue(this.bottomSide, w);\n var ls = $utils.relativeToValue(this.leftSide, h);\n var rs = $utils.relativeToValue(this.rightSide, h); // 1----2\n // | |\n // 4----3\n\n var x0 = (w - ts) / 2;\n var y0 = (h - ls) / 2;\n var x1 = w - (w - ts) / 2;\n var y1 = (h - rs) / 2;\n var x2 = w - (w - bs) / 2;\n var y2 = h - (h - rs) / 2;\n var x3 = (w - bs) / 2;\n var y3 = h - (h - ls) / 2;\n var mt = \"\";\n var mr = \"\";\n var mb = \"\";\n var ml = \"\";\n\n if ($type.hasValue(this.horizontalNeck)) {\n var hn = this.horizontalNeck.value;\n mt = $path.lineTo({\n x: w * hn,\n y: Math.max(y0, y1)\n });\n mb = $path.lineTo({\n x: w * hn,\n y: Math.min(y2, y3)\n });\n }\n\n if ($type.hasValue(this.verticalNeck)) {\n var vn = this.verticalNeck.value;\n mr = $path.lineTo({\n x: Math.min(x1, x2),\n y: h * vn\n });\n ml = $path.lineTo({\n x: Math.max(x0, x3),\n y: h * vn\n });\n }\n\n var path = $path.moveTo({\n x: x0,\n y: y0\n }) + mt + $path.lineTo({\n x: x1,\n y: y1\n }) + mr + $path.lineTo({\n x: x2,\n y: y2\n }) + mb + $path.lineTo({\n x: x3,\n y: y3\n }) + ml;\n this.path = path;\n };\n\n Object.defineProperty(Trapezoid.prototype, \"topSide\", {\n /**\r\n * @return Width\r\n */\n get: function get() {\n return this.getPropertyValue(\"topSide\");\n },\n\n /**\r\n * Wdith of the top side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Width\r\n */\n set: function set(value) {\n this.setPercentProperty(\"topSide\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trapezoid.prototype, \"bottomSide\", {\n /**\r\n * @return Width\r\n */\n get: function get() {\n return this.getPropertyValue(\"bottomSide\");\n },\n\n /**\r\n * Wdith of the bottom side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Width\r\n */\n set: function set(value) {\n this.setPercentProperty(\"bottomSide\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trapezoid.prototype, \"leftSide\", {\n /**\r\n * @return Height\r\n */\n get: function get() {\n return this.getPropertyValue(\"leftSide\");\n },\n\n /**\r\n * Height of the left side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Height\r\n */\n set: function set(value) {\n this.setPercentProperty(\"leftSide\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trapezoid.prototype, \"rightSide\", {\n /**\r\n * @return Height\r\n */\n get: function get() {\n return this.getPropertyValue(\"rightSide\");\n },\n\n /**\r\n * Height of the right side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Height\r\n */\n set: function set(value) {\n this.setPercentProperty(\"rightSide\", value, true, false, 10, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trapezoid.prototype, \"horizontalNeck\", {\n /**\r\n * @return Horizontal neck position\r\n */\n get: function get() {\n return this.getPropertyValue(\"horizontalNeck\");\n },\n\n /**\r\n * A relative vertical position of the \"neck\". If the top and bottom sides\r\n * are of different width, and `horizontalNeck` is set, a choke point\r\n * will be created at that position, creating a funnel shape.\r\n *\r\n * @param value Horizontal neck position\r\n */\n set: function set(value) {\n this.setPropertyValue(\"horizontalNeck\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trapezoid.prototype, \"verticalNeck\", {\n /**\r\n * @return Vertical neck position\r\n */\n get: function get() {\n return this.getPropertyValue(\"verticalNeck\");\n },\n\n /**\r\n * A relative horizontal position of the \"neck\". If the left and right sides\r\n * are of different height, and `verticalNeck` is set, a choke point\r\n * will be created at that position, creating a funnel shape.\r\n *\r\n * @param value Vertical neck position\r\n */\n set: function set(value) {\n this.setPropertyValue(\"verticalNeck\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return Trapezoid;\n}(Sprite);\n\nexport { Trapezoid };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Trapezoid\"] = Trapezoid;","/**\r\n * Functionality for drawing triangles.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a triangle.\r\n *\r\n * @see {@link ITriangleEvents} for a list of available events\r\n * @see {@link ITriangleAdapters} for a list of available Adapters\r\n */\n\nvar Triangle =\n/** @class */\nfunction (_super) {\n __extends(Triangle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Triangle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Triangle\";\n _this.element = _this.paper.add(\"path\");\n _this.direction = \"top\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Triangle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var w = this.pixelWidth;\n var h = this.pixelHeight;\n var path;\n\n switch (this.direction) {\n case \"right\":\n path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: w,\n y: h / 2\n }) + $path.lineTo({\n x: 0,\n y: h\n }) + $path.closePath();\n break;\n\n case \"left\":\n path = $path.moveTo({\n x: w,\n y: 0\n }) + $path.lineTo({\n x: 0,\n y: h / 2\n }) + $path.lineTo({\n x: w,\n y: h\n }) + $path.closePath();\n break;\n\n case \"bottom\":\n path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: w,\n y: 0\n }) + $path.lineTo({\n x: w / 2,\n y: h\n }) + $path.closePath();\n break;\n\n case \"top\":\n path = $path.moveTo({\n x: w / 2,\n y: 0\n }) + $path.lineTo({\n x: w,\n y: h\n }) + $path.lineTo({\n x: 0,\n y: h\n }) + $path.closePath();\n break;\n }\n\n this.path = path;\n };\n\n Object.defineProperty(Triangle.prototype, \"direction\", {\n /**\r\n * Returns direction of a triangle\r\n *\r\n * @return value\r\n */\n get: function get() {\n return this.getPropertyValue(\"direction\");\n },\n\n /**\r\n * Sets direction of a triangle\r\n *\r\n * @param value\r\n */\n set: function set(value) {\n this.setPropertyValue(\"direction\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return Triangle;\n}(Sprite);\n\nexport { Triangle };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Triangle\"] = Triangle;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { registry } from \"../Registry\";\nimport * as $path from \"./Path\";\nimport * as $array from \"../utils/Array\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $math from \"../utils/Math\";\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar Tension =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n */\n function Tension(tensionX, tensionY) {\n this._tensionX = tensionX;\n this._tensionY = tensionY;\n }\n /**\r\n * [smooth description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param points [description]\r\n * @return [description]\r\n */\n\n\n Tension.prototype.smooth = function (points) {\n for (var i = points.length - 1; i > 0; i--) {\n var p0 = points[i];\n var p1 = points[i - 1];\n\n if (Math.abs(p0.x - p1.x) < 0.1 && Math.abs(p0.y - p1.y) < 0.1) {\n points.splice(i - 1, 1);\n }\n }\n\n var tensionX = this._tensionX;\n var tensionY = this._tensionY;\n\n if (points.length < 3 || tensionX >= 1 && tensionY >= 1) {\n return $path.polyline(points);\n }\n\n var first = points[0];\n var last = points[points.length - 1];\n var closed = false;\n\n if ($math.round(first.x, 3) == $math.round(last.x) && $math.round(first.y) == $math.round(last.y)) {\n closed = true;\n } // Can't moveTo here, as it wont be possible to have fill then.\n\n\n var path = \"\";\n\n for (var i = 0, len = points.length - 1; i < len; i++) {\n var p0 = points[i - 1];\n var p1 = points[i];\n var p2 = points[i + 1];\n var p3 = points[i + 2];\n\n if (i === 0) {\n if (closed) {\n p0 = points[points.length - 2];\n } else {\n p0 = points[i];\n }\n } else if (i == points.length - 2) {\n if (closed) {\n p3 = points[1];\n } else {\n p3 = points[i + 1];\n }\n }\n\n var controlPointA = $math.getCubicControlPointA(p0, p1, p2, p3, tensionX, tensionY);\n var controlPointB = $math.getCubicControlPointB(p0, p1, p2, p3, tensionX, tensionY);\n path += $path.cubicCurveTo(p2, controlPointA, controlPointB);\n }\n\n return path;\n };\n\n return Tension;\n}();\n\nexport { Tension };\n/**\r\n * Returns a waved line SVG path between two points.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point1 Starting point\r\n * @param point2 Ending point\r\n * @param waveLength Wave length\r\n * @param waveHeight Wave height\r\n * @param adjustWaveLength Adjust wave length based on the actual line length\r\n * @return SVG path\r\n */\n\nexport function wavedLine(point1, point2, waveLength, waveHeight, tension, adjustWaveLength) {\n var x1 = point1.x;\n var y1 = point1.y;\n var x2 = point2.x;\n var y2 = point2.y;\n var distance = $math.getDistance(point1, point2);\n\n if (adjustWaveLength) {\n waveLength = distance / Math.round(distance / waveLength);\n }\n\n var d = registry.getCache($utils.stringify([\"wavedLine\", point1.x, point2.x, point1.y, point2.y, waveLength, waveHeight]));\n\n if (!d) {\n if (distance > 0) {\n var angle = Math.atan2(y2 - y1, x2 - x1);\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var waveLengthX = waveLength * cos;\n var waveLengthY = waveLength * sin;\n\n if (waveLength <= 1 || waveHeight <= 1) {\n d = $path.lineTo(point2);\n } else {\n var halfWaveCount = Math.round(2 * distance / waveLength);\n var points = [];\n var sign_1 = 1;\n\n if (x2 < x1) {\n sign_1 *= -1;\n }\n\n if (y2 < y1) {\n sign_1 *= -1;\n }\n\n for (var i = 0; i <= halfWaveCount; i++) {\n sign_1 *= -1;\n var x = x1 + i * waveLengthX / 2 + sign_1 * waveHeight / 2 * sin;\n var y = y1 + i * waveLengthY / 2 - sign_1 * waveHeight / 2 * cos;\n points.push({\n x: x,\n y: y\n });\n }\n\n d = new Tension(tension, tension).smooth(points);\n }\n } else {\n d = \"\";\n }\n\n registry.setCache($utils.stringify([\"wavedLine\", point1.x, point2.x, point1.y, point2.y, waveLength, waveHeight]), d);\n }\n\n return d;\n}\n\nvar Monotone =\n/** @class */\nfunction () {\n function Monotone(reversed, info) {\n this._reversed = reversed;\n this._closed = info.closed;\n } // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n // \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\n\n\n Monotone.prototype._curve = function (x0, x1, y0, y1, t0, t1) {\n var dx = (x1 - x0) / 3;\n\n if (this._reversed) {\n return $path.cubicCurveTo({\n x: y1,\n y: x1\n }, {\n x: y0 + dx * t0,\n y: x0 + dx\n }, {\n x: y1 - dx * t1,\n y: x1 - dx\n });\n } else {\n return $path.cubicCurveTo({\n x: x1,\n y: y1\n }, {\n x: x0 + dx,\n y: y0 + dx * t0\n }, {\n x: x1 - dx,\n y: y1 - dx * t1\n });\n }\n };\n\n Monotone.prototype.smooth = function (points) {\n var _this = this;\n\n var x0 = NaN;\n var x1 = NaN;\n var y0 = NaN;\n var y1 = NaN;\n var t0 = NaN;\n var point = 0;\n var output = \"\";\n $array.each(points, function (_a) {\n var x = _a.x,\n y = _a.y;\n\n if (_this._reversed) {\n var temp = x;\n x = y;\n y = temp;\n }\n\n var t1 = NaN;\n\n if (!(x === x1 && y === y1)) {\n switch (point) {\n case 0:\n point = 1;\n\n if (_this._reversed) {\n output += $path.lineTo({\n x: y,\n y: x\n });\n } else {\n output += $path.lineTo({\n x: x,\n y: y\n });\n }\n\n break;\n\n case 1:\n point = 2;\n break;\n\n case 2:\n point = 3;\n output += _this._curve(x0, x1, y0, y1, slope2(x0, x1, y0, y1, t1 = slope3(x0, x1, y0, y1, x, y)), t1);\n break;\n\n default:\n output += _this._curve(x0, x1, y0, y1, t0, t1 = slope3(x0, x1, y0, y1, x, y));\n break;\n }\n\n x0 = x1;\n x1 = x;\n y0 = y1;\n y1 = y;\n t0 = t1;\n }\n });\n\n switch (point) {\n case 2:\n if (this._reversed) {\n output += $path.lineTo({\n x: y1,\n y: x1\n });\n } else {\n output += $path.lineTo({\n x: x1,\n y: y1\n });\n }\n\n break;\n\n case 3:\n output += this._curve(x0, x1, y0, y1, t0, slope2(x0, x1, y0, y1, t0));\n break;\n }\n\n if (this._closed) {\n output += $path.closePath();\n }\n\n return output;\n };\n\n return Monotone;\n}();\n\nexport { Monotone }; // TODO move this someplace else\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction slope2(x0, x1, y0, y1, t) {\n var h = x1 - x0;\n return h ? (3 * (y1 - y0) / h - t) / 2 : t;\n}\n\nfunction slope3(x0, x1, y0, y1, x2, y2) {\n var h0 = x1 - x0;\n var h1 = x2 - x1;\n var s0 = (y1 - y0) / (h0 || h1 < 0 && -0);\n var s1 = (y2 - y1) / (h1 || h0 < 0 && -0);\n var p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\nvar MonotoneX =\n/** @class */\nfunction (_super) {\n __extends(MonotoneX, _super);\n\n function MonotoneX(info) {\n return _super.call(this, false, info) || this;\n }\n\n return MonotoneX;\n}(Monotone);\n\nexport { MonotoneX };\n\nvar MonotoneY =\n/** @class */\nfunction (_super) {\n __extends(MonotoneY, _super);\n\n function MonotoneY(info) {\n return _super.call(this, true, info) || this;\n }\n\n return MonotoneY;\n}(Monotone);\n\nexport { MonotoneY };\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\nvar Basis =\n/** @class */\nfunction () {\n /**\r\n * Constructor.\r\n *\r\n * @param info [description]\r\n */\n function Basis(info) {\n this._closed = info.closed;\n }\n /**\r\n * [smooth description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param points [description]\r\n * @return [description]\r\n */\n\n\n Basis.prototype.smooth = function (points) {\n var _this = this;\n\n var x0 = NaN;\n var x1 = NaN;\n var x2 = NaN;\n var x3 = NaN;\n var x4 = NaN;\n var y0 = NaN;\n var y1 = NaN;\n var y2 = NaN;\n var y3 = NaN;\n var y4 = NaN;\n var point = 0;\n var output = \"\";\n\n var pushCurve = function pushCurve(x, y) {\n output += $path.cubicCurveTo({\n x: (x0 + 4 * x1 + x) / 6,\n y: (y0 + 4 * y1 + y) / 6\n }, {\n x: (2 * x0 + x1) / 3,\n y: (2 * y0 + y1) / 3\n }, {\n x: (x0 + 2 * x1) / 3,\n y: (y0 + 2 * y1) / 3\n });\n };\n\n var pushPoint = function pushPoint(_a) {\n var x = _a.x,\n y = _a.y;\n\n switch (point) {\n case 0:\n point = 1;\n\n if (_this._closed) {\n x2 = x;\n y2 = y;\n } else {\n output += $path.lineTo({\n x: x,\n y: y\n });\n }\n\n break;\n\n case 1:\n point = 2;\n\n if (_this._closed) {\n x3 = x;\n y3 = y;\n }\n\n break;\n\n case 2:\n point = 3;\n\n if (_this._closed) {\n x4 = x;\n y4 = y;\n output += $path.moveTo({\n x: (x0 + 4 * x1 + x) / 6,\n y: (y0 + 4 * y1 + y) / 6\n });\n break;\n } else {\n output += $path.lineTo({\n x: (5 * x0 + x1) / 6,\n y: (5 * y0 + y1) / 6\n }); // fall-through\n }\n\n default:\n pushCurve(x, y);\n break;\n }\n\n x0 = x1;\n x1 = x;\n y0 = y1;\n y1 = y;\n };\n\n $array.each(points, pushPoint);\n\n if (this._closed) {\n switch (point) {\n case 1:\n output += $path.moveTo({\n x: x2,\n y: y2\n });\n output += $path.closePath();\n break;\n\n case 2:\n output += $path.moveTo({\n x: (x2 + 2 * x3) / 3,\n y: (y2 + 2 * y3) / 3\n });\n output += $path.lineTo({\n x: (x3 + 2 * x2) / 3,\n y: (y3 + 2 * y2) / 3\n });\n output += $path.closePath();\n break;\n\n case 3:\n pushPoint({\n x: x2,\n y: y2\n });\n pushPoint({\n x: x3,\n y: y3\n });\n pushPoint({\n x: x4,\n y: y4\n });\n break;\n }\n } else {\n switch (point) {\n case 3:\n pushCurve(x1, y1);\n // fall-through\n\n case 2:\n output += $path.lineTo({\n x: x1,\n y: y1\n });\n break;\n }\n\n output += $path.closePath();\n }\n\n return output;\n };\n\n return Basis;\n}();\n\nexport { Basis };","/**\r\n * Functionality for drawing waved circles.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Circle } from \"./Circle\";\nimport { registry } from \"../Registry\";\nimport * as $path from \"../rendering/Path\";\nimport * as $math from \"../utils/Math\";\nimport * as $utils from \"../utils/Utils\";\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a waved circle.\r\n *\r\n * @see {@link IWavedCircleEvents} for a list of available events\r\n * @see {@link IWavedCircleAdapters} for a list of available Adapters\r\n */\n\nvar WavedCircle =\n/** @class */\nfunction (_super) {\n __extends(WavedCircle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function WavedCircle() {\n var _this = _super.call(this) || this;\n\n _this.className = \"WavedCircle\";\n _this.element = _this.paper.add(\"path\");\n _this.waveLength = 16;\n _this.waveHeight = 4;\n _this.fill = undefined;\n _this.fillOpacity = 0;\n _this.tension = 0.8;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n WavedCircle.prototype.draw = function () {\n var path = \"\";\n var radius = this.pixelRadius;\n\n if (radius > 0) {\n var points = this.getPoints(radius);\n path = $path.moveTo(points[0]) + new $smoothing.Tension(this.tension, this.tension).smooth(points);\n }\n\n var innerRadius = this.pixelInnerRadius;\n\n if (innerRadius > 0) {\n var points = this.getPoints(innerRadius);\n points.reverse();\n path += $path.moveTo(points[0]) + new $smoothing.Tension(this.tension, this.tension).smooth(points);\n }\n\n this.path = path;\n };\n /**\r\n * Returns points that circle consists of.\r\n *\r\n * @param radius Radius (px)\r\n * @return Points\r\n */\n\n\n WavedCircle.prototype.getPoints = function (radius) {\n var circleLength = radius * Math.PI * 2;\n var halfWaveHeight = this.waveHeight / 2;\n var waveLength = circleLength / Math.round(circleLength / this.waveLength);\n var halfWaveLength = waveLength / 2;\n var points = [];\n var count = circleLength / waveLength;\n\n for (var i = 0; i <= count; i++) {\n var angle1 = i * waveLength / circleLength * 360;\n var angle2 = (i * waveLength + halfWaveLength) / circleLength * 360;\n points.push({\n x: (radius - halfWaveHeight) * $math.cos(angle1),\n y: (radius - halfWaveHeight) * $math.sin(angle1)\n });\n points.push({\n x: (radius + halfWaveHeight) * $math.cos(angle2),\n y: (radius + halfWaveHeight) * $math.sin(angle2)\n });\n }\n\n points.pop();\n return points;\n };\n\n Object.defineProperty(WavedCircle.prototype, \"innerRadius\", {\n /**\r\n * @return Inner radius\r\n */\n get: function get() {\n return this.getPropertyValue(\"innerRadius\");\n },\n\n /**\r\n * Inner radius of the circle in pixels (absolute) or [[Percent]] (relative).\r\n *\r\n * @param value Inner radius\r\n */\n set: function set(value) {\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedCircle.prototype, \"pixelInnerRadius\", {\n /**\r\n * Calculated inner radius of the circle in pixels.\r\n *\r\n * @readonly\r\n * @return Inner radius (px)\r\n */\n get: function get() {\n return $utils.relativeToValue(this.innerRadius, $math.min(this.innerWidth / 2, this.innerHeight / 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedCircle.prototype, \"waveLength\", {\n /**\r\n * @return Wave length (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveLength\");\n },\n\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveLength\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedCircle.prototype, \"waveHeight\", {\n /**\r\n * @return Wave height (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveHeight\");\n },\n\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveHeight\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedCircle.prototype, \"tension\", {\n /**\r\n * @return Tension\r\n */\n get: function get() {\n return this.getPropertyValue(\"tension\");\n },\n\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tension\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n return WavedCircle;\n}(Circle);\n\nexport { WavedCircle };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"WavedCircle\"] = WavedCircle;","/**\r\n * Functionality for drawing waved lines.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Line } from \"./Line\";\nimport { color } from \"../utils/Color\";\nimport { wavedLine } from \"../rendering/Smoothing\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IWavedLineEvents} for a list of available events\r\n * @see {@link IWavedLineAdapters} for a list of available Adapters\r\n */\n\nvar WavedLine =\n/** @class */\nfunction (_super) {\n __extends(WavedLine, _super);\n /**\r\n * Constructor\r\n */\n\n\n function WavedLine() {\n var _this = _super.call(this) || this;\n\n _this.className = \"WavedLine\";\n _this.element = _this.paper.add(\"path\");\n _this.waveLength = 16;\n _this.waveHeight = 4;\n _this.tension = 0.8;\n _this.pixelPerfect = false;\n _this.fill = color();\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n WavedLine.prototype.draw = function () {\n //super.draw();\n var p1 = {\n x: this.x1,\n y: this.y1\n };\n var p2 = {\n x: this.x2,\n y: this.y2\n };\n this.path = $path.moveTo(p1) + wavedLine(p1, p2, this.waveLength, this.waveHeight, this.tension, true);\n };\n\n Object.defineProperty(WavedLine.prototype, \"waveLength\", {\n /**\r\n * @return Wave length (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveLength\");\n },\n\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveLength\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedLine.prototype, \"waveHeight\", {\n /**\r\n * @return Wave height (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveHeight\");\n },\n\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveHeight\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedLine.prototype, \"tension\", {\n /**\r\n * @return Tension\r\n */\n get: function get() {\n return this.getPropertyValue(\"tension\");\n },\n\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tension\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n return WavedLine;\n}(Line);\n\nexport { WavedLine };","/**\r\n * Functionality for drawing rectangles with waved edges.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Rectangle } from \"./Rectangle\";\nimport { wavedLine } from \"../rendering/Smoothing\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a rectangle with waved edges.\r\n *\r\n * @see {@link IWavedRectangleEvents} for a list of available events\r\n * @see {@link IWavedRectangleAdapters} for a list of available Adapters\r\n */\n\nvar WavedRectangle =\n/** @class */\nfunction (_super) {\n __extends(WavedRectangle, _super);\n /**\r\n * Constructor\r\n */\n\n\n function WavedRectangle() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"WavedRectangle\"; // Add path element\n\n _this.element = _this.paper.add(\"path\"); // Set defaults\n\n _this.waveLength = 16;\n _this.waveHeight = 4;\n _this.tension = 0.8;\n\n _this.setPropertyValue(\"wavedLeft\", true);\n\n _this.setPropertyValue(\"wavedRight\", true);\n\n _this.setPropertyValue(\"wavedTop\", true);\n\n _this.setPropertyValue(\"wavedBottom\", true); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the waved rectangle.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n WavedRectangle.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var w = this.pixelWidth;\n var h = this.pixelHeight;\n\n if (w > 0 && h > 0) {\n var p1 = {\n x: 0,\n y: 0\n };\n var p2 = {\n x: w,\n y: 0\n };\n var p3 = {\n x: w,\n y: h\n };\n var p4 = {\n x: 0,\n y: h\n };\n var waveLengthH = Math.min(w, this.waveLength);\n var waveHeightH = Math.min(h, this.waveHeight);\n var waveLengthV = Math.min(h, this.waveLength);\n var waveHeightV = Math.min(w, this.waveHeight);\n var td = \"\";\n var rd = \"\";\n var bd = \"\";\n var ld = \"\";\n\n if (this.wavedTop) {\n td = wavedLine(p1, p2, waveLengthH, waveHeightH, this.tension, true);\n }\n\n if (this.wavedRight) {\n rd = wavedLine(p2, p3, waveLengthV, waveHeightV, this.tension, true);\n }\n\n if (this.wavedBottom) {\n bd = wavedLine(p3, p4, waveLengthH, waveHeightH, this.tension, true);\n }\n\n if (this.wavedLeft) {\n ld = wavedLine(p4, p1, waveLengthV, waveHeightV, this.tension, true);\n }\n\n this.path = $path.moveTo(p1) + td + $path.lineTo(p2) + rd + $path.lineTo(p3) + bd + $path.lineTo(p4) + ld + \"z\";\n }\n };\n\n Object.defineProperty(WavedRectangle.prototype, \"waveLength\", {\n /**\r\n * @return Wave length (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveLength\");\n },\n\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveLength\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedRectangle.prototype, \"waveHeight\", {\n /**\r\n * @return Wave height (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"waveHeight\");\n },\n\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"waveHeight\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets which side should be waved or not. If particular side is set to\r\n * `false`, a straight line will be drawn on that side.\r\n *\r\n * @param top Top waved?\r\n * @param right Right side waved?\r\n * @param bottom Bottom Waved?\r\n * @param left Left side waved?\r\n */\n\n WavedRectangle.prototype.setWavedSides = function (top, right, bottom, left) {\n this.wavedTop = top;\n this.wavedRight = right;\n this.wavedBottom = bottom;\n this.wavedLeft = left;\n };\n\n Object.defineProperty(WavedRectangle.prototype, \"tension\", {\n /**\r\n * @return Tension\r\n */\n get: function get() {\n return this.getPropertyValue(\"tension\");\n },\n\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tension\", value);\n this.invalidate();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedRectangle.prototype, \"wavedRight\", {\n /**\r\n * @return Wave right side?\r\n */\n get: function get() {\n return this.getPropertyValue(\"wavedRight\");\n },\n\n /**\r\n * Specifies if right side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"wavedRight\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedRectangle.prototype, \"wavedLeft\", {\n /**\r\n * @return Wave left side?\r\n */\n get: function get() {\n return this.getPropertyValue(\"wavedLeft\");\n },\n\n /**\r\n * Specifies if left side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"wavedLeft\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedRectangle.prototype, \"wavedTop\", {\n /**\r\n * @return Wave top side?\r\n */\n get: function get() {\n return this.getPropertyValue(\"wavedTop\");\n },\n\n /**\r\n * Specifies if top side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"wavedTop\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WavedRectangle.prototype, \"wavedBottom\", {\n /**\r\n * @return Wave bottom side?\r\n */\n get: function get() {\n return this.getPropertyValue(\"wavedBottom\");\n },\n\n /**\r\n * Specifies if bottom side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"wavedBottom\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return WavedRectangle;\n}(Rectangle);\n\nexport { WavedRectangle };","/**\r\n * Zoom out button functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Button } from \"./Button\";\nimport { Sprite } from \"../Sprite\";\nimport { registry } from \"../Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $path from \"../rendering/Path\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link IZoomOutButtonEvents} for a list of available events\r\n * @see {@link IZoomOutButtonAdapters} for a list of available Adapters\r\n */\n\nvar ZoomOutButton =\n/** @class */\nfunction (_super) {\n __extends(ZoomOutButton, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ZoomOutButton() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"ZoomOutButton\";\n\n _this.padding(9, 9, 9, 9); //this.dx = - 5;\n //this.dy = 5;\n\n\n _this.showSystemTooltip = true;\n var interfaceColors = new InterfaceColorSet();\n var background = _this.background;\n background.cornerRadius(20, 20, 20, 20);\n background.fill = interfaceColors.getFor(\"primaryButton\");\n background.stroke = interfaceColors.getFor(\"primaryButtonStroke\");\n background.strokeOpacity = 0;\n background.states.getKey(\"hover\").properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\n background.states.getKey(\"down\").properties.fill = interfaceColors.getFor(\"primaryButtonActive\"); // Create an icon\n\n var icon = new Sprite();\n icon.element = _this.paper.add(\"path\");\n var path = $path.moveTo({\n x: 0,\n y: 0\n });\n path += $path.lineTo({\n x: 11,\n y: 0\n });\n icon.path = path;\n icon.pixelPerfect = true;\n icon.padding(8, 3, 8, 3);\n icon.stroke = interfaceColors.getFor(\"primaryButtonText\");\n _this.icon = icon; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n ZoomOutButton.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Zoom Out\");\n }\n };\n\n return ZoomOutButton;\n}(Button);\n\nexport { ZoomOutButton };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ZoomOutButton\"] = ZoomOutButton;","/**\r\n * Play button functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Button } from \"./Button\";\nimport { RoundedRectangle } from \"./RoundedRectangle\";\nimport { registry } from \"../Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { Triangle } from \"./Triangle\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link IPlayButtonEvents} for a list of available events\r\n * @see {@link IPlayButtonAdapters} for a list of available Adapters\r\n */\n\nvar PlayButton =\n/** @class */\nfunction (_super) {\n __extends(PlayButton, _super);\n /**\r\n * Constructor\r\n */\n\n\n function PlayButton() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"PlayButton\";\n\n _this.padding(12, 12, 12, 12);\n\n _this.showSystemTooltip = true;\n var interfaceColors = new InterfaceColorSet();\n var background = _this.background;\n background.cornerRadius(25, 25, 25, 25);\n background.fill = interfaceColors.getFor(\"primaryButton\");\n background.stroke = interfaceColors.getFor(\"primaryButtonStroke\");\n background.strokeOpacity = 0;\n background.states.getKey(\"hover\").properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\n background.states.getKey(\"down\").properties.fill = interfaceColors.getFor(\"primaryButtonActive\"); // Create a play icon\n\n var playIcon = new Triangle();\n playIcon.direction = \"right\";\n playIcon.width = 9;\n playIcon.height = 11;\n playIcon.marginLeft = 1;\n playIcon.marginRight = 1;\n playIcon.horizontalCenter = \"middle\";\n playIcon.verticalCenter = \"middle\";\n playIcon.stroke = interfaceColors.getFor(\"primaryButtonText\");\n playIcon.fill = playIcon.stroke;\n _this.icon = playIcon; // Create a play icon\n\n var stopIcon = new RoundedRectangle();\n stopIcon.width = 11;\n stopIcon.height = 11;\n stopIcon.horizontalCenter = \"middle\";\n stopIcon.verticalCenter = \"middle\";\n stopIcon.cornerRadius(0, 0, 0, 0);\n stopIcon.stroke = interfaceColors.getFor(\"primaryButtonText\");\n stopIcon.fill = playIcon.stroke;\n _this.togglable = true;\n\n var activeState = _this.states.create(\"active\");\n\n activeState.transitionDuration = 0;\n activeState.properties.icon = stopIcon;\n _this.defaultState.transitionDuration = 0; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n PlayButton.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Play\");\n }\n };\n\n return PlayButton;\n}(Button);\n\nexport { PlayButton };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"PlayButton\"] = PlayButton;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../../Base\";\nimport { registry } from \"../../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for color modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\nvar ColorModifier =\n/** @class */\nfunction (_super) {\n __extends(ColorModifier, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ColorModifier() {\n var _this = _super.call(this) || this;\n\n _this.className = \"ColorModifier\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Modifies color value.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Original color\r\n * @return Modified\r\n */\n\n\n ColorModifier.prototype.modify = function (value) {\n return value;\n };\n\n return ColorModifier;\n}(BaseObject);\n\nexport { ColorModifier };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ColorModifier\"] = ColorModifier;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { ColorModifier } from \"./ColorModifier\";\nimport { registry } from \"../../Registry\";\nimport * as $math from \"../../utils/Math\";\nimport * as $type from \"../../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This class can be used to modify linear gradient steps, changing visual\r\n * properties like lightness, brightness, opacity of each set.\r\n *\r\n * It can also set offsets for each gradient step.\r\n *\r\n * E.g. if I want to fill a columns in a column series to be a solid fill from\r\n * top to 80% of height, then gradually fades out, I can use the following\r\n * gradient modifier as a `fillModifier`:\r\n *\r\n * ```TypeScript\r\n * let fillModifier = new am4core.GradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JavaScript\r\n * var fillModifier = new am4core.GradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JSON\r\n * \"series\": [{\r\n * \"type\": \"ColumnSeries\",\r\n * \"columns\": {\r\n * \"fillModifier\": {\r\n * \"type\": \"GradientModifier\",\r\n * \"opacities\": [1, 1, 0],\r\n * \"offsets\": [0, 0.8, 1]\r\n * }\r\n * }\r\n * }]\r\n * ```\r\n */\n\nvar GradientModifier =\n/** @class */\nfunction (_super) {\n __extends(GradientModifier, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function GradientModifier() {\n var _this = _super.call(this) || this;\n\n _this.lightnesses = [];\n _this.brightnesses = [];\n _this.opacities = [];\n _this.offsets = [];\n _this.className = \"GradientModifier\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(GradientModifier.prototype, \"lightnesses\", {\n /**\r\n * @return Lightness values\r\n */\n get: function get() {\n return this._lightnesses;\n },\n\n /**\r\n * An array of lightness values for each step.\r\n *\r\n * @param value Lightness values\r\n */\n set: function set(value) {\n this._lightnesses = value;\n this._brightnesses = [];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GradientModifier.prototype, \"brightnesses\", {\n /**\r\n * @return Brightness values\r\n */\n get: function get() {\n return this._brightnesses;\n },\n\n /**\r\n * An array of brightness values for each step.\r\n *\r\n * @param value Brightness values\r\n */\n set: function set(value) {\n this._brightnesses = value;\n this._lightnesses = [];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GradientModifier.prototype, \"opacities\", {\n /**\r\n * @return Opacity values\r\n */\n get: function get() {\n return this._opacities;\n },\n\n /**\r\n * An array of opacity values for each step.\r\n *\r\n * @param value Opacity values\r\n */\n set: function set(value) {\n this._opacities = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GradientModifier.prototype, \"offsets\", {\n /**\r\n * @return Offsets\r\n */\n get: function get() {\n return this._offsets;\n },\n\n /**\r\n * An array of relative position (0-1) for each step.\r\n *\r\n * If not set, all steps will be of equal relative length.\r\n *\r\n * @param value Offsets\r\n */\n set: function set(value) {\n this._offsets = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Modifies the color based on step setting.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Source color\r\n * @return A gradient that matches set modification rules\r\n */\n\n GradientModifier.prototype.modify = function (value) {\n // Clear current gradient\n this.gradient.clear(); // Get step count\n\n var count = 0;\n\n if (this.opacities) {\n count = $math.max(count, this.opacities.length);\n }\n\n if (this.lightnesses) {\n count = $math.max(count, this.lightnesses.length);\n }\n\n if (this.brightnesses) {\n count = $math.max(count, this.brightnesses.length);\n } // Init step values\n\n\n var opacity = 1,\n lightness,\n brightness; // Apply steps\n\n for (var i = 0; i < count; i++) {\n // Take base color\n var color = value; // Check if there are any parameters for this step\n\n if (this.opacities && $type.isNumber(this.opacities[i])) {\n opacity = this.opacities[i];\n }\n\n if (this.lightnesses && $type.isNumber(this.lightnesses[i])) {\n lightness = this.lightnesses[i];\n brightness = undefined;\n }\n\n if (this.brightnesses && $type.isNumber(this.brightnesses[i])) {\n brightness = this.brightnesses[i];\n lightness = undefined;\n } // Check if we need to brighten/lighten color\n\n\n if ($type.isNumber(brightness)) {\n color = value.brighten(this.brightnesses[i]);\n } else if ($type.isNumber(lightness)) {\n color = value.lighten(this.lightnesses[i]);\n } // Get offset (it's OK if it's undefined)\n\n\n var offset = this.offsets[i]; // Apply step\n\n this.gradient.addColor(color, opacity, offset);\n }\n\n return this.gradient;\n };\n\n GradientModifier.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this._offsets = source.offsets;\n this._brightnesses = source.brightnesses;\n this._lightnesses = source.lightnesses;\n this._opacities = source.opacities;\n };\n\n return GradientModifier;\n}(ColorModifier);\n\nexport { GradientModifier };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"GradientModifier\"] = GradientModifier;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { LinearGradient } from \"./LinearGradient\";\nimport { GradientModifier } from \"./GradientModifier\";\nimport { registry } from \"../../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This class can be used to modify linear gradient steps, changing visual\r\n * properties like lightness, brightness, opacity of each set.\r\n *\r\n * It can also set offsets for each gradient step.\r\n *\r\n * E.g. if I want to fill a columns in a column series to be a solid fill from\r\n * top to 80% of height, then gradually fades out, I can use the following\r\n * gradient modifier as a `fillModifier`:\r\n *\r\n * ```TypeScript\r\n * let fillModifier = new am4core.LinearGradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JavaScript\r\n * var fillModifier = new am4core.LinearGradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JSON\r\n * \"series\": [{\r\n * \"type\": \"ColumnSeries\",\r\n * \"columns\": {\r\n * \"fillModifier\": {\r\n * \"type\": \"LinearGradientModifier\",\r\n * \"opacities\": [1, 1, 0],\r\n * \"offsets\": [0, 0.8, 1]\r\n * }\r\n * }\r\n * }]\r\n * ```\r\n */\n\nvar LinearGradientModifier =\n/** @class */\nfunction (_super) {\n __extends(LinearGradientModifier, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function LinearGradientModifier() {\n var _this = _super.call(this) || this;\n\n _this.className = \"LinearGradientModifier\";\n _this.gradient = new LinearGradient();\n\n _this.applyTheme();\n\n return _this;\n }\n\n LinearGradientModifier.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.gradient = source.gradient.clone();\n };\n\n return LinearGradientModifier;\n}(GradientModifier);\n\nexport { LinearGradientModifier };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"LinearGradientModifier\"] = LinearGradientModifier;","/**\r\n * Cone module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../Container\";\nimport { Sprite, visualProperties } from \"../../Sprite\";\nimport { Ellipse } from \"../../elements/Ellipse\";\nimport { LinearGradientModifier } from \"../../rendering/fills/LinearGradientModifier\";\nimport { percent } from \"../../utils/Percent\";\nimport * as $object from \"../../utils/Object\";\nimport * as $path from \"../../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Builds a round cone/cylinder.\r\n *\r\n * @see {@link IConeEvents} for a list of available events\r\n * @see {@link IConeAdapters} for a list of available Adapters\r\n */\n\nvar Cone =\n/** @class */\nfunction (_super) {\n __extends(Cone, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Cone() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Cone\";\n _this.angle = 30;\n _this.radius = percent(100);\n _this.topRadius = percent(100);\n _this.top = _this.createChild(Ellipse);\n _this.top.shouldClone = false;\n _this.bottom = _this.createChild(Ellipse);\n _this.bottom.shouldClone = false;\n _this.body = _this.createChild(Sprite);\n _this.body.shouldClone = false;\n\n _this.body.setElement(_this.paper.add(\"path\"));\n\n _this.layout = \"none\";\n _this.bodyFillModifier = new LinearGradientModifier();\n _this.bodyFillModifier.lightnesses = [0, -0.25, 0];\n _this.body.fillModifier = _this.bodyFillModifier;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Cone.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n $object.copyProperties(this, this.top, visualProperties);\n $object.copyProperties(this, this.bottom, visualProperties);\n $object.copyProperties(this, this.body, visualProperties);\n var w = this.innerWidth;\n var h = this.innerHeight;\n var bottom = this.bottom;\n var top = this.top;\n var angle = this.angle;\n var radiusBase;\n var dx;\n var dy;\n\n if (this.orientation == \"horizontal\") {\n radiusBase = h / 2;\n bottom.y = h / 2;\n top.y = h / 2;\n top.x = w;\n dx = (90 - angle) / 90;\n dy = 0;\n this.bodyFillModifier.gradient.rotation = 90;\n } else {\n dx = 0;\n dy = (90 - angle) / 90;\n radiusBase = w / 2;\n bottom.y = h;\n bottom.x = w / 2;\n top.x = w / 2;\n this.bodyFillModifier.gradient.rotation = 0;\n }\n\n var radius = this.radius.value * radiusBase;\n var topRadius = this.topRadius.value * radiusBase;\n bottom.radius = radius - radius * dx;\n bottom.radiusY = radius - radius * dy;\n top.radius = topRadius - topRadius * dx;\n top.radiusY = topRadius - topRadius * dy;\n var path;\n\n if (this.orientation == \"horizontal\") {\n path = $path.moveTo({\n x: 0,\n y: h / 2 - bottom.radiusY\n }) + $path.arcTo(-90, -180, bottom.radius, bottom.radiusY) + $path.lineTo({\n x: w,\n y: h / 2 + top.radiusY\n }) + $path.arcTo(90, 180, top.radius, top.radiusY) + $path.closePath();\n } else {\n path = $path.moveTo({\n x: w / 2 - top.radius,\n y: 0\n }) + $path.arcTo(180, -180, top.radius, top.radiusY) + $path.lineTo({\n x: w / 2 + bottom.radius,\n y: h\n }) + $path.arcTo(0, 180, bottom.radius, bottom.radiusY) + $path.closePath();\n }\n\n this.body.path = path;\n };\n\n Object.defineProperty(Cone.prototype, \"angle\", {\n /**\r\n * @return Angle\r\n */\n get: function get() {\n return this.getPropertyValue(\"angle\");\n },\n\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\n set: function set(value) {\n this.setPropertyValue(\"angle\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Cone.prototype, \"radius\", {\n /**\r\n * @return Bottom radius\r\n */\n get: function get() {\n return this.getPropertyValue(\"radius\");\n },\n\n /**\r\n * A relative radius of the cone's bottom (base).\r\n *\r\n * It is relevant to the inner width or height of the element.\r\n *\r\n * @default Percent(100)\r\n * @param value Bottom radius\r\n */\n set: function set(value) {\n this.setPropertyValue(\"radius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Cone.prototype, \"topRadius\", {\n /**\r\n * @return Top radius\r\n */\n get: function get() {\n return this.getPropertyValue(\"topRadius\");\n },\n\n /**\r\n * A relative radius of the cone's top (tip).\r\n *\r\n * It is relevant to the inner width or height of the element.\r\n *\r\n * @default Percent(0)\r\n * @param value Top radius\r\n */\n set: function set(value) {\n this.setPropertyValue(\"topRadius\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Cone.prototype, \"orientation\", {\n /**\r\n * Orientation\r\n */\n get: function get() {\n return this.getPropertyValue(\"orientation\");\n },\n\n /**\r\n * Orientation of the cone\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\n set: function set(value) {\n this.setPropertyValue(\"orientation\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return Cone;\n}(Container);\n\nexport { Cone };","/**\r\n * Module for \"Lighten\" filter.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Filter } from \"./Filter\";\nimport { registry } from \"../../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a \"Lighten\" filter.\r\n */\n\nvar LightenFilter =\n/** @class */\nfunction (_super) {\n __extends(LightenFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function LightenFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"LightenFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.feColorMatrix = _this.paper.add(\"feColorMatrix\");\n\n _this.feColorMatrix.attr({\n \"type\": \"matrix\"\n });\n\n _this.filterPrimitives.push(_this.feColorMatrix); // Set default properties\n\n\n _this.lightness = 0;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(LightenFilter.prototype, \"lightness\", {\n /**\r\n * @return Lightness\r\n */\n get: function get() {\n return this.properties[\"lightness\"];\n },\n\n /**\r\n * Lightness of the target colors.\r\n *\r\n * If `lightness` is a positive number, the filter will make all colors\r\n * lighter.\r\n *\r\n * If `lightness` is negative, colors will be darkened.\r\n *\r\n * @param value Lightness\r\n */\n set: function set(value) {\n this.properties[\"lightness\"] = value;\n var v = value + 1;\n this.feColorMatrix.attr({\n \"values\": v + \" 0 0 0 0 0 \" + v + \" 0 0 0 0 0 \" + v + \" 0 0 0 0 0 1 0\"\n });\n },\n enumerable: true,\n configurable: true\n });\n return LightenFilter;\n}(Filter);\n\nexport { LightenFilter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"LightenFilter\"] = LightenFilter;","/**\r\n * Creates a 3D rectangle.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../Container\";\nimport { Sprite } from \"../../Sprite\";\nimport * as $math from \"../../utils/Math\";\nimport * as $path from \"../../rendering/Path\";\nimport { Color, color, toColor } from \"../../utils/Color\";\nimport { RadialGradient } from \"../../rendering/fills/RadialGradient\";\nimport { LinearGradient } from \"../../rendering/fills/LinearGradient\";\nimport { LightenFilter } from \"../../rendering/filters/LightenFilter\";\nimport * as $type from \"../../utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Builds a 3D rectangle\r\n * @see {@link IRectangle3DEvents} for a list of available events\r\n * @see {@link IRectangle3DAdapters} for a list of available Adapters\r\n */\n\nvar Rectangle3D =\n/** @class */\nfunction (_super) {\n __extends(Rectangle3D, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Rectangle3D() {\n var _this = _super.call(this) || this;\n\n _this.angle = 30;\n _this.depth = 30;\n _this.className = \"Rectangle3D\";\n _this.layout = \"none\";\n\n var sideBack = _this.createChild(Sprite);\n\n sideBack.shouldClone = false;\n sideBack.setElement(_this.paper.add(\"path\"));\n sideBack.isMeasured = false;\n _this.sideBack = sideBack;\n\n _this._disposers.push(_this.sideBack);\n\n var sideBottom = _this.createChild(Sprite);\n\n sideBottom.shouldClone = false;\n sideBottom.setElement(_this.paper.add(\"path\"));\n sideBottom.isMeasured = false;\n _this.sideBottom = sideBottom;\n\n _this._disposers.push(_this.sideBottom);\n\n var sideLeft = _this.createChild(Sprite);\n\n sideLeft.shouldClone = false;\n sideLeft.setElement(_this.paper.add(\"path\"));\n sideLeft.isMeasured = false;\n _this.sideLeft = sideLeft;\n\n _this._disposers.push(_this.sideLeft);\n\n var sideRight = _this.createChild(Sprite);\n\n sideRight.shouldClone = false;\n sideRight.setElement(_this.paper.add(\"path\"));\n sideRight.isMeasured = false;\n _this.sideRight = sideRight;\n\n _this._disposers.push(_this.sideRight);\n\n var sideTop = _this.createChild(Sprite);\n\n sideTop.shouldClone = false;\n sideTop.setElement(_this.paper.add(\"path\"));\n sideTop.isMeasured = false;\n _this.sideTop = sideTop;\n\n _this._disposers.push(_this.sideTop);\n\n var sideFront = _this.createChild(Sprite);\n\n sideFront.shouldClone = false;\n sideFront.setElement(_this.paper.add(\"path\"));\n sideFront.isMeasured = false;\n _this.sideFront = sideFront;\n\n _this._disposers.push(_this.sideFront);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Rectangle3D.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n var w = this.innerWidth;\n var h = this.innerHeight;\n var depth = this.depth;\n var angle = this.angle;\n var sin = $math.sin(angle);\n var cos = $math.cos(angle);\n var a = {\n x: 0,\n y: 0\n };\n var b = {\n x: w,\n y: 0\n };\n var c = {\n x: w,\n y: h\n };\n var d = {\n x: 0,\n y: h\n };\n var ah = {\n x: depth * cos,\n y: -depth * sin\n };\n var bh = {\n x: depth * cos + w,\n y: -depth * sin\n };\n var ch = {\n x: depth * cos + w,\n y: -depth * sin + h\n };\n var dh = {\n x: depth * cos,\n y: -depth * sin + h\n };\n this.sideFront.path = $path.moveTo(a) + $path.lineTo(b) + $path.lineTo(c) + $path.lineTo(d) + $path.closePath();\n this.sideBack.path = $path.moveTo(ah) + $path.lineTo(bh) + $path.lineTo(ch) + $path.lineTo(dh) + $path.closePath();\n this.sideLeft.path = $path.moveTo(a) + $path.lineTo(ah) + $path.lineTo(dh) + $path.lineTo(d) + $path.closePath();\n this.sideRight.path = $path.moveTo(b) + $path.lineTo(bh) + $path.lineTo(ch) + $path.lineTo(c) + $path.closePath();\n this.sideBottom.path = $path.moveTo(d) + $path.lineTo(dh) + $path.lineTo(ch) + $path.lineTo(c) + $path.closePath();\n this.sideTop.path = $path.moveTo(a) + $path.lineTo(ah) + $path.lineTo(bh) + $path.lineTo(b) + $path.closePath();\n };\n\n Object.defineProperty(Rectangle3D.prototype, \"depth\", {\n /**\r\n * @return Depth (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"depth\");\n },\n\n /**\r\n * Depth (Z dimension) of the 3D rectangle in pixels.\r\n *\r\n * @default 30\r\n * @param value Depth (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"depth\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle3D.prototype, \"angle\", {\n /**\r\n * @return Angle\r\n */\n get: function get() {\n return this.getPropertyValue(\"angle\");\n },\n\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\n set: function set(value) {\n this.setPropertyValue(\"angle\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\n\n Rectangle3D.prototype.setFill = function (value) {\n _super.prototype.setFill.call(this, value);\n\n if (!$type.isObject(value) || \"r\" in value) {\n value = toColor(value);\n }\n\n var colorStr;\n\n if (value instanceof Color) {\n colorStr = value.hex;\n } else if (value instanceof LinearGradient || value instanceof RadialGradient) {\n colorStr = value.stops.getIndex(0).color.hex;\n } else {\n var filter = new LightenFilter();\n filter.lightness = -0.2;\n this.sideBack.filters.push(filter);\n var filter2 = filter.clone();\n filter2.lightness = -0.4;\n this.sideLeft.filters.push(filter2);\n var filter3 = filter.clone();\n filter3.lightness = -0.2;\n this.sideRight.filters.push(filter3);\n var filter4 = filter.clone();\n filter4.lightness = -0.1;\n this.sideTop.filters.push(filter4);\n var filter5 = filter.clone();\n filter5.lightness = -0.5;\n this.sideBottom.filters.push(filter5);\n }\n\n if (colorStr) {\n this.sideBack.fill = color(colorStr).lighten(-0.2);\n this.sideLeft.fill = color(colorStr).lighten(-0.4);\n this.sideRight.fill = color(colorStr).lighten(-0.2);\n this.sideTop.fill = color(colorStr).lighten(-0.1);\n this.sideBottom.fill = color(colorStr).lighten(-0.5);\n }\n };\n /**\r\n * Copies all properties and related data from a different instance of Rectangle3D.\r\n *\r\n * @param source Source Rectangle3D\r\n */\n\n\n Rectangle3D.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.sideBack.copyFrom(source.sideBack);\n this.sideLeft.copyFrom(source.sideLeft);\n this.sideRight.copyFrom(source.sideRight);\n this.sideTop.copyFrom(source.sideTop);\n this.sideBottom.copyFrom(source.sideBottom);\n };\n\n return Rectangle3D;\n}(Container);\n\nexport { Rectangle3D };","/**\r\n * 3D slice module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Slice } from \"../Slice\";\nimport { Sprite } from \"../../Sprite\";\nimport * as $math from \"../../utils/Math\";\nimport * as $path from \"../../rendering/Path\";\nimport * as $type from \"../../utils/Type\";\nimport { Color, color } from \"../../utils/Color\";\nimport { RadialGradient } from \"../../rendering/fills/RadialGradient\";\nimport { LinearGradient } from \"../../rendering/fills/LinearGradient\";\nimport { LightenFilter } from \"../../rendering/filters/LightenFilter\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a 3D slice of a Pie chart.\r\n *\r\n * @see {@link ISlice3DEvents} for a list of available events\r\n * @see {@link ISlice3DAdapters} for a list of available Adapters\r\n */\n\nvar Slice3D =\n/** @class */\nfunction (_super) {\n __extends(Slice3D, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Slice3D() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Slice3D\";\n _this.layout = \"none\"; // Create edge container\n\n var edge = _this.createChild(Sprite);\n\n _this.edge = edge;\n edge.shouldClone = false;\n edge.isMeasured = false;\n edge.toBack(); // Set defaults\n\n _this.angle = 30;\n _this.depth = 20; // Create side A element\n\n var sideA = _this.createChild(Sprite);\n\n _this.sideA = sideA;\n sideA.shouldClone = false;\n sideA.isMeasured = false; //sideA.setElement(this.paper.add(\"path\"));\n //sideA.strokeOpacity = 0;\n // Crate side B element\n\n var sideB = _this.createChild(Sprite);\n\n _this.sideB = sideB;\n sideB.shouldClone = false;\n sideB.isMeasured = false; //sideB.setElement(this.paper.add(\"path\"));\n //sideB.strokeOpacity = 0;\n // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\n\n\n Slice3D.prototype.setFill = function (value) {\n _super.prototype.setFill.call(this, value);\n\n var colorStr;\n\n if (value instanceof Color) {\n colorStr = value.hex;\n } else if (value instanceof LinearGradient || value instanceof RadialGradient) {\n colorStr = value.stops.getIndex(0).color.hex;\n } else {\n var filter = new LightenFilter();\n filter.lightness = -0.25;\n this.edge.filters.push(filter);\n this.sideA.filters.push(filter.clone());\n this.sideB.filters.push(filter.clone());\n }\n\n if (colorStr) {\n var edgeFill = color(colorStr).lighten(-0.25);\n this.edge.fill = edgeFill;\n this.sideA.fill = edgeFill;\n this.sideB.fill = edgeFill;\n this.edge.stroke = edgeFill;\n this.sideA.stroke = edgeFill;\n this.sideB.stroke = edgeFill;\n }\n };\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Slice3D.prototype.draw = function () {\n this.cornerRadius = 0;\n this.innerCornerRadius = 0;\n\n _super.prototype.draw.call(this);\n\n if (this.arc !== 0 && this.radius > 0 && this.depth > 0) {\n this.sideB.show(0);\n this.sideA.show(0);\n this.edge.show(0);\n var startAngle = this.startAngle;\n var arc = this.arc;\n var innerRadius = this.pixelInnerRadius || 0;\n var radiusY = this.radiusY || 0; //let cornerRadius = this.cornerRadius || 0;\n //let innerCornerRadius = this.innerCornerRadius;\n\n var radius = this.radius; // this is code duplicate with $path.arc. @todo to think how to avoid it\n\n var endAngle = startAngle + arc; //let crSin = $math.sin($math.min(arc, 45) / 2);\n //innerCornerRadius = innerCornerRadius || cornerRadius;\n\n var innerRadiusY = radiusY / radius * innerRadius; //let cornerRadiusY = (radiusY / radius) * cornerRadius;\n //let innerCornerRadiusY = (radiusY / radius) * innerCornerRadius;\n //cornerRadius = $math.fitToRange(cornerRadius, 0, (radius - innerRadius) / 2);\n //cornerRadiusY = $math.fitToRange(cornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\n //innerCornerRadius = $math.fitToRange(innerCornerRadius, 0, (radius - innerRadius) / 2);\n //innerCornerRadiusY = $math.fitToRange(innerCornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\n //cornerRadius = $math.fitToRange(cornerRadius, 0, radius * crSin);\n //cornerRadiusY = $math.fitToRange(cornerRadiusY, 0, radiusY * crSin);\n //innerCornerRadius = $math.fitToRange(innerCornerRadius, 0, innerRadius * crSin);\n //innerCornerRadiusY = $math.fitToRange(innerCornerRadiusY, 0, innerRadiusY * crSin);\n //let crAngle: number = Math.asin(cornerRadius / radius / 2) * $math.DEGREES * 2;\n //let crAngleY: number = Math.asin(cornerRadiusY / radiusY / 2) * $math.DEGREES * 2;\n //if (innerRadius < innerCornerRadius) {\n //\tinnerRadius = innerCornerRadius;\n //}\n //if (innerRadiusY < innerCornerRadiusY) {\n //\tinnerRadiusY = innerCornerRadiusY;\n //}\n //let crInnerAngle: number = Math.asin(innerCornerRadius / innerRadius / 2) * $math.DEGREES * 2;\n //let crInnerAngleY: number = Math.asin(innerCornerRadiusY / innerRadiusY / 2) * $math.DEGREES * 2;\n //if (!$type.isNumber(crInnerAngle)) {\n //\tcrInnerAngle = 0;\n //}\n //if (!$type.isNumber(crInnerAngleY)) {\n //\tcrInnerAngleY = 0;\n //}\n //let middleAngle = startAngle + arc / 2;\n //let mPoint = { x: $math.round($math.cos(middleAngle) * innerRadius, 4), y: $math.round($math.sin(middleAngle) * innerRadiusY, 4) };\n\n var a0 = {\n x: $math.cos(startAngle) * innerRadius,\n y: $math.sin(startAngle) * innerRadiusY\n };\n var b0 = {\n x: $math.cos(startAngle) * radius,\n y: $math.sin(startAngle) * radiusY\n };\n var c0 = {\n x: $math.cos(endAngle) * radius,\n y: $math.sin(endAngle) * radiusY\n };\n var d0 = {\n x: $math.cos(endAngle) * innerRadius,\n y: $math.sin(endAngle) * innerRadiusY\n }; // end of duplicate\n\n var h = this.depth;\n var ah = {\n x: a0.x,\n y: a0.y - h\n };\n var bh = {\n x: b0.x,\n y: b0.y - h\n };\n var ch = {\n x: c0.x,\n y: c0.y - h\n };\n var dh = {\n x: d0.x,\n y: d0.y - h\n };\n var edgePath = \"\";\n var count = Math.ceil(arc / 5);\n var step = arc / count;\n var mangle = startAngle;\n var prevPoint = bh;\n\n for (var i = 0; i < count; i++) {\n mangle += step;\n\n if (mangle > 0 && mangle < 180) {\n edgePath += $path.moveTo(prevPoint);\n var pp = {\n x: $math.cos(mangle) * radius,\n y: $math.sin(mangle) * radiusY - h\n };\n edgePath += $path.lineTo({\n x: prevPoint.x,\n y: prevPoint.y + h\n });\n edgePath += $path.arcToPoint({\n x: pp.x,\n y: pp.y + h\n }, radius, radiusY, true);\n edgePath += $path.lineTo(pp);\n edgePath += $path.arcToPoint(prevPoint, radius, radiusY);\n edgePath += \"z\";\n prevPoint = pp;\n } else {\n edgePath += $path.moveTo(prevPoint);\n var pp = {\n x: $math.cos(mangle) * radius,\n y: $math.sin(mangle) * radiusY - h\n };\n edgePath += $path.arcToPoint(pp, radius, radiusY, true);\n edgePath += $path.lineTo({\n x: pp.x,\n y: pp.y + h\n });\n edgePath += $path.arcToPoint({\n x: prevPoint.x,\n y: prevPoint.y + h\n }, radius, radiusY);\n edgePath += $path.lineTo(prevPoint);\n edgePath += \"z\";\n prevPoint = pp;\n }\n }\n\n prevPoint = ah;\n mangle = startAngle;\n\n for (var i = 0; i < count; i++) {\n mangle += step;\n\n if (mangle > 0 && mangle < 180) {\n edgePath += $path.moveTo(prevPoint);\n var pp = {\n x: $math.cos(mangle) * innerRadius,\n y: $math.sin(mangle) * innerRadiusY - h\n };\n edgePath += $path.lineTo({\n x: prevPoint.x,\n y: prevPoint.y + h\n });\n edgePath += $path.arcToPoint({\n x: pp.x,\n y: pp.y + h\n }, innerRadius, innerRadiusY, true);\n edgePath += $path.lineTo(pp);\n edgePath += $path.arcToPoint(prevPoint, innerRadius, innerRadiusY);\n edgePath += \"z\";\n prevPoint = pp;\n } else {\n edgePath += $path.moveTo(prevPoint);\n var pp = {\n x: $math.cos(mangle) * innerRadius,\n y: $math.sin(mangle) * innerRadiusY - h\n };\n edgePath += $path.arcToPoint(pp, innerRadius, innerRadiusY, true);\n edgePath += $path.lineTo({\n x: pp.x,\n y: pp.y + h\n });\n edgePath += $path.arcToPoint({\n x: prevPoint.x,\n y: prevPoint.y + h\n }, innerRadius, innerRadiusY);\n edgePath += $path.lineTo(prevPoint);\n edgePath += \"z\";\n prevPoint = pp;\n }\n }\n\n this.edge.path = edgePath;\n /*\r\n a0 = { x: $math.cos(startAngle) * (innerRadius + innerCornerRadius), y: $math.sin(startAngle) * (innerRadiusY + innerCornerRadiusY) };\r\n b0 = { x: $math.cos(startAngle) * (radius - cornerRadius), y: $math.sin(startAngle) * (radiusY - cornerRadiusY) };\r\n c0 = { x: $math.cos(endAngle) * (radius - cornerRadius), y: $math.sin(endAngle) * (radiusY - cornerRadiusY) };\r\n d0 = { x: $math.cos(endAngle) * (innerRadius + innerCornerRadius), y: $math.sin(endAngle) * (innerRadiusY + innerCornerRadiusY) };\r\n // end of duplicate\r\n \r\n ah = { x: a0.x, y: a0.y - h };\r\n bh = { x: b0.x, y: b0.y - h };\r\n ch = { x: c0.x, y: c0.y - h };\r\n dh = { x: d0.x, y: d0.y - h };\r\n */\n\n this.sideA.path = $path.moveTo(a0) + $path.lineTo(b0) + $path.lineTo(bh) + $path.lineTo(ah) + $path.closePath();\n this.sideB.path = $path.moveTo(c0) + $path.lineTo(d0) + $path.lineTo(dh) + $path.lineTo(ch) + $path.closePath();\n\n if (this.startAngle < 90) {\n this.sideA.toBack();\n } else {\n this.sideA.toFront();\n }\n\n if (this.startAngle + this.arc > 90) {\n this.sideB.toBack();\n } else {\n this.sideB.toFront();\n }\n\n this.slice.dy = -h;\n } else {\n this.sideA.hide(0);\n this.sideB.hide(0);\n this.edge.hide(0);\n }\n };\n\n Object.defineProperty(Slice3D.prototype, \"depth\", {\n /**\r\n * @return Depth (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"depth\");\n },\n\n /**\r\n * Depth (height) of the 3D slice in pixels.\r\n *\r\n * @default 20\r\n * @param depth Depth (px)\r\n */\n set: function set(depth) {\n this.setPropertyValue(\"depth\", depth, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice3D.prototype, \"angle\", {\n /**\r\n * @return Angle\r\n */\n get: function get() {\n var angle = this.getPropertyValue(\"angle\");\n\n if (!$type.isNumber(angle)) {\n angle = 0;\n }\n\n return angle;\n },\n\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\n set: function set(value) {\n this.setPropertyValue(\"angle\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Slice3D.prototype, \"radiusY\", {\n /**\r\n * @return Vertical radius (0-1)\r\n */\n get: function get() {\n var radiusY = this.getPropertyValue(\"radiusY\");\n\n if (!$type.isNumber(radiusY)) {\n radiusY = this.radius - this.radius * this.angle / 90;\n }\n\n return radiusY;\n },\n\n /**\r\n * Vertical radius for creating skewed slices.\r\n *\r\n * This is relevant to `radius`, e.g. 0.5 will set vertical radius to half\r\n * the `radius`.\r\n *\r\n * @param value Vertical radius (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"radiusY\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\n\n Slice3D.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.edge.copyFrom(source.edge);\n this.sideA.copyFrom(source.sideA);\n this.sideB.copyFrom(source.sideB);\n };\n\n return Slice3D;\n}(Slice);\n\nexport { Slice3D };","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { RadialGradient } from \"./RadialGradient\";\nimport { GradientModifier } from \"./GradientModifier\";\nimport { registry } from \"../../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This class can be used to modify radial gradient steps, changing visual\r\n * properties like lightness, brightness, opacity of each set.\r\n *\r\n * It can also set offsets for each gradient step.\r\n *\r\n * E.g. if I want to fill a columns in a column series to be a solid fill from\r\n * top to 80% of height, then gradually fades out, I can use the following\r\n * gradient modifier as a `fillModifier`:\r\n *\r\n * ```TypeScript\r\n * let fillModifier = new am4core.LinearGradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JavaScript\r\n * var fillModifier = new am4core.LinearGradientModifier();\r\n * fillModifier.opacities = [1, 1, 0];\r\n * fillModifier.offsets = [0, 0.8, 1];\r\n * columnSeries.columns.template.fillModifier = fillModifier;\r\n * ```\r\n * ```JSON\r\n * \"series\": [{\r\n * \"type\": \"ColumnSeries\",\r\n * \"columns\": {\r\n * \"fillModifier\": {\r\n * \"type\": \"LinearGradientModifier\",\r\n * \"opacities\": [1, 1, 0],\r\n * \"offsets\": [0, 0.8, 1]\r\n * }\r\n * }\r\n * }]\r\n * ```\r\n */\n\nvar RadialGradientModifier =\n/** @class */\nfunction (_super) {\n __extends(RadialGradientModifier, _super);\n /**\r\n * Constructor.\r\n */\n\n\n function RadialGradientModifier() {\n var _this = _super.call(this) || this;\n\n _this.className = \"RadialGradientModifier\";\n _this.gradient = new RadialGradient();\n\n _this.applyTheme();\n\n return _this;\n }\n\n RadialGradientModifier.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.gradient = source.gradient.clone();\n };\n\n return RadialGradientModifier;\n}(GradientModifier);\n\nexport { RadialGradientModifier };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"RadialGradientModifier\"] = RadialGradientModifier;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Pattern } from \"./Pattern\";\nimport { registry } from \"../../Registry\";\nimport * as $path from \"../../rendering/Path\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Line pattern.\r\n */\n\nvar LinePattern =\n/** @class */\nfunction (_super) {\n __extends(LinePattern, _super);\n /**\r\n * Constructor\r\n */\n\n\n function LinePattern() {\n var _this = _super.call(this) || this;\n\n _this.properties[\"gap\"] = 0;\n _this._line = _this.paper.add(\"path\");\n\n _this.addElement(_this._line);\n\n return _this;\n }\n /**\r\n * Draws the pattern.\r\n */\n\n\n LinePattern.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (Math.round(this.rotation / 90) != this.rotation / 90) {\n this.properties[\"shapeRendering\"] = \"auto\";\n }\n\n if (this._line) {\n var w = this.width;\n var h = this.height;\n var path = \"\";\n\n if (!this.gap) {\n if (Math.round(this.rotation / 90) != this.rotation / 90) {\n path = $path.moveTo({\n x: -w,\n y: h / 2\n }) + $path.lineTo({\n x: w * 2,\n y: h / 2\n });\n this.properties[\"rotationX\"] = this.width / 2;\n this.properties[\"rotationY\"] = this.height / 2;\n } else {\n path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: w,\n y: 0\n });\n }\n } else {\n var step = this.gap + this.strokeWidth;\n var count = this.height / step;\n\n for (var i = -count / 2; i < count * 1.5; i++) {\n if (Math.round(this.rotation / 90) != this.rotation / 90) {\n path += $path.moveTo({\n x: -w,\n y: (i + 0.5) * step\n }) + $path.lineTo({\n x: w * 2,\n y: (i + 0.5) * step\n });\n this.properties[\"rotationX\"] = this.width / 2;\n this.properties[\"rotationY\"] = this.height / 2;\n } else {\n path += $path.moveTo({\n x: -w,\n y: i * step\n }) + $path.lineTo({\n x: w * 2,\n y: i * step\n });\n }\n }\n }\n\n this._line.attr({\n \"d\": path\n });\n }\n };\n\n Object.defineProperty(LinePattern.prototype, \"gap\", {\n /**\r\n * @return gap\r\n */\n get: function get() {\n return this.properties[\"gap\"];\n },\n\n /**\r\n * Number of pixels between pattern lines.\r\n *\r\n * The pattern will automatically draw required number of lines to fill\r\n * pattern area maintaining `gap` distance between them.\r\n *\r\n * 0 (zero) means only single line will be drawn.\r\n *\r\n * @default 0\r\n * @since 4.7.7\r\n */\n set: function set(value) {\n this.properties[\"gap\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n return LinePattern;\n}(Pattern);\n\nexport { LinePattern };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"LinePattern\"] = LinePattern;","/**\r\n * Rectangular pattern module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Pattern } from \"./Pattern\";\nimport { registry } from \"../../Registry\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Circular pattern\r\n */\n\nvar CirclePattern =\n/** @class */\nfunction (_super) {\n __extends(CirclePattern, _super);\n /**\r\n * Constructor\r\n */\n\n\n function CirclePattern() {\n var _this = _super.call(this) || this;\n\n _this.properties[\"radius\"] = 2;\n _this._circle = _this.paper.add(\"circle\");\n\n _this.addElement(_this._circle);\n\n _this.shapeRendering = \"auto\";\n return _this;\n }\n /**\r\n * Draws the circle element.\r\n */\n\n\n CirclePattern.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (this._circle) {\n this._circle.attr({\n \"r\": this.radius,\n \"cx\": this.width / 2,\n \"cy\": this.height / 2\n });\n }\n };\n\n Object.defineProperty(CirclePattern.prototype, \"radius\", {\n /**\r\n * @return Radius (px)\r\n */\n get: function get() {\n return this.properties[\"radius\"];\n },\n\n /**\r\n * Circle radius in pixels.\r\n *\r\n * @param value Radius (px)\r\n */\n set: function set(value) {\n this.properties[\"radius\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n return CirclePattern;\n}(Pattern);\n\nexport { CirclePattern };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"CirclePattern\"] = CirclePattern;","/**\r\n * Rectangular pattern module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Pattern } from \"./Pattern\";\nimport { registry } from \"../../Registry\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Rectangular pattern\r\n */\n\nvar RectPattern =\n/** @class */\nfunction (_super) {\n __extends(RectPattern, _super);\n /**\r\n * Constructor\r\n */\n\n\n function RectPattern() {\n var _this = _super.call(this) || this;\n\n _this.rectHeight = 1;\n _this.rectWidth = 1;\n _this._rect = _this.paper.add(\"rect\");\n\n _this.addElement(_this._rect);\n\n return _this;\n }\n /**\r\n * Draws the rectangular element.\r\n */\n\n\n RectPattern.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n this.properties[\"rotationX\"] = this.width / 2;\n this.properties[\"rotationY\"] = this.height / 2;\n\n if (this._rect) {\n this._rect.attr({\n \"width\": this.rectWidth,\n \"height\": this.rectHeight,\n \"x\": (this.width - this.rectWidth) / 2,\n \"y\": (this.height - this.rectHeight) / 2\n });\n }\n };\n\n Object.defineProperty(RectPattern.prototype, \"rectWidth\", {\n /**\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.properties[\"rectWidth\"];\n },\n\n /**\r\n * Rectangle width in pixels.\r\n *\r\n * @param value Width (px)\r\n */\n set: function set(value) {\n this.properties[\"rectWidth\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RectPattern.prototype, \"rectHeight\", {\n /**\r\n * @return Height (px)\r\n */\n get: function get() {\n return this.properties[\"rectHeight\"];\n },\n\n /**\r\n * Rectangle height in pixels.\r\n *\r\n * @param value Height (px)\r\n */\n set: function set(value) {\n this.properties[\"rectHeight\"] = value;\n this.draw();\n },\n enumerable: true,\n configurable: true\n });\n return RectPattern;\n}(Pattern);\n\nexport { RectPattern };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"RectPattern\"] = RectPattern;","/**\r\n * Module for \"Colorize\" filter.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Filter } from \"./Filter\";\nimport { registry } from \"../../Registry\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a \"Colorize\" filter.\r\n */\n\nvar ColorizeFilter =\n/** @class */\nfunction (_super) {\n __extends(ColorizeFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ColorizeFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"ColorizeFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.feColorMatrix = _this.paper.add(\"feColorMatrix\");\n\n _this.feColorMatrix.attr({\n \"type\": \"matrix\"\n }); //this.feColorMatrix.setAttribute(\"in\", \"SourceAlpha\");\n\n\n _this.filterPrimitives.push(_this.feColorMatrix); // Set default properties\n\n\n _this.intensity = 1;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * (Re)applies colors to the already existing filter by modifying filyer's\r\n * color matrix element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ColorizeFilter.prototype.applyFilter = function () {\n var i = this.intensity;\n var ii = 1 - i;\n var r;\n var g;\n var b;\n var color = this.color;\n\n if (color && color.rgb) {\n r = color.rgb.r / 255 * i;\n g = color.rgb.g / 255 * i;\n b = color.rgb.b / 255 * i;\n } else {\n r = 0;\n g = 0;\n b = 0;\n }\n\n this.feColorMatrix.attr({\n \"values\": ii + \" 0 0 0 \" + r + \" 0 \" + ii + \" 0 0 \" + g + \" 0 0 \" + ii + \" 0 \" + b + \" 0 0 0 1 0\"\n });\n };\n\n Object.defineProperty(ColorizeFilter.prototype, \"color\", {\n /**\r\n * @return Color\r\n */\n get: function get() {\n return this.properties[\"color\"];\n },\n\n /**\r\n * Target color to apply to the element.\r\n *\r\n * Depending on the `intensity`, all colors of the target element will steer\r\n * towards this color.\r\n *\r\n * E.g. setting to `am4core.color(\"greener\")` will make all colors greener.\r\n *\r\n * @param value Color\r\n */\n set: function set(value) {\n this.properties[\"color\"] = value;\n this.applyFilter();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColorizeFilter.prototype, \"intensity\", {\n /**\r\n * @return Intensity (0-1)\r\n */\n get: function get() {\n return this.properties.intensity;\n },\n\n /**\r\n * Intensity of the color (0-1).\r\n *\r\n * The bigger the number the more of a `color` target's colors will become.\r\n *\r\n * 0 means the colors will remain as they are.\r\n * 1 means all colors will become the target `color`.\r\n *\r\n * @default 1\r\n * @param value Intensity (0-1)\r\n */\n set: function set(value) {\n this.properties.intensity = value;\n this.applyFilter();\n },\n enumerable: true,\n configurable: true\n });\n return ColorizeFilter;\n}(Filter);\n\nexport { ColorizeFilter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ColorizeFilter\"] = ColorizeFilter;","/**\r\n * Module for \"Desaturate\" filter.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Filter } from \"./Filter\";\nimport { registry } from \"../../Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creats a \"Desaturate\" filter\r\n */\n\nvar DesaturateFilter =\n/** @class */\nfunction (_super) {\n __extends(DesaturateFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function DesaturateFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"DesaturateFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.feColorMatrix = _this.paper.add(\"feColorMatrix\");\n\n _this.feColorMatrix.attr({\n \"type\": \"saturate\"\n });\n\n _this.filterPrimitives.push(_this.feColorMatrix); // Set default properties\n\n\n _this.width = 120;\n _this.height = 120;\n _this.saturation = 0;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(DesaturateFilter.prototype, \"saturation\", {\n /**\r\n * @return Saturation (0-1)\r\n */\n get: function get() {\n return this.properties[\"saturation\"];\n },\n\n /**\r\n * Saturation.\r\n *\r\n * 0 - completely desaturated.\r\n * 1 - fully saturated (gray).\r\n *\r\n * @param value Saturation (0-1)\r\n */\n set: function set(value) {\n this.properties[\"saturation\"] = value;\n this.feColorMatrix.attr({\n \"values\": value.toString()\n });\n },\n enumerable: true,\n configurable: true\n });\n return DesaturateFilter;\n}(Filter);\n\nexport { DesaturateFilter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"DesaturateFilter\"] = DesaturateFilter;","/**\r\n * Module for \"Blur\" filter.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Filter } from \"./Filter\";\nimport { registry } from \"../../Registry\";\n;\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a \"Blur\" filter.\r\n */\n\nvar BlurFilter =\n/** @class */\nfunction (_super) {\n __extends(BlurFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function BlurFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"BlurFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.feGaussianBlur = _this.paper.add(\"feGaussianBlur\");\n\n _this.feGaussianBlur.attr({\n \"result\": \"blurOut\",\n \"in\": \"SourceGraphic\"\n });\n\n _this.filterPrimitives.push(_this.feGaussianBlur); // Set default properties\n\n\n _this.width = 200;\n _this.height = 200;\n _this.blur = 1.5;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(BlurFilter.prototype, \"blur\", {\n /**\r\n * @return Blur\r\n */\n get: function get() {\n return this.properties.blur;\n },\n\n /**\r\n * Blur value.\r\n *\r\n * The bigger the value, the blurrier the target element will become.\r\n *\r\n * @default 1.5\r\n * @param value Blur\r\n */\n set: function set(value) {\n this.properties.blur = value;\n this.feGaussianBlur.attr({\n \"stdDeviation\": value / this.scale\n });\n },\n enumerable: true,\n configurable: true\n });\n return BlurFilter;\n}(Filter);\n\nexport { BlurFilter };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"BlurFilter\"] = BlurFilter;","/**\r\n * Module for \"Focus\" filter.\r\n */\nimport { __extends } from \"tslib\";\nimport { Filter } from \"./Filter\";\nimport { InterfaceColorSet } from \"../../utils/InterfaceColorSet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a \"Focus\" filter.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/accessibility/} more about accessibility\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/changing-appearance-of-focused-items/} cusomizing focus appearance\r\n */\n\nvar FocusFilter =\n/** @class */\nfunction (_super) {\n __extends(FocusFilter, _super);\n /**\r\n * Constructor\r\n */\n\n\n function FocusFilter() {\n var _this = _super.call(this) || this;\n\n _this.className = \"FocusFilter\"; // Create elements\n // NOTE: we do not need to add each individual element to `_disposers`\n // because `filterPrimitives` has an event handler which automatically adds\n // anything added to it to `_disposers`\n\n _this.feFlood = _this.paper.add(\"feFlood\");\n\n _this.feFlood.attr({\n \"flood-color\": new InterfaceColorSet().getFor(\"primaryButtonHover\"),\n \"result\": \"base\"\n });\n\n _this.filterPrimitives.push(_this.feFlood);\n\n _this.feMorphology = _this.paper.add(\"feMorphology\");\n\n _this.feMorphology.attr({\n \"result\": \"bigger\",\n \"in\": \"SourceGraphic\",\n \"operator\": \"dilate\",\n \"radius\": \"2\"\n });\n\n _this.filterPrimitives.push(_this.feMorphology);\n\n _this.feColorMatrix = _this.paper.add(\"feColorMatrix\");\n\n _this.feColorMatrix.attr({\n \"result\": \"mask\",\n \"in\": \"bigger\",\n \"type\": \"matrix\",\n \"values\": \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n });\n\n _this.filterPrimitives.push(_this.feColorMatrix);\n\n _this.feComposite = _this.paper.add(\"feComposite\");\n\n _this.feComposite.attr({\n \"result\": \"drop\",\n \"in\": \"base\",\n \"in2\": \"mask\",\n \"operator\": \"in\"\n });\n\n _this.filterPrimitives.push(_this.feComposite);\n\n _this.feBlend = _this.paper.add(\"feBlend\");\n\n _this.feBlend.attr({\n \"in\": \"SourceGraphic\",\n \"in2\": \"drop\",\n \"mode\": \"normal\"\n });\n\n _this.filterPrimitives.push(_this.feBlend); // Set default properties\n\n\n _this.width = 130;\n _this.height = 130;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(FocusFilter.prototype, \"stroke\", {\n /**\r\n * @return Color\r\n */\n get: function get() {\n return this.properties[\"stroke\"];\n },\n\n /**\r\n * Stroke (outline) color.\r\n *\r\n * @param value Color\r\n */\n set: function set(value) {\n this.properties[\"stroke\"] = value;\n this.feFlood.attr({\n \"flood-color\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FocusFilter.prototype, \"strokeWidth\", {\n /**\r\n * @return Outline thickness (px)\r\n */\n get: function get() {\n return this.properties[\"strokeWidth\"];\n },\n\n /**\r\n * Stroke (outline) thickness in pixels.\r\n *\r\n * @param value Outline thickness (px)\r\n */\n set: function set(value) {\n this.properties[\"strokeWidth\"] = value;\n this.feMorphology.attr({\n \"radius\": value\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FocusFilter.prototype, \"opacity\", {\n /**\r\n * @return Outline opacity (0-1)\r\n */\n get: function get() {\n return this.properties[\"opacity\"];\n },\n\n /**\r\n * Opacity of the outline. (0-1)\r\n *\r\n * @param value Outline opacity (0-1)\r\n */\n set: function set(value) {\n this.properties[\"opacity\"] = value;\n this.feColorMatrix.attr({\n \"values\": \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \" + value + \" 0\"\n });\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Sets filter's target element.\r\n *\r\n * In addition it also disables built-in focus outline on element this\r\n * filter is applied to.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Element filter is being attached to\r\n */\n\n FocusFilter.prototype.setSprite = function (value) {\n if (this._sprite && this._sprite != value) {\n this._sprite.group.removeStyle(\"outline\");\n }\n\n value.group.addStyle({\n \"outline\": \"none\"\n });\n\n _super.prototype.setSprite.call(this, value);\n };\n\n return FocusFilter;\n}(Filter);\n\nexport { FocusFilter };","/**\r\n * This module contains ColorSet object definition\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { Color, color } from \"./Color\";\nimport { registry } from \"../Registry\";\nimport * as $colors from \"./Colors\";\nimport * as $type from \"./Type\";\nimport * as $utils from \"./Utils\";\nimport * as $math from \"./Math\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Represents a set of colors. Can also generate colors according to set rules.\r\n *\r\n * @important\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\n\nvar ColorSet =\n/** @class */\nfunction (_super) {\n __extends(ColorSet, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ColorSet() {\n var _this = _super.call(this) || this;\n /**\r\n * Holds the list of the colors in this set. (preset or auto-generated)\r\n */\n\n\n _this._list = [];\n /**\r\n * Current step in a color generator's cycle.\r\n */\n\n _this._currentStep = 0;\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n */\n\n _this._startIndex = 0;\n /**\r\n * Current pass in the color generator's cycle. Normally a generator would\r\n * cycle through all available hue range, then repeat it, alternating other\r\n * color properties, to generate distinctive colors.\r\n */\n\n _this._currentPass = 0;\n /**\r\n * A base color. If there are no colors pre-set in the color list, ColorSet\r\n * will use this color as a base when generating new ones, applying\r\n * `stepOptions` and `passOptions` to this base color.\r\n */\n\n _this.baseColor = new Color({\n r: 103,\n g: 183,\n b: 220\n });\n /**\r\n * Modifications to apply with each new generated color.\r\n */\n\n _this.stepOptions = {};\n /**\r\n * Modifications to apply on top of `stepOptions` for each \"pass\" of the\r\n * color generation.\r\n *\r\n * A \"pass\" is when ColorSet generates `minColors` number of colors.\r\n */\n\n _this.passOptions = {\n brighten: -0.2\n };\n /**\r\n * An index increment to use when iterating through color list.\r\n *\r\n * Default is 1, which means returning each and every color.\r\n *\r\n * Setting it to a bigger number will make ColorSet `next()` iterator skip\r\n * some colors.\r\n *\r\n * E.g. setting to 2, will return every second color in the list.\r\n *\r\n * This is useful, when the color list has colors that are too close each\r\n * other for contrast.\r\n *\r\n * However, having bigger number will mean that `next()` iterator will go\r\n * through the list quicker, and the generator will kick sooner.\r\n */\n\n _this.step = 1;\n /**\r\n * A number of colors to generate in one \"pass\".\r\n *\r\n * This setting can be automatically overridden, if ColorSet has a list of\r\n * pre-set colors. In such case ColorSet will generate exactly the same\r\n * number of colors with each pass as there were colors in original set.\r\n */\n\n _this.minColors = 20;\n /**\r\n * Do not let the \"lightness\" of generated color to fall below this\r\n * threshold.\r\n */\n\n _this.minLightness = 0.2;\n /**\r\n * Do not let the \"lightness\" of generated color to get above this threshold.\r\n */\n\n _this.maxLightness = 0.9;\n /**\r\n * Randomly shuffle generated colors.\r\n */\n\n _this.shuffle = false;\n /**\r\n * When colors are generated, based on `stepOptions`, each generated color\r\n * gets either lighter or darker.\r\n *\r\n * If this is set to `true`, color generator will switch to opposing spectrum\r\n * when reaching `minLightness` or `maxLightness`.\r\n *\r\n * E.g. if we start off with a red color, then gradually generate lighter\r\n * colors through rose shades, then switch back to dark red and gradually\r\n * increase the lightness of it until it reaches the starting red.\r\n *\r\n * If set to `false` it will stop there and cap lightness at whatever level\r\n * we hit `minLightness` or `maxLightness`, which may result in a number of\r\n * the same colors.\r\n */\n\n _this.wrap = true;\n /**\r\n * Re-use same colors in the pre-set list, when ColorSet runs out of colors,\r\n * rather than start generating new ones.\r\n */\n\n _this.reuse = false;\n /**\r\n * Saturation of colors. This will change saturation of all colors of color\r\n * set.\r\n *\r\n * It is recommended to set this in theme, as changing it at run time won't\r\n * make the items to redraw and change color.\r\n */\n\n _this.saturation = 1;\n _this.className = \"ColorSet\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(ColorSet.prototype, \"list\", {\n /**\r\n * Returns current list of colors.\r\n *\r\n * If there are none, a new list of colors is generated, based on various\r\n * ColorSet settings.\r\n *\r\n * @return Color list\r\n */\n get: function get() {\n if (!this._list) {\n this.generate(this.minColors);\n }\n\n return this._list;\n },\n\n /**\r\n * Sets a list of pre-defined colors to use for the iterator.\r\n *\r\n * @param value Color list\r\n */\n set: function set(value) {\n this._list = value;\n this.reset();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Gets reusable color.\r\n *\r\n * @param index Index of color\r\n * @return Color\r\n */\n\n ColorSet.prototype.getReusableColor = function (index) {\n if (this._list.length == 0) {\n this.generate(1);\n return this.list[0];\n } else {\n var tmpstep = index - Math.floor(index / this._list.length) * this.list.length;\n return this.list[tmpstep];\n }\n };\n /**\r\n * Returns next color in the list using internal iterator counter.\r\n *\r\n * If `step` is set to something other than 1, it may return other color than\r\n * exact next one in the list.\r\n *\r\n * @return Color\r\n */\n\n\n ColorSet.prototype.next = function () {\n var color;\n\n if (this.list.length <= this._currentStep) {\n if (this.reuse) {\n color = this.getReusableColor(this._currentStep);\n } else {\n this.generate($math.max(this.minColors, this._currentStep + 1));\n color = this.list[this._currentStep];\n }\n } else {\n color = this.list[this._currentStep];\n }\n\n this._currentStep += this.step;\n return color.saturate(this.saturation);\n };\n /**\r\n * Returns a color at specific index in the list.\r\n *\r\n * @param i Index\r\n * @return Color\r\n */\n\n\n ColorSet.prototype.getIndex = function (i) {\n var color;\n\n if (this.list.length <= i) {\n if (this.reuse) {\n color = this.getReusableColor(i);\n } else {\n this.generate(this.minColors);\n color = this.getIndex(i);\n }\n } else {\n color = this.list[i];\n }\n\n return color.saturate(this.saturation);\n };\n /**\r\n * Resets internal iterator.\r\n *\r\n * Calling `next()` after this will return the very first color in the color\r\n * list, even if it was already returned before.\r\n */\n\n\n ColorSet.prototype.reset = function () {\n this._currentStep = this._startIndex;\n };\n\n Object.defineProperty(ColorSet.prototype, \"currentStep\", {\n /**\r\n * @return Step\r\n */\n get: function get() {\n return this._currentStep;\n },\n\n /**\r\n * Sets current color iteration. You can use this property to skip some\r\n * colors from iteration. E.g. setting it to `10` will skip first ten\r\n * colors.\r\n *\r\n * Please note that the number is zero-based.\r\n *\r\n * @param value Step\r\n */\n set: function set(value) {\n this._currentStep = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColorSet.prototype, \"startIndex\", {\n /**\r\n * @return Index\r\n */\n get: function get() {\n return this._startIndex;\n },\n\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n *\r\n * @default 0\r\n * @since 4.4.9\r\n * @param value Index\r\n */\n set: function set(value) {\n this._startIndex = value;\n this.reset();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Generates colors based on the various ColorSet settings.\r\n *\r\n * @param count Number of colors to generate\r\n */\n\n ColorSet.prototype.generate = function (count) {\n // Init\n var curColor = this.currentColor;\n var hsl = $colors.rgbToHsl($type.getValue(curColor.rgb));\n var hueStep = $type.hasValue(this.stepOptions.hue) ? this.stepOptions.hue : 1 / count;\n var mods = {\n brighten: 0,\n lighten: 0,\n hue: hsl.h,\n lightness: hsl.l,\n saturation: hsl.s\n }; // Generate list of hues, and shuffle them\n\n var hues = [];\n var startIndex = this.list.length == 0 ? 0 : 1;\n\n if (this.reuse) {\n for (var i = startIndex; i <= count; i++) {\n hues.push($colors.rgbToHsl($type.getValue(this._list[i].rgb)).h);\n }\n } else {\n for (var i = startIndex; i <= count; i++) {\n var h = hsl.h + hueStep * i;\n\n if (this.wrap && h > 1) {\n h -= 1;\n }\n\n hues.push(h);\n }\n } // Shuffle colors randomly\n\n\n if (this.shuffle) {\n hues.sort(function (a, b) {\n return Math.random() - 0.5;\n });\n } // Generate colors by rotating hue\n\n\n for (var i = 0; i < count; i++) {\n // Update hue\n if (this.reuse) {\n hsl = $colors.rgbToHsl($type.getValue(this._list[i].rgb));\n } else {\n hsl.h = hues.shift();\n } // Apply HSL mods\n\n\n this.applyStepOptions(hsl, mods, i, this._currentPass); // Convert back to Color\n\n var c = color($colors.hslToRgb(hsl)); // Apply regular color mods\n\n var brighten = (this.stepOptions.brighten || 0) * i + (this.passOptions.brighten || 0) * this._currentPass;\n\n if (brighten != 0) {\n if (this.wrap) {\n brighten = $utils.fitNumberRelative(brighten, this.minLightness, this.maxLightness);\n } else {\n brighten = $utils.fitNumber(brighten, this.minLightness, this.maxLightness);\n }\n\n c = c.brighten(brighten);\n }\n\n var lighten = (this.stepOptions.lighten || 0) * i + (this.passOptions.lighten || 0) * this._currentPass;\n\n if (lighten != 0) {\n if (this.wrap) {\n lighten = $utils.fitNumberRelative(lighten, this.minLightness, this.maxLightness);\n } else {\n lighten = $utils.fitNumber(lighten, this.minLightness, this.maxLightness);\n }\n\n c = c.lighten(lighten);\n }\n\n this._list.push(c);\n }\n\n this._currentPass++;\n };\n\n Object.defineProperty(ColorSet.prototype, \"currentColor\", {\n /**\r\n * Returns current last color. It's either the last color in the list of\r\n * colors, or `baseColor` if list is empty.\r\n *\r\n * @return Color\r\n */\n get: function get() {\n if (this._list.length == 0) {\n return this.baseColor.saturate(this.saturation);\n } else {\n return this._list[this._list.length - 1].saturate(this.saturation);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Generates modifiers for color, based on what step and pass.\r\n *\r\n * @param hsl Curren HSL value of the color to modify\r\n * @param base The modifiers that were before modification to use as a base\r\n * @param step Current step\r\n * @param pass Current pass\r\n */\n\n ColorSet.prototype.applyStepOptions = function (hsl, base, step, pass) {\n // Process lightness\n hsl.l = base.lightness + (this.stepOptions.lightness || 0) * step + (this.passOptions.lightness || 0) * pass;\n\n if (this.wrap) {\n if (hsl.l > 1) {\n hsl.l = hsl.l - Math.floor(hsl.l);\n } else if (hsl.l < 0) {\n hsl.l = -(hsl.l - Math.floor(hsl.l));\n }\n\n hsl.l = $utils.fitNumberRelative(hsl.l, this.minLightness, this.maxLightness);\n } else {\n if (hsl.l > 1) {\n hsl.l = 1;\n } else if (hsl.l < 0) {\n hsl.l = 0;\n }\n\n hsl.l = $utils.fitNumber(hsl.l, this.minLightness, this.maxLightness);\n }\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n ColorSet.prototype.processConfig = function (config) {\n if (config) {\n // Cast colors\n if ($type.hasValue(config.list) && $type.isArray(config.list)) {\n for (var i = 0, len = config.list.length; i < len; i++) {\n if (!(config.list[i] instanceof Color)) {\n config.list[i] = color(config.list[i]);\n }\n }\n }\n\n if ($type.hasValue(config.baseColor) && !(config.baseColor instanceof Color)) {\n config.baseColor = color(config.baseColor);\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return ColorSet;\n}(BaseObject);\n\nexport { ColorSet };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ColorSet\"] = ColorSet;","/**\r\n * This module contains PatternSet object definition\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { BaseObject } from \"../Base\";\nimport { Color } from \"./Color\";\nimport { InterfaceColorSet } from \"./InterfaceColorSet\";\nimport { LinePattern } from \"../rendering/fills/LinePattern\";\nimport { RectPattern } from \"../rendering/fills/RectPattern\";\nimport { CirclePattern } from \"../rendering/fills/CirclePattern\";\nimport { registry } from \"../Registry\";\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines an interable list of distinctive patterns that can be used in\r\n * conjunction to colors to generate various fill patterns.\r\n *\r\n * @important\r\n * @since 4.7.5\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\n\nvar PatternSet =\n/** @class */\nfunction (_super) {\n __extends(PatternSet, _super);\n /**\r\n * Constructor\r\n */\n\n\n function PatternSet() {\n var _this = _super.call(this) || this;\n /**\r\n * Holds the list of the colors in this set. (preset or auto-generated)\r\n */\n\n\n _this._list = [];\n /**\r\n * Current step.\r\n */\n\n _this._currentStep = 0;\n /**\r\n * If set to non-zero value, the PatternSet will start iterating patterns from\r\n * that particular index, not the first pattern in the list.\r\n */\n\n _this._startIndex = 0;\n /**\r\n * Current pass in cycle. Once all patterns in the list are iterated,\r\n * iteration restarts from beginning and currentPass is incremented.\r\n */\n\n _this._currentPass = 0;\n /**\r\n * A base color. If there are no colors pre-set in the color list, ColorSet\r\n * will use this color as a base when generating new ones, applying\r\n * `stepOptions` and `passOptions` to this base color.\r\n */\n\n _this.baseColor = new Color({\n r: 103,\n g: 183,\n b: 220\n });\n _this.className = \"PatternSet\"; // Set base color to be used for pattern elements\n\n var interfaceColors = new InterfaceColorSet(); // Set default patterns\n\n _this.list = [_this.getLinePattern(1000, 45, 1, 6), _this.getRectPattern(10, 0, 4), _this.getLinePattern(1000, -45, 1, 6), _this.getCirclePattern(11, 2, true), _this.getLinePattern(6, 90, 1), _this.getRectPattern(12, 45, 6, true), _this.getLinePattern(6, 0, 1), _this.getRectPattern(7, 0, 4), _this.getLinePattern(1000, 45, 2, 3, \"4,2\"), _this.getCirclePattern(9, 3, false), _this.getLinePattern(1000, -45, 2, 3, \"4,2\"), _this.getRectPattern(10, 45, Math.sqrt(50)), _this.getLinePattern(1000, -45, 2, 1), _this.getRectPattern(10, 0, 9), _this.getLinePattern(1000, 45, 2, 1), _this.getLinePattern(1000, 0, 3, 1), _this.getRectPattern(10, 45, 10), _this.getLinePattern(1000, 90, 3, 1)];\n _this.baseColor = interfaceColors.getFor(\"stroke\");\n\n _this.applyTheme();\n\n return _this;\n }\n\n PatternSet.prototype.getLinePattern = function (size, rotation, thickness, gap, strokeDashArray) {\n var pattern = new LinePattern();\n pattern.width = size;\n pattern.height = size;\n pattern.stroke = this.baseColor;\n pattern.gap = gap;\n pattern.strokeDasharray = strokeDashArray;\n pattern.strokeWidth = thickness;\n pattern.rotation = rotation;\n return pattern;\n };\n\n PatternSet.prototype.getRectPattern = function (size, rotation, thickness, outline) {\n var pattern = new RectPattern();\n pattern.width = size;\n pattern.height = size;\n pattern.rectWidth = thickness;\n pattern.rectHeight = thickness;\n\n if (outline) {\n pattern.stroke = this.baseColor;\n pattern.strokeWidth = 1;\n pattern.fillOpacity = 0;\n } else {\n pattern.fill = this.baseColor;\n pattern.strokeWidth = 0;\n }\n\n if (rotation != 0) {\n pattern.shapeRendering = \"auto\";\n }\n\n pattern.rotation = rotation;\n return pattern;\n };\n\n PatternSet.prototype.getCirclePattern = function (size, radius, outline) {\n var pattern = new CirclePattern();\n pattern.width = size;\n pattern.height = size;\n pattern.shapeRendering = \"auto\";\n pattern.radius = radius;\n\n if (outline) {\n pattern.stroke = this.baseColor;\n pattern.strokeWidth = 1;\n pattern.fillOpacity = 0;\n } else {\n pattern.fill = this.baseColor;\n pattern.strokeWidth = 0;\n }\n\n return pattern;\n };\n\n Object.defineProperty(PatternSet.prototype, \"list\", {\n /**\r\n * @return Pattern list\r\n */\n get: function get() {\n return this._list;\n },\n\n /**\r\n * List of pre-defined patterns to be used in set.\r\n *\r\n * @param value Pattern list\r\n */\n set: function set(value) {\n this._list = value;\n this.reset();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns the next pattern in list.\r\n *\r\n * @return Pattern\r\n */\n\n PatternSet.prototype.next = function () {\n var pattern = this.getIndex(this.currentStep);\n this._currentStep++;\n return pattern;\n };\n /**\r\n * Returns a color at specific index in the list.\r\n *\r\n * @param i Index\r\n * @return Pattern\r\n */\n\n\n PatternSet.prototype.getIndex = function (i) {\n var pattern;\n\n while (this.list.length <= i) {\n this.generatePatterns();\n }\n\n pattern = this.list[i];\n return pattern.clone();\n };\n /**\r\n * Generates a new set of patterns.\r\n */\n\n\n PatternSet.prototype.generatePatterns = function () {\n var count = this.list.length / (this._currentPass + 1);\n this._currentPass++;\n\n for (var i = 0; i < count; i++) {\n this.list.push(this.list[i].clone());\n }\n };\n /**\r\n * Resets internal iterator.\r\n *\r\n * Calling `next()` after this will return the very first color in the color\r\n * list, even if it was already returned before.\r\n */\n\n\n PatternSet.prototype.reset = function () {\n this._currentStep = this._startIndex;\n };\n\n Object.defineProperty(PatternSet.prototype, \"currentStep\", {\n /**\r\n * @return Step\r\n */\n get: function get() {\n return this._currentStep;\n },\n\n /**\r\n * Sets current color iteration. You can use this property to skip some\r\n * colors from iteration. E.g. setting it to `10` will skip first ten\r\n * colors.\r\n *\r\n * Please note that the number is zero-based.\r\n *\r\n * @param value Step\r\n */\n set: function set(value) {\n this._currentStep = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PatternSet.prototype, \"startIndex\", {\n /**\r\n * @return Index\r\n */\n get: function get() {\n return this._startIndex;\n },\n\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n *\r\n * @default 0\r\n * @param value Index\r\n */\n set: function set(value) {\n this._startIndex = value;\n this.reset();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n PatternSet.prototype.processConfig = function (config) {\n // if (config) {\n // \t// Set up axis ranges\n // \tif ($type.hasValue(config.list) && $type.isArray(config.list)) {\n // \t\tfor (let i = 0, len = config.list.length; i < len; i++) {\n // \t\t\tif (!(config.list[i] instanceof Color)) {\n // \t\t\t\tconfig.list[i] = color(config.list[i]);\n // \t\t\t}\n // \t\t}\n // \t}\n // }\n _super.prototype.processConfig.call(this, config);\n };\n\n return PatternSet;\n}(BaseObject);\n\nexport { PatternSet };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"PatternSet\"] = PatternSet;","/**\r\n * A plugin base class.\r\n */\n\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This is a base class that provides core functionality for plugins.\r\n *\r\n * The easiest way to start off with a new plugin is to extend this class.\r\n *\r\n * It will provide all the mandatory functionality, such as disposers.\r\n *\r\n * @since 4.2.2\r\n */\nvar Plugin =\n/** @class */\nfunction () {\n /**\r\n * Constructor\r\n */\n function Plugin() {\n /**\r\n * Is this object disposed?\r\n */\n this._disposed = false;\n /**\r\n * List of IDisposer which will be disposed when the BaseObject is disposed.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n this._disposers = []; // Nothing to do here\n }\n /**\r\n * Decorates series with required events and adapters used to hijack its\r\n * data.\r\n */\n\n\n Plugin.prototype.init = function () {// Does nothing\n // Override it\n };\n /**\r\n * Returns if this element is already disposed.\r\n *\r\n * @return Is disposed?\r\n */\n\n\n Plugin.prototype.isDisposed = function () {\n return this._disposed;\n };\n /**\r\n * Disposes this object and related stuff.\r\n */\n\n\n Plugin.prototype.dispose = function () {\n if (!this._disposed) {\n this._disposed = true;\n var a = this._disposers;\n this._disposers = null;\n\n while (a.length !== 0) {\n var disposer = a.shift();\n disposer.dispose();\n }\n }\n };\n\n return Plugin;\n}();\n\nexport { Plugin };","/**\r\n * AmChartsLogo module.\r\n *\r\n * AmChartsLogo shows amCharts logo for non-commercial users of a library.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../Container\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { Polyspline } from \"./Polyspline\";\nimport { color } from \"../utils/Color\";\nimport { LinearGradient } from \"../rendering/fills/LinearGradient\";\nimport { DesaturateFilter } from \"../rendering/filters/DesaturateFilter\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A class used to draw and display progress indicator.\r\n *\r\n * @see {@link IAmChartsLogoEvents} for a list of available events\r\n * @see {@link IAmChartsLogoAdapters} for a list of available Adapters\r\n * @ignore Exclude from docs\r\n */\n\nvar AmChartsLogo =\n/** @class */\nfunction (_super) {\n __extends(AmChartsLogo, _super);\n /**\r\n * Constructor\r\n */\n\n\n function AmChartsLogo() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"AmChartsLogo\";\n _this.valign = \"bottom\";\n var d = 0.3;\n _this.opacity = 0.3;\n _this.defaultState.properties.opacity = 0.4;\n _this.url = \"https://www.amcharts.com/\";\n _this.urlTarget = \"_blank\";\n _this.showSystemTooltip = true;\n _this.readerTitle = \"Chart created using amCharts library\";\n _this.width = 220 * d;\n _this.height = 70 * d;\n _this.background.opacity = 0;\n var aColor = color(\"#474758\");\n\n if (new InterfaceColorSet().getFor(\"background\").alternative.hex == \"#ffffff\") {\n aColor = color(\"#ffffff\");\n }\n\n var aGradient = new LinearGradient();\n aGradient.addColor(aColor);\n aGradient.addColor(aColor, 1, 0.75);\n aGradient.addColor(color(\"#3cabff\"), 1, 0.755);\n aGradient.rotation = -10;\n var aStroke = aGradient;\n\n var m = _this.createChild(Polyspline);\n\n m.shouldClone = false;\n m.isMeasured = false;\n m.segments = [[{\n x: 50 * d,\n y: 50 * d\n }, {\n x: 90 * d,\n y: 50 * d\n }, {\n x: 120 * d,\n y: 20 * d\n }, {\n x: 135 * d,\n y: 35 * d\n }, {\n x: 150 * d,\n y: 20 * d\n }, {\n x: 180 * d,\n y: 50 * d\n }, {\n x: 200 * d,\n y: 50 * d\n }]];\n m.strokeWidth = 6 * d;\n m.tensionX = 0.8;\n m.tensionY = 1;\n m.stroke = color(\"#3cabff\");\n\n var a = _this.createChild(Polyspline);\n\n a.shouldClone = false;\n a.isMeasured = false;\n a.segments = [[{\n x: 20 * d,\n y: 50 * d\n }, {\n x: 50 * d,\n y: 50 * d\n }, {\n x: 90 * d,\n y: 12 * d\n }, {\n x: 133 * d,\n y: 50 * d\n }, {\n x: 170 * d,\n y: 50 * d\n }, {\n x: 200 * d,\n y: 50 * d\n }]];\n a.strokeWidth = 6 * d;\n a.tensionX = 0.75;\n a.tensionY = 1;\n a.stroke = aStroke;\n\n _this._disposers.push(a);\n\n var desaturateFilter = new DesaturateFilter();\n\n _this.filters.push(desaturateFilter);\n\n var desaturateFilterHover = new DesaturateFilter();\n desaturateFilterHover.saturation = 1;\n\n var hoverState = _this.states.create(\"hover\");\n\n hoverState.properties.opacity = 1;\n hoverState.filters.push(desaturateFilterHover); // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n return AmChartsLogo;\n}(Container);\n\nexport { AmChartsLogo };","import { __read, __spread } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { system } from \"../System\";\nimport { registry } from \"../Registry\";\nimport { Container } from \"../Container\";\nimport { Component } from \"../Component\";\nimport { Paper } from \"../rendering/Paper\";\nimport { SVGContainer, svgContainers } from \"../rendering/SVGContainer\";\nimport { FocusFilter } from \"../rendering/filters/FocusFilter\";\nimport { Preloader } from \"../elements/Preloader\";\nimport { AmChartsLogo } from \"../elements/AmChartsLogo\";\nimport { Tooltip } from \"../elements/Tooltip\";\nimport { Disposer, MultiDisposer } from \"../utils/Disposer\";\nimport { percent } from \"./Percent\";\nimport { options } from \"../Options\";\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\nimport * as $dom from \"./DOM\";\nimport * as $utils from \"./Utils\";\nimport * as $log from \"./Log\";\n/**\r\n * ============================================================================\r\n * INSTANTIATION FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates all HTML and SVG containers needed for the chart instance, as well\r\n * as the new [[Sprite]] (as specified in `classType` parameter).\r\n *\r\n * @param htmlElement A container to creat elements in\r\n * @param classType A class definition of the new element to create\r\n * @return Newly-created Sprite object\r\n */\n\nfunction createChild(htmlElement, classType) {\n var htmlContainer = $dom.getElement(htmlElement); // If there's no container available yet, we create a fake one\n\n var tmpContainer = false;\n\n if (!htmlContainer) {\n htmlContainer = document.createElement(\"div\");\n htmlContainer.style.width = \"200px\";\n htmlContainer.style.height = \"200px\";\n htmlContainer.style.top = \"0\";\n htmlContainer.style.left = \"0\";\n htmlContainer.style.visibility = \"hidden\";\n htmlContainer.style.position = \"absolute\";\n document.body.appendChild(htmlContainer);\n tmpContainer = true;\n }\n\n if (htmlContainer) {\n htmlContainer.innerHTML = \"\"; //htmlContainer.style.overflow = \"hidden\";\n\n var svgDiv_1 = new SVGContainer(htmlContainer);\n var paper = new Paper(svgDiv_1.SVGContainer, \"svg-\" + (svgContainers.length - 1)); // the approach with masks is chosen because overflow:visible is set on SVG element in order tooltips could go outside\n // svg area - this is often needed when working with small charts.\n // main container which holds content container and tooltips container\n\n var container_1 = new Container();\n container_1.htmlContainer = htmlContainer;\n container_1.svgContainer = svgDiv_1;\n container_1.width = percent(100);\n container_1.height = percent(100);\n container_1.background.fillOpacity = 0;\n container_1.paper = paper;\n paper.append(container_1.group); // Set up moving to proper element container if it's not yet ready at call time\n\n if (tmpContainer) {\n $dom.ready(function () {\n container_1.moveHtmlContainer(htmlElement);\n });\n } // this is set from parent container, but this one doesn't have, so do it manually.\n\n\n container_1.relativeWidth = 1;\n container_1.relativeHeight = 1;\n svgDiv_1.container = container_1; // creating classType instance\n\n var sprite_1 = container_1.createChild(classType);\n sprite_1.topParent = container_1;\n var uid = sprite_1.uid;\n registry.invalidSprites[uid] = [];\n registry.invalidDatas[uid] = [];\n registry.invalidPositions[uid] = [];\n registry.invalidLayouts[uid] = [];\n container_1.baseId = uid;\n sprite_1.isBaseSprite = true;\n sprite_1.focusFilter = new FocusFilter();\n registry.baseSprites.push(sprite_1);\n registry.baseSpritesByUid[uid] = sprite_1;\n sprite_1.maskRectangle = {\n x: 0,\n y: 0,\n width: Math.max(svgDiv_1.width || 0, 0),\n height: Math.max(svgDiv_1.height || 0, 0)\n }; // this solves issues with display:none, as all children are measured as 0x0\n\n container_1.events.on(\"maxsizechanged\", function (event) {\n if (event.previousWidth == 0 || event.previousHeight == 0) {\n container_1.deepInvalidate();\n }\n\n if (sprite_1.maskRectangle) {\n sprite_1.maskRectangle = {\n x: 0,\n y: 0,\n width: Math.max(svgDiv_1.width || 0, 0),\n height: Math.max(svgDiv_1.height || 0, 0)\n };\n }\n });\n var loopTimer_1 = null; // Checks to see whether the chart was properly disposed or not\n\n var loop_1 = function loop_1() {\n if (!sprite_1.isDisposed()) {\n if ($dom.getRoot(sprite_1.dom) == null) {\n if (options.autoDispose) {\n container_1.htmlContainer = undefined;\n svgDiv_1.htmlElement = undefined;\n sprite_1.dispose();\n } else {\n $log.warn(\"Chart was not disposed\", sprite_1.uid);\n }\n\n loopTimer_1 = null;\n } else {\n loopTimer_1 = window.setTimeout(loop_1, 1000);\n }\n } else {\n loopTimer_1 = null;\n }\n };\n\n loop_1();\n sprite_1.addDisposer(new Disposer(function () {\n if (loopTimer_1 !== null) {\n clearTimeout(loopTimer_1);\n }\n\n $array.remove(registry.baseSprites, sprite_1);\n registry.baseSpritesByUid[sprite_1.uid] = undefined;\n })); // TODO figure out a better way of doing this\n\n sprite_1.addDisposer(container_1); // tooltip container\n\n var tooltipContainer_1 = container_1.createChild(Container);\n tooltipContainer_1.topParent = container_1;\n tooltipContainer_1.width = percent(100);\n tooltipContainer_1.height = percent(100);\n tooltipContainer_1.isMeasured = false;\n container_1.tooltipContainer = tooltipContainer_1;\n sprite_1.tooltip = new Tooltip();\n sprite_1.tooltip.hide(0);\n sprite_1.tooltip.setBounds({\n x: 0,\n y: 0,\n width: tooltipContainer_1.maxWidth,\n height: tooltipContainer_1.maxHeight\n });\n tooltipContainer_1.events.on(\"maxsizechanged\", function () {\n $type.getValue(sprite_1.tooltip).setBounds({\n x: 0,\n y: 0,\n width: tooltipContainer_1.maxWidth,\n height: tooltipContainer_1.maxHeight\n });\n }, undefined, false); //@todo: maybe we don't need to create one by default but only on request?\n\n var preloader_1 = new Preloader();\n preloader_1.events.on(\"inited\", function () {\n preloader_1.__disabled = true;\n }, undefined, false);\n container_1.preloader = preloader_1; //if (!options.commercialLicense) {\n\n if (sprite_1 instanceof Container && !sprite_1.hasLicense()) {\n var logo_1 = tooltipContainer_1.createChild(AmChartsLogo);\n tooltipContainer_1.events.on(\"maxsizechanged\", function (ev) {\n if (tooltipContainer_1.maxWidth <= 100 || tooltipContainer_1.maxHeight <= 50) {\n logo_1.hide();\n } else if (logo_1.isHidden || logo_1.isHiding) {\n logo_1.show();\n }\n }, undefined, false);\n sprite_1.logo = logo_1;\n logo_1.align = \"left\";\n logo_1.valign = \"bottom\";\n }\n\n $utils.used(sprite_1.numberFormatter); // need to create one.\n // Set this as an autonomouse instance\n // Controls like Preloader, Export will use this.\n\n container_1.isStandaloneInstance = true;\n\n if (options.onlyShowOnViewport) {\n if (!$dom.isElementInViewport(htmlContainer, options.viewportTarget)) {\n sprite_1.__disabled = true;\n sprite_1.tooltipContainer.__disabled = true;\n var disposers = [$dom.addEventListener(window, \"DOMContentLoaded\", function () {\n viewPortHandler(sprite_1);\n }), $dom.addEventListener(window, \"load\", function () {\n viewPortHandler(sprite_1);\n }), $dom.addEventListener(window, \"resize\", function () {\n viewPortHandler(sprite_1);\n }), $dom.addEventListener(window, \"scroll\", function () {\n viewPortHandler(sprite_1);\n })];\n\n if (options.viewportTarget) {\n var targets = $type.isArray(options.viewportTarget) ? options.viewportTarget : options.viewportTarget ? [options.viewportTarget] : [];\n\n for (var i = 0; i < targets.length; i++) {\n var target = targets[i];\n disposers.push($dom.addEventListener(target, \"resize\", function () {\n viewPortHandler(sprite_1);\n }));\n disposers.push($dom.addEventListener(target, \"scroll\", function () {\n viewPortHandler(sprite_1);\n }));\n }\n }\n\n var disposer = new MultiDisposer(disposers);\n sprite_1.addDisposer(disposer);\n sprite_1.vpDisposer = disposer;\n } else if (options.queue) {\n addToQueue(sprite_1);\n }\n } else if (options.queue) {\n addToQueue(sprite_1);\n }\n\n return sprite_1;\n } else {\n system.log(\"html container not found\");\n throw new Error(\"html container not found\");\n }\n}\n/**\r\n * Disposes all of the currently active charts.\r\n */\n\n\nexport function disposeAllCharts() {\n while (registry.baseSprites.length !== 0) {\n registry.baseSprites.pop().dispose();\n }\n}\nexport function addToQueue(sprite) {\n if (registry.queue.indexOf(sprite) == -1) {\n sprite.__disabled = true;\n sprite.tooltipContainer.__disabled = true;\n sprite.events.disableType(\"appeared\");\n\n if (registry.queue.length == 0) {\n registry.events.once(\"exitframe\", function () {\n queueHandler(sprite);\n });\n system.requestFrame();\n }\n\n sprite.addDisposer(new Disposer(function () {\n removeFromQueue(sprite);\n }));\n registry.queue.push(sprite);\n }\n}\nexport function removeFromQueue(sprite) {\n var index = registry.queue.indexOf(sprite);\n\n if (index >= 0) {\n registry.queue.splice(registry.queue.indexOf(sprite), 1);\n var nextSprite = registry.queue[index];\n\n if (nextSprite) {\n queueHandler(nextSprite);\n }\n }\n}\n/**\r\n * Checks whether the chart was not initialized fully due to setting\r\n * of `onlyShowOnViewport`. If it hasn't and is now in the viewport\r\n * the chart will be initialized.\r\n *\r\n * @since 4.9.12\r\n * @param sprite Top-level chart object\r\n */\n\nexport function viewPortHandler(sprite) {\n if (sprite.__disabled && $dom.isElementInViewport(sprite.htmlContainer, options.viewportTarget)) {\n if (sprite.vpDisposer) {\n sprite.vpDisposer.dispose();\n }\n\n addToQueue(sprite);\n }\n}\nexport function queueHandler(sprite) {\n if (sprite && sprite.tooltipContainer) {\n sprite.__disabled = false;\n sprite.tooltipContainer.__disabled = false;\n sprite.events.enableType(\"appeared\");\n sprite.dispatch(\"removedfromqueue\");\n\n if (sprite.showOnInit) {\n sprite.events.on(\"appeared\", function () {\n removeFromQueue(sprite);\n });\n }\n\n if (sprite.vpDisposer) {\n sprite.vpDisposer.dispose();\n }\n\n if (sprite instanceof Container) {\n sprite.invalidateLabels();\n }\n\n if (sprite.tooltipContainer) {\n sprite.tooltipContainer.invalidateLayout();\n }\n\n if (sprite instanceof Component) {\n sprite.invalidateData();\n sprite.reinit();\n sprite.events.once(\"datavalidated\", function () {\n if (sprite.showOnInit) {\n sprite.appear();\n } else {\n removeFromQueue(sprite);\n }\n });\n } else {\n sprite.reinit();\n sprite.events.once(\"inited\", function () {\n removeFromQueue(sprite);\n });\n\n if (sprite.showOnInit) {\n sprite.appear();\n }\n }\n }\n}\n/**\r\n * A shortcut to creating a chart instance.\r\n *\r\n * The first argument is either a reference to or an id of a DOM element to be\r\n * used as a container for the chart.\r\n *\r\n * The second argument is the type reference of the chart type. (for plain\r\n * JavaScript users this can also be a string indicating chart type)\r\n *\r\n * ```TypeScript\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n * ```\r\n * ```JavaScript\r\n * // Can pass in chart type reference like this:\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // ... or chart class type as a string:\r\n * var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @param htmlElement Reference or id of the target container element\r\n * @param classType Class type of the target chart type\r\n * @return Chart instance\r\n */\n\nexport function create(htmlElement, classType) {\n // This is a nasty hack for the benefit of vanilla JS users, who do not\n // enjoy benefits of type-check anyway.\n // We're allowing passing in a name of the class rather than type reference\n // itself.\n var classError;\n\n if ($type.isString(classType)) {\n if ($type.hasValue(registry.registeredClasses[classType])) {\n classType = registry.registeredClasses[classType];\n } else {\n classType = registry.registeredClasses[\"Container\"];\n classError = new Error(\"Class [\" + classType + \"] is not loaded.\");\n }\n } // Create the chart\n\n\n var chart = createChild(htmlElement, classType); // Error?\n\n if (classError) {\n chart.raiseCriticalError(classError);\n }\n\n return chart;\n}\n/**\r\n * A shortcut to creating a chart from a config object.\r\n *\r\n * Example:\r\n *\r\n * ```TypeScript\r\n * let chart am4core.createFromConfig({ ... }, \"chartdiv\", am4charts.XYChart );\r\n * ```\r\n * ```JavaScript\r\n * var chart am4core.createFromConfig({ ... }, \"chartdiv\", \"XYChart\" );\r\n * ```\r\n *\r\n * If `chartType` parameter is not supplied it must be set in a config object,\r\n * via reference to chart type, e.g.:\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": am4charts.XYChart,\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": am4charts.XYChart,\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * Or via string: (if you are using JavaScript)\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * A `container` can either be a reference to an HTML container to put chart\r\n * in, or it's unique id.\r\n *\r\n * If `container` is not specified, it must be included in the config object:\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * \"container\": \"chartdiv\",\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * \"container\": \"chartdiv\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param config Config object in property/value pairs\r\n * @param htmlElement Container reference or ID\r\n * @param objectType Chart type\r\n * @return A newly created chart instance\r\n * @todo Throw exception if type is not correct\r\n */\n\nexport function createFromConfig(config, htmlElement, classType) {\n // Extract chart type from config if necessary\n if (!$type.hasValue(classType)) {\n classType = config.type;\n delete config.type;\n } // Extract element from config if necessary\n\n\n if (!$type.hasValue(htmlElement)) {\n htmlElement = config.container;\n delete config.container;\n } // Check if we need to extract actual type reference\n\n\n var finalType;\n var classError;\n\n if ($type.isString(classType) && $type.hasValue(registry.registeredClasses[classType])) {\n finalType = registry.registeredClasses[classType];\n } else if (typeof classType !== \"function\") {\n finalType = Container;\n classError = new Error(\"Class [\" + classType + \"] is not loaded.\");\n } else {\n finalType = classType;\n } // Create the chart\n\n\n var chart = createChild(htmlElement, finalType); // Set config\n\n if (classError) {\n chart.raiseCriticalError(classError);\n } else {\n chart.config = config;\n }\n\n return chart;\n}\n/**\r\n * Useful in creating real queues form mult-chart creation.\r\n *\r\n * Accepts a reference to a function which crates and returns actual chart\r\n * object.\r\n *\r\n * It returns a `Promise` which you can use to catch chart instance once it's\r\n * created.\r\n *\r\n * ```TypeScript\r\n * am4core.createDeferred(function(div) {\r\n * // Create first chart\r\n * let chart = am4core.create(div, am4charts.XYChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv1\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n *\r\n * am4core.createDeferred(function(div) {\r\n * // Create second chart\r\n * let chart = am4core.create(div, am4charts.PieChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv2\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * am4core.createDeferred(function(div) {\r\n * // Create first chart\r\n * var chart = am4core.create(div, am4charts.XYChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv1\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n *\r\n * am4core.createDeferred(function(div) {\r\n * // Create second chart\r\n * var chart = am4core.create(div, am4charts.PieChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv2\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/performance/#Deferred_daisy_chained_instantiation} for more information\r\n * @since 4.10.0\r\n * @param callback Callback function that creates chart\r\n * @param scope Scope to call callback in\r\n * @param ...rest Parameters to pass into callback\r\n * @return Promise with chart instance\r\n */\n\nexport function createDeferred(callback, scope) {\n var rest = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n\n return new Promise(function (resolve, reject) {\n registry.deferred.push({\n scope: scope,\n callback: callback,\n args: rest,\n resolve: resolve\n });\n\n if (registry.deferred.length == 1) {\n processNextDeferred();\n }\n });\n}\n\nfunction processNextDeferred() {\n var _a;\n\n var next = registry.deferred[0];\n\n if (next) {\n var sprite_2 = (_a = next.callback).call.apply(_a, __spread([next.scope], next.args));\n\n sprite_2.events.on(\"ready\", function () {\n next.resolve(sprite_2);\n registry.deferred.shift();\n\n if (options.deferredDelay) {\n setTimeout(processNextDeferred, options.deferredDelay);\n } else {\n processNextDeferred();\n }\n });\n }\n}\n/**\r\n * Applies a theme to System, and subsequently all chart instances created\r\n * from that point forward.\r\n *\r\n * amCharts supports multiple themes. Calling `useTheme` multiple times will\r\n * make the System apply multiple themes, rather than overwrite previously\r\n * set one.\r\n *\r\n * This enables combining features from multiple themes on the same chart.\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * am4core.useTheme(am4themes.material);\r\n * am4core.useTheme(am4themes.animated);\r\n * ```\r\n * ```JavaScript\r\n * am4core.useTheme(am4themes.material);\r\n * am4core.useTheme(am4themes.animated);\r\n * ```\r\n *\r\n * The above will apply both the Material color and animation options to all\r\n * charts created.\r\n *\r\n * @param value A reference to a theme\r\n */\n\n\nexport function useTheme(value) {\n if (registry.themes.indexOf(value) === -1) {\n registry.themes.push(value);\n }\n}\n/**\r\n * Removes a theme from \"active themes\" list, so it won't get applied to any\r\n * charts created subsequently.\r\n *\r\n * @param value A reference to a theme\r\n */\n\nexport function unuseTheme(value) {\n $array.remove(registry.themes, value);\n}\n/**\r\n * Removes all \"active\" themes. Any charts created subsequently will not have\r\n * any theme applied to them.\r\n */\n\nexport function unuseAllThemes() {\n registry.themes = [];\n}\n/**\r\n * Adds a license, e.g.:\r\n *\r\n * ```TypeScript\r\n * am4core.addLicense(\"xxxxxxxx\");\r\n * ```\r\n * ```JavaScript\r\n * am4core.addLicense(\"xxxxxxxx\");\r\n * ```\r\n *\r\n * Multiple licenses can be added to cover for multiple products.\r\n *\r\n * @since 4.5.16\r\n * @param license License key\r\n */\n\nexport function addLicense(license) {\n options.licenses.push(license);\n}","/**\r\n * Legend-related functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Component } from \"../core/Component\";\nimport { DataItem } from \"../core/DataItem\";\nimport { ListTemplate, ListDisposer } from \"../core/utils/List\";\nimport { RoundedRectangle } from \"../core/elements/RoundedRectangle\";\nimport { Container } from \"../core/Container\";\nimport { Label } from \"../core/elements/Label\";\nimport { keyboard } from \"../core/utils/Keyboard\";\nimport { registry } from \"../core/Registry\";\nimport { getInteraction } from \"../core/interaction/Interaction\";\nimport { percent, Percent } from \"../core/utils/Percent\";\nimport { InterfaceColorSet } from \"../core/utils/InterfaceColorSet\";\nimport * as $utils from \"../core/utils/Utils\";\nimport * as $type from \"../core/utils/Type\";\nimport * as $math from \"../core/utils/Math\";\nimport { Sprite } from \"../core/Sprite\";\nimport { Disposer } from \"../core/utils/Disposer\";\nimport { MouseCursorStyle } from \"../core/interaction/Mouse\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../core/utils/Responsive\";\nimport { Scrollbar } from \"../core/elements/Scrollbar\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[Legend]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar LegendDataItem =\n/** @class */\nfunction (_super) {\n __extends(LegendDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function LegendDataItem() {\n var _this = _super.call(this) || this;\n /**\r\n * @ignore\r\n */\n\n\n _this.childrenCreated = false;\n _this.className = \"LegendDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(LegendDataItem.prototype, \"label\", {\n /**\r\n * A legend item's [[Label]] element.\r\n *\r\n * @return Label\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._label) {\n var label_1 = this.component.labels.create();\n this._label = label_1;\n this.addSprite(label_1);\n\n this._disposers.push(label_1);\n\n label_1.parent = this.itemContainer;\n\n this._disposers.push(new Disposer(function () {\n if ($type.hasValue(_this.component)) {\n _this.component.labels.removeValue(label_1);\n }\n }));\n }\n\n return this._label;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LegendDataItem.prototype, \"color\", {\n /**\r\n * @return Main color\r\n */\n get: function get() {\n return this.properties.color;\n },\n\n /**\r\n * Main color of legend data item.\r\n *\r\n * This is set by the target element this legend item represents, like\r\n * a Series or a Slice.\r\n *\r\n * It can be used to derive a color in legend's sub-items, like label:\r\n *\r\n * ```TypeScript\r\n * chart.legend.labels.template.text = \"[{color}]{name}[/]\";\r\n * ```\r\n * ```JavaScript\r\n * chart.legend.labels.template.text = \"[{color}]{name}[/]\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"legend\": {\r\n * // ...\r\n * \"labels\": {\r\n * \"text\": \"[{color}]{name}[/]\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/#Legend_labels} For more information about configuring legend labels.\r\n * @param value Main color\r\n */\n set: function set(value) {\n this.setProperty(\"color\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LegendDataItem.prototype, \"valueLabel\", {\n /**\r\n * A legend item's [[Label]] element for \"value label\".\r\n *\r\n * @return Label\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._valueLabel) {\n var valueLabel_1 = this.component.valueLabels.create();\n this._valueLabel = valueLabel_1;\n this.addSprite(valueLabel_1);\n\n this._disposers.push(valueLabel_1);\n\n valueLabel_1.parent = this.itemContainer;\n\n this._disposers.push(new Disposer(function () {\n if ($type.hasValue(_this.component)) {\n _this.component.valueLabels.removeValue(valueLabel_1);\n }\n }));\n }\n\n return this._valueLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LegendDataItem.prototype, \"itemContainer\", {\n /**\r\n * A reference to the main [[Container]] that holds legend item's elements:\r\n * marker and labels.\r\n *\r\n * @return Item container\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._itemContainer) {\n var component_1 = this.component;\n var itemContainer_1 = component_1.itemContainers.create();\n itemContainer_1.parent = component_1;\n this._itemContainer = itemContainer_1;\n this.addSprite(itemContainer_1);\n\n this._disposers.push(itemContainer_1); // Add click/tap event to toggle item\n\n\n if (itemContainer_1.togglable) {\n itemContainer_1.events.on(\"toggled\", function (ev) {\n component_1.toggleDataItem(ev.target.dataItem);\n }, undefined, false);\n } // Add focus event so that we can track which object is currently in focus\n // for keyboard toggling\n\n\n if (itemContainer_1.focusable) {\n itemContainer_1.events.on(\"hit\", function (ev) {\n // We need this here in order to reset focused item when it is clicked\n // normally so that it is not toggled by ENTER afterwards\n component_1.focusedItem = undefined;\n }, undefined, false);\n itemContainer_1.events.on(\"focus\", function (ev) {\n component_1.focusedItem = ev.target.dataItem;\n }, undefined, false);\n itemContainer_1.events.on(\"blur\", function (ev) {\n component_1.focusedItem = undefined;\n }, undefined, false);\n }\n\n this._disposers.push(new Disposer(function () {\n if ($type.hasValue(_this.component)) {\n _this.component.itemContainers.removeValue(itemContainer_1);\n }\n }));\n\n if (this.dataContext.uidAttr) {\n itemContainer_1.readerControls = this.dataContext.uidAttr();\n itemContainer_1.readerLabelledBy = this.dataContext.uidAttr();\n }\n\n var sprite = this.dataContext;\n\n if ((sprite instanceof DataItem || sprite instanceof Sprite) && !sprite.isDisposed()) {\n var visibilitychanged = function visibilitychanged(ev) {\n itemContainer_1.readerChecked = ev.visible;\n itemContainer_1.events.disableType(\"toggled\");\n itemContainer_1.isActive = !ev.visible;\n itemContainer_1.events.enableType(\"toggled\");\n };\n\n sprite.addDisposer(new Disposer(function () {\n if (_this.component) {\n _this.component.dataItems.remove(_this);\n }\n }));\n\n if (sprite instanceof Sprite) {\n itemContainer_1.addDisposer(sprite.events.on(\"visibilitychanged\", visibilitychanged, undefined, false));\n itemContainer_1.addDisposer(sprite.events.on(\"hidden\", function (ev) {\n itemContainer_1.readerChecked = false;\n itemContainer_1.events.disableType(\"toggled\");\n itemContainer_1.isActive = true;\n itemContainer_1.events.enableType(\"toggled\");\n }, undefined, false));\n itemContainer_1.addDisposer(sprite.events.on(\"shown\", function (ev) {\n itemContainer_1.readerChecked = true;\n itemContainer_1.events.disableType(\"toggled\");\n itemContainer_1.isActive = false;\n itemContainer_1.events.enableType(\"toggled\");\n }, undefined, false));\n } else {\n itemContainer_1.addDisposer(sprite.events.on(\"visibilitychanged\", visibilitychanged, undefined, false));\n }\n }\n }\n\n return this._itemContainer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LegendDataItem.prototype, \"marker\", {\n /**\r\n * A [[Container]] that holds legend item's marker element.\r\n *\r\n * @return Marker\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._marker) {\n var marker_1 = this.component.markers.create();\n this._marker = marker_1;\n marker_1.parent = this.itemContainer;\n this.addSprite(marker_1);\n\n this._disposers.push(marker_1);\n\n this._disposers.push(new Disposer(function () {\n if ($type.hasValue(_this.component)) {\n _this.component.markers.removeValue(marker_1);\n }\n }));\n }\n\n return this._marker;\n },\n enumerable: true,\n configurable: true\n });\n return LegendDataItem;\n}(DataItem);\n\nexport { LegendDataItem };\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a class that carries legend settings.\r\n *\r\n * A legend might change its settings dynamically. Legend can also be shared\r\n * by several elements, requiring different settings.\r\n *\r\n * Having legend's settings in a separate object is a good way to \"hot swap\"\r\n * a set of settings for the legend.\r\n */\n\nvar LegendSettings =\n/** @class */\nfunction () {\n function LegendSettings() {\n /**\r\n * Should marker be created for each legend item.\r\n */\n this.createMarker = true;\n }\n\n return LegendSettings;\n}();\n\nexport { LegendSettings };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * [[Legend]] class is used to create legend for the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/} for Legend documentation\r\n * @see {@link ILegendEvents} for a list of available events\r\n * @see {@link ILegendAdapters} for a list of available Adapters\r\n */\n\nvar Legend =\n/** @class */\nfunction (_super) {\n __extends(Legend, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Legend() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Legend\"; // Set defaults\n\n _this.layout = \"grid\";\n\n _this.setPropertyValue(\"useDefaultMarker\", false);\n\n _this.setPropertyValue(\"scrollable\", false);\n\n _this.setPropertyValue(\"contentAlign\", \"center\"); // Create a template container and list for legend items\n\n\n var itemContainer = new Container();\n itemContainer.applyOnClones = true;\n itemContainer.padding(8, 0, 8, 0);\n itemContainer.margin(0, 10, 0, 10);\n itemContainer.layout = \"horizontal\";\n itemContainer.clickable = true;\n itemContainer.focusable = true;\n itemContainer.role = \"switch\";\n itemContainer.togglable = true;\n itemContainer.cursorOverStyle = MouseCursorStyle.pointer;\n itemContainer.background.fillOpacity = 0; // creates hit area\n // Create container list using item template we just created\n\n _this.itemContainers = new ListTemplate(itemContainer);\n\n _this._disposers.push(new ListDisposer(_this.itemContainers));\n\n _this._disposers.push(_this.itemContainers.template); // Set up global keyboard events for toggling elements\n\n\n _this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\n if (keyboard.isKey(ev.event, \"enter\") && _this.focusedItem) {\n var focusedItem = _this.focusedItem;\n var target = focusedItem.itemContainer;\n\n if (target.togglable) {\n _this.toggleDataItem(focusedItem);\n } else if (target.clickable && target.events.isEnabled(\"hit\")) {\n target.dispatchImmediately(\"hit\", {\n event: ev\n }); // We need this here because \"hit\" event resets `this.focusedItem`\n // And we need it here\n\n _this.focusedItem = focusedItem;\n }\n }\n }, _this));\n\n var interfaceColors = new InterfaceColorSet(); // Create a template container and list for the a marker\n\n var marker = new Container();\n marker.width = 23;\n marker.height = 23;\n marker.interactionsEnabled = false;\n marker.applyOnClones = true;\n marker.setStateOnChildren = true;\n marker.background.fillOpacity = 0;\n marker.background.strokeOpacity = 0;\n marker.propertyFields.fill = \"fill\";\n marker.valign = \"middle\";\n var disabledColor = interfaceColors.getFor(\"disabledBackground\");\n marker.events.on(\"childadded\", function (event) {\n var child = event.newValue;\n var activeState = child.states.create(\"active\");\n activeState.properties.stroke = disabledColor;\n activeState.properties.fill = disabledColor;\n });\n _this.markers = new ListTemplate(marker);\n\n _this._disposers.push(new ListDisposer(_this.markers));\n\n _this._disposers.push(_this.markers.template); // Create a legend background element\n\n\n var rectangle = marker.createChild(RoundedRectangle);\n rectangle.width = percent(100);\n rectangle.height = percent(100);\n rectangle.applyOnClones = true;\n rectangle.propertyFields.fill = \"fill\"; //othrwise old edge doesn't like as the same pattern is set both on parent and child https://codepen.io/team/amcharts/pen/72d7a98f3fb811d3118795220ff63182\n\n rectangle.strokeOpacity = 0; // Create a template container and list for item labels\n\n var label = new Label();\n label.text = \"{name}\";\n label.margin(0, 5, 0, 5);\n label.valign = \"middle\";\n label.applyOnClones = true;\n label.states.create(\"active\").properties.fill = interfaceColors.getFor(\"disabledBackground\");\n _this.labels = new ListTemplate(label);\n\n _this._disposers.push(new ListDisposer(_this.labels));\n\n _this._disposers.push(_this.labels.template);\n\n label.interactionsEnabled = false;\n label.truncate = true;\n label.fullWords = false; // Create a template container and list for item value labels\n\n var valueLabel = new Label();\n valueLabel.margin(0, 5, 0, 0);\n valueLabel.valign = \"middle\";\n valueLabel.width = 50; // to avoid rearranging legend entries when value changes.\n\n valueLabel.align = \"right\";\n valueLabel.textAlign = \"end\";\n valueLabel.applyOnClones = true;\n valueLabel.states.create(\"active\").properties.fill = interfaceColors.getFor(\"disabledBackground\");\n valueLabel.interactionsEnabled = false;\n _this.valueLabels = new ListTemplate(valueLabel);\n\n _this._disposers.push(new ListDisposer(_this.valueLabels));\n\n _this._disposers.push(_this.valueLabels.template);\n\n _this.position = \"bottom\"; // don't use setPropertyValue here!\n // Create a state for disabled legend items\n\n itemContainer.states.create(\"active\");\n itemContainer.setStateOnChildren = true; // Apply accessibility settings\n\n _this.role = \"group\";\n\n _this.events.on(\"layoutvalidated\", _this.handleScrollbar, _this, false);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n Legend.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Legend\");\n }\n };\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n Legend.prototype.createDataItem = function () {\n return new LegendDataItem();\n };\n /**\r\n * [validateDataElements description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Legend.prototype.validateDataElements = function () {\n if (this.scrollbar) {\n this.scrollbar.start = 0;\n this.scrollbar.end = 1;\n }\n\n _super.prototype.validateDataElements.call(this);\n };\n /**\r\n * [validateDataElement description]\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n * @todo Description\r\n * @todo Figure out how to update appearance of legend item without losing focus\r\n * @todo Update legend marker appearance as apperance of related series changes\r\n */\n\n\n Legend.prototype.validateDataElement = function (dataItem) {\n _super.prototype.validateDataElement.call(this, dataItem); // Get data item (legend item's) container\n\n\n var container = dataItem.itemContainer;\n var marker = dataItem.marker;\n $utils.used(dataItem.label);\n var valueLabel = dataItem.valueLabel; // Set parent and update current state\n\n container.readerChecked = dataItem.dataContext.visible; // Tell series its legend data item\n\n dataItem.dataContext.legendDataItem = dataItem;\n var tempMaxWidth = dataItem.label.maxWidth;\n\n if (!(dataItem.label.width instanceof Percent)) {\n dataItem.label.width = undefined;\n }\n\n if (tempMaxWidth > 0) {\n dataItem.label.maxWidth = tempMaxWidth;\n }\n\n if (valueLabel.align == \"right\") {\n valueLabel.width = undefined;\n }\n\n var legendSettings = dataItem.dataContext.legendSettings; // If we are not using default markers, create a unique legend marker based\n // on the data item type\n\n var dataContext = dataItem.dataContext;\n\n if (dataContext.createLegendMarker && (!this.useDefaultMarker || !(dataContext instanceof Sprite))) {\n if (!dataItem.childrenCreated) {\n dataContext.createLegendMarker(marker);\n dataItem.childrenCreated = true;\n }\n } else {\n this.markers.template.propertyFields.fill = undefined;\n }\n\n if (dataContext.updateLegendValue) {\n dataContext.updateLegendValue(); // this solves issue with external legend, as legend is created after chart updates legend values\n }\n\n if (dataContext.component && dataContext.component.updateLegendValue) {\n dataContext.component.updateLegendValue(dataContext);\n }\n\n if (valueLabel.invalid) {\n valueLabel.validate();\n }\n\n if (valueLabel.text == \"\" || valueLabel.text == undefined) {\n valueLabel.__disabled = true;\n } else {\n valueLabel.__disabled = false;\n }\n\n if (legendSettings && (legendSettings.itemValueText != undefined || legendSettings.valueText != undefined)) {\n valueLabel.__disabled = false;\n }\n\n var visible = dataItem.dataContext.visible;\n\n if (visible === undefined) {\n visible = true;\n }\n\n visible = $type.toBoolean(visible);\n dataItem.dataContext.visible = visible;\n container.events.disableType(\"toggled\");\n container.isActive = !visible;\n\n if (container.isActive) {\n container.setState(\"active\", 0);\n } else {\n container.setState(\"default\", 0);\n }\n\n container.events.enableType(\"toggled\");\n };\n\n Legend.prototype.afterDraw = function () {\n var _this = this;\n\n var maxWidth = this.getPropertyValue(\"maxWidth\");\n var maxLabelWidth = 0;\n this.labels.each(function (label) {\n if (label.invalid) {\n label.maxWidth = undefined;\n label.validate();\n }\n\n if (label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight > maxLabelWidth) {\n maxLabelWidth = label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight;\n }\n });\n var maxValueLabelWidth = 0;\n this.valueLabels.each(function (label) {\n if (label.invalid) {\n label.validate();\n }\n\n if (label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight > maxValueLabelWidth) {\n maxValueLabelWidth = label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight;\n }\n });\n var maxMarkerWidth = 0;\n this.markers.each(function (marker) {\n if (marker.invalid) {\n marker.validate();\n }\n\n if (marker.measuredWidth + marker.pixelMarginLeft + marker.pixelMarginRight > maxMarkerWidth) {\n maxMarkerWidth = marker.measuredWidth + marker.pixelMarginLeft + marker.pixelMarginRight;\n }\n });\n var itemContainer = this.itemContainers.template;\n var margin = itemContainer.pixelMarginRight + itemContainer.pixelMarginLeft;\n var maxAdjustedLabelWidth;\n var trueMaxWidth = maxLabelWidth + maxValueLabelWidth + maxMarkerWidth;\n\n if (!$type.isNumber(maxWidth)) {\n maxAdjustedLabelWidth = maxLabelWidth;\n } else {\n maxWidth = maxWidth - margin;\n\n if (maxWidth > trueMaxWidth) {\n maxWidth = trueMaxWidth;\n }\n\n maxAdjustedLabelWidth = maxWidth - maxMarkerWidth - maxValueLabelWidth;\n }\n\n this.labels.each(function (label) {\n if (_this.valueLabels.template.align == \"right\" || label.measuredWidth > maxAdjustedLabelWidth) {\n if (!(label.width instanceof Percent)) {\n label.width = Math.min(label.maxWidth, maxAdjustedLabelWidth - label.pixelMarginLeft - label.pixelMarginRight);\n label.maxWidth = label.width;\n }\n }\n });\n\n if (this.valueLabels.template.align == \"right\") {\n this.valueLabels.each(function (valueLabel) {\n valueLabel.width = maxValueLabelWidth - valueLabel.pixelMarginRight - valueLabel.pixelMarginLeft;\n });\n }\n\n _super.prototype.afterDraw.call(this);\n };\n\n Legend.prototype.handleScrollbar = function () {\n var scrollbar = this.scrollbar;\n\n if (this.scrollable && scrollbar) {\n scrollbar.height = this.measuredHeight;\n scrollbar.x = this.measuredWidth - scrollbar.pixelWidth - scrollbar.pixelMarginLeft;\n\n if (this.contentHeight > this.measuredHeight) {\n scrollbar.visible = true;\n scrollbar.thumb.height = scrollbar.height * this.measuredHeight / this.contentHeight;\n this.paddingRight = scrollbar.pixelWidth + scrollbar.pixelMarginLeft + +scrollbar.pixelMarginRight;\n } else {\n scrollbar.visible = false;\n }\n\n this.updateMasks();\n }\n };\n\n Object.defineProperty(Legend.prototype, \"position\", {\n /**\r\n * @return Position\r\n */\n get: function get() {\n return this.getPropertyValue(\"position\");\n },\n\n /**\r\n * Position of the legend.\r\n *\r\n * Options: \"left\", \"right\", \"top\", \"bottom\" (default), or \"absolute\".\r\n *\r\n * IMPORTANT: [[MapChart]] will ignore this setting, as it is using different\r\n * layout structure than other charts.\r\n *\r\n * To position legend in [[MapChart]] set legend's `align` (`\"left\"` or\r\n * `\"right\"`) and `valign` (`\"top\"` or `\"bottom\"`) properties instead.\r\n *\r\n * @default \"bottom\"\r\n * @param value Position\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"position\", value)) {\n if (value == \"left\" || value == \"right\") {\n this.margin(10, 5, 10, 10);\n this.valign = \"middle\";\n this.contentAlign = \"none\";\n this.valueLabels.template.align = \"right\";\n\n if (!$type.isNumber(this.maxColumns)) {\n this.maxColumns = 1;\n }\n\n this.width = undefined;\n this.maxWidth = 220;\n } else {\n this.maxColumns = undefined;\n this.width = percent(100);\n this.valueLabels.template.align = \"left\";\n }\n\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Legend.prototype, \"useDefaultMarker\", {\n /**\r\n * @return Use default marker?\r\n */\n get: function get() {\n return this.getPropertyValue(\"useDefaultMarker\");\n },\n\n /**\r\n * Should legend try to mirror the look of the related item when building\r\n * the marker for legend item?\r\n *\r\n * If set to `false` it will try to make the marker look like its related\r\n * item.\r\n *\r\n * E.g. if an item is for a Line Series, it will display a line of the\r\n * same thickness, color, and will use the same bullets if series have them.\r\n *\r\n * If set to `true`, all markers will be shown as squares, regardless of te\r\n * series type.\r\n *\r\n * @default false\r\n * @param value Use default marker?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"useDefaultMarker\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Legend.prototype, \"scrollable\", {\n /**\r\n * @return Legend Scrollable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"scrollable\");\n },\n\n /**\r\n * If set to `true` the Legend will display a scrollbar if its contents do\r\n * not fit into its `maxHeight`.\r\n *\r\n * Please note that `maxHeight` is automatically set for Legend when its\r\n * `position` is set to `\"left\"` or `\"right\"`.\r\n *\r\n * @default false\r\n * @since 4.8.0\r\n * @param value Legend Scrollable?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"scrollable\", value, true)) {\n if (value) {\n var scrollbar = this.createChild(Scrollbar);\n this.scrollbar = scrollbar;\n scrollbar.isMeasured = false;\n scrollbar.orientation = \"vertical\";\n scrollbar.endGrip.__disabled = true;\n scrollbar.startGrip.__disabled = true;\n scrollbar.visible = false;\n scrollbar.marginLeft = 5;\n this._mouseWheelDisposer = this.events.on(\"wheel\", this.handleWheel, this, false);\n\n this._disposers.push(this._mouseWheelDisposer);\n\n this._disposers.push(scrollbar.events.on(\"rangechanged\", this.updateMasks, this, false));\n } else {\n if (this._mouseWheelDisposer) {\n this._mouseWheelDisposer.dispose();\n\n if (this.scrollbar) {\n this.scrollbar.dispose();\n this.scrollbar = undefined;\n }\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Handles mouse wheel scrolling of legend.\r\n *\r\n * @param event Event\r\n */\n\n Legend.prototype.handleWheel = function (event) {\n var shift = event.shift.y;\n var scrollbar = this.scrollbar;\n\n if (scrollbar) {\n var ds = shift / 1000 * this.measuredHeight / this.contentHeight;\n var delta = scrollbar.end - scrollbar.start;\n\n if (shift > 0) {\n scrollbar.start = $math.max(0, scrollbar.start - ds);\n scrollbar.end = scrollbar.start + delta;\n } else {\n scrollbar.end = $math.min(1, scrollbar.end - ds);\n scrollbar.start = scrollbar.end - delta;\n }\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n Legend.prototype.updateMasks = function () {\n var _this = this;\n\n if (this.scrollbar) {\n this.itemContainers.each(function (itemContainer) {\n itemContainer.dy = -_this.scrollbar.thumb.pixelY * _this.contentHeight / _this.measuredHeight;\n itemContainer.maskRectangle = {\n x: 0,\n y: -itemContainer.dy,\n width: _this.measuredWidth,\n height: _this.measuredHeight\n };\n });\n }\n };\n /**\r\n * Toggles a legend item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item Legend item\r\n * @todo Maybe do it with togglable instead\r\n */\n\n\n Legend.prototype.toggleDataItem = function (item) {\n var dataContext = item.dataContext;\n\n if (!dataContext.visible || dataContext.isHiding || dataContext instanceof Sprite && dataContext.isHidden) {\n item.color = item.colorOrig;\n dataContext.appeared = true;\n item.itemContainer.isActive = false;\n\n if (dataContext.hidden === true) {\n dataContext.hidden = false;\n }\n\n if (dataContext.show) {\n dataContext.show();\n } else {\n dataContext.visible = true;\n }\n\n this.svgContainer.readerAlert(this.language.translate(\"%1 shown\", this.language.locale, item.label.readerTitle));\n } else {\n item.itemContainer.isActive = true;\n dataContext.appeared = true;\n\n if (dataContext.hide) {\n dataContext.hide();\n } else {\n dataContext.visible = false;\n }\n\n this.svgContainer.readerAlert(this.language.translate(\"%1 hidden\", this.language.locale, item.label.readerTitle));\n item.color = new InterfaceColorSet().getFor(\"disabledBackground\");\n }\n };\n\n Object.defineProperty(Legend.prototype, \"preloader\", {\n /**\r\n * Override preloader method so that legend does not accidentally show its\r\n * own preloader.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Always `undefined`\r\n */\n get: function get() {\n return;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * [handleDataItemPropertyChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Legend.prototype.handleDataItemPropertyChange = function (dataItem, name) {\n dataItem.valueLabel.invalidate();\n dataItem.label.invalidate();\n };\n\n return Legend;\n}(Component);\n\nexport { Legend };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Legend\"] = Legend;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Move legend to below the chart if chart is narrow\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.widthXS,\n state: function state(target, stateId) {\n if (target instanceof Legend && (target.position == \"left\" || target.position == \"right\")) {\n var state = target.states.create(stateId);\n state.properties.position = \"bottom\";\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Move legend to the right if chart is very short\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXS,\n state: function state(target, stateId) {\n if (target instanceof Legend && (target.position == \"top\" || target.position == \"bottom\")) {\n var state = target.states.create(stateId);\n state.properties.position = \"right\";\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Disable legend altogether on small charts\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.isXS,\n state: function state(target, stateId) {\n if (target instanceof Legend) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * Axis break module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\nimport { WavedLine } from \"../../core/elements/WavedLine\";\nimport { List } from \"../../core/utils/List\";\nimport { registry } from \"../../core/Registry\";\nimport { color } from \"../../core/utils/Color\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Base class to define \"breaks\" on axes.\r\n *\r\n * @see {@link IAxisBreakEvents} for a list of available events\r\n * @see {@link IAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar AxisBreak =\n/** @class */\nfunction (_super) {\n __extends(AxisBreak, _super);\n /**\r\n * Constructor\r\n */\n\n\n function AxisBreak() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Reference to parent Axis.\r\n */\n\n\n _this._axis = new MutableValueDisposer();\n /**\r\n * A list of axis data items which fall within this break.\r\n */\n\n _this.dataItems = new List();\n _this.className = \"AxisBreak\"; // Set defaults\n\n _this.breakSize = 0.01;\n _this.marginLeft = -5;\n _this.marginRight = -5;\n _this.marginTop = -5;\n _this.marginBottom = -5;\n var interfaceColors = new InterfaceColorSet(); // Create elements\n // (these won't be used actually, just for setting properties)\n\n var fillShape = new WavedLine();\n fillShape.fill = interfaceColors.getFor(\"background\");\n fillShape.stroke = color();\n fillShape.fillOpacity = 0.9;\n fillShape.zIndex = 0;\n _this._fillShape = fillShape;\n var startLine = new WavedLine();\n startLine.fill = color();\n startLine.stroke = interfaceColors.getFor(\"grid\");\n startLine.strokeOpacity = 0.3;\n startLine.zIndex = 1;\n _this._startLine = startLine;\n var endLine = new WavedLine();\n endLine.fill = color();\n endLine.stroke = color(\"#000000\"); // interfaceColors.getFor(\"grid\");\n\n endLine.strokeOpacity = 0.3;\n endLine.zIndex = 2;\n _this._endLine = endLine;\n\n _this._disposers.push(_this._axis); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n AxisBreak.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n if (this._fillShape) {\n this._fillShape.dispose();\n }\n\n if (this._startLine) {\n this._startLine.dispose();\n }\n\n if (this._endLine) {\n this._endLine.dispose();\n }\n };\n\n Object.defineProperty(AxisBreak.prototype, \"startLine\", {\n /**\r\n * @return Element\r\n */\n get: function get() {\n return this._startLine;\n },\n\n /**\r\n * An element used for the starting line of the break.\r\n *\r\n * @param sprite Element\r\n */\n set: function set(sprite) {\n if (this._startLine) {\n this._startLine.dispose();\n }\n\n this._startLine = sprite;\n this.addBreakSprite(sprite);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"endLine\", {\n /**\r\n * @return Element\r\n */\n get: function get() {\n return this._endLine;\n },\n\n /**\r\n * An element used for the end line of the break.\r\n *\r\n * @param sprite Element\r\n */\n set: function set(sprite) {\n if (this._endLine) {\n this._endLine.dispose();\n }\n\n this._endLine = sprite;\n this.addBreakSprite(sprite);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"fillShape\", {\n /**\r\n * @return Element\r\n */\n get: function get() {\n return this._fillShape;\n },\n\n /**\r\n * An element used for fill of the break.\r\n *\r\n * @param sprite Element\r\n */\n set: function set(sprite) {\n if (this._fillShape) {\n this._fillShape.dispose();\n }\n\n this._fillShape = sprite;\n this.addBreakSprite(sprite);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Adds a break element (e.g. lines, fill) to the break, which is\r\n * [[Container]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite Element to add\r\n */\n\n AxisBreak.prototype.addBreakSprite = function (sprite) {\n sprite.parent = this;\n sprite.isMeasured = false;\n\n this._disposers.push(sprite);\n };\n\n Object.defineProperty(AxisBreak.prototype, \"axis\", {\n /**\r\n * @return Axis\r\n */\n get: function get() {\n return this._axis.get();\n },\n\n /**\r\n * An Axis this Break is associated with.\r\n *\r\n * @param axis Axis\r\n */\n set: function set(axis) {\n if (this._axis.get() !== axis) {\n this._axis.set(axis, axis.renderer.gridContainer.events.on(\"transformed\", this.invalidate, this, false));\n\n axis.renderer.createBreakSprites(this); // this can't go to copyFrom, as axis is set later\n\n var breakTemplate = axis.axisBreaks.template;\n this.startLine.copyFrom(breakTemplate.startLine);\n this.endLine.copyFrom(breakTemplate.endLine);\n this.fillShape.copyFrom(breakTemplate.fillShape);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"breakSize\", {\n /**\r\n * @return Relative axis break\r\n */\n get: function get() {\n return this.getPropertyValue(\"breakSize\");\n },\n\n /**\r\n * A size of the break relative to the actual size of the scope break spans.\r\n *\r\n * For example, if `breakSize = 0.1` and unbroken scope of values it spans\r\n * would be 100 pixels, the break would be 10 pixels wide.\r\n *\r\n * 0 means the break will completely collapse and hide the values.\r\n * 1 means break would be not collapse at all, which would make it\r\n * effectively useless.\r\n *\r\n * @default 0.01\r\n * @param value Relative axis break\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"breakSize\", value)) {\n if (this.axis) {\n this.axis.invalidate();\n this.axis.invalidateSeries();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"startPoint\", {\n /**\r\n * Returns pixel coordinates of axis break's start.\r\n *\r\n * @return Start point\r\n */\n get: function get() {\n var renderer = this.axis.renderer;\n\n if (renderer) {\n return renderer.positionToPoint(this.startPosition);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"endPoint\", {\n /**\r\n * Returns pixel coordinates of axis break's end.\r\n *\r\n * @return End point\r\n */\n get: function get() {\n var renderer = this.axis.renderer;\n\n if (renderer) {\n return renderer.positionToPoint(this.endPosition);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"startPosition\", {\n /**\r\n * Returns a relative position at which axis break starts.\r\n *\r\n * This is a calculated position, meaning it shows relative position of the\r\n * break after break is applied.\r\n *\r\n * @return Start position\r\n */\n get: function get() {\n return;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"endPosition\", {\n /**\r\n * Returns a relative position at which axis break ends.\r\n *\r\n * This is a calculated position, meaning it shows relative position of the\r\n * break after break is applied.\r\n *\r\n * @return End position\r\n */\n get: function get() {\n return;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Draws the axis break.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n AxisBreak.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (this.axis) {\n var renderer = this.axis.renderer;\n renderer.updateBreakElement(this);\n }\n };\n\n Object.defineProperty(AxisBreak.prototype, \"startValue\", {\n /**\r\n * @return Starting value\r\n */\n get: function get() {\n return this.getPropertyValue(\"startValue\");\n },\n\n /**\r\n * A starting value for the break.\r\n *\r\n * @param value Starting value\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"startValue\", value)) {\n if (this.axis) {\n this.axis.invalidate();\n this.axis.invalidateSeries();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisBreak.prototype, \"endValue\", {\n /**\r\n * @return End value\r\n */\n get: function get() {\n return this.getPropertyValue(\"endValue\");\n },\n\n /**\r\n * An end value for the break.\r\n *\r\n * @param value End value\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"endValue\", value)) {\n if (this.axis) {\n this.axis.invalidate();\n this.axis.invalidateSeries();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n return AxisBreak;\n}(Container);\n\nexport { AxisBreak };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisBreak\"] = AxisBreak;","/**\r\n * Base class for all Axis\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Component } from \"../../core/Component\";\nimport { Container } from \"../../core/Container\";\nimport { DataItem } from \"../../core/DataItem\";\nimport { AxisBreak } from \"./AxisBreak\";\nimport { Label } from \"../../core/elements/Label\";\nimport { Tooltip } from \"../../core/elements/Tooltip\";\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\nimport { List, ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\nimport { registry } from \"../../core/Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $number from \"../../core/utils/Number\";\nimport * as $array from \"../../core/utils/Array\";\nimport * as $type from \"../../core/utils/Type\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[Axis]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar AxisDataItem =\n/** @class */\nfunction (_super) {\n __extends(AxisDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function AxisDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(AxisDataItem.prototype, \"grid\", {\n /**\r\n * @return Grid element\r\n */\n get: function get() {\n if (!this._grid) {\n var component_1 = this.component;\n\n if (component_1) {\n var template = void 0;\n var grid_1;\n\n if (this.isRange) {\n template = component_1.axisRanges.template.grid;\n\n if (template.disabled) {\n return;\n } else {\n grid_1 = template.clone();\n }\n } else {\n template = component_1.renderer.grid.template;\n\n if (template.disabled) {\n return;\n } else {\n grid_1 = component_1.renderer.grid.create();\n\n this._disposers.push(new Disposer(function () {\n component_1.renderer.grid.removeValue(grid_1);\n }));\n }\n }\n\n this.grid = grid_1;\n grid_1.shouldClone = false;\n\n this._disposers.push(grid_1);\n\n grid_1.axis = this.component;\n }\n }\n\n return this._grid;\n },\n\n /**\r\n * A [[Grid]] element associated with this data item.\r\n *\r\n * If there is no grid element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param grid Grid element\r\n */\n set: function set(grid) {\n if (this._grid && this._grid != grid) {\n $array.remove(this.sprites, this._grid);\n this._grid.dataItem = undefined;\n }\n\n if (grid) {\n if (grid.dataItem && grid.dataItem != this) {\n $array.remove(grid.dataItem.sprites, grid);\n grid.dataItem.grid = undefined;\n }\n\n this.addSprite(grid);\n }\n\n this._grid = grid;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"tick\", {\n /**\r\n * @return Tick element\r\n */\n get: function get() {\n if (!this._tick) {\n var component_2 = this.component;\n\n if (component_2) {\n var template = void 0;\n var tick_1;\n\n if (this.isRange) {\n template = component_2.axisRanges.template.tick;\n\n if (template.disabled) {\n return;\n } else {\n tick_1 = template.clone();\n }\n } else {\n template = component_2.renderer.ticks.template;\n\n if (template.disabled) {\n return;\n } else {\n tick_1 = component_2.renderer.ticks.create();\n\n this._disposers.push(new Disposer(function () {\n component_2.renderer.ticks.removeValue(tick_1);\n }));\n }\n }\n\n this.tick = tick_1;\n tick_1.axis = this.component;\n tick_1.shouldClone = false;\n\n this._disposers.push(tick_1);\n }\n }\n\n return this._tick;\n },\n\n /**\r\n * An [[AxisTick]] element associated with this data item.\r\n *\r\n * If there is no tick element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param tick Tick element\r\n */\n set: function set(tick) {\n if (this._tick && this._tick != tick) {\n $array.remove(this.sprites, this._tick);\n this._tick.dataItem = undefined;\n }\n\n if (tick) {\n if (tick.dataItem && tick.dataItem != this) {\n $array.remove(tick.dataItem.sprites, tick);\n tick.dataItem.tick = undefined;\n }\n\n this.addSprite(tick);\n }\n\n this._tick = tick;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"label\", {\n /**\r\n * @return Label element\r\n */\n get: function get() {\n if (!this._label) {\n var component_3 = this.component;\n\n if (component_3) {\n var template = void 0;\n var label_1;\n\n if (this.isRange) {\n template = component_3.axisRanges.template.label;\n\n if (template.disabled) {\n return;\n } else {\n label_1 = template.clone();\n }\n } else {\n template = component_3.renderer.labels.template;\n\n if (template.disabled) {\n return;\n } else {\n label_1 = component_3.renderer.labels.create();\n\n this._disposers.push(new Disposer(function () {\n component_3.renderer.labels.removeValue(label_1);\n }));\n }\n }\n\n this._disposers.push(label_1);\n\n this.label = label_1;\n label_1.shouldClone = false;\n label_1.axis = this.component;\n label_1.virtualParent = component_3;\n }\n }\n\n return this._label;\n },\n\n /**\r\n * An [[AxisLabel]] element associated with this data item.\r\n *\r\n * If there is no label element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param label Label element\r\n */\n set: function set(label) {\n if (this._label && this._label != label) {\n $array.remove(this.sprites, this._label);\n this._label.dataItem = undefined;\n }\n\n if (label) {\n if (label.dataItem && label.dataItem != this) {\n $array.remove(label.dataItem.sprites, label);\n label.dataItem.label = undefined;\n }\n\n this.addSprite(label);\n }\n\n this._label = label;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"axisFill\", {\n /**\r\n * @return Label element\r\n */\n get: function get() {\n if (!this._axisFill) {\n var component_4 = this.component;\n\n if (component_4) {\n var template = void 0;\n var axisFill_1;\n\n if (this.isRange) {\n template = component_4.axisRanges.template.axisFill;\n\n if (!this.isTemplate && template.disabled) {\n return;\n } else {\n axisFill_1 = template.clone();\n }\n } else {\n template = component_4.renderer.axisFills.template;\n\n if (template.disabled) {\n return;\n } else {\n axisFill_1 = component_4.renderer.axisFills.create();\n\n this._disposers.push(new Disposer(function () {\n component_4.renderer.axisFills.removeValue(axisFill_1);\n }));\n }\n }\n\n this.axisFill = axisFill_1;\n axisFill_1.shouldClone = false;\n\n this._disposers.push(axisFill_1);\n }\n }\n\n return this._axisFill;\n },\n\n /**\r\n * An [[AxisFill]] associated element with this data item.\r\n *\r\n * If there is no fill element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param label Label element\r\n */\n set: function set(axisFill) {\n if (this._axisFill && this._axisFill != axisFill) {\n $array.remove(this.sprites, this._axisFill);\n this._axisFill.dataItem = undefined;\n }\n\n if (axisFill) {\n if (axisFill.dataItem && axisFill.dataItem != this) {\n $array.remove(axisFill.dataItem.sprites, axisFill);\n axisFill.dataItem.axisFill = undefined;\n }\n\n axisFill.axis = this.component;\n this.addSprite(axisFill);\n }\n\n this._axisFill = axisFill;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"text\", {\n /**\r\n * @return Text label\r\n */\n get: function get() {\n return this._text;\n },\n\n /**\r\n * Text to be used as data item's label.\r\n *\r\n * @param text Text label\r\n */\n set: function set(text) {\n this._text = text;\n\n if (this._label) {\n // do not use getter, it will create unwanted instances!\n this._label.text = text;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"mask\", {\n /**\r\n * Data item's mask.\r\n *\r\n * @return Mask\r\n */\n get: function get() {\n return this._mask;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"contents\", {\n /**\r\n * Returns a [[Container]] to place all visual elements, related to data item\r\n * in.\r\n *\r\n * If there is no Container, a new one is created.\r\n *\r\n * @return Contents container\r\n */\n get: function get() {\n if (!this._contents) {\n var contents = new Container();\n this.addSprite(contents);\n contents.isMeasured = false;\n this._contents = contents;\n var component = this.component;\n\n if (component) {\n var mask = component.renderer.createFill(this.component);\n mask.disabled = false;\n mask.axis = component;\n this.addSprite(mask);\n this._mask = mask;\n contents.mask = mask;\n }\n }\n\n return this._contents;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisDataItem.prototype, \"axisBreak\", {\n /**\r\n * @return Axis break\r\n */\n get: function get() {\n return this._axisBreak;\n },\n\n /**\r\n * An [[AxisBreak]] this data item falls within.\r\n *\r\n * @param axisBreak Axis break\r\n */\n set: function set(axisBreak) {\n if (this._axisBreak) {\n this._axisBreak.dataItems.removeValue(this);\n }\n\n if (axisBreak) {\n axisBreak.dataItems.push(this);\n }\n\n this._axisBreak = axisBreak;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Re-draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n AxisDataItem.prototype.validate = function () {\n if (this.component) {\n this.component.validateDataElement(this);\n }\n };\n /**\r\n * Appends data item's elements to the parent [[Container]].\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisDataItem.prototype.appendChildren = function () {\n if (this.component) {\n this.component.appendDataItem(this);\n }\n };\n /**\r\n * Checks if data item has particular property set.\r\n *\r\n * @param prop Property name\r\n * @return Property set?\r\n */\n\n\n AxisDataItem.prototype.hasProperty = function (prop) {\n return prop == \"component\" ? true : _super.prototype.hasProperty.call(this, prop);\n };\n /**\r\n * Copies all parameters from another [[AxisDataItem]].\r\n *\r\n * @param source Source AxisDataItem\r\n */\n\n\n AxisDataItem.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.text = source.text;\n\n if (source.bullet) {\n this.bullet = source.bullet.clone();\n }\n\n this.minPosition = source.minPosition;\n this.maxPosition = source.maxPosition;\n };\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Data Item\r\n */\n\n\n AxisDataItem.prototype.setVisibility = function (value, noChangeValues) {\n _super.prototype.setVisibility.call(this, value, noChangeValues);\n\n if (this._contents) {\n this._contents.visible = value;\n }\n };\n\n Object.defineProperty(AxisDataItem.prototype, \"bullet\", {\n /**\r\n * @return Bullet\r\n */\n get: function get() {\n return this._bullet;\n },\n\n /**\r\n * Set it to an instance of any [[Sprite]]. It will be displayed as an axis\r\n * bullet in the middle of the cell, or specific value.\r\n *\r\n * If you need position bullet relatively to the cell, use [[AxisBullet]]\r\n * instead. It has a `location` property which can be used to indicate\r\n * precise relative location within cell/range.\r\n *\r\n * Also, [[AxisBullet]] is a [[Container]] so you can push any other element\r\n * into it.\r\n *\r\n * NOTE: `location` is relative to the parent axis range's scope, i.e.\r\n * between its `date` and `endDate` for [[DateAxis]], or `value`/`endValue`\r\n * ([[ValueAxis]]), or `category`/`endCategory` ([[categoryAxis]]).\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * let flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * var flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"bullet: {\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.5.9\r\n * @param value Bullet\r\n */\n set: function set(value) {\n if (this._bullet && this._bullet != value) {\n $array.remove(this.sprites, this._bullet);\n this._bullet.dataItem = undefined;\n }\n\n this._bullet = value;\n\n if (value) {\n this.addSprite(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n return AxisDataItem;\n}(DataItem);\n\nexport { AxisDataItem };\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines named positions for data item's location within [[Axis]].\r\n */\n\nexport var AxisItemLocation;\n\n(function (AxisItemLocation) {\n AxisItemLocation[AxisItemLocation[\"Start\"] = 0] = \"Start\";\n AxisItemLocation[AxisItemLocation[\"Middle\"] = 0.5] = \"Middle\";\n AxisItemLocation[AxisItemLocation[\"End\"] = 1] = \"End\";\n})(AxisItemLocation || (AxisItemLocation = {}));\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all Axis elements.\r\n *\r\n * @see {@link IAxisEvents} for a list of available Events\r\n * @see {@link IAxisAdapters} for a list of available Adapters\r\n */\n\n\nvar Axis =\n/** @class */\nfunction (_super) {\n __extends(Axis, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Axis() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Number of Grid elements on the axis.\r\n */\n\n\n _this._gridCount = 10;\n /**\r\n * A list of [[XYSeries]] that are using this Axis.\r\n */\n\n _this._series = new List();\n /**\r\n * Specifies if axis should be automatically disposed when removing from\r\n * chart's axis list.\r\n *\r\n * @default true\r\n */\n\n _this.autoDispose = true;\n /**\r\n * @ignore\r\n */\n\n _this._axisItemCount = 0;\n\n if (_this.constructor === Axis) {\n throw new Error(\"'Axis' cannot be instantiated directly. Please use a specific axis type.\");\n }\n\n _this.hideTooltipWhileZooming = true;\n _this.minWidth = 0.0001;\n _this.minHeight = 0.0001;\n _this.className = \"Axis\";\n _this.shouldClone = false;\n\n _this.setPropertyValue(\"cursorTooltipEnabled\", true);\n\n _this.toggleZoomOutButton = true;\n _this.zoomable = true;\n var interfaceColors = new InterfaceColorSet(); // Create title\n\n _this.title = new Label();\n _this.title.shouldClone = false;\n\n _this._disposers.push(_this.title);\n\n _this.setPropertyValue(\"startLocation\", 0);\n\n _this.setPropertyValue(\"endLocation\", 1); // Data item iterator\n\n\n _this._dataItemsIterator = new $iter.ListIterator(_this.dataItems, function () {\n return _this.dataItems.create();\n });\n _this._dataItemsIterator.createNewItems = true; // Create tooltip\n\n var tooltip = new Tooltip();\n\n _this._disposers.push(tooltip);\n\n tooltip.label.padding(5, 10, 5, 10);\n tooltip.background.pointerLength = 5;\n tooltip.fitPointerToBounds = true;\n tooltip.background.filters.clear(); // Set virtual parentfor the tooltip so that it can properly inheirt\n // formatters from the axis.\n\n tooltip.virtualParent = _this; // Create background element for the tooltip\n\n var background = tooltip.background;\n background.cornerRadius = 0;\n background.fill = interfaceColors.getFor(\"alternativeBackground\");\n background.stroke = background.fill;\n background.strokeWidth = 1;\n background.fillOpacity = 1;\n tooltip.label.fill = interfaceColors.getFor(\"alternativeText\");\n _this.tooltip = tooltip; // Accessibility\n\n _this.readerHidden = true;\n\n _this.events.on(\"rangechangestarted\", function () {\n _this.series.each(function (series) {\n if (series.hideTooltipWhileZooming) {\n series.tooltip.hide();\n series.tooltip.preventShow = true;\n }\n });\n\n if (_this.hideTooltipWhileZooming) {\n _this.tooltip.hide();\n\n _this.tooltip.preventShow = true;\n }\n }, undefined, false);\n\n _this.events.on(\"rangechangeended\", function () {\n _this.series.each(function (series) {\n if (series.hideTooltipWhileZooming) {\n series.tooltip.hide();\n series.tooltip.preventShow = false;\n }\n });\n\n if (_this.hideTooltipWhileZooming) {\n _this.tooltip.hide();\n\n _this.tooltip.preventShow = false;\n }\n }, undefined, false);\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Holds reference to a function that accepts a DataItem and its index as\r\n * parameters.\r\n *\r\n * It can either return a fill opacity for a fill, or manipulate data item\r\n * directly, to create various highlighting scenarios.\r\n *\r\n * For example, you can set it up to highlight only weekends on a\r\n * [[DateAxis]].\r\n */\n\n\n Axis.prototype.fillRule = function (dataItem, index) {\n if (!$type.isNumber(index)) {\n index = dataItem.index;\n }\n\n if (index / 2 == Math.round(index / 2)) {\n dataItem.axisFill.__disabled = true;\n dataItem.axisFill.opacity = 0;\n } else {\n dataItem.axisFill.opacity = 1;\n dataItem.axisFill.__disabled = false;\n }\n };\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n Axis.prototype.createDataItem = function () {\n return new AxisDataItem();\n };\n /**\r\n * Invalidates layout.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.invalidateLayout = function () {\n _super.prototype.invalidateLayout.call(this); // this puts series after axis in invalidation order also makes series update it's data items in case widht/height of a series is not 100%\n\n\n $iter.each(this.series.iterator(), function (series) {\n series.invalidateLayout();\n });\n };\n /**\r\n * Invalidates series of this axis.\r\n */\n\n\n Axis.prototype.invalidateSeries = function () {\n // this puts series after axis in invalidation order also makes series update it's data items in case widht/height of a series is not 100%\n $iter.each(this.series.iterator(), function (series) {\n series.invalidate();\n });\n };\n /**\r\n * Override to cancel super call for data element validation.\r\n * @ignore\r\n */\n\n\n Axis.prototype.validateDataElements = function () {\n this._axisItemCount = 0;\n\n if (this.ghostLabel) {\n this.renderer.updateLabelElement(this.ghostLabel, this.start, this.end);\n this.ghostLabel.validate();\n }\n };\n /**\r\n * Recalculates the number of grid items on the axis.\r\n */\n\n\n Axis.prototype.updateGridCount = function () {\n if (this.renderer) {\n var gridCount = this.axisLength / this.renderer.minGridDistance;\n\n if (gridCount != this._gridCount) {\n this._gridCount = gridCount;\n this.clearCache();\n }\n }\n };\n /**\r\n * Redraws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.validateLayout = function () {\n this.axisFullLength = this.axisLength / (this.end - this.start);\n\n _super.prototype.validateLayout.call(this);\n\n this.updateGridCount();\n var renderer = this.renderer;\n\n if (renderer) {\n renderer.updateAxisLine();\n renderer.updateTooltip();\n renderer.updateBaseGridElement();\n }\n\n if (this._prevLength != this.axisLength) {\n this.dispatchImmediately(\"lengthchanged\");\n this._prevLength = this.axisLength;\n }\n };\n /**\r\n * Initializes Axis' renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.initRenderer = function () {};\n /**\r\n * Adds a data item to the Axis.\r\n *\r\n * @param dataItem Data item\r\n */\n\n\n Axis.prototype.appendDataItem = function (dataItem) {\n var renderer = this.renderer;\n var tick = dataItem.tick;\n\n if (tick) {\n if (tick.above) {\n tick.parent = renderer.bulletsContainer;\n } else {\n tick.parent = renderer.gridContainer;\n }\n }\n\n if (dataItem.label) {\n dataItem.label.parent = renderer;\n }\n\n var axisFill = dataItem.axisFill;\n\n if (axisFill) {\n if (axisFill.above) {\n axisFill.parent = renderer.bulletsContainer;\n } else {\n axisFill.parent = renderer.gridContainer;\n }\n }\n\n var grid = dataItem.grid;\n\n if (grid) {\n if (grid.above) {\n grid.parent = renderer.bulletsContainer;\n } else {\n grid.parent = renderer.gridContainer;\n }\n }\n\n if (dataItem.bullet) {\n dataItem.bullet.parent = renderer.bulletsContainer;\n }\n };\n /**\r\n * Redraws Axis' related items.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.validate = function () {\n _super.prototype.validate.call(this);\n\n this.validateLayout();\n this.renderer.updateGridContainer();\n };\n /**\r\n * Redars Axis ranges.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.validateAxisRanges = function () {\n var _this = this;\n\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\n _this.appendDataItem(axisRange);\n\n _this.validateDataElement(axisRange);\n\n if (axisRange.grid) {\n axisRange.grid.validate();\n }\n\n if (axisRange.tick) {\n axisRange.tick.validate();\n }\n\n if (axisRange.axisFill) {\n axisRange.axisFill.validate();\n }\n\n if (axisRange.label) {\n axisRange.label.validate();\n }\n });\n };\n /**\r\n * Invalidates all axis breaks, so they are redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.validateBreaks = function () {\n if (this._axisBreaks) {\n $iter.each(this._axisBreaks.iterator(), function (axisBreak) {\n axisBreak.invalidate();\n });\n }\n };\n /**\r\n * Associates an Axis break with this Axis, after it is inserted into\r\n * `axisBreaks`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n Axis.prototype.processBreak = function (event) {\n var axisBreak = event.newValue;\n axisBreak.parent = this.renderer.breakContainer;\n axisBreak.axis = this;\n };\n /**\r\n * Registers a [[XYSeries]] element with this Axis.\r\n *\r\n * Returns a [[Disposer]] for all events, added to Series for watching\r\n * changes in Axis, and vice versa.\r\n * @ignore\r\n * @param series Series\r\n * @return Event disposer\r\n */\n\n\n Axis.prototype.registerSeries = function (series) {\n var _this = this;\n\n this.series.moveValue(series);\n return new MultiDisposer([new Disposer(function () {\n _this.series.removeValue(series);\n }), this.events.on(\"lengthchanged\", series.invalidate, series, false), this.events.on(\"lengthchanged\", series.createMask, series, false), this.events.on(\"startchanged\", series.invalidate, series, false), this.events.on(\"endchanged\", series.invalidate, series, false)]);\n };\n\n Object.defineProperty(Axis.prototype, \"renderer\", {\n /**\r\n * @return Renderer\r\n */\n get: function get() {\n return this._renderer;\n },\n\n /**\r\n * An [[AxisRenderer]] to be used to render this Axis.\r\n *\r\n * Please note that most of the settings, related to Axis' appearance are set\r\n * via its renderer. Not directly on the Axis.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * axis.renderer.inside = true;\r\n * axis.renderer.minLabelPosition = 0.1;\r\n * axis.renderer.maxLabelPosition = 0.9;\r\n * ```\r\n * ```JavaScript\r\n * axis.renderer.inside = true;\r\n * axis.renderer.minLabelPosition = 0.1;\r\n * axis.renderer.maxLabelPosition = 0.9;\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/} for more info\r\n * @param renderer Renderer\r\n */\n set: function set(renderer) {\n if (renderer != this._renderer) {\n this._renderer = renderer;\n renderer.chart = this.chart;\n renderer.axis = this;\n renderer.parent = this;\n this.title.parent = this; // we add title to axis and set layout in renderer to avoid one extra container, as otherwise axis container would be used for holding renderer only\n\n this.initRenderer();\n\n this._disposers.push(renderer.gridContainer.events.on(\"maxsizechanged\", this.invalidate, this, false));\n\n var ghostLabel_1 = this.renderer.labels.create();\n\n this._disposers.push(ghostLabel_1);\n\n ghostLabel_1.dataItem = this.dataItems.template.clone(); // just for the adapters not to fail\n\n ghostLabel_1.text = \"L\";\n ghostLabel_1.parent = this.renderer;\n ghostLabel_1.shouldClone = false;\n ghostLabel_1.fillOpacity = 0;\n ghostLabel_1.opacity = 0;\n ghostLabel_1.strokeOpacity = 0;\n ghostLabel_1.interactionsEnabled = false;\n ghostLabel_1.validate();\n this.ghostLabel = ghostLabel_1;\n this.events.on(\"beforedatavalidated\", function () {\n ghostLabel_1.text = \"L\";\n }, undefined, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts a relative position to angle. (for circular axes)\r\n *\r\n * @param position Position (0-1)\r\n * @return Angle\r\n */\n\n Axis.prototype.positionToAngle = function (position) {\n return this.renderer.positionToAngle(position);\n };\n /**\r\n * Converts pixel coordinates to a relative position. (0-1)\r\n *\r\n * @param point Coorinates (px)\r\n * @return Position (0-1)\r\n */\n\n\n Axis.prototype.pointToPosition = function (point) {\n return this.renderer.pointToPosition(point);\n };\n /**\r\n * Converts relative position to coordinate.\r\n *\r\n * @since 4.7.15\r\n * @param position (0-1)\r\n * @return coordinate (px)\r\n */\n\n\n Axis.prototype.positionToCoordinate = function (position) {\n return this.renderer.positionToCoordinate(position);\n };\n /**\r\n * [getAnyRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param start [description]\r\n * @param end [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getAnyRangePath = function (start, end) {\n return this.renderer.getPositionRangePath(start, end);\n };\n /**\r\n * Converts any positional parameter to a relative position on axis.\r\n *\r\n * @todo Description (review)\r\n * @param value Pisition\r\n * @return Position (0-1)\r\n */\n\n\n Axis.prototype.anyToPosition = function (value) {\n return 0;\n };\n /**\r\n * Converts any positional parameter to a relative position on axis.\r\n *\r\n * @todo Description (review)\r\n * @param value Pisition\r\n * @return Orientation point\r\n */\n\n\n Axis.prototype.anyToPoint = function (value) {\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n };\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition [description]\r\n * @param endPosition [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getPositionRangePath = function (startPosition, endPosition) {\n if (this.renderer) {\n return this.renderer.getPositionRangePath(startPosition, endPosition);\n }\n\n return \"\";\n };\n\n Object.defineProperty(Axis.prototype, \"axisLength\", {\n /**\r\n * Actual axis length in pixels.\r\n *\r\n * @return Axis length (px)\r\n */\n get: function get() {\n if (this.renderer) {\n return this.renderer.axisLength;\n }\n\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"cursorTooltipEnabled\", {\n /**\r\n * @return Display tooltip?\r\n */\n get: function get() {\n return this.getPropertyValue(\"cursorTooltipEnabled\");\n },\n\n /**\r\n * Indicates if axis should display a tooltip for chart's cursor.\r\n *\r\n * @param value Display tooltip?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"cursorTooltipEnabled\", value)) {\n if (value && this.renderer) {\n this.renderer.updateTooltip();\n } else if (this.tooltip) {\n this.tooltip.hide(0);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"toggleZoomOutButton\", {\n /**\r\n * @return Toggle zoom out button?\r\n */\n get: function get() {\n return this.getPropertyValue(\"toggleZoomOutButton\");\n },\n\n /**\r\n * Normally, when axis is zoomed in, a zoom out button is shown by a chart,\r\n * and vice versa: when axis is zoomed out completely, zoom out button is\r\n * hidden.\r\n *\r\n * Setting this to `false` will disable this behavior. Zooming in our out\r\n * this axis will not reveal or hide zoom out button.\r\n *\r\n * @default true\r\n * @since 4.6.2\r\n * @param value Toggle zoom out button?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"toggleZoomOutButton\", value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Hides element's [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n */\n\n Axis.prototype.hideTooltip = function (duration) {\n _super.prototype.hideTooltip.call(this, duration);\n\n this._tooltipPosition = undefined;\n };\n /**\r\n * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n *\r\n * @param position Position (0-1)\r\n * @param local or global position\r\n */\n\n\n Axis.prototype.showTooltipAtPosition = function (position, local) {\n var tooltip = this._tooltip;\n\n if (!tooltip || this.dataItems.length <= 0) {\n this._tooltipPosition = undefined;\n } else {\n if (!local) {\n position = this.toAxisPosition(position);\n }\n\n if (!$type.isNumber(position) || position < this.start || position > this.end) {\n tooltip.hide(0);\n this._tooltipPosition = undefined;\n return;\n }\n\n var renderer = this.renderer; //@todo: think of how to solve this better\n\n if (!tooltip.parent) {\n tooltip.parent = this.tooltipContainer;\n }\n\n var tooltipLocation = renderer.tooltipLocation;\n var startPosition = this.getCellStartPosition(position);\n var endPosition = this.getCellEndPosition(position);\n\n if (this.tooltipPosition == \"fixed\") {\n position = startPosition + (endPosition - startPosition) * tooltipLocation;\n }\n\n position = $math.fitToRange(position, this.start, this.end);\n\n if (this._tooltipPosition != position) {\n this._tooltipPosition = position;\n var tooltipLocation2 = renderer.tooltipLocation2;\n var startPoint = renderer.positionToPoint(startPosition, tooltipLocation2);\n var endPoint = renderer.positionToPoint(endPosition, tooltipLocation2); // save values so cursor could use them\n\n this.currentItemStartPoint = startPoint;\n this.currentItemEndPoint = endPoint;\n\n if (renderer.fullWidthTooltip) {\n tooltip.width = endPoint.x - startPoint.x;\n tooltip.height = endPoint.y - startPoint.y;\n }\n\n var point = renderer.positionToPoint(position, tooltipLocation2);\n var globalPoint = $utils.spritePointToSvg(point, this.renderer.line);\n tooltip.text = this.getTooltipText(position);\n\n if (tooltip.text) {\n tooltip.delayedPointTo(globalPoint);\n tooltip.show();\n }\n }\n\n if (!this.cursorTooltipEnabled || this.tooltip.disabled) {\n tooltip.hide(0);\n }\n }\n };\n /**\r\n * Converts relative position (0-1) to Axis position with zoom level and\r\n * inversed taken into account.\r\n *\r\n * @param position Global position (0-1)\r\n * @return Position within Axis (0-1)\r\n */\n\n\n Axis.prototype.toAxisPosition = function (position) {\n position = this.renderer.toAxisPosition(position);\n\n if (position == undefined) {\n return;\n }\n\n position = position * (this.end - this.start);\n\n if (this.renderer.inversed) {\n position = this.end - position;\n } else {\n position = this.start + position;\n }\n\n return position;\n };\n /**\r\n * Converts position on the axis with zoom level and\r\n * inversed taken into account to global position.\r\n *\r\n * @param position Axis position (0-1)\r\n * @return Global position (0-1)\r\n */\n\n\n Axis.prototype.toGlobalPosition = function (position) {\n if (this.renderer.inversed) {\n position = this.end - position;\n } else {\n position = position - this.start;\n }\n\n return position / (this.end - this.start);\n };\n /**\r\n * Returns text to be used for cursor's Axis tooltip.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position coordinate (px)\r\n * @return Label text\r\n */\n\n\n Axis.prototype.getTooltipText = function (position) {\n return;\n };\n /**\r\n * Updates Axis' tooltip's position and possibly size, and pointer (stem)\r\n * place.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointerOrientation Pointer (stem) orientation\r\n * @param boundingRectangle A rectangle for tooltip to fit within\r\n */\n\n\n Axis.prototype.updateTooltip = function (pointerOrientation, boundingRectangle) {\n var tooltip = this._tooltip;\n\n if (tooltip) {\n tooltip.fixDoc = false;\n tooltip.pointerOrientation = pointerOrientation;\n tooltip.setBounds($utils.spriteRectToSvg(boundingRectangle, this.renderer.line));\n }\n };\n /**\r\n * [roundPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position Relative position\r\n * @param location Location on axis\r\n * @return Rounded position\r\n */\n\n\n Axis.prototype.roundPosition = function (position, location, axisLocation) {\n return position;\n };\n /**\r\n * [getCellStartPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getCellStartPosition = function (position) {\n return position;\n };\n /**\r\n * [getCellEndPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getCellEndPosition = function (position) {\n return position;\n };\n\n Object.defineProperty(Axis.prototype, \"axisRanges\", {\n /**\r\n * A list of axis ranges for this Axis.\r\n *\r\n * @return Axis ranges\r\n */\n get: function get() {\n if (!this._axisRanges) {\n var dataItem = this.createDataItem();\n dataItem.isRange = true;\n dataItem.axisFill = this.renderer.axisFills.template.clone();\n dataItem.grid = this.renderer.grid.template.clone();\n dataItem.tick = this.renderer.ticks.template.clone();\n dataItem.label = this.renderer.labels.template.clone();\n dataItem.isTemplate = true;\n dataItem.component = this;\n dataItem.axisFill.disabled = false;\n dataItem.tick.disabled = false;\n dataItem.grid.disabled = false;\n dataItem.label.disabled = false;\n this._axisRanges = new ListTemplate(dataItem);\n\n this._axisRanges.events.on(\"inserted\", this.processAxisRange, this, false);\n\n this._disposers.push(new ListDisposer(this._axisRanges));\n\n this._disposers.push(this._axisRanges.template);\n }\n\n return this._axisRanges;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Decorates an axis range after it has been added to the axis range list.\r\n *\r\n * @param event Event\r\n */\n\n Axis.prototype.processAxisRange = function (event) {\n var axisRange = event.newValue;\n axisRange.component = this;\n axisRange.isRange = true;\n };\n\n Object.defineProperty(Axis.prototype, \"axisBreaks\", {\n /**\r\n * A list of axis breaks on this Axis.\r\n *\r\n * @return Axis breaks.\r\n */\n get: function get() {\n if (!this._axisBreaks) {\n this._axisBreaks = new SortedListTemplate(this.createAxisBreak(), function (a, b) {\n return $number.order(a.adjustedStartValue, b.adjustedStartValue);\n });\n\n this._axisBreaks.events.on(\"inserted\", this.processBreak, this, false);\n\n this._disposers.push(new ListDisposer(this._axisBreaks));\n\n this._disposers.push(this._axisBreaks.template);\n }\n\n return this._axisBreaks;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates a new axis break.\r\n *\r\n * @return Axis break\r\n */\n\n Axis.prototype.createAxisBreak = function () {\n return new AxisBreak();\n };\n\n Object.defineProperty(Axis.prototype, \"series\", {\n /**\r\n * A list of Series currently associated with this Axis.\r\n *\r\n * @return Series\r\n */\n get: function get() {\n if (!this._series) {\n this._series = new List();\n }\n\n return this._series;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes Series' data items.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Axis.prototype.processSeriesDataItems = function () {};\n /**\r\n * Processes Series' single data item.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\n\n\n Axis.prototype.processSeriesDataItem = function (dataItem, axisLetter) {};\n /**\r\n * Post-processes Serie's data items.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.postProcessSeriesDataItems = function (series) {};\n /**\r\n * Post-processes Serie's single data item.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\n\n\n Axis.prototype.postProcessSeriesDataItem = function (dataItem) {}; //\n\n /**\r\n * Updates Axis based on all Series that might influence it.\r\n *\r\n * Called by Series after Series data is validated.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.updateAxisBySeries = function () {};\n /**\r\n * Hides unused data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Axis.prototype.hideUnusedDataItems = function () {\n var _this = this; // hide all unused\n\n\n var dataItemsIterator = this._dataItemsIterator;\n dataItemsIterator.createNewItems = false;\n $iter.each(dataItemsIterator.iterator(), function (dataItem) {\n _this.validateDataElement(dataItem); // solves shrinking\n\n\n dataItem.__disabled = true;\n });\n dataItemsIterator.clear();\n dataItemsIterator.createNewItems = true;\n };\n /**\r\n * Returns a Series' data item that corresponds to specific position on Axis.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param series Series\r\n * @param position Position (0-1)\r\n * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n * @return Data item\r\n */\n\n\n Axis.prototype.getSeriesDataItem = function (series, position, findNearest) {\n return;\n };\n /**\r\n * Returns an angle that corresponds to specific position on axis.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key ???\r\n * @param location Location\r\n * @param stackKey ???\r\n * @return Angle\r\n */\n\n\n Axis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\n return;\n };\n /**\r\n * [getX description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getX = function (dataItem, key, location, stackKey, range) {\n return;\n };\n /**\r\n * [getX description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\n return;\n };\n /**\r\n * [getY description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getY = function (dataItem, key, location, stackKey, range) {\n return;\n };\n /**\r\n * [getY description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\n\n\n Axis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\n return;\n };\n\n Object.defineProperty(Axis.prototype, \"basePoint\", {\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point coordinates\r\n */\n get: function get() {\n return {\n x: 0,\n y: 0\n };\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n Axis.prototype.dataChangeUpdate = function () {};\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Axis.prototype.seriesDataChangeUpdate = function (series) {};\n /**\r\n * Removes axis breaks that fall between `min` and `max` (???)\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param min Start value\r\n * @param max End value\r\n * @return Spread o\r\n */\n\n\n Axis.prototype.adjustDifference = function (min, max) {\n var difference = max - min;\n\n if ($type.isNumber(difference)) {\n if (this._axisBreaks) {\n $iter.eachContinue(this._axisBreaks.iterator(), function (axisBreak) {\n var startValue = axisBreak.adjustedStartValue;\n var endValue = axisBreak.adjustedEndValue;\n\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\n // breaks are sorted, we don't need go further anymore\n if (startValue > max) {\n return false;\n }\n\n if (endValue >= min) {\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\n var breakSize = axisBreak.breakSize;\n var intersection = $math.intersection({\n start: startValue,\n end: endValue\n }, {\n start: min,\n end: max\n });\n\n if (intersection) {\n difference -= (intersection.end - intersection.start) * (1 - breakSize);\n }\n }\n }\n\n return true;\n }\n });\n }\n\n return difference;\n }\n };\n /**\r\n * Checks if specific value falls within a break.\r\n *\r\n * Returns [[AxisBreak]] the value falls into.\r\n *\r\n * @param value Value to check\r\n * @return Axis break\r\n */\n\n\n Axis.prototype.isInBreak = function (value) {\n if (this._axisBreaks) {\n return $iter.find(this._axisBreaks.iterator(), function (axisBreak) {\n return value >= axisBreak.adjustedStartValue && value <= axisBreak.adjustedEndValue;\n });\n }\n };\n /**\r\n * [fixAxisBreaks description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n Axis.prototype.fixAxisBreaks = function () {\n var _this = this;\n\n if (this._axisBreaks) {\n var axisBreaks = this._axisBreaks;\n\n if (axisBreaks.length > 0) {\n // first make sure that startValue is <= end value\n // This needs to make a copy of axisBreaks because it mutates the list while traversing\n // TODO very inefficient\n $array.each($iter.toArray(axisBreaks.iterator()), function (axisBreak) {\n var startValue = $math.min(axisBreak.startValue, axisBreak.endValue);\n var endValue = $math.max(axisBreak.startValue, axisBreak.endValue);\n axisBreak.adjustedStartValue = startValue;\n axisBreak.adjustedEndValue = endValue;\n\n _this._axisBreaks.update(axisBreak);\n });\n var firstAxisBreak = axisBreaks.first;\n var previousEndValue_1 = Math.min(firstAxisBreak.startValue, firstAxisBreak.endValue); // process breaks\n // TODO does this need to call axisBreaks.update ?\n\n $iter.each(axisBreaks.iterator(), function (axisBreak) {\n var startValue = axisBreak.adjustedStartValue;\n var endValue = axisBreak.adjustedEndValue; // breaks can't overlap\n // if break starts before previous break ends\n\n if (startValue < previousEndValue_1) {\n startValue = previousEndValue_1;\n\n if (endValue < previousEndValue_1) {\n endValue = previousEndValue_1;\n }\n }\n\n axisBreak.adjustedStartValue = startValue;\n axisBreak.adjustedEndValue = endValue;\n });\n }\n }\n };\n\n Object.defineProperty(Axis.prototype, \"startIndex\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return [description]\r\n */\n get: function get() {\n return 0;\n },\n\n /**\r\n * We need start/end indexes of axes to be 0 - `dataItems.length`.\r\n *\r\n * Yes, also for category axis, this helps to avoid jumping of categories\r\n * while scrolling and does not do a lot of extra work as we use\r\n * protected `_startIndex` and `_endIndex` when working with items.\r\n *\r\n * @hidden\r\n */\n\n /**\r\n * [startIndex description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\n set: function set(value) {},\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"endIndex\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return [description]\r\n */\n get: function get() {\n return this.dataItems.length;\n },\n\n /**\r\n * [endIndex description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\n set: function set(value) {},\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a formatted label based on position.\r\n *\r\n * Individual axis types should override this method to generate a label\r\n * that is relevant to axis type.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\n\n Axis.prototype.getPositionLabel = function (position) {\n return Math.round(position * 100) + \"%x\";\n };\n\n Object.defineProperty(Axis.prototype, \"chart\", {\n /**\r\n * @return Chart\r\n */\n get: function get() {\n return this._chart;\n },\n\n /**\r\n * A Chart this Axis belongs to.\r\n *\r\n * @param value Chart\r\n */\n set: function set(value) {\n this._chart = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates a data item for a Series range.\r\n *\r\n * @param series Target Series\r\n * @return Range data item\r\n */\n\n Axis.prototype.createSeriesRange = function (series) {\n var range = this.axisRanges.create();\n range.component = this;\n range.axisFill = this.renderer.axisFills.template.clone();\n range.axisFill.disabled = false;\n range.axisFill.fillOpacity = 0;\n range.grid = this.renderer.grid.template.clone();\n range.grid.disabled = true;\n range.tick = this.renderer.ticks.template.clone();\n range.tick.disabled = true;\n range.label = this.renderer.labels.template.clone();\n range.label.disabled = true;\n range.addDisposer(new Disposer(function () {\n series.axisRanges.removeValue(range);\n }));\n series.axisRanges.push(range);\n return range;\n };\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\n\n\n Axis.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n if (this.renderer) {\n this.renderer.copyFrom(source.renderer);\n } else {\n if (source.renderer) {\n this.renderer = source.renderer.clone();\n\n this._disposers.push(this.renderer);\n }\n }\n\n if (source.title) {\n if (!this.title) {\n this.title = source.title.clone();\n this.title.parent = this;\n } else {\n this.title.copyFrom(source.title);\n }\n\n this._disposers.push(this.title);\n }\n };\n /**\r\n * Resets internal iterator.\r\n */\n\n\n Axis.prototype.resetIterators = function () {\n this._dataItemsIterator.reset();\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n Axis.prototype.processConfig = function (config) {\n if (config) {\n // Set up axis ranges\n if ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\n for (var i = 0, len = config.axisRanges.length; i < len; i++) {\n var range = config.axisRanges[i]; // If `series` is set, we know it's a series range\n\n if ($type.hasValue(range[\"series\"])) {\n if ($type.isString(range[\"series\"])) {\n if (this.map.hasKey(range[\"series\"])) {\n //range[\"series\"] = this.map.getKey(range[\"series\"]);\n config.axisRanges[i] = this.createSeriesRange(this.map.getKey(range[\"series\"]));\n delete range[\"series\"];\n config.axisRanges[i].config = range;\n }\n }\n }\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * Ordering function used in JSON setup.\r\n *\r\n * @param a Item A\r\n * @param b Item B\r\n * @return Order\r\n */\n\n\n Axis.prototype.configOrder = function (a, b) {\n if (a == b) {\n return 0;\n } // last\n else if (a == \"title\") {\n return 1;\n } else if (b == \"title\") {\n return -1;\n } // first\n else if (a == \"component\") {\n return -1;\n } else if (b == \"component\") {\n return 1;\n } else {\n return _super.prototype.configOrder.call(this, a, b);\n }\n };\n\n Object.defineProperty(Axis.prototype, \"startLocation\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"startLocation\");\n },\n\n /**\r\n * Axis start location. Works on Date/Category axis, doesn't work on Value axis.\r\n *\r\n * * 0 - Full first cell is shown.\r\n * * 0.5 - Half of first cell is shown.\r\n * * 1 - None of the first cell is visible. (you probably don't want that)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"startLocation\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"endLocation\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"endLocation\");\n },\n\n /**\r\n * Axis end location. Works on Date/Category axis, doesn't work on Value axis.\r\n *\r\n * * 0 - None of the last cell is shown. (don't do that)\r\n * * 0.5 - Half of the last cell is shown.\r\n * * 1 - Full last cell is shown.\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"endLocation\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n\n Axis.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.renderer) {\n this.renderer.gridContainer.disabled = value;\n }\n\n return changed;\n };\n\n Object.defineProperty(Axis.prototype, \"title\", {\n /**\r\n * @return Title label\r\n */\n get: function get() {\n return this._title;\n },\n\n /**\r\n * A reference to a [[Label]] element which serves as a title to the axis.\r\n *\r\n * When axis is created it aleready has an element, so you can just modify\r\n * it.\r\n *\r\n * Or you can replace it with your own instance of `Label`.\r\n *\r\n * @param value Title label\r\n */\n set: function set(value) {\n if (this._title && this._title != value) {\n this._title.dispose();\n }\n\n if (value) {\n this._title = value;\n value.parent = this;\n value.shouldClone = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"hideTooltipWhileZooming\", {\n /**\r\n * @return Hide tooltip while zooming?\r\n */\n get: function get() {\n return this.getPropertyValue(\"hideTooltipWhileZooming\");\n },\n\n /**\r\n * Indicates if axis' tooltip should be hidden while axis range is animating\r\n * (zooming)\r\n *\r\n * @default true\r\n * @since 4.7.16\r\n * @param value Hide tooltip while zooming?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"hideTooltipWhileZooming\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"zoomable\", {\n /**\r\n * @return Zoomable?\r\n */\n get: function get() {\n return this.getPropertyValue(\"zoomable\");\n },\n\n /**\r\n * Should the axis be zoomed with scrollbar/cursor?\r\n *\r\n * @default true\r\n * @since 4.9.28\r\n * @param value Zoomable?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"zoomable\", value);\n },\n enumerable: true,\n configurable: true\n });\n return Axis;\n}(Component);\n\nexport { Axis };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Axis\"] = Axis;\nregistry.registeredClasses[\"AxisDataItem\"] = AxisDataItem;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Disable axis tooltips.\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.maybeXS,\n state: function state(target, stateId) {\n if (target instanceof Axis && target.tooltip) {\n var state = target.states.create(stateId);\n state.properties.cursorTooltipEnabled = false;\n return state;\n }\n\n return null;\n }\n});","/**\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../../core/Sprite\";\nimport { registry } from \"../../core/Registry\";\nimport { color } from \"../../core/utils/Color\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw Axis line.\r\n *\r\n * @see {@link IAxisLineEvents} for a list of available events\r\n * @see {@link IAxisLineAdapters} for a list of available Adapters\r\n */\n\nvar AxisLine =\n/** @class */\nfunction (_super) {\n __extends(AxisLine, _super);\n /**\r\n * Constructor\r\n */\n\n\n function AxisLine() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisLine\";\n _this.element = _this.paper.add(\"path\");\n var interfaceColors = new InterfaceColorSet();\n _this.stroke = interfaceColors.getFor(\"grid\");\n _this.strokeOpacity = 0.15;\n _this.pixelPerfect = true;\n _this.fill = color();\n\n _this.applyTheme();\n\n _this.interactionsEnabled = false;\n return _this; //this.element.moveTo({ x: 0, y: 0 });\n }\n\n return AxisLine;\n}(Sprite);\n\nexport { AxisLine };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisLine\"] = AxisLine;","import { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../../core/Sprite\";\nimport { registry } from \"../../core/Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * AxisFill is a base class used to defines fill shapes for various\r\n * type-specific Axes.\r\n *\r\n * Axis fills are used to add fills to specific ranges of those axes.\r\n *\r\n * @see {@link IAxisFillEvents} for a list of available events\r\n * @see {@link IAxisFillAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar AxisFill =\n/** @class */\nfunction (_super) {\n __extends(AxisFill, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param axis Axis\r\n */\n\n\n function AxisFill(axis) {\n var _this = _super.call(this) || this;\n\n _this.axis = axis;\n _this.element = _this.paper.add(\"path\");\n _this.className = \"AxisFill\";\n _this.isMeasured = false;\n _this.location = 0;\n _this.above = false;\n var interfaceColors = new InterfaceColorSet();\n _this.fill = interfaceColors.getFor(\"alternativeBackground\");\n _this.fillOpacity = 0;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n AxisFill.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n\n return changed;\n };\n /**\r\n * Draws the fill element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisFill.prototype.draw = function () {\n _super.prototype.draw.call(this);\n\n if (this.__disabled || this.disabled) {\n return;\n }\n\n if (this.axis && $type.isNumber(this.startPosition) && $type.isNumber(this.endPosition)) {\n this.fillPath = this.axis.getPositionRangePath(this.startPosition, this.endPosition);\n this.path = this.fillPath;\n\n if (this.isMeasured) {\n this.measure();\n }\n }\n };\n\n Object.defineProperty(AxisFill.prototype, \"startPosition\", {\n /**\r\n * @return Start position\r\n */\n get: function get() {\n return this.getPropertyValue(\"startPosition\");\n },\n\n /**\r\n * An actual starting position of the fill.\r\n *\r\n * @param value Starting position\r\n */\n set: function set(value) {\n this.setPropertyValue(\"startPosition\", value);\n this.invalidate(); // this is needed as relative position might not change when zooming\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisFill.prototype, \"endPosition\", {\n /**\r\n * @return End position\r\n */\n get: function get() {\n return this.getPropertyValue(\"endPosition\");\n },\n\n /**\r\n * An actual end position of the fill.\r\n *\r\n * @param value End position\r\n */\n set: function set(value) {\n this.setPropertyValue(\"endPosition\", value);\n this.invalidate(); // this is needed as relative position might not change when zooming\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisFill.prototype, \"location\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"location\");\n },\n\n /**\r\n * Relative location of the fill. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"location\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n AxisFill.prototype.setPath = function (value) {\n if (this.setPropertyValue(\"path\", value)) {\n this.element.attr({\n \"d\": value\n });\n return true;\n }\n\n return false;\n };\n\n Object.defineProperty(AxisFill.prototype, \"above\", {\n /**\r\n * @return Draw above series?\r\n */\n get: function get() {\n return this.getPropertyValue(\"above\");\n },\n\n /**\r\n * Normally fill goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"above\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return AxisFill;\n}(Sprite);\n\nexport { AxisFill };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisFill\"] = AxisFill;","/**\r\n * A module defining functionality for axis grid elements.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../../core/Sprite\";\nimport { registry } from \"../../core/Registry\";\nimport { color } from \"../../core/utils/Color\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Displays an axis grid line.\r\n *\r\n * @see {@link IGridEvents} for a list of available events\r\n * @see {@link IGridAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the grid, also with 3d charts we might need some additional elements\r\n * @important\r\n */\n\nvar Grid =\n/** @class */\nfunction (_super) {\n __extends(Grid, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Grid() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Grid\";\n _this.element = _this.paper.add(\"path\");\n _this.location = 0.5;\n _this.isMeasured = false;\n _this.above = false;\n var interfaceColors = new InterfaceColorSet();\n _this.stroke = interfaceColors.getFor(\"grid\");\n _this.pixelPerfect = true;\n _this.strokeOpacity = 0.15;\n _this.fill = color(); // \"none\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Grid.prototype, \"location\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"location\");\n },\n\n /**\r\n * Location within axis cell to place grid line on.\r\n *\r\n * * 0 - start\r\n * * 0.5 - middle\r\n * * 1 - end\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"location\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Grid.prototype, \"above\", {\n /**\r\n * @return Draw above series?\r\n */\n get: function get() {\n return this.getPropertyValue(\"above\");\n },\n\n /**\r\n * Normally fill goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"above\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n Grid.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n\n return changed;\n };\n\n return Grid;\n}(Sprite);\n\nexport { Grid };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Grid\"] = Grid;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Disable grid on smaller charts\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.maybeXS,\n state: function state(target, stateId) {\n if (target instanceof Grid) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * Axis Label module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Label } from \"../../core/elements/Label\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Use to create labels on Axis.\r\n *\r\n * @see {@link IAxisLabelEvents} for a list of available events\r\n * @see {@link IAxisLabelAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar AxisLabel =\n/** @class */\nfunction (_super) {\n __extends(AxisLabel, _super);\n /**\r\n * Constructor\r\n */\n\n\n function AxisLabel() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisLabel\";\n _this.isMeasured = false;\n\n _this.padding(10, 10, 10, 10);\n\n _this.location = 0.5; //this.nonScaling = true; // not good for perf\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(AxisLabel.prototype, \"location\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"location\");\n },\n\n /**\r\n * Relative location of the label. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"location\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisLabel.prototype, \"inside\", {\n /**\r\n * Returns if label is set to be drawn inside axis.\r\n *\r\n * @return Inside?\r\n */\n get: function get() {\n return this.getPropertyValue(\"inside\");\n },\n\n /**\r\n * Sets if label should be drawn inside axis.\r\n *\r\n * @param value Inside?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"inside\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n AxisLabel.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n\n return changed;\n };\n\n return AxisLabel;\n}(Label);\n\nexport { AxisLabel };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisLabel\"] = AxisLabel;","/**\r\n * Tick module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Sprite } from \"../../core/Sprite\";\nimport { registry } from \"../../core/Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A basic Tick class.\r\n *\r\n * A tick is a short dash, mainly connecting an object like axis or slice to\r\n * it's textual label.\r\n *\r\n * @see {@link ITickEvents} for a list of available events\r\n * @see {@link ITickAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar Tick =\n/** @class */\nfunction (_super) {\n __extends(Tick, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Tick() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Tick\";\n var interfaceColors = new InterfaceColorSet();\n _this.fillOpacity = 0;\n _this.length = 6;\n _this.strokeOpacity = 0.2;\n _this.stroke = interfaceColors.getFor(\"grid\");\n _this.isMeasured = false;\n _this.nonScalingStroke = true;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Tick.prototype, \"length\", {\n /**\r\n * @return Length (px)\r\n */\n get: function get() {\n if (this.disabled) {\n return 0;\n }\n\n return this.getPropertyValue(\"length\");\n },\n\n /**\r\n * Length of the tick in pixels.\r\n *\r\n * @param value Length (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"length\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return Tick;\n}(Sprite);\n\nexport { Tick };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Tick\"] = Tick;","/**\r\n * Axis Tick module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Tick } from \"../elements/Tick\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws an axis tick\r\n * @see {@link IAxisTickEvents} for a list of available events\r\n * @see {@link IAxisTickAdapters} for a list of available Adapters\r\n */\n\nvar AxisTick =\n/** @class */\nfunction (_super) {\n __extends(AxisTick, _super);\n\n function AxisTick() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisTick\";\n _this.element = _this.paper.add(\"path\");\n _this.location = 0.5;\n _this.above = false;\n _this.isMeasured = false;\n _this.pixelPerfect = true;\n _this.strokeOpacity = 0;\n _this.length = 5;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(AxisTick.prototype, \"location\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"location\");\n },\n\n /**\r\n * Relative location of the tick. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"location\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisTick.prototype, \"inside\", {\n /**\r\n * Returns if label is set to be drawn inside axis.\r\n *\r\n * @return Inside?\r\n */\n get: function get() {\n return this.getPropertyValue(\"inside\");\n },\n\n /**\r\n * Sets if tick should be drawn inside axis.\r\n *\r\n * @param value Inside?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"inside\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisTick.prototype, \"above\", {\n /**\r\n * @return Draw above series?\r\n */\n get: function get() {\n return this.getPropertyValue(\"above\");\n },\n\n /**\r\n * Normally tick goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"above\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n AxisTick.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n\n return changed;\n };\n\n return AxisTick;\n}(Tick);\n\nexport { AxisTick };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisTick\"] = AxisTick;","/**\r\n * Module, defining base Axis Renderer.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\nimport { AxisDataItem } from \"./Axis\";\nimport { AxisLine } from \"./AxisLine\";\nimport { AxisFill } from \"./AxisFill\";\nimport { Grid } from \"./Grid\";\nimport { AxisLabel } from \"./AxisLabel\";\nimport { AxisTick } from \"./AxisTick\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { registry } from \"../../core/Registry\";\nimport { percent } from \"../../core/utils/Percent\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all axis renderers.\r\n *\r\n * @see {@link IAxisRendererEvents} for a list of available events\r\n * @see {@link IAxisRendererAdapters} for a list of available Adapters\r\n */\n\nvar AxisRenderer =\n/** @class */\nfunction (_super) {\n __extends(AxisRenderer, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\n\n\n function AxisRenderer() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A related chart.\r\n */\n\n\n _this._chart = new MutableValueDisposer();\n _this.className = \"AxisRenderer\"; // Set defaults\n\n _this.minGridDistance = 50;\n _this.inside = false;\n _this.inversed = false;\n _this.tooltipLocation = 0.5;\n _this.fullWidthTooltip = false;\n _this.cellStartLocation = 0;\n _this.cellEndLocation = 1;\n _this.minLabelPosition = 0;\n _this.maxLabelPosition = 1;\n _this.shouldClone = false;\n\n var gridContainer = _this.createChild(Container);\n\n gridContainer.shouldClone = false;\n gridContainer.layout = \"none\"; //\tgridContainer.isMeasured = false;\n\n gridContainer.virtualParent = _this;\n gridContainer.width = percent(100);\n gridContainer.height = percent(100);\n _this.gridContainer = gridContainer; // not good without this\n\n gridContainer.events.on(\"maxsizechanged\", function () {\n if (_this.inited) {\n _this.invalidateAxisItems();\n }\n }, _this, false);\n\n var breakContainer = _this.createChild(Container);\n\n breakContainer.shouldClone = false;\n breakContainer.isMeasured = false;\n breakContainer.layout = \"none\";\n breakContainer.width = percent(100);\n breakContainer.height = percent(100);\n _this.breakContainer = breakContainer;\n\n var bulletsContainer = _this.createChild(Container);\n\n bulletsContainer.shouldClone = false;\n bulletsContainer.isMeasured = false;\n bulletsContainer.layout = \"none\";\n bulletsContainer.width = percent(100);\n bulletsContainer.height = percent(100);\n _this.bulletsContainer = bulletsContainer;\n _this.line = _this.createChild(AxisLine);\n _this.line.shouldClone = false;\n _this.line.strokeOpacity = 0;\n\n var baseGrid = _this.createChild(Grid);\n\n baseGrid.shouldClone = false;\n _this.baseGrid = baseGrid; // Make elements disposable\n\n var disposers = _this._disposers;\n disposers.push(baseGrid);\n disposers.push(_this.line);\n disposers.push(gridContainer);\n disposers.push(breakContainer);\n disposers.push(bulletsContainer);\n disposers.push(_this._chart);\n _this.ticks.template.disabled = true;\n _this.axisFills.template.disabled = true;\n _this.axisFills.template.interactionsEnabled = false; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(AxisRenderer.prototype, \"axis\", {\n /**\r\n * Axis of a renderer\r\n * @return axis Axis\r\n */\n get: function get() {\n return this._axis;\n },\n\n /**\r\n * Axis of a renderer\r\n * @param axis Axis\r\n */\n set: function set(axis) {\n this.setAxis(axis);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n AxisRenderer.prototype.setAxis = function (axis) {\n this._axis = axis;\n this.baseGrid.parent = axis;\n this.line.parent = axis;\n this.gridContainer.bind(\"opacity\", axis);\n };\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRenderer.prototype.processRenderer = function () {\n this.events.on(\"sizechanged\", this.updateTooltip, this, false);\n this.events.on(\"positionchanged\", this.updateTooltip, this, false);\n this.labels.template.inside = this.inside;\n this.ticks.template.inside = this.inside;\n };\n /**\r\n * Updates Axis' tooltip.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRenderer.prototype.updateTooltip = function () {// This is a placeholder method for extending classes to override.\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"axisLength\", {\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\n get: function get() {\n // This is a placeholder method for extending classes to override.\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Re-positions an element to new coordinates.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item A target element\r\n * @param point New coordinates\r\n */\n\n AxisRenderer.prototype.positionItem = function (item, point) {\n if (item) {\n item.moveTo(point);\n }\n };\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Point\r\n */\n\n\n AxisRenderer.prototype.positionToPoint = function (position, position2) {\n // This is a placeholder method for extending classes to override.\n return {\n x: 0,\n y: 0\n };\n };\n /**\r\n * Converts relative position on axis to angle.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review / units)\r\n * @param position Position (0-1)\r\n * @return Angle\r\n */\n\n\n AxisRenderer.prototype.positionToAngle = function (position) {\n // This is a placeholder method for extending classes to override.\n return 0;\n };\n /**\r\n * Converts relative position (0-1) on axis to a pixel coordinate.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\n\n\n AxisRenderer.prototype.positionToCoordinate = function (position) {\n var coordinate;\n var axis = this.axis;\n var axisFullLength = axis.axisFullLength;\n\n if (axis.renderer.inversed) {\n coordinate = (axis.end - position) * axisFullLength;\n } else {\n coordinate = (position - axis.start) * axisFullLength;\n }\n\n return coordinate;\n };\n\n AxisRenderer.prototype.updateGridContainer = function () {};\n\n AxisRenderer.prototype.getHeight = function () {\n var gridContainer = this.gridContainer;\n\n if (gridContainer.parent) {\n return gridContainer.parent.pixelHeight;\n }\n\n return this.gridContainer.pixelHeight || 0;\n };\n\n AxisRenderer.prototype.getWidth = function () {\n var gridContainer = this.gridContainer;\n\n if (gridContainer.parent) {\n return gridContainer.parent.pixelWidth;\n }\n\n return this.gridContainer.pixelWidth || 0;\n };\n /**\r\n * Converts a coordinate in pixels to a relative position. (0-1)\r\n *\r\n * @param coordinate Coordinate (px)\r\n * @param coordinate2 Coordinate of a second axis, only needed for complex axes systems, like timeline (px)\r\n * @return Position (0-1)\r\n */\n\n\n AxisRenderer.prototype.coordinateToPosition = function (coordinate, coordinate2) {\n var position;\n var axis = this.axis;\n var axisFullLength = axis.axisFullLength;\n\n if (axis.renderer.inversed) {\n position = axis.end - coordinate / axisFullLength;\n } else {\n position = coordinate / axisFullLength + axis.start;\n }\n\n return $math.round(position, 5);\n };\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\n\n\n AxisRenderer.prototype.pointToPosition = function (point) {\n // This is a placeholder method for extending classes to override.\n return 0;\n };\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\n\n\n AxisRenderer.prototype.getPositionRangePath = function (startPosition, endPosition) {\n return \"\";\n };\n /**\r\n * Invalidates all axis data items, effectively causing them re-evaluated.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\n\n\n AxisRenderer.prototype.invalidateAxisItems = function () {\n var axis = this.axis;\n\n if (axis) {\n axis.invalidateDataItems();\n }\n };\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRenderer.prototype.updateGridElement = function (grid, position, endPosition) {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRenderer.prototype.updateTickElement = function (tick, position, endPosition) {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions axis bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRenderer.prototype.updateBullet = function (bullet, position, endPosition) {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\n\n\n AxisRenderer.prototype.updateLabelElement = function (label, position, endPosition, location) {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions the axis fill element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fill Fill element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\n\n\n AxisRenderer.prototype.updateFillElement = function (fill, position, endPosition) {\n fill.startPosition = position;\n fill.endPosition = endPosition;\n };\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRenderer.prototype.updateAxisLine = function () {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRenderer.prototype.updateBaseGridElement = function () {// This is a placeholder method for extending classes to override.\n };\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\n\n\n AxisRenderer.prototype.updateBreakElement = function (axisBreak) {\n this.positionItem(axisBreak.startLine, axisBreak.startPoint);\n this.toggleVisibility(axisBreak.startLine, axisBreak.startPosition, 0, 1);\n this.positionItem(axisBreak.endLine, axisBreak.endPoint);\n this.toggleVisibility(axisBreak.endLine, axisBreak.endPosition, 0, 1);\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"minGridDistance\", {\n /**\r\n * @return Min distance (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minGridDistance\");\n },\n\n /**\r\n * Minimum distance in pixels between grid elements.\r\n *\r\n * Use it to control density of the grid/labels on the axis.element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/#Setting_the_density_of_the_the_grid_labels} for more info\r\n * @param value Min distance (px)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"minGridDistance\", value)) {\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"chart\", {\n /**\r\n * @ignore Exclude from docs\r\n * @return Chart\r\n */\n get: function get() {\n return this._chart.get();\n },\n\n /**\r\n * A chart, associated with the Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Chart\r\n */\n set: function set(value) {\n this._chart.set(value, null);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Toggles visibility of an element, based on its current position and\r\n * min/max position settings.\r\n *\r\n * E.g. labels based on `minLabelPosition` and `maxLabelPosition`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite An element to toggle\r\n * @param position Elements current position\r\n * @param minPosition Min position setting\r\n * @param maxPosition Max position setting\r\n */\n\n AxisRenderer.prototype.toggleVisibility = function (sprite, position, minPosition, maxPosition) {\n var axis = this.axis;\n var dataItem = sprite.dataItem;\n\n if (dataItem && dataItem instanceof AxisDataItem) {\n if ($type.isNumber(dataItem.minPosition)) {\n minPosition = dataItem.minPosition;\n }\n\n if ($type.isNumber(dataItem.maxPosition)) {\n maxPosition = dataItem.maxPosition;\n }\n }\n\n var updatedStart = axis.start + (axis.end - axis.start) * (minPosition - 0.0001);\n var updatedEnd = axis.start + (axis.end - axis.start) * (maxPosition + 0.0001);\n\n if (!sprite.disabled) {\n if (position < updatedStart || position > updatedEnd) {\n sprite.__disabled = true;\n } else {\n sprite.__disabled = false;\n }\n }\n };\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\n\n\n AxisRenderer.prototype.createBreakSprites = function (axisBreak) {// This is a placeholder method for extending classes to override.\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"axisFills\", {\n /**\r\n * A list of Axis' Fill elements.\r\n *\r\n * Those are fill elements that cover the space between every second set\r\n * of grid lines, and can be configured to create striped charts.\r\n *\r\n * Please note that these are disabled by default. To enable them, set\r\n * template to true.\r\n *\r\n * ```TypeScript\r\n * categoryAxis.renderer.axisFills.template.disabled = false;\r\n * ```\r\n * ```JavaScript\r\n * categoryAxis.renderer.axisFills.template.disabled = false;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"renderer\": {\r\n * \"axisFills\": {\r\n * \"disabled\": false\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/alternated-axis-fills/} this tutorial for more info.\r\n * @return Fill elements\r\n */\n get: function get() {\n if (!this._axisFills) {\n var fill = this.createFill(this.axis);\n this._axisFills = new ListTemplate(fill);\n fill.applyOnClones = true;\n fill.events.on(\"enabled\", this.invalidateAxisItems, this, false);\n\n this._disposers.push(new ListDisposer(this._axisFills));\n\n this._disposers.push(this._axisFills.template);\n }\n\n return this._axisFills;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a new fill element, suitable for this Axis Renderer type.\r\n *\r\n * @return Fill element\r\n */\n\n AxisRenderer.prototype.createFill = function (axis) {\n return new AxisFill(axis);\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"grid\", {\n /**\r\n * A list of Axis' Grid elements.\r\n *\r\n * @return Grid elements\r\n */\n get: function get() {\n if (!this._grid) {\n var grid = this.createGrid();\n this._grid = new ListTemplate(grid);\n grid.applyOnClones = true;\n grid.events.on(\"enabled\", this.invalidateAxisItems, this, false);\n\n this._disposers.push(new ListDisposer(this._grid));\n\n this._disposers.push(this._grid.template);\n }\n\n return this._grid;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a new grid element, suitable for this Axis Renderer type.\r\n *\r\n * @return Grid element\r\n */\n\n AxisRenderer.prototype.createGrid = function () {\n return new Grid();\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"ticks\", {\n /**\r\n * A list of Axis' Tick elements.\r\n *\r\n * Please note that these are disabled by default. To enable ticks, you'll\r\n * need to set `disabled` and `strokeOpacity` properties of the tick template.\r\n *\r\n * ```TypeScript\r\n * categoryAxis.renderer.ticks.template.disabled = false;\r\n * categoryAxis.renderer.ticks.template.strokeOpacity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * categoryAxis.renderer.ticks.template.disabled = false;\r\n * categoryAxis.renderer.ticks.template.strokeOpacity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"renderer\": {\r\n * \"ticks\": {\r\n * \"disabled\": false,\r\n * \"strokeOpacity\": 0.5\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Tick elements\r\n */\n get: function get() {\n if (!this._ticks) {\n var tick = this.createTick();\n tick.applyOnClones = true;\n tick.isMeasured = false;\n tick.events.on(\"enabled\", this.invalidateAxisItems, this, false);\n this._ticks = new ListTemplate(tick);\n\n this._disposers.push(new ListDisposer(this._ticks));\n\n this._disposers.push(this._ticks.template);\n }\n\n return this._ticks;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a new tick element, suitable for this Axis Renderer type.\r\n *\r\n * @return Tick element\r\n */\n\n AxisRenderer.prototype.createTick = function () {\n return new AxisTick();\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"labels\", {\n /**\r\n * A list of Axis' Label elements.\r\n *\r\n * @return Label elements\r\n */\n get: function get() {\n if (!this._labels) {\n var label = this.createLabel();\n this._labels = new ListTemplate(label);\n label.applyOnClones = true;\n label.events.on(\"enabled\", this.invalidateAxisItems, this, false);\n\n this._disposers.push(new ListDisposer(this._labels));\n\n this._disposers.push(this._labels.template);\n }\n\n return this._labels;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a new label element, suitable for this Axis Renderer type.\r\n *\r\n * @return Label element\r\n */\n\n AxisRenderer.prototype.createLabel = function () {\n return new AxisLabel();\n };\n\n Object.defineProperty(AxisRenderer.prototype, \"inside\", {\n /**\r\n * @return Labels inside?\r\n */\n get: function get() {\n return this.getPropertyValue(\"inside\");\n },\n\n /**\r\n * Indicates whether Axis' labels and ticks should be drawn inside Plot area.\r\n *\r\n * Does not work with all renderers, like AxisRendererRadial.\r\n *\r\n * @param value Labels inside?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"inside\", value)) {\n if (this.axis) {\n this.axis.invalidate();\n }\n }\n\n if (value) {\n this.width = 0;\n this.height = 0;\n } else {\n this.width = undefined;\n this.height = undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"opposite\", {\n /**\r\n * @return Draw axis on opposite side?\r\n */\n get: function get() {\n return this.getPropertyValue(\"opposite\");\n },\n\n /**\r\n * Indicates whether Axis should be drawn on the opposite side of the plot\r\n * area than it would normally be drawn based on chart's settings.\r\n *\r\n * Does not work with all renderers, like [[AxisRendererRadial]] and\r\n * [[AxisRenderer Circular].\r\n *\r\n * @param value Draw axis on opposite side?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"opposite\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"fullWidthTooltip\", {\n /**\r\n * @return Full width tooltip?\r\n */\n get: function get() {\n return this.getPropertyValue(\"fullWidthTooltip\");\n },\n\n /**\r\n * Indicates if Axis tooltip should take the whole width of the axis cell.\r\n * (between two grid lines)\r\n *\r\n * NOTE: this setting is ignored on circular axis types.\r\n *\r\n * @param value Full width tooltip?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"fullWidthTooltip\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"tooltipLocation\", {\n /**\r\n * @return Tooltip location\r\n */\n get: function get() {\n return this.getPropertyValue(\"tooltipLocation\");\n },\n\n /**\r\n * Location within axis cell to show tooltip on. (0-1)\r\n *\r\n * 0 - show at the start\r\n * 0.5 - show right in the middle\r\n * 1 - show at the end\r\n *\r\n * @param value Tooltip location\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tooltipLocation\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"tooltipLocation2\", {\n /**\r\n * @return Tooltip location\r\n */\n get: function get() {\n return this.getPropertyValue(\"tooltipLocation2\");\n },\n\n /**\r\n * Location within secondary axis cell to show tooltip on. (0-1)\r\n *\r\n * 0 - show at the start\r\n * 0.5 - show right in the middle\r\n * 1 - show at the end\r\n *\r\n * @param value Tooltip location\r\n */\n set: function set(value) {\n this.setPropertyValue(\"tooltipLocation2\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"cellStartLocation\", {\n /**\r\n * @return Cell start (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cellStartLocation\");\n },\n\n /**\r\n * Location for the cell start.\r\n *\r\n * Normally a \"cell\" is the whole available width in a category.\r\n *\r\n * If there are several clustered column-like series available, the whole\r\n * space is divided between each clustered column, or column stacks.\r\n *\r\n * `cellStartLocation` identifies where, within available space, the actual\r\n * cell starts.\r\n *\r\n * This, together with column series' `width` will affect actual width of\r\n * columns, and thus gaps between them.\r\n *\r\n * This will affect category-like axes only, like [[DateAxis]], or\r\n * [[CategoryAxis]].\r\n *\r\n * This is used to limit a space occupied by series like column.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Cell start (0-1)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"cellStartLocation\", value)) {\n if (this.axis) {\n this.axis.invalidateSeries();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"cellEndLocation\", {\n /**\r\n * @return Cell end (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"cellEndLocation\");\n },\n\n /**\r\n * Location for the cell end.\r\n *\r\n * Normally a \"cell\" is the whole available width in a category.\r\n *\r\n * If there are several clustered column-like series available, the whole\r\n * space is divided between each clustered column, or column stacks.\r\n *\r\n * `cellEndLocation` identifies where, within available space, the actual\r\n * cell ends.\r\n *\r\n * This, together with column series' `width` will affect actual width of\r\n * columns, and thus gaps between them.\r\n *\r\n * This will affect category-like axes only, like [[DateAxis]], or\r\n * [[CategoryAxis]].\r\n *\r\n * This is used to limit a space occupied by series like column.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Cell end (0-1)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"cellEndLocation\", value)) {\n if (this.axis) {\n this.axis.invalidateSeries();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"inversed\", {\n /**\r\n * @return Flip axis?\r\n */\n get: function get() {\n return this.getPropertyValue(\"inversed\");\n },\n\n /**\r\n * Indicates if the scale of the axis should be flipped.\r\n *\r\n * @param value Flip axis?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"inversed\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"minLabelPosition\", {\n /**\r\n * @return Min label position (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minLabelPosition\");\n },\n\n /**\r\n * Minimum position along the Axis, for labels.\r\n *\r\n * Labels, which have their position closer to the start of the Axis, will be\r\n * automatically hidden.\r\n *\r\n * E.g., setting this to 0.05 (5% of total axis length) would hide labels,\r\n * that would otherwise be drawn very near start of the Axis.\r\n *\r\n * This is especially usefull with `inside = true`, or if the chart hasn't\r\n * got any extra margins.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Min label position (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minLabelPosition\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AxisRenderer.prototype, \"maxLabelPosition\", {\n /**\r\n * @return Max label position (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxLabelPosition\");\n },\n\n /**\r\n * Maximum position along the Axis, for labels.\r\n *\r\n * Labels, which have their position closer to the and of the Axis, will be\r\n * automatically hidden.\r\n *\r\n * E.g., setting this to 0.95 (95% of total axis length) would hide labels,\r\n * that would otherwise be drawn very near end of the Axis.\r\n *\r\n * This is especially usefull with `inside = true`, or if the chart hasn't\r\n * got any extra margins.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Max label position (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"maxLabelPosition\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all settings and related items from another object of the same\r\n * type.\r\n *\r\n * @param source Source object\r\n */\n\n AxisRenderer.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.grid.template.copyFrom(source.grid.template);\n this.ticks.template.copyFrom(source.ticks.template);\n this.labels.template.copyFrom(source.labels.template);\n this.axisFills.template.copyFrom(source.axisFills.template);\n this.line.copyFrom(source.line);\n this.baseGrid.copyFrom(source.baseGrid);\n };\n /**\r\n * @ignore\r\n */\n\n\n AxisRenderer.prototype.toAxisPosition = function (value) {\n return value;\n };\n /**\r\n * Sets `visibility` property:\r\n *\r\n * * `true` - visible\r\n * * `false` - hidden\r\n *\r\n * @param value true - visible, false - hidden\r\n * @return Current visibility\r\n */\n\n\n AxisRenderer.prototype.setVisibility = function (value) {\n _super.prototype.setVisibility.call(this, value);\n\n this.bulletsContainer.visible = value;\n };\n\n return AxisRenderer;\n}(Container);\n\nexport { AxisRenderer };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisRenderer\"] = AxisRenderer;","/**\r\n * Axis Bullet module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a positioned bullet (element) on an Axis.\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * let flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * var flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"bullet: {\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.5.9\r\n * @see {@link IAxisBulletEvents} for a list of available events\r\n * @see {@link IAxisBulletAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar AxisBullet =\n/** @class */\nfunction (_super) {\n __extends(AxisBullet, _super);\n\n function AxisBullet() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisBullet\";\n _this.location = 0.5;\n _this.isMeasured = false;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(AxisBullet.prototype, \"location\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"location\");\n },\n\n /**\r\n * Relative position within cell/range.\r\n *\r\n * Value range is from from `0` (beginning) to `1` (end).\r\n *\r\n * NOTE: `location` is relative to the parent axis range's scope, i.e.\r\n * between its `date` and `endDate` for [[DateAxis]], or `value`/`endValue`\r\n * ([[ValueAxis]]), or `category`/`endCategory` ([[categoryAxis]]).\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n * range.endDate = new Date(2018, 0, 6);\r\n *\r\n * let bullet = new am4charts.AxisBullet();\r\n * bullet.location = 1;\r\n *\r\n * let flag = bullet.createChild(am4plugins_bullets.FlagBullet);\r\n * flag.label.text = \"Hello\";\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n * range.endDate = new Date(2018, 0, 6);\r\n *\r\n * var bullet = new am4charts.AxisBullet();\r\n * bullet.location = 1;\r\n *\r\n * var flag = bullet.createChild(am4plugins_bullets.FlagBullet);\r\n * flag.label.text = \"Hello\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"endDate\": new Date(2018, 0, 6),\r\n * \"bullet: {\r\n * \"type\": \"AxisBullet\",\r\n * \"location\": 1,\r\n * \"children\": [{\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }]\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 0.5\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"location\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n AxisBullet.prototype.setDisabled = function (value) {\n var changed = _super.prototype.setDisabled.call(this, value);\n\n if (this.axis) {\n this.axis.invalidateDataItems();\n }\n\n return changed;\n };\n\n return AxisBullet;\n}(Container);\n\nexport { AxisBullet };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisBullet\"] = AxisBullet;","/**\r\n * Module, defining Axis Renderer for vertical axes.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { AxisRenderer } from \"./AxisRenderer\";\nimport { WavedLine } from \"../../core/elements/WavedLine\";\nimport { WavedRectangle } from \"../../core/elements/WavedRectangle\";\nimport { registry } from \"../../core/Registry\";\nimport { percent, Percent } from \"../../core/utils/Percent\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $path from \"../../core/rendering/Path\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $type from \"../../core/utils/Type\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\nimport { AxisBullet } from \"./AxisBullet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A renderer for vertical axis.\r\n *\r\n * @see {@link IAxisRendererYEvents} for a list of available events\r\n * @see {@link IAxisRendererYAdapters} for a list of available Adapters\r\n */\n\nvar AxisRendererY =\n/** @class */\nfunction (_super) {\n __extends(AxisRendererY, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\n\n\n function AxisRendererY() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisRendererY\";\n _this.minGridDistance = 40;\n _this.opposite = false;\n _this.height = percent(100);\n _this.labels.template.verticalCenter = \"middle\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererY.prototype.setAxis = function (axis) {\n _super.prototype.setAxis.call(this, axis);\n\n axis.layout = \"horizontal\";\n };\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererY.prototype.updateGridContainer = function () {\n var axis = this.axis;\n\n if (axis) {\n var gridContainer = this.gridContainer;\n gridContainer.y = axis.pixelY;\n gridContainer.height = axis.axisLength;\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererY.prototype.toAxisPosition = function (value) {\n var axis = this.axis;\n\n if (axis) {\n var inversedPosition = 1 - value;\n var relativePositionSprite = axis.relativePositionSprite;\n var y = axis.pixelY;\n\n if (relativePositionSprite) {\n y = $utils.spritePointToSprite({\n x: 0,\n y: this.pixelY\n }, this.parent, relativePositionSprite).y;\n } else {\n relativePositionSprite = axis.parent;\n }\n\n if (relativePositionSprite) {\n var relativeY = y / relativePositionSprite.innerHeight;\n var relativeHeight = axis.axisLength / relativePositionSprite.innerHeight;\n return 1 - (inversedPosition - relativeY) / relativeHeight;\n }\n }\n\n return value;\n };\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererY.prototype.processRenderer = function () {\n _super.prototype.processRenderer.call(this);\n\n var axis = this.axis;\n\n if (axis) {\n var title = axis.title;\n title.valign = \"middle\";\n\n if (!(axis.height instanceof Percent)) {\n axis.height = percent(100);\n }\n\n if (this.opposite) {\n title.rotation = 90;\n this.line.toBack();\n title.toFront();\n } else {\n title.rotation = -90;\n title.toBack();\n this.line.toFront();\n }\n }\n };\n /**\r\n * Updates some of the Axis tooltip's visual properties, related to\r\n * rendering of the Axis.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererY.prototype.updateTooltip = function () {\n var axis = this.axis;\n\n if (axis) {\n var bigNum = 2000;\n var bbx = 0;\n var bby = 0;\n var bbw = bigNum;\n var bbh = this.axisLength; // right\n\n if (this.opposite) {\n if (this.inside) {\n bbx = -bigNum;\n bbw = bigNum;\n }\n } // left\n else {\n if (!this.inside) {\n bbx = -bigNum;\n bbw = bigNum;\n }\n }\n\n this.axis.updateTooltip(\"horizontal\", {\n x: bbx,\n y: bby,\n width: bbw,\n height: bbh\n });\n }\n };\n\n Object.defineProperty(AxisRendererY.prototype, \"axisLength\", {\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\n get: function get() {\n var axis = this.axis;\n return axis.measuredHeight - axis.pixelPaddingTop - axis.pixelPaddingBottom || 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\n\n AxisRendererY.prototype.positionToPoint = function (position, position2) {\n return {\n x: 0,\n y: this.positionToCoordinate(position)\n };\n };\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\n\n\n AxisRendererY.prototype.pointToPosition = function (point) {\n return this.coordinateToPosition(point.y, point.x);\n };\n /**\r\n * Converts a coordinate in pixels to a relative position. (0-1)\r\n *\r\n * @param coordinate Coordinate (px)\r\n * @param coordinate2 Coordinate of a second axis, only needed for complex axes systems, like timeline (px)\r\n * @return Position (0-1)\r\n */\n\n\n AxisRendererY.prototype.coordinateToPosition = function (coordinate, coordinate2) {\n var position;\n var axis = this.axis;\n var axisFullLength = axis.axisFullLength;\n\n if (axis.renderer.inversed) {\n position = 1 - axis.start - coordinate / axisFullLength;\n } else {\n position = coordinate / axisFullLength + (1 - axis.end);\n }\n\n return $math.round(position, 5);\n };\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\n\n\n AxisRendererY.prototype.getPositionRangePath = function (startPosition, endPosition) {\n var y1 = $math.fitToRange(this.positionToCoordinate(startPosition), 0, this.axisLength);\n var y2 = $math.fitToRange(this.positionToCoordinate(endPosition), 0, this.axisLength);\n var h = Math.abs(y2 - y1);\n var w = this.getWidth();\n var y = Math.min(y1, y2);\n var x = 0;\n return $path.rectToPath({\n x: x,\n y: y,\n width: w,\n height: h\n }, true);\n };\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererY.prototype.updateGridElement = function (grid, position, endPosition) {\n position = position + (endPosition - position) * grid.location;\n var point = this.positionToPoint(position); //\tpoint.y = $utils.spritePointToSprite({ x: 0, y: point.y }, this, this.gridContainer).y;\n\n grid.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: this.getWidth(),\n y: 0\n });\n this.positionItem(grid, point);\n this.toggleVisibility(grid, position, 0, 1);\n };\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererY.prototype.updateTickElement = function (tick, position, endPosition) {\n position = position + (endPosition - position) * tick.location;\n var point = this.positionToPoint(position);\n var tickLength = tick.length;\n\n try {\n $utils.used(this.axis.title.measuredWidth);\n } catch (_a) {// void\n }\n\n point.x = $utils.spritePointToSprite({\n x: this.line.pixelX,\n y: 0\n }, this.line.parent, this.gridContainer).x;\n\n if (!this.opposite) {\n tickLength *= tick.inside ? 1 : -1;\n } else {\n tickLength *= tick.inside ? -1 : 1;\n }\n\n tick.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: tickLength,\n y: 0\n });\n this.positionItem(tick, point);\n this.toggleVisibility(tick, position, 0, 1);\n };\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererY.prototype.updateAxisLine = function () {\n this.line.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: 0,\n y: this.axisLength\n });\n };\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererY.prototype.updateBaseGridElement = function () {\n _super.prototype.updateBaseGridElement.call(this);\n\n var axis = this.axis;\n var w = this.getWidth();\n var h = this.axisLength;\n var y = axis.basePoint.y;\n var baseGrid = this.baseGrid;\n\n if (y < -0.2 || y > h + 0.2) {\n baseGrid.hide(0);\n } else {\n var x = $utils.spritePointToSprite({\n x: 0,\n y: 0\n }, this.gridContainer, baseGrid.parent).x;\n baseGrid.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: w,\n y: 0\n });\n baseGrid.moveTo({\n x: x,\n y: y\n });\n baseGrid.show(0);\n }\n };\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\n\n\n AxisRendererY.prototype.updateLabelElement = function (label, position, endPosition, location) {\n if (!$type.hasValue(location)) {\n location = label.location;\n }\n\n position = position + (endPosition - position) * location;\n label.isMeasured = !label.inside;\n var point = this.positionToPoint(position);\n var horizontalCenter;\n var deltaX = 0;\n var maxWidth = this.gridContainer.maxWidth;\n\n if (this.opposite) {\n if (label.inside) {\n horizontalCenter = \"right\";\n\n if (label.align == \"left\") {\n deltaX = -maxWidth;\n horizontalCenter = \"left\";\n }\n\n if (label.align == \"center\") {\n deltaX = -maxWidth / 2;\n horizontalCenter = \"middle\";\n }\n } else {\n horizontalCenter = \"left\";\n }\n\n point.x = 0 + deltaX;\n } else {\n if (label.inside) {\n horizontalCenter = \"left\";\n\n if (label.align == \"right\") {\n deltaX = maxWidth;\n horizontalCenter = \"right\";\n }\n\n if (label.align == \"center\") {\n deltaX = maxWidth / 2;\n horizontalCenter = \"middle\";\n }\n } else {\n horizontalCenter = \"right\";\n }\n\n point.x = this.measuredWidth + deltaX;\n }\n\n if (label.rotation == 0) {\n // Apply fuzzy logic to verticalCenter only if labels are not rotated\n label.horizontalCenter = horizontalCenter;\n }\n\n this.positionItem(label, point);\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\n };\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\n\n\n AxisRendererY.prototype.updateBreakElement = function (axisBreak) {\n _super.prototype.updateBreakElement.call(this, axisBreak);\n\n var startLine = axisBreak.startLine;\n var endLine = axisBreak.endLine;\n var fillShape = axisBreak.fillShape;\n var startPoint = axisBreak.startPoint;\n var endPoint = axisBreak.endPoint;\n var x1 = axisBreak.pixelMarginLeft;\n var x2 = this.getWidth() - axisBreak.pixelMarginLeft - axisBreak.pixelMarginRight;\n startPoint.y = $math.fitToRange(startPoint.y, -1, this.axisLength + 1);\n endPoint.y = $math.fitToRange(endPoint.y, -1, this.axisLength + 1);\n\n if (startPoint.y == endPoint.y && (startPoint.y < 0 || startPoint.y > this.axisLength)) {\n axisBreak.fillShape.__disabled = true;\n } else {\n axisBreak.fillShape.__disabled = false;\n }\n\n var w = Math.abs(x2 - x1);\n startLine.x = x1;\n startLine.height = 0;\n startLine.width = w;\n endLine.x = x1;\n endLine.height = 0;\n endLine.width = w;\n fillShape.width = w;\n fillShape.height = Math.abs(endPoint.y - startPoint.y);\n fillShape.x = x1;\n fillShape.y = endPoint.y;\n };\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\n\n\n AxisRendererY.prototype.createBreakSprites = function (axisBreak) {\n axisBreak.startLine = new WavedLine();\n axisBreak.endLine = new WavedLine();\n var wavedRectangle = new WavedRectangle();\n wavedRectangle.setWavedSides(true, false, true, false);\n axisBreak.fillShape = wavedRectangle;\n };\n /**\r\n * Converts a position on the axis to a coordinate in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\n\n\n AxisRendererY.prototype.positionToCoordinate = function (position) {\n var coordinate;\n var axis = this.axis;\n var axisFullLength = axis.axisFullLength;\n\n if (!axis.renderer.inversed) {\n coordinate = (axis.end - position) * axisFullLength;\n } else {\n coordinate = (position - axis.start) * axisFullLength;\n }\n\n return coordinate;\n };\n /**\r\n * Updates and positions axis bullets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererY.prototype.updateBullet = function (bullet, position, endPosition) {\n var location = 0.5;\n\n if (bullet instanceof AxisBullet) {\n location = bullet.location;\n }\n\n position = position + (endPosition - position) * location;\n var point = this.positionToPoint(position);\n point.x = $utils.spritePointToSprite({\n x: this.line.pixelX,\n y: 0\n }, this.line.parent, this.gridContainer).x;\n this.positionItem(bullet, point);\n this.toggleVisibility(bullet, position, 0, 1);\n };\n\n return AxisRendererY;\n}(AxisRenderer);\n\nexport { AxisRendererY };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisRendererY\"] = AxisRendererY;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Put labels inside plot area.\r\n * Disable first and last labels.\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.widthS,\n state: function state(target, stateId) {\n if (target instanceof AxisRendererY) {\n var state = target.states.create(stateId);\n state.properties.inside = true;\n state.properties.maxLabelPosition = 0.9;\n state.properties.minLabelPosition = 0.1;\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Disable labels altogather on very small charts\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.widthXS,\n state: function state(target, stateId) {\n if (target instanceof AxisRendererY) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * A module which defines functionality related to Value Axis Break.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { AxisBreak } from \"./AxisBreak\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Base class to define \"breaks\" on value axis.\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * when comparing columns with relatively similar values, it would make sense\r\n * to cut out their mid section, so that their tip differences are more\r\n * prominent.\r\n *\r\n * @see {@link IValueAxisBreakEvents} for a list of available events\r\n * @see {@link IValueAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar ValueAxisBreak =\n/** @class */\nfunction (_super) {\n __extends(ValueAxisBreak, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ValueAxisBreak() {\n var _this = _super.call(this) || this;\n\n _this.className = \"ValueAxisBreak\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(ValueAxisBreak.prototype, \"startPosition\", {\n /**\r\n * Pixel position of the break's start.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\n get: function get() {\n if (this.axis) {\n return this.axis.valueToPosition(this.adjustedStartValue);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxisBreak.prototype, \"endPosition\", {\n /**\r\n * Pixel position of the break's end.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\n get: function get() {\n if (this.axis) {\n return this.axis.valueToPosition(this.adjustedEndValue);\n }\n },\n enumerable: true,\n configurable: true\n });\n return ValueAxisBreak;\n}(AxisBreak);\n\nexport { ValueAxisBreak };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ValueAxisBreak\"] = ValueAxisBreak;","/**\r\n * Value Axis module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Axis, AxisDataItem } from \"./Axis\";\nimport { AxisRendererY } from \"./AxisRendererY\";\nimport { MultiDisposer } from \"../../core/utils/Disposer\";\nimport { registry } from \"../../core/Registry\";\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $object from \"../../core/utils/Object\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $utils from \"../../core/utils/Utils\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[ValueAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar ValueAxisDataItem =\n/** @class */\nfunction (_super) {\n __extends(ValueAxisDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ValueAxisDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"ValueAxisDataItem\";\n _this.values.value = {};\n _this.values.endValue = {};\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(ValueAxisDataItem.prototype, \"value\", {\n /**\r\n * @return Value\r\n */\n get: function get() {\n return this.values[\"value\"].value;\n },\n\n /**\r\n * A data point's numeric value.\r\n *\r\n * @param value Value\r\n */\n set: function set(value) {\n this.setValue(\"value\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxisDataItem.prototype, \"endValue\", {\n /**\r\n * @return Value\r\n */\n get: function get() {\n return this.values[\"endValue\"].value;\n },\n\n /**\r\n * Data point's numeric end value.\r\n *\r\n * @param value End value\r\n */\n set: function set(value) {\n this.setValue(\"endValue\", value);\n },\n enumerable: true,\n configurable: true\n });\n return ValueAxisDataItem;\n}(AxisDataItem);\n\nexport { ValueAxisDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to create a value axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Monthly Sales\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Monthly Sales\";\r\n * ```\r\n * ```JSON\r\n * \"yAxes\": [{\r\n * \"type\": \"ValueAxis\",\r\n * \"title\": {\r\n * \"text\": \"Monthly Sales\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IValueAxisEvents} for a list of available Events\r\n * @see {@link IValueAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar ValueAxis =\n/** @class */\nfunction (_super) {\n __extends(ValueAxis, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ValueAxis() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * [_stepDecimalPlaces description]\r\n *\r\n * @todo Description\r\n */\n\n\n _this._stepDecimalPlaces = 0;\n _this._prevStepDecimalPlaces = 0;\n _this._adjustLabelPrecision = true;\n /**\r\n * Base value for the axis.\r\n */\n\n _this._baseValue = 0;\n /**\r\n * Adjusted start in case we have breaks.\r\n *\r\n * @todo Description\r\n */\n\n _this._adjustedStart = 0;\n /**\r\n * Adjusted end in case we have breaks.\r\n *\r\n * @todo Description\r\n */\n\n _this._adjustedEnd = 1;\n _this._extremesChanged = false;\n _this._deltaMinMax = 1;\n _this._dsc = false;\n /**\r\n * As calculating totals is expensive operation and not often needed, we\r\n * don't do it by default.\r\n *\r\n * In case you use `totalPercent` or `total` in your charts, this must be set\r\n * to `true`.\r\n *\r\n * @default false\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#100_stacks} For using `calculateTotals` for 100% stacked series.\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-strings/#Placeholders_for_numeric_values} For using `calculateTotals` in labels.\r\n */\n\n _this.calculateTotals = false;\n _this.className = \"ValueAxis\"; // Set field name\n\n _this.axisFieldName = \"value\"; // Set defaults\n\n _this.setPropertyValue(\"maxZoomFactor\", 1000);\n\n _this.setPropertyValue(\"extraMin\", 0);\n\n _this.setPropertyValue(\"extraMax\", 0);\n\n _this.setPropertyValue(\"strictMinMax\", false);\n\n _this.setPropertyValue(\"maxPrecision\", Number.MAX_VALUE);\n\n _this.setPropertyValue(\"adjustLabelPrecision\", true);\n\n _this.setPropertyValue(\"extraTooltipPrecision\", 0);\n\n _this.keepSelection = false;\n _this.includeRangesInMinMax = false; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Holds reference to a function that accepts a DataItem as parameter.\r\n *\r\n * It can either return a fill opacity for a fill, or manipulate data item\r\n * directly, to create various highlighting scenarios.\r\n */\n\n\n ValueAxis.prototype.fillRule = function (dataItem) {\n var value = dataItem.value;\n var axis = dataItem.component;\n\n if (!dataItem.axisFill.disabled) {\n // rounding in left to solve floating point number\n if ($math.round(value / axis.step / 2, 5) == Math.round(value / axis.step / 2)) {\n dataItem.axisFill.__disabled = true;\n } else {\n dataItem.axisFill.__disabled = false;\n }\n }\n };\n /**\r\n * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n ValueAxis.prototype.createDataItem = function () {\n return new ValueAxisDataItem();\n };\n /**\r\n * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n *\r\n * @return Axis break\r\n */\n\n\n ValueAxis.prototype.createAxisBreak = function () {\n return new ValueAxisBreak();\n };\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n ValueAxis.prototype.dataChangeUpdate = function () {\n this.clearCache();\n\n if (!this.keepSelection) {\n if (this._start != 0 || this._end != 1) {\n this._start = 0;\n this._end = 1;\n this.dispatchImmediately(\"startendchanged\");\n }\n } else {\n if (this._start != 0) {\n this.dispatchImmediately(\"startchanged\");\n }\n\n if (this._end != 1) {\n this.dispatchImmediately(\"endchanged\");\n }\n\n if (this._start != 0 || this._end != 1) {\n this.dispatchImmediately(\"startendchanged\");\n }\n }\n\n this._maxZoomed = this._maxDefined;\n this._minZoomed = this._minDefined;\n this._maxAdjusted = this._maxDefined;\n this._minAdjusted = this._minDefined;\n };\n /**\r\n * Processes data items of the related Series.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ValueAxis.prototype.processSeriesDataItems = function () {\n // @todo: add some boolean (maybe autodedect) if we need these calculations or not. this place uses a lot of cpu\n if (this.calculateTotals) {\n var series = this.series.getIndex(0);\n var startIndex = series.startIndex;\n\n if (series.dataItems.length > 0) {\n if (startIndex > 0) {\n startIndex--;\n }\n\n var endIndex = series.endIndex;\n\n if (endIndex < series.dataItems.length) {\n endIndex++;\n }\n\n var _loop_1 = function _loop_1(i) {\n // This has to be `var` in order to avoid garbage collection\n var total = {};\n var sum = {};\n this_1.series.each(function (series) {\n if (!series.excludeFromTotal) {\n var dataItem_1 = series.dataItems.getIndex(i);\n\n if (dataItem_1) {\n $object.each(dataItem_1.values, function (key) {\n var value = dataItem_1.values[key].workingValue; // can not use getWorkingValue here!\n\n if ($type.isNumber(value)) {\n if (!$type.isNumber(total[key])) {\n total[key] = Math.abs(value);\n } else {\n total[key] += Math.abs(value);\n }\n\n if (!$type.isNumber(sum[key])) {\n sum[key] = value;\n } else {\n sum[key] += value;\n }\n }\n });\n }\n }\n });\n this_1.series.each(function (series) {\n if (!series.excludeFromTotal) {\n var dataItem_2 = series.dataItems.getIndex(i);\n\n if (dataItem_2) {\n $object.each(dataItem_2.values, function (key) {\n var value = dataItem_2.values[key].workingValue; // can not use getWorkingValue here!\n\n if ($type.isNumber(value)) {\n dataItem_2.setCalculatedValue(key, total[key], \"total\");\n dataItem_2.setCalculatedValue(key, 100 * value / total[key], \"totalPercent\");\n dataItem_2.setCalculatedValue(key, sum[key], \"sum\");\n }\n });\n }\n }\n });\n };\n\n var this_1 = this; // This has to be `var` in order to avoid garbage collection\n\n for (var i = startIndex; i < endIndex; ++i) {\n _loop_1(i);\n }\n }\n }\n };\n /**\r\n * Validates the whole axis. Causes it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\n\n\n ValueAxis.prototype.validate = function () {\n if (this.axisLength <= 0) {\n return;\n }\n\n _super.prototype.validate.call(this);\n\n this.getMinMax();\n\n if (!$type.isNumber(this._minAdjusted)) {\n this.dataItems.each(function (dataItem) {\n dataItem.value = null;\n });\n }\n\n this.fixAxisBreaks();\n this.calculateZoom();\n this.validateAxisElements();\n this.validateAxisRanges();\n this.validateBreaks();\n this.hideUnusedDataItems();\n this.renderer.invalidateLayout(); // hide too close\n //this.hideTooCloseDataItems();\n };\n /**\r\n * Calculates all positions, related to axis as per current zoom.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ValueAxis.prototype.calculateZoom = function () {\n if ($type.isNumber(this.min) && $type.isNumber(this.max)) {\n var min = this.positionToValue(this.start);\n var max = this.positionToValue(this.end);\n var differece = this.adjustDifference(min, max);\n var minMaxStep = this.adjustMinMax(min, max, differece, this._gridCount, true);\n var stepDecimalPlaces = $utils.decimalPlaces(minMaxStep.step);\n this._stepDecimalPlaces = stepDecimalPlaces;\n min = $math.round(min, stepDecimalPlaces);\n max = $math.round(max, stepDecimalPlaces);\n minMaxStep = this.adjustMinMax(min, max, differece, this._gridCount, true);\n var step = minMaxStep.step;\n\n if (this.syncWithAxis) {\n var calculated = this.getCache(min + \"-\" + max);\n\n if ($type.isNumber(calculated)) {\n step = calculated;\n }\n } else {\n min = minMaxStep.min;\n max = minMaxStep.max;\n }\n\n if (this._minZoomed != min || this._maxZoomed != max || this._step != step || this._dsc) {\n this._dsc = false;\n this._minZoomed = min;\n this._maxZoomed = max;\n this._step = step;\n this.dispatchImmediately(\"selectionextremeschanged\");\n }\n }\n };\n\n ValueAxis.prototype.fixSmallStep = function (step) {\n if (1 + step == 1) {\n step *= 2;\n return this.fixSmallStep(step);\n }\n\n return step;\n };\n /**\r\n * Validates Axis elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n\n ValueAxis.prototype.validateAxisElements = function () {\n var _this = this;\n\n if ($type.isNumber(this.max) && $type.isNumber(this.min)) {\n // first regular items\n var value_1 = this.minZoomed - this._step * 2;\n\n if (!this.logarithmic) {\n value_1 = Math.floor(value_1 / this._step) * this._step;\n } else {\n var differencePower = Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E;\n\n if (differencePower > 1) {\n value_1 = Math.pow(10, Math.log(this.min) * Math.LOG10E);\n } else {\n value_1 = Math.floor(this.minZoomed / this._step) * this._step;\n\n if (value_1 == 0) {\n value_1 = this.minZoomed;\n }\n }\n }\n\n var maxZoomed = this._maxZoomed + this._step;\n this.resetIterators();\n var dataItemsIterator_1 = this._dataItemsIterator;\n\n if (this._step == 0) {\n return;\n }\n\n this._step = this.fixSmallStep(this._step);\n var i = 0;\n var precisionChanged = this._prevStepDecimalPlaces != this._stepDecimalPlaces;\n this._prevStepDecimalPlaces = this._stepDecimalPlaces;\n\n while (value_1 <= maxZoomed) {\n var axisBreak = this.isInBreak(value_1);\n\n if (!axisBreak) {\n var dataItem = dataItemsIterator_1.find(function (x) {\n return x.value === value_1;\n });\n\n if (dataItem.__disabled) {\n dataItem.__disabled = false;\n } //this.processDataItem(dataItem);\n\n\n this.appendDataItem(dataItem);\n dataItem.axisBreak = undefined;\n\n if (dataItem.value != value_1 || precisionChanged) {\n dataItem.value = value_1;\n dataItem.text = this.formatLabel(value_1);\n\n if (dataItem.label && dataItem.label.invalid) {\n dataItem.label.validate();\n }\n\n if (dataItem.value >= this.min && dataItem.value <= this.max) {\n if (dataItem.label) {\n if (this.axisLetter == \"Y\" && dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || this.axisLetter == \"X\" && dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\n this.ghostLabel.text = dataItem.label.currentText;\n this.ghostLabel.validate();\n }\n }\n }\n }\n\n this.validateDataElement(dataItem);\n }\n\n i++;\n var oldValue = value_1;\n\n if (!this.logarithmic) {\n value_1 += this._step;\n } else {\n var differencePower = Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E;\n\n if (differencePower > 1) {\n value_1 = Math.pow(10, Math.log(this.min) * Math.LOG10E + i);\n } else {\n value_1 += this._step;\n }\n }\n\n var stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(this._step)) * Math.LOG10E));\n\n if (stepPower < 1) {\n // exponent is less then 1 too. Count decimals of exponent\n var decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 2;\n decCount = Math.min(13, decCount); // round value to avoid floating point issues\n\n value_1 = $math.round(value_1, decCount); // ceil causes problems: https://codepen.io/team/amcharts/pen/XWMjZwy?editors=1010\n\n if (oldValue == value_1) {\n value_1 = maxZoomed;\n break;\n }\n }\n }\n\n var axisBreaks = this._axisBreaks;\n\n if (axisBreaks) {\n // breaks later\n var renderer_1 = this.renderer;\n $iter.each(axisBreaks.iterator(), function (axisBreak) {\n if (axisBreak.breakSize > 0) {\n // only add grid if gap is bigger then minGridDistance\n if ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer_1.minGridDistance) {\n var breakValue_1 = axisBreak.adjustedMin;\n\n while (breakValue_1 <= axisBreak.adjustedMax) {\n if (breakValue_1 >= axisBreak.adjustedStartValue && breakValue_1 <= axisBreak.adjustedEndValue) {\n var dataItem = dataItemsIterator_1.find(function (x) {\n return x.value === breakValue_1;\n });\n\n if (dataItem.__disabled) {\n dataItem.__disabled = false;\n } //this.processDataItem(dataItem);\n\n\n _this.appendDataItem(dataItem);\n\n dataItem.axisBreak = axisBreak;\n\n if (dataItem.value != breakValue_1) {\n dataItem.value = breakValue_1;\n dataItem.text = _this.formatLabel(breakValue_1);\n\n if (dataItem.label && dataItem.label.invalid) {\n dataItem.label.validate();\n }\n }\n\n _this.validateDataElement(dataItem);\n }\n\n breakValue_1 += axisBreak.adjustedStep;\n }\n }\n }\n });\n }\n }\n };\n /**\r\n * Validates axis data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\n\n\n ValueAxis.prototype.validateDataElement = function (dataItem) {\n _super.prototype.validateDataElement.call(this, dataItem); //dataItem.__disabled = false;\n\n\n dataItem.itemIndex = this._axisItemCount;\n this._axisItemCount++;\n var renderer = this.renderer;\n var value = dataItem.value;\n var endValue = dataItem.endValue;\n var position = this.valueToPosition(value);\n dataItem.position = position;\n var endPosition = position;\n var fillEndPosition = this.valueToPosition(value + this._step);\n\n if ($type.isNumber(endValue)) {\n endPosition = this.valueToPosition(endValue);\n fillEndPosition = endPosition;\n } // this point is needed to calculate distance to satisfy minGridDistance\n\n\n dataItem.point = renderer.positionToPoint(position);\n var tick = dataItem.tick;\n\n if (tick && !tick.disabled) {\n renderer.updateTickElement(tick, position, endPosition);\n }\n\n var grid = dataItem.grid;\n\n if (grid && !grid.disabled) {\n renderer.updateGridElement(grid, position, endPosition);\n }\n\n var label = dataItem.label;\n\n if (label && !label.disabled) {\n renderer.updateLabelElement(label, position, endPosition);\n }\n\n var fill = dataItem.axisFill;\n\n if (fill && !fill.disabled) {\n renderer.updateFillElement(fill, position, fillEndPosition);\n\n if (!dataItem.isRange) {\n this.fillRule(dataItem);\n }\n }\n\n if (dataItem.bullet) {\n renderer.updateBullet(dataItem.bullet, position, endPosition);\n }\n\n var mask = dataItem.mask;\n\n if (mask) {\n renderer.updateFillElement(mask, position, fillEndPosition);\n }\n };\n /**\r\n * Formats the value according to axis' own [[NumberFormatter]].\r\n *\r\n * @param value Source value\r\n * @return Formatted value\r\n */\n\n\n ValueAxis.prototype.formatLabel = function (value) {\n if (this.adjustLabelPrecision && value != 0) {\n return this.numberFormatter.format(value, undefined, this._stepDecimalPlaces);\n } else {\n return this.numberFormatter.format(value);\n }\n };\n\n Object.defineProperty(ValueAxis.prototype, \"basePoint\", {\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point\r\n */\n get: function get() {\n var baseValue = this.baseValue;\n var position = this.valueToPosition(baseValue);\n var basePoint = this.renderer.positionToPoint(position);\n return basePoint;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"baseValue\", {\n /**\r\n * @return base value\r\n */\n get: function get() {\n var baseValue = this._baseValue;\n\n if (this.logarithmic) {\n baseValue = this.min;\n }\n\n if (!this._adapterO) {\n return baseValue;\n } else {\n return this._adapterO.apply(\"baseValue\", baseValue);\n }\n },\n\n /**\r\n * A base value.\r\n *\r\n * This is a threshold value that will divide \"positive\" and \"negative\"\r\n * value ranges.\r\n *\r\n * Other scale-related functionality also depend on base value. E.g. stacks,\r\n * value-dependent coloring, etc.\r\n *\r\n * @param value Base value\r\n */\n set: function set(value) {\n this._baseValue = value;\n this.invalidateLayout();\n this.invalidateSeries();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts a numeric value to relative position on axis\r\n *\r\n * An alias to `valueToPosition()`.\r\n *\r\n * @param value Value\r\n * @return Position\r\n */\n\n ValueAxis.prototype.anyToPosition = function (value) {\n return this.valueToPosition(value);\n };\n /**\r\n * Converts a numeric value to orientation point (x, y, angle) on axis\r\n *\r\n * @param value Value\r\n * @return Orientation point\r\n */\n\n\n ValueAxis.prototype.valueToPoint = function (value) {\n var position = this.valueToPosition(value);\n var point = this.renderer.positionToPoint(position);\n var angle = this.renderer.positionToAngle(position);\n return {\n x: point.x,\n y: point.y,\n angle: angle\n };\n };\n /**\r\n * Converts a numeric value to orientation (x, y, angle) point on axis\r\n *\r\n * @param value Value\r\n * @return Orientation point\r\n */\n\n\n ValueAxis.prototype.anyToPoint = function (value) {\n return this.valueToPoint(value);\n };\n /**\r\n * Converts a numeric value to relative position on axis.\r\n *\r\n * @param value Value\r\n * @return relative position\r\n */\n\n\n ValueAxis.prototype.valueToPosition = function (value) {\n if ($type.isNumber(value)) {\n // todo: think if possible to take previous value and do not go through all previous breaks\n var min_1 = this.min;\n var max_1 = this.max;\n\n if ($type.isNumber(min_1) && $type.isNumber(max_1)) {\n var difference = this._difference;\n var axisBreaks = this._axisBreaks;\n\n if (axisBreaks && axisBreaks.length > 0) {\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\n var startValue = axisBreak.adjustedStartValue;\n var endValue = axisBreak.adjustedEndValue;\n\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\n if (value < startValue) {\n return false;\n }\n\n if ($math.intersect({\n start: startValue,\n end: endValue\n }, {\n start: min_1,\n end: max_1\n })) {\n // todo: check this once and set some flag in axisBreak\n startValue = Math.max(startValue, min_1);\n endValue = Math.min(endValue, max_1);\n var breakSize = axisBreak.breakSize; // value to the right of break end\n\n if (value > endValue) {\n min_1 += (endValue - startValue) * (1 - breakSize); // todo: maybe this can be done differently?\n } // value to the left of break start\n else if (value < startValue) {} // value within break\n else {\n value = startValue + (value - startValue) * breakSize;\n }\n }\n }\n\n return true;\n });\n }\n\n var position = void 0;\n\n if (!this.logarithmic) {\n position = (value - min_1) / difference;\n } else {\n var treatZeroAs = this.treatZeroAs;\n\n if ($type.isNumber(treatZeroAs)) {\n if (value <= treatZeroAs) {\n value = treatZeroAs;\n }\n }\n\n position = (Math.log(value) * Math.LOG10E - Math.log(this.min) * Math.LOG10E) / (Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E);\n } //position = $math.round(position, 10);\n\n\n return position;\n }\n }\n\n return 0;\n };\n /**\r\n * When fontSize of fontFamily changes we need to hard-invalidate all Labels of this container to position them properly.\r\n */\n\n\n ValueAxis.prototype.invalidateLabels = function () {\n _super.prototype.invalidateLabels.call(this);\n\n if (this.dataItems) {\n this.dataItems.each(function (dataItem) {\n dataItem.value = undefined;\n });\n this.invalidate();\n }\n };\n /**\r\n * Converts an relative position to a corresponding value within\r\n * axis' scale.\r\n *\r\n * @param position Position (px)\r\n * @return Value\r\n */\n\n\n ValueAxis.prototype.positionToValue = function (position) {\n var min = this.min;\n var max = this.max;\n\n if ($type.isNumber(min) && $type.isNumber(max)) {\n var difference_1 = max - min; //no need to adjust!\n\n var value_2 = null;\n var axisBreaks = this._axisBreaks;\n\n if (axisBreaks) {\n // in case we have some axis breaks\n if (axisBreaks.length > 0) {\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\n var breakStartPosition = axisBreak.startPosition;\n var breakEndPosition = axisBreak.endPosition;\n var breakStartValue = axisBreak.adjustedStartValue;\n var breakEndValue = axisBreak.adjustedEndValue;\n\n if ($type.isNumber(breakStartValue) && $type.isNumber(breakEndValue)) {\n if (breakStartValue > max) {\n return false;\n }\n\n if ($math.intersect({\n start: breakStartValue,\n end: breakEndValue\n }, {\n start: min,\n end: max\n })) {\n breakStartValue = $math.max(breakStartValue, min);\n breakEndValue = $math.min(breakEndValue, max);\n var breakSize = axisBreak.breakSize;\n difference_1 -= (breakEndValue - breakStartValue) * (1 - breakSize); // position to the right of break end\n\n if (position > breakEndPosition) {\n min += (breakEndValue - breakStartValue) * (1 - breakSize);\n } // position to the left of break start\n else if (position < breakStartPosition) {} // value within break\n else {\n var breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\n value_2 = breakStartValue + breakPosition * (breakEndValue - breakStartValue);\n return false;\n }\n }\n\n return true;\n }\n });\n }\n }\n\n if (!$type.isNumber(value_2)) {\n if (this.logarithmic) {\n value_2 = Math.pow(Math.E, (position * (Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E) + Math.log(this.min) * Math.LOG10E) / Math.LOG10E);\n } else {\n value_2 = position * difference_1 + min;\n }\n }\n\n return value_2;\n } //}\n\n };\n /**\r\n * Converts an X coordinate to a relative value in axis' scale.\r\n *\r\n * @param x X (px)\r\n * @return Value\r\n */\n\n\n ValueAxis.prototype.xToValue = function (x) {\n return this.positionToValue(this.pointToPosition({\n x: x,\n y: 0\n }));\n };\n /**\r\n * Converts an Y coordinate to a relative value in axis' scale.\r\n *\r\n * @param y Y (px)\r\n * @return Value\r\n */\n\n\n ValueAxis.prototype.yToValue = function (y) {\n return this.positionToValue(this.pointToPosition({\n x: 0,\n y: y\n }));\n };\n /**\r\n * Converts pixel coordinates to a relative position. (0-1)\r\n *\r\n * @param point Coorinates (px)\r\n * @return Position (0-1)\r\n */\n\n\n ValueAxis.prototype.pointToPosition = function (point) {\n if (this.renderer instanceof AxisRendererY) {\n return 1 - this.renderer.pointToPosition(point);\n } else {\n return this.renderer.pointToPosition(point);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n ValueAxis.prototype.animateMinMax = function (min, max) {\n return this.animate([{\n property: \"_minAdjusted\",\n from: this._minAdjusted,\n to: min\n }, {\n property: \"_maxAdjusted\",\n from: this._maxAdjusted,\n to: max\n }], this.rangeChangeDuration, this.rangeChangeEasing);\n };\n /**\r\n * Calculates smallest and biggest value for the axis scale.\r\n * @ignore\r\n * @todo Description (review)\r\n */\n\n\n ValueAxis.prototype.getMinMax = function () {\n var _this = this;\n\n this.updateGridCount();\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY; // only if min and max are not set from outside, we go through min and max influencers\n\n if (!$type.isNumber(this._minDefined) || !$type.isNumber(this._maxDefined)) {\n this.series.each(function (series) {\n if (!series.ignoreMinMax) {\n // check min\n var seriesMin = series.min(_this);\n\n if ($type.isNumber(seriesMin) && seriesMin < min) {\n min = seriesMin;\n } // check max\n\n\n var seriesMax = series.max(_this);\n\n if ($type.isNumber(seriesMax) && seriesMax > max) {\n max = seriesMax;\n }\n }\n });\n\n if (this.includeRangesInMinMax) {\n this.axisRanges.each(function (range) {\n if (!range.ignoreMinMax) {\n var minValue = $math.min(range.value, range.endValue);\n var maxValue = $math.max(range.value, range.endValue);\n\n if (minValue < min || !$type.isNumber(min)) {\n min = minValue;\n }\n\n if (maxValue > max || !$type.isNumber(max)) {\n max = maxValue;\n }\n }\n });\n }\n }\n\n if (this.logarithmic) {\n var treatZeroAs = this.treatZeroAs;\n\n if ($type.isNumber(treatZeroAs)) {\n if (min <= 0) {\n min = treatZeroAs;\n }\n }\n\n if (min <= 0) {\n this.raiseCriticalError(new Error(\"Logarithmic value axis can not have values <= 0.\"), true);\n }\n }\n\n if (min == 0 && max == 0) {\n max = 0.9;\n min = -0.9;\n } // if defined from outside\n\n\n if ($type.isNumber(this._minDefined)) {\n min = this._minDefined;\n }\n\n if ($type.isNumber(this._maxDefined)) {\n max = this._maxDefined;\n }\n\n if (this._adapterO) {\n min = this._adapterO.apply(\"min\", min);\n }\n\n if (this._adapterO) {\n max = this._adapterO.apply(\"max\", max);\n }\n\n if (!$type.isNumber(min) || !$type.isNumber(max)) {\n return;\n }\n\n this._minReal = min;\n this._maxReal = max;\n\n if (min == Number.POSITIVE_INFINITY) {\n min = undefined;\n }\n\n if (max == Number.NEGATIVE_INFINITY) {\n max = undefined;\n }\n\n var dif = this.adjustDifference(min, max); // previously it was max-min, but not worked well\n\n min = this.fixMin(min);\n max = this.fixMax(max); // this happens if starLocation and endLocation are 0.5 and DateAxis has only one date\n\n if (max - min <= 1 / Math.pow(10, 15)) {\n if (max - min != 0) {\n this._deltaMinMax = (max - min) / 2;\n } else {\n // the number by which we need to raise 10 to get difference\n var exponent = Math.log(Math.abs(max)) * Math.LOG10E; // here we find a number which is power of 10 and has the same count of numbers as difference has\n\n var power = Math.pow(10, Math.floor(exponent)); // reduce this number by 10 times\n\n power = power / 10;\n this._deltaMinMax = power;\n }\n\n min -= this._deltaMinMax;\n max += this._deltaMinMax;\n }\n\n min -= (max - min) * this.extraMin;\n max += (max - min) * this.extraMax;\n var strict = this.strictMinMax;\n\n if ($type.isNumber(this._maxDefined)) {\n strict = true;\n }\n\n var minMaxStep = this.adjustMinMax(min, max, dif, this._gridCount, strict);\n min = minMaxStep.min;\n max = minMaxStep.max;\n dif = max - min; //new\n // do it for the second time (importat!)\n\n minMaxStep = this.adjustMinMax(min, max, max - min, this._gridCount, true);\n min = minMaxStep.min;\n max = minMaxStep.max; // return min max if strict\n\n if (this.strictMinMax) {\n if ($type.isNumber(this._minDefined)) {\n min = this._minDefined;\n } else {\n min = this._minReal;\n }\n\n if ($type.isNumber(this._maxDefined)) {\n max = this._maxDefined;\n } else {\n max = this._maxReal;\n }\n\n if (max - min <= 0.00000001) {\n min -= this._deltaMinMax;\n max += this._deltaMinMax;\n }\n\n min -= (max - min) * this.extraMin;\n max += (max - min) * this.extraMax;\n }\n\n if (this._adapterO) {\n min = this._adapterO.apply(\"min\", min);\n }\n\n if (this._adapterO) {\n max = this._adapterO.apply(\"max\", max);\n }\n\n this._step = minMaxStep.step;\n\n if (!$type.isNumber(min) && !$type.isNumber(max)) {\n this.start = 0;\n this.end = 1;\n this.renderer.labels.each(function (label) {\n label.dataItem.text = \"\";\n });\n } // checking isNumber is good when all series are hidden\n\n\n if ((this._minAdjusted != min || this._maxAdjusted != max) && $type.isNumber(min) && $type.isNumber(max)) {\n var animation = this._minMaxAnimation;\n\n if (this._extremesChanged && $type.isNumber(this._minAdjusted) && $type.isNumber(this._maxAdjusted) && this.inited) {\n if (animation && !animation.isFinished() && this._finalMax == max && this._finalMin == min) {\n return;\n } else {\n this._finalMin = min;\n this._finalMax = max;\n animation = this.animateMinMax(min, max);\n\n if (animation && !animation.isFinished()) {\n animation.events.on(\"animationprogress\", this.validateDataItems, this);\n animation.events.on(\"animationended\", function () {\n //this.validateDataItems();\n _this.series.each(function (series) {\n series.validate();\n });\n\n _this.validateDataItems();\n\n _this.handleSelectionExtremesChange();\n });\n this._minMaxAnimation = animation;\n } else {\n this.series.each(function (series) {\n series.invalidate();\n });\n }\n\n this.validateDataItems();\n this.dispatchImmediately(\"extremeschanged\");\n this.handleSelectionExtremesChange();\n }\n } else {\n if (animation && !animation.isFinished() && this._finalMax == max && this._finalMin == min) {\n return;\n } else {\n this._minAdjusted = min;\n this._maxAdjusted = max;\n this._finalMin = min;\n this._finalMax = max;\n this.invalidateDataItems();\n this.dispatchImmediately(\"extremeschanged\");\n }\n }\n }\n\n this._extremesChanged = false;\n this._difference = this.adjustDifference(min, max);\n };\n /**\r\n * Adjusts the minimum value.\r\n *\r\n * This is a placeholder method for extending classes to override.\r\n *\r\n * For numeric values this does nothing, however for more complex types, like\r\n * dates, it may be necessary to adjust.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\n\n\n ValueAxis.prototype.fixMin = function (value) {\n return value;\n };\n /**\r\n * Adjusts the maximum value.\r\n *\r\n * This is a placeholder method for extending classes to override.\r\n *\r\n * For numeric values this does nothing, however for more complex types, like\r\n * dates, it may be necessary to adjust.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\n\n\n ValueAxis.prototype.fixMax = function (value) {\n return value;\n };\n /**\r\n * Adjusts actual min and max scale values so that the axis starts and ends\r\n * at \"nice\" values, unless `strictMinMax` is set.\r\n *\r\n * The `difference` can be something else than `max - min`, because of the\r\n * axis breaks.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param min [description]\r\n * @param max [description]\r\n * @param difference [description]\r\n * @param gridCount [description]\r\n * @param strictMode [description]\r\n * @return [description]\r\n */\n\n\n ValueAxis.prototype.adjustMinMax = function (min, max, difference, gridCount, strictMode) {\n // will fail if 0\n if (gridCount <= 1) {\n gridCount = 1;\n }\n\n gridCount = Math.round(gridCount);\n var initialMin = min;\n var initialMax = max; // in case min and max is the same, use max\n\n if (difference === 0) {\n difference = Math.abs(max);\n } // the number by which we need to raise 10 to get difference\n\n\n var exponent = Math.log(Math.abs(difference)) * Math.LOG10E; // here we find a number which is power of 10 and has the same count of numbers as difference has\n\n var power = Math.pow(10, Math.floor(exponent)); // reduce this number by 10 times\n\n power = power / 10;\n var extra = power;\n\n if (strictMode) {\n extra = 0;\n }\n\n if (!this.logarithmic) {\n // round down min\n if (strictMode) {\n min = Math.floor(min / power) * power; // round up max\n\n max = Math.ceil(max / power) * power;\n } else {\n min = Math.ceil(min / power) * power - extra; // round up max\n\n max = Math.floor(max / power) * power + extra;\n } // don't let min go below 0 if real min is >= 0\n\n\n if (min < 0 && initialMin >= 0) {\n min = 0;\n } // don't let max go above 0 if real max is <= 0\n\n\n if (max > 0 && initialMax <= 0) {\n max = 0;\n }\n } else {\n if (min <= 0) {\n //throw Error(\"Logarithmic value axis can not have values <= 0.\");\n min = this.baseValue;\n } // @todo: think of a better way or to restrict zooming when no series are selected\n\n\n if (min == Infinity) {\n min = 1;\n }\n\n if (max == -Infinity) {\n max = 10;\n }\n\n if (this.strictMinMax) {\n if (this._minDefined > 0) {\n min = this._minDefined;\n } else {\n min = min;\n }\n\n if (this._maxDefined > 0) {\n max = max;\n }\n } else {\n min = Math.pow(10, Math.floor(Math.log(Math.abs(min)) * Math.LOG10E));\n max = Math.pow(10, Math.ceil(Math.log(Math.abs(max)) * Math.LOG10E));\n }\n } // repeat diff, exponent and power again with rounded values\n //difference = this.adjustDifference(min, max);\n\n /*\r\n if(min > initialMin){\r\n min = initialMin;\r\n }\r\n if(max < initialMax){\r\n max = initialMax;\r\n }\r\n */\n\n\n exponent = Math.log(Math.abs(difference)) * Math.LOG10E;\n power = Math.pow(10, Math.floor(exponent));\n power = power / 10; // approximate difference between two grid lines\n\n var step = Math.ceil(difference / gridCount / power) * power;\n var stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(step)) * Math.LOG10E)); // TODO: in v3 I had fixStepE here, ommiting it for a while, need to think about other solution\n // the step should divide by 2, 5, and 10.\n\n var stepDivisor = Math.ceil(step / stepPower); // number 0 - 10\n\n if (stepDivisor > 5) {\n stepDivisor = 10;\n } else if (stepDivisor <= 5 && stepDivisor > 2) {\n stepDivisor = 5;\n } // now get real step\n\n\n step = Math.ceil(step / (stepPower * stepDivisor)) * stepPower * stepDivisor;\n\n if (this.maxPrecision < Number.MAX_VALUE && step != $math.ceil(step, this.maxPrecision)) {\n step = $math.ceil(step, this.maxPrecision);\n }\n\n var decCount = 0; // in case numbers are smaller than 1\n\n if (stepPower < 1) {\n // exponent is less then 1 too. Count decimals of exponent\n decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 1; // round step\n\n step = $math.round(step, decCount);\n }\n\n if (!this.logarithmic) {\n // final min and max\n var minCount = Math.floor(min / step);\n min = $math.round(step * minCount, decCount);\n var maxCount = void 0;\n\n if (!strictMode) {\n maxCount = Math.ceil(max / step);\n } else {\n maxCount = Math.floor(max / step);\n }\n\n if (maxCount == minCount) {\n maxCount++;\n }\n\n max = $math.round(step * maxCount, decCount);\n\n if (max < initialMax) {\n max = max + step;\n }\n\n if (min > initialMin) {\n min = min - step;\n }\n }\n\n return {\n min: min,\n max: max,\n step: step\n };\n };\n\n Object.defineProperty(ValueAxis.prototype, \"min\", {\n /**\r\n * @return Min value\r\n */\n get: function get() {\n var min = this._minAdjusted;\n\n if (!$type.isNumber(min)) {\n min = this._minDefined;\n }\n\n return min;\n },\n\n /**\r\n * A minimum value for the axis scale.\r\n *\r\n * This value might be auto-adjusted by the Axis in order to accomodate the\r\n * grid nicely, i.e. plot area is divided by grid in nice equal cells.\r\n *\r\n * The above might be overridden by `strictMinMax` which will force exact\r\n * user-defined min and max values to be used for scale.\r\n *\r\n * @param value Min value\r\n */\n set: function set(value) {\n if (this._minDefined != value) {\n this._minDefined = value;\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"minDefined\", {\n /**\r\n * Min value as defined by user's code, not auto-calculated.\r\n *\r\n * @readonly\r\n * @return Min value\r\n */\n get: function get() {\n return this._minDefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"maxDefined\", {\n /**\r\n * Max value as defined by user's code, not auto-calculated.\r\n *\r\n * @readonly\r\n * @return Man value\r\n */\n get: function get() {\n return this._maxDefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"extraMin\", {\n /**\r\n * @return {number}\r\n */\n get: function get() {\n return this.getPropertyValue(\"extraMin\");\n },\n\n /**\r\n * Allows relatively adjusting minimum value of the axis' scale.\r\n *\r\n * The value is relative to the actual range of values currently displayed\r\n * on the axis.\r\n *\r\n * E.g.: 0.5 will mean half of the current range. If we have axis displaying\r\n * from 100 to 200, we will now have axis displaying from 50 to 200 because\r\n * we asked to expand minimum value by 50% (0.5).\r\n *\r\n * NOTE: this setting is not compatible with `strictMinMax`.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"extraMin\", value)) {\n this.invalidateDataItems();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"extraMax\", {\n /**\r\n * @return Min multiplier\r\n */\n get: function get() {\n return this.getPropertyValue(\"extraMax\");\n },\n\n /**\r\n * Allows relatively adjusting maximum value of the axis' scale.\r\n *\r\n * The value is relative to the actual range of values currently displayed\r\n * on the axis.\r\n *\r\n * E.g.: 0.5 will mean half of the current range. If we have axis displaying\r\n * from 100 to 200, we will now have axis displaying from 100 to 250 because\r\n * we asked to expand maximum value by 50% (0.5).\r\n *\r\n * NOTE: this setting is not compatible with `strictMinMax`.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"extraMax\", value)) {\n this.invalidateDataItems();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"step\", {\n /**\r\n * Current calculated delta in values between two adjacent grid lines (step).\r\n *\r\n * This is a read-only value and cannot be used to set actual step.\r\n *\r\n * @readonly\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/#Setting_the_density_of_the_the_grid_labels} For more information about modifying density of labels\r\n * @return [description]\r\n */\n get: function get() {\n return this._step;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"max\", {\n /**\r\n * @return Max value\r\n */\n get: function get() {\n var max = this._maxAdjusted;\n\n if (!$type.isNumber(max)) {\n max = this._maxDefined;\n }\n\n return max;\n },\n\n /**\r\n * A maximum value for the axis scale.\r\n *\r\n * This value might be auto-adjusted by the Axis in order to accomodate the\r\n * grid nicely, i.e. plot area is divided by grid in nice equal cells.\r\n *\r\n * The above might be overridden by `strictMinMax` which will force exact\r\n * user-defined min and max values to be used for scale.\r\n *\r\n * @param value Max value\r\n */\n set: function set(value) {\n if (this._maxDefined != value) {\n this._maxDefined = value;\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"adjustLabelPrecision\", {\n /**\r\n * @return Adjust precision\r\n */\n get: function get() {\n return this.getPropertyValue(\"adjustLabelPrecision\");\n },\n\n /**\r\n * By default the axis will adjust precision of all numbers to match number\r\n * of decimals in all its labels, e.g.: `1.0`, `1.5`, `2.0`.\r\n *\r\n * To disable set `adjustLabelPrecision` to `false`, to use whatever other\r\n * precision or number format settings are set.\r\n *\r\n * IMPORTANT: This setting will be ignored if your number format uses\r\n * modifiers, e.g. `\"#a\"`.\r\n *\r\n * @default true\r\n * @since 4.9.14\r\n * @param value Adjust precision\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"adjustLabelPrecision\", value)) {\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Used for the Series to register itself as the user of this Axis.\r\n *\r\n * This will also decorate both the Series and Axis with event handlers, used\r\n * to redraw on Axis position/zoom change.\r\n *\r\n * A disposer for those events is returned, so that they can be disposed\r\n * together with Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param series Series\r\n * @return Disposer for events\r\n */\n\n ValueAxis.prototype.registerSeries = function (series) {\n return new MultiDisposer([_super.prototype.registerSeries.call(this, series), series.events.on(\"extremeschanged\", this.handleExtremesChange, this, false), series.events.on(\"selectionextremeschanged\", this.handleSelectionExtremesChange, this, false), this.events.on(\"extremeschanged\", series.invalidate, series, false)]);\n };\n /**\r\n * Perform tasks after Axis zoom.\r\n */\n\n\n ValueAxis.prototype.handleSelectionExtremesChange = function () {\n var _this = this;\n\n var selectionMin;\n var selectionMax;\n var allHidden = true;\n $iter.each(this.series.iterator(), function (series) {\n if (!series.ignoreMinMax && !series.isHidden && !series.outOfRange) {\n if (series.visible && !series.isHiding) {\n allHidden = false;\n }\n\n var seriesSelectionMin = series.selectionMin(_this);\n var seriesSelectionMax = series.selectionMax(_this);\n\n if ($type.isNumber(seriesSelectionMin)) {\n if (!$type.isNumber(selectionMin) || seriesSelectionMin < selectionMin) {\n selectionMin = seriesSelectionMin;\n }\n } // check max\n\n\n if ($type.isNumber(seriesSelectionMax)) {\n if (!$type.isNumber(selectionMax) || seriesSelectionMax > selectionMax) {\n selectionMax = seriesSelectionMax;\n }\n }\n }\n });\n\n if (this.includeRangesInMinMax) {\n this.axisRanges.each(function (range) {\n if (!range.ignoreMinMax) {\n var minValue = $math.min(range.value, range.endValue);\n var maxValue = $math.max(range.value, range.endValue);\n\n if (minValue < selectionMin) {\n selectionMin = minValue;\n }\n\n if (maxValue > selectionMax) {\n selectionMax = maxValue;\n }\n }\n });\n } // this is not good, as if date axis is initially zoomed, selection of y axis is reset to 0, 1 at the end of this method\n //$iter.each(this.series.iterator(), (series) => {\n //\tif (!series.appeared) {\n //\t\tallHidden = true;\n //\t}\n //})\n\n\n if ($type.isNumber(this._minDefined)) {\n if (this.strictMinMax) {\n selectionMin = this._minDefined;\n } else {\n selectionMin = this.min;\n }\n } else if (this.strictMinMax) {\n selectionMin = this._minReal;\n }\n\n if ($type.isNumber(this._maxDefined)) {\n if (this.strictMinMax) {\n selectionMax = this._maxDefined;\n } else {\n selectionMax = this.max;\n }\n } else if (this.strictMinMax) {\n selectionMax = this._maxReal;\n }\n\n if (selectionMin == selectionMax) {\n selectionMin -= this._deltaMinMax;\n selectionMax += this._deltaMinMax;\n var minMaxStep2 = this.adjustMinMax(selectionMin, selectionMax, 0, this._gridCount, this.strictMinMax);\n selectionMin = minMaxStep2.min;\n selectionMax = minMaxStep2.max;\n }\n\n var dif = this.adjustDifference(selectionMin, selectionMax);\n var minMaxStep = this.adjustMinMax(selectionMin, selectionMax, dif, this._gridCount);\n selectionMin = minMaxStep.min;\n selectionMax = minMaxStep.max;\n selectionMin -= (selectionMax - selectionMin) * this.extraMin;\n selectionMax += (selectionMax - selectionMin) * this.extraMax;\n selectionMin = $math.fitToRange(selectionMin, this.min, this.max);\n selectionMax = $math.fitToRange(selectionMax, this.min, this.max); // do it for the second time !important\n\n dif = this.adjustDifference(selectionMin, selectionMax);\n minMaxStep = this.adjustMinMax(selectionMin, selectionMax, dif, this._gridCount, true);\n selectionMin = minMaxStep.min;\n selectionMax = minMaxStep.max;\n\n if (this.strictMinMax) {\n selectionMin = $math.max(selectionMin, this._minDefined);\n selectionMax = $math.min(selectionMax, this._maxDefined);\n }\n\n var step = minMaxStep.step;\n\n if (this.syncWithAxis) {\n minMaxStep = this.syncAxes(selectionMin, selectionMax, step);\n selectionMin = minMaxStep.min;\n selectionMax = minMaxStep.max;\n this.invalidate();\n }\n\n step = minMaxStep.step; // needed because of grouping\n\n this._difference = this.adjustDifference(this.min, this.max);\n var start = this.valueToPosition(selectionMin);\n var end = this.valueToPosition(selectionMax); // in case all series are hidden or hiding, full zoomout\n\n if (allHidden && !this.syncWithAxis) {\n start = 0;\n end = 1;\n }\n\n var declination = 0;\n\n if (this.syncWithAxis) {\n declination = 5;\n this.setCache(selectionMin + \"-\" + selectionMax, step);\n } else {\n if (this._step != step || this._minZoomed != selectionMin || this._maxZoomed != selectionMax) {\n this._dsc = true;\n }\n\n this._step = step;\n this._minZoomed = selectionMin;\n this._maxZoomed = selectionMax;\n }\n\n if (!this.keepSelection) {\n this.zoom({\n start: start,\n end: end\n }, false, false, declination);\n }\n };\n\n Object.defineProperty(ValueAxis.prototype, \"strictMinMax\", {\n /**\r\n * @return Use exact values?\r\n */\n get: function get() {\n return this.getPropertyValue(\"strictMinMax\");\n },\n\n /**\r\n * Indicates whether to blindly use exact `min` and `max` values set by user\r\n * when generating Axis scale.\r\n *\r\n * If not set, the Axis might slightly adjust those values to accomodate a\r\n * better looking grid.\r\n *\r\n * NOTE: if `min` and `max` are not set, setting `strictMinMax` to `true`\r\n * will result in fixing the scale of the axis to actual lowest and highest\r\n * values in the series within currently selected scope.\r\n *\r\n * @default false\r\n * @param value Use exact values?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"strictMinMax\", value)) {\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"logarithmic\", {\n /**\r\n * @return Logarithmic scale?\r\n */\n get: function get() {\n return this.getPropertyValue(\"logarithmic\");\n },\n\n /**\r\n * Indicates if this axis should use a logarithmic scale.\r\n *\r\n * Please note that logarithmic axis can **only** accommodate values bigger\r\n * than zero.\r\n *\r\n * Having zero or negative values will result in error and failure of the\r\n * whole chart.\r\n *\r\n * @param value Logarithmic scale?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"logarithmic\", value)) {\n this.invalidate();\n this.series.each(function (series) {\n series.invalidateDataItems();\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"keepSelection\", {\n /**\r\n * @return Preseve zoom after data update?\r\n */\n get: function get() {\n return this.getPropertyValue(\"keepSelection\");\n },\n\n /**\r\n * Indicates if a current selection (zoom) should be kept across data updates.\r\n *\r\n * If your axis is zoomed while chart's data is updated, the axis will try\r\n * to retain the same start and end values.\r\n *\r\n * You can also use this to initially pre-zoom axis:\r\n *\r\n * ```TypeScript\r\n * axis.keepSelection = true;\r\n * axis.start = 0.5;\r\n * axis.end = 0.7;\r\n * ```\r\n * ```JavaScript\r\n * axis.keepSelection = true;\r\n * axis.start = 0.5;\r\n * axis.end = 0.7;\r\n * ```\r\n * ```JSON\r\n * {\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"keepSelection\": true,\r\n * \"start\": 0.5,\r\n * \"end\": 0.7\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will start the chart zoomed from the middle of the actual scope\r\n * to 70%.\r\n *\r\n * @since 4.1.1\r\n * @default false\r\n * @param value Preseve zoom after data update?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"keepSelection\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"includeRangesInMinMax\", {\n /**\r\n * @return Include ranges?\r\n */\n get: function get() {\n return this.getPropertyValue(\"includeRangesInMinMax\");\n },\n\n /**\r\n * If set to `true`, values of axis ranges will be included when calculating\r\n * range of values / scale of the [[ValueAxis]].\r\n *\r\n * @default false\r\n * @since 4.4.9\r\n * @param value Include ranges?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"includeRangesInMinMax\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"maxPrecision\", {\n /**\r\n * @return max precision\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxPrecision\");\n },\n\n /**\r\n * Maximum number of decimals to allow when placing grid lines and labels\r\n * on axis.\r\n *\r\n * Set it to `0` (zero) to force integer-only axis labels.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"maxPrecision\", value)) {\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"extraTooltipPrecision\", {\n /**\r\n * @return Extra decimals\r\n */\n get: function get() {\n return this.getPropertyValue(\"extraTooltipPrecision\");\n },\n\n /**\r\n * This setting allows using bigger precision for numbers displayed in axis\r\n * tooltip.\r\n *\r\n * Please note that this setting indicates additional decimal places to\r\n * automatically-calculated axis number precision.\r\n *\r\n * So if your axis displays numbers like 0.1, 0.2, etc. (one decimal place),\r\n * and you set `extraTooltipPrecision = 1`, tooltips will display numbers\r\n * like 0.12, 0.25, etc. (two decimal places).\r\n *\r\n * @default 0\r\n * @since 4.8.3\r\n * @param value Extra decimals\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"extraTooltipPrecision\", value)) {\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Invalidates axis data items when series extremes change\r\n */\n\n ValueAxis.prototype.handleExtremesChange = function () {\n var _this = this;\n\n this._extremesChanged = true;\n this.getMinMax();\n\n if (this.ghostLabel) {\n var mw_1 = 0;\n this.dataItems.each(function (dataItem) {\n if (dataItem.label && dataItem.label.pixelWidth > mw_1) {\n _this.ghostLabel.text = dataItem.label.currentText;\n }\n });\n }\n };\n /**\r\n * Returns relative position on axis for series' data item's value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey ?\r\n * @return X coordinate (px)\r\n */\n\n\n ValueAxis.prototype.getX = function (dataItem, key, location, stackKey, range) {\n return this.renderer.positionToPoint(this.getPositionX(dataItem, key, location, stackKey, range)).x;\n };\n /**\r\n * Returns the X coordinate for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey ?\r\n * @return Relative position\r\n */\n\n\n ValueAxis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\n var value = dataItem.getWorkingValue(key);\n\n if (!$type.hasValue(stackKey)) {\n stackKey = \"valueX\";\n }\n\n var stack = dataItem.getValue(stackKey, \"stack\");\n\n if (!$type.isNumber(value)) {\n value = this.baseValue;\n\n if (this.logarithmic) {\n if (stack > 0) {\n value = 0;\n }\n }\n }\n\n var position = this.valueToPosition(value + stack);\n\n if (range) {\n position = $math.fitToRange(position, range.start, range.end);\n }\n\n return position;\n };\n /**\r\n * Returns the Y coordinate for series' data item's value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @return Y coordinate (px)\r\n */\n\n\n ValueAxis.prototype.getY = function (dataItem, key, location, stackKey, range) {\n return this.renderer.positionToPoint(this.getPositionY(dataItem, key, location, stackKey, range)).y;\n };\n /**\r\n * Returns relative position on axis for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @return Relative position\r\n */\n\n\n ValueAxis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\n var value = dataItem.getWorkingValue(key);\n\n if (!$type.hasValue(stackKey)) {\n stackKey = \"valueY\";\n }\n\n var stack = dataItem.getValue(stackKey, \"stack\");\n\n if (!$type.isNumber(value)) {\n value = this.baseValue;\n\n if (this.logarithmic) {\n if (stack > 0) {\n value = 0;\n }\n }\n }\n\n var position = this.valueToPosition(value + stack);\n\n if (range) {\n position = $math.fitToRange(position, range.start, range.end);\n }\n\n return position;\n };\n /**\r\n * Returns an angle for series data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @param range Range to fit in\r\n * @return Angle\r\n */\n\n\n ValueAxis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\n var value = dataItem.getWorkingValue(key);\n var stack = dataItem.getValue(stackKey, \"stack\");\n\n if (!$type.isNumber(value)) {\n value = this.baseValue;\n }\n\n var position = this.valueToPosition(value + stack);\n\n if (range) {\n position = $math.fitToRange(position, range.start, range.end);\n }\n\n return this.positionToAngle(position);\n };\n /**\r\n * [getAnyRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param start [description]\r\n * @param end [description]\r\n * @param location [description]\r\n * @return [description]\r\n */\n\n\n ValueAxis.prototype.getAnyRangePath = function (start, end, location) {\n var startPosition = this.valueToPosition(start);\n var endPosition = this.valueToPosition(end);\n return this.getPositionRangePath(startPosition, endPosition); // Base class (Axis) gets range shape from AxisRenderer\n };\n /**\r\n * Returns text to show in a axis tooltip, based on specific position within\r\n * axis.\r\n *\r\n * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n * chart, or explicitly for this Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (px)\r\n * @return Label (numeric value)\r\n */\n\n\n ValueAxis.prototype.getTooltipText = function (position) {\n var value = $math.round(this.positionToValue(position), this._stepDecimalPlaces + this.extraTooltipPrecision);\n var valueStr = this.tooltip.numberFormatter.format(value);\n\n if (!this._adapterO) {\n return valueStr;\n } else {\n return this._adapterO.apply(\"getTooltipText\", valueStr);\n }\n };\n /**\r\n * Zooms axis to specific values.\r\n *\r\n * @param startValue Start value\r\n * @param endValue End value\r\n * @param skipRangeEvent Do not invoke events\r\n * @param instantly Do not play zoom animations\r\n */\n\n\n ValueAxis.prototype.zoomToValues = function (startValue, endValue, skipRangeEvent, instantly) {\n var start = (startValue - this.min) / (this.max - this.min);\n var end = (endValue - this.min) / (this.max - this.min);\n this.zoom({\n start: start,\n end: end\n }, skipRangeEvent, instantly);\n };\n\n Object.defineProperty(ValueAxis.prototype, \"minZoomed\", {\n /**\r\n * A smallest value in axis scale within current zoom.\r\n *\r\n * @return Min zoom value\r\n */\n get: function get() {\n if (!this.syncWithAxis) {\n return $math.max(this.min, this._minZoomed);\n } else {\n return this._minZoomed;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"maxZoomed\", {\n /**\r\n * A biggest value in axis scale within current zoom.\r\n * @return [description]\r\n */\n get: function get() {\n if (!this.syncWithAxis) {\n return $math.min(this.max, this._maxZoomed);\n } else {\n return this._maxZoomed;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates positioning of Axis breaks after something changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n ValueAxis.prototype.fixAxisBreaks = function () {\n var _this = this;\n\n _super.prototype.fixAxisBreaks.call(this);\n\n var axisBreaks = this._axisBreaks;\n\n if (axisBreaks && axisBreaks.length > 0) {\n // process breaks\n axisBreaks.each(function (axisBreak) {\n var startValue = axisBreak.adjustedStartValue;\n var endValue = axisBreak.adjustedEndValue; // break difference\n\n var axisBreakDif = endValue - startValue;\n\n var axisBreakGridCount = Math.ceil(axisBreakDif * axisBreak.breakSize) * _this._gridCount / (_this.max - _this.min); // calculate min, max and step for axis break\n\n\n var breakMinMaxStep = _this.adjustMinMax(startValue, endValue, axisBreakDif, axisBreakGridCount, true);\n\n axisBreak.adjustedStep = breakMinMaxStep.step;\n axisBreak.adjustedMin = breakMinMaxStep.min;\n axisBreak.adjustedMax = breakMinMaxStep.max;\n });\n }\n\n this._difference = this.adjustDifference(this.min, this.max);\n };\n /**\r\n * Returns value based on position.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\n\n\n ValueAxis.prototype.getPositionLabel = function (position) {\n var value = this.positionToValue(position);\n return this.numberFormatter.format(value);\n };\n /**\r\n * Shows Axis tooltip at specific value\r\n *\r\n * @param value Value\r\n */\n\n\n ValueAxis.prototype.showTooltipAt = function (value) {\n this.showTooltipAtPosition(this.valueToPosition(value));\n };\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\n\n\n ValueAxis.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.min = source.min;\n this.max = source.max;\n this.calculateTotals = source.calculateTotals;\n this._baseValue = source.baseValue;\n };\n\n Object.defineProperty(ValueAxis.prototype, \"syncWithAxis\", {\n /**\r\n * @return Target axis\r\n */\n get: function get() {\n return this.getPropertyValue(\"syncWithAxis\");\n },\n\n /**\r\n * Enables syncing of grid with another axis.\r\n *\r\n * To enable, set to a reference of the other `ValueAxis`. This axis will try\r\n * to maintain its scale in such way that its grid matches target axis grid.\r\n *\r\n * IMPORTANT #1: At this stage it's an experimental feature. Use it at your\r\n * own risk, as it may not work in 100% of the scenarios.\r\n *\r\n * IMPORTANT #2: `syncWithAxis` is not compatible with `strictMinMax` and\r\n * `sequencedInterpolation` settings.\r\n *\r\n * IMPORTANT #3: `syncWithAxis` is not compatible with scrollbars. Make sure\r\n * you do not add a scrollbar in the same direction as synced axes. For\r\n * example, if you have vertical synced axes, do not add `scrollbarY` on\r\n * your chart. It will create anomalies when used.\r\n *\r\n * IMPORTANT #4: `syncWithAxis` is not compatible with `XYCursor` if it has\r\n * its `behavior` set to either `zoomY` or `zoomXY`.\r\n *\r\n * @since 4.8.1\r\n * @param axis Target axis\r\n */\n set: function set(axis) {\n var _this = this;\n\n if (this.setPropertyValue(\"syncWithAxis\", axis, true)) {\n if (axis) {\n this._disposers.push(axis.events.on(\"extremeschanged\", this.handleSelectionExtremesChange, this, false));\n\n this._disposers.push(axis.events.on(\"selectionextremeschanged\", this.handleSelectionExtremesChange, this, false));\n\n this._disposers.push(axis.events.on(\"startendchanged\", this.handleSelectionExtremesChange, this, false));\n\n this.events.on(\"shown\", this.handleSelectionExtremesChange, this, false);\n this.events.on(\"maxsizechanged\", function () {\n _this.clearCache();\n\n _this._disposers.push(registry.events.once(\"exitframe\", function () {\n _this.handleSelectionExtremesChange();\n }));\n }, this, false);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueAxis.prototype, \"treatZeroAs\", {\n /**\r\n * @return Zero replacement value\r\n */\n get: function get() {\n return this.getPropertyValue(\"treatZeroAs\");\n },\n\n /**\r\n * If set, zero values will be treated as this value.\r\n *\r\n * It is useful if you need to use data with zero-values on a logarithmic\r\n * axis scale.\r\n *\r\n * @since 4.9.34\r\n * @param value Zero replacement value\r\n */\n set: function set(value) {\n this.setPropertyValue(\"treatZeroAs\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Syncs with a target axis.\r\n *\r\n * @param min Min\r\n * @param max Max\r\n * @param step Step\r\n */\n\n ValueAxis.prototype.syncAxes = function (min, max, step) {\n var axis = this.syncWithAxis;\n\n if (axis) {\n if (!$type.isNumber(min)) {\n min = this.min;\n }\n\n if (!$type.isNumber(max)) {\n max = this.max;\n }\n\n if (!$type.isNumber(step)) {\n step = this._step;\n }\n\n var count = Math.round((axis.maxZoomed - axis.minZoomed) / axis.step);\n var currentCount = Math.round((max - min) / step);\n\n if ($type.isNumber(count) && $type.isNumber(currentCount)) {\n var synced = false;\n var c = 0;\n var diff = (max - min) * 0.01;\n var omin = min;\n var omax = max;\n var ostep = step;\n\n while (synced != true) {\n synced = this.checkSync(omin, omax, ostep, count);\n c++;\n\n if (c > 1000) {\n synced = true;\n }\n\n if (!synced) {\n //omin = min - diff * c;\n if (c / 3 == Math.round(c / 3)) {\n omin = min - diff * c;\n\n if (min >= 0 && omin < 0) {\n omin = 0;\n }\n } else {\n omax = max + diff * c;\n\n if (omax <= 0 && omax > 0) {\n omax = 0;\n }\n }\n\n var minMaxStep = this.adjustMinMax(omin, omax, omax - omin, this._gridCount, true);\n omin = minMaxStep.min;\n omax = minMaxStep.max;\n ostep = minMaxStep.step;\n } else {\n min = omin;\n max = omax;\n step = ostep;\n }\n }\n }\n }\n\n return {\n min: min,\n max: max,\n step: step\n };\n };\n /**\r\n * Returns `true` if axis needs to be resunced with some other axis.\r\n */\n\n\n ValueAxis.prototype.checkSync = function (min, max, step, count) {\n var currentCount = (max - min) / step;\n\n for (var i = 1; i < count; i++) {\n if ($math.round(currentCount / i, 1) == count || currentCount * i == count) {\n return true;\n }\n }\n\n return false;\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n ValueAxis.prototype.processConfig = function (config) {\n if (config) {\n // Set up axes\n if ($type.hasValue(config.syncWithAxis) && $type.isString(config.syncWithAxis)) {\n if (this.map.hasKey(config.syncWithAxis)) {\n config.syncWithAxis = this.map.getKey(config.syncWithAxis);\n } else {\n this.processingErrors.push(\"[ValueAxis] No axis with id \\\"\" + config.syncWithAxis + \"\\\" found for `syncWithAxis`\");\n delete config.xAxis;\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return ValueAxis;\n}(Axis);\n\nexport { ValueAxis };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ValueAxis\"] = ValueAxis;\nregistry.registeredClasses[\"ValueAxisDataItem\"] = ValueAxisDataItem;","/**\r\n * Module, defining Axis Renderer for vertical axes.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { AxisRenderer } from \"./AxisRenderer\";\nimport { AxisBullet } from \"./AxisBullet\";\nimport { WavedLine } from \"../../core/elements/WavedLine\";\nimport { WavedRectangle } from \"../../core/elements/WavedRectangle\";\nimport { registry } from \"../../core/Registry\";\nimport { percent, Percent } from \"../../core/utils/Percent\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $path from \"../../core/rendering/Path\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $type from \"../../core/utils/Type\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A renderer for horizontal axis.\r\n *\r\n * @see {@link IAxisRendererEvents} for a list of available events\r\n * @see {@link IAxisRendererAdapters} for a list of available Adapters\r\n */\n\nvar AxisRendererX =\n/** @class */\nfunction (_super) {\n __extends(AxisRendererX, _super);\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\n\n\n function AxisRendererX() {\n var _this = _super.call(this) || this;\n\n _this.className = \"AxisRendererX\";\n _this.minGridDistance = 120;\n _this.opposite = false;\n _this.rotation = 0;\n _this.width = percent(100);\n _this.labels.template.horizontalCenter = \"middle\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererX.prototype.setAxis = function (axis) {\n _super.prototype.setAxis.call(this, axis);\n\n axis.layout = \"vertical\";\n };\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererX.prototype.updateGridContainer = function () {\n var axis = this.axis;\n\n if (axis) {\n var gridContainer = this.gridContainer;\n gridContainer.x = axis.pixelX;\n gridContainer.width = axis.axisLength;\n }\n };\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererX.prototype.processRenderer = function () {\n _super.prototype.processRenderer.call(this); // can not do this in init, as axis is set later\n\n\n var axis = this.axis;\n\n if (axis) {\n if (!(axis.width instanceof Percent)) {\n axis.width = percent(100);\n } // @todo Is thi sneeded?\n\n\n $utils.used(this.line);\n var title = axis.title;\n title.rotation = 0;\n title.align = \"center\";\n\n if (this.opposite) {\n this.line.toFront();\n title.toBack();\n } else {\n title.toFront();\n this.toBack();\n this.line.toBack();\n }\n }\n };\n /**\r\n * Updates some of the Axis tooltip's visual properties, related to\r\n * rendering of the Axis.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererX.prototype.updateTooltip = function () {\n var axis = this.axis;\n\n if (axis) {\n var bigNum = 1000;\n var bbx = this.line.pixelX;\n var bby = this.line.pixelY;\n var bbw = this.axisLength;\n var bbh = bigNum; // top\n\n if (this.opposite) {\n if (!this.inside) {\n bby = -bigNum;\n bbh = bigNum;\n }\n } // bottom\n else {\n if (this.inside) {\n bby = -bigNum;\n bbh = bigNum;\n }\n }\n\n this.axis.updateTooltip(\"vertical\", {\n x: bbx,\n y: bby,\n width: bbw,\n height: bbh\n });\n }\n };\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\n\n\n AxisRendererX.prototype.updateLabelElement = function (label, position, endPosition, location) {\n if (!$type.hasValue(location)) {\n location = label.location;\n }\n\n position = position + (endPosition - position) * location;\n var point = this.positionToPoint(position);\n label.isMeasured = !label.inside;\n var deltaY = 0;\n var verticalCenter;\n var maxHeight = this.gridContainer.maxHeight;\n\n if (this.opposite) {\n if (label.inside) {\n verticalCenter = \"top\";\n\n if (label.valign == \"bottom\") {\n deltaY = maxHeight;\n verticalCenter = \"bottom\";\n }\n\n if (label.valign == \"middle\") {\n deltaY = maxHeight / 2;\n verticalCenter = \"middle\";\n }\n } else {\n verticalCenter = \"bottom\";\n }\n\n point.y = deltaY;\n } else {\n if (label.inside) {\n verticalCenter = \"bottom\";\n\n if (label.valign == \"top\") {\n deltaY = -maxHeight;\n verticalCenter = \"top\";\n }\n\n if (label.valign == \"middle\") {\n deltaY = -maxHeight / 2;\n verticalCenter = \"middle\";\n }\n } else {\n verticalCenter = \"top\";\n }\n\n point.y += deltaY;\n }\n\n if (label.rotation == 0) {\n // Apply fuzzy logic to verticalCenter only if labels are not rotated\n label.verticalCenter = verticalCenter;\n }\n\n this.positionItem(label, point);\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\n };\n\n Object.defineProperty(AxisRendererX.prototype, \"axisLength\", {\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\n get: function get() {\n var axis = this.axis;\n return axis.measuredWidth - axis.pixelPaddingRight - axis.pixelPaddingLeft || 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\n\n AxisRendererX.prototype.positionToPoint = function (position, position2) {\n return {\n x: this.positionToCoordinate(position),\n y: 0\n };\n };\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\n\n\n AxisRendererX.prototype.pointToPosition = function (point) {\n return this.coordinateToPosition(point.x, point.y);\n };\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\n\n\n AxisRendererX.prototype.getPositionRangePath = function (startPosition, endPosition) {\n var x1 = $math.fitToRange(this.positionToCoordinate(startPosition), 0, this.axisLength);\n var x2 = $math.fitToRange(this.positionToCoordinate(endPosition), 0, this.axisLength);\n var w = Math.abs(x2 - x1);\n var h = this.getHeight();\n var x = Math.min(x1, x2);\n var y = 0;\n return $path.rectToPath({\n x: x,\n y: y,\n width: w,\n height: h\n }, true);\n };\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\n\n\n AxisRendererX.prototype.updateBreakElement = function (axisBreak) {\n _super.prototype.updateBreakElement.call(this, axisBreak);\n\n var startLine = axisBreak.startLine;\n var endLine = axisBreak.endLine;\n var fillShape = axisBreak.fillShape;\n var startPoint = axisBreak.startPoint;\n var endPoint = axisBreak.endPoint;\n var y1 = axisBreak.pixelMarginLeft;\n var y2 = this.getHeight() - axisBreak.pixelMarginTop - axisBreak.pixelMarginBottom;\n startPoint.x = $math.fitToRange(startPoint.x, -1, this.axisLength + 1);\n endPoint.x = $math.fitToRange(endPoint.x, -1, this.axisLength + 1);\n\n if (startPoint.x == endPoint.x && (startPoint.x < 0 || startPoint.x > this.axisLength)) {\n axisBreak.fillShape.__disabled = true;\n } else {\n axisBreak.fillShape.__disabled = false;\n }\n\n startLine.y = y1;\n startLine.width = 0;\n startLine.height = y2;\n endLine.y = y1;\n endLine.width = 0;\n endLine.height = y2;\n fillShape.height = y2;\n fillShape.width = Math.abs(endPoint.x - startPoint.x);\n fillShape.y = y1;\n fillShape.x = startPoint.x;\n };\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererX.prototype.updateGridElement = function (grid, position, endPosition) {\n position = position + (endPosition - position) * grid.location;\n var point = this.positionToPoint(position); //point.x = $utils.spritePointToSprite({x:point.x, y:0}, this, this.gridContainer).x;\n\n grid.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: 0,\n y: this.getHeight()\n });\n this.positionItem(grid, point);\n this.toggleVisibility(grid, position, 0, 1);\n };\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererX.prototype.updateTickElement = function (tick, position, endPosition) {\n position = position + (endPosition - position) * tick.location;\n var point = this.positionToPoint(position);\n var tickLength = tick.length;\n point.y = $utils.spritePointToSprite({\n x: 0,\n y: this.line.pixelY\n }, this.line.parent, this.gridContainer).y;\n\n if (this.opposite) {\n tickLength *= tick.inside ? 1 : -1;\n } else {\n tickLength *= tick.inside ? -1 : 1;\n }\n\n tick.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: 0,\n y: tickLength\n });\n this.positionItem(tick, point);\n this.toggleVisibility(tick, position, 0, 1);\n };\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererX.prototype.updateAxisLine = function () {\n this.line.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: this.axisLength,\n y: 0\n });\n };\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n AxisRendererX.prototype.updateBaseGridElement = function () {\n _super.prototype.updateBaseGridElement.call(this);\n\n var axis = this.axis;\n var h = this.getHeight();\n var w = this.axisLength;\n var baseGrid = this.baseGrid;\n var x = axis.basePoint.x;\n\n if (x < -0.2 || x > w + 0.2) {\n baseGrid.hide(0);\n } else {\n var y = $utils.spritePointToSprite({\n x: 0,\n y: 0\n }, this.gridContainer, baseGrid.parent).y;\n baseGrid.path = $path.moveTo({\n x: 0,\n y: 0\n }) + $path.lineTo({\n x: 0,\n y: h\n });\n baseGrid.moveTo({\n x: x,\n y: y\n });\n baseGrid.show(0);\n }\n };\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\n\n\n AxisRendererX.prototype.createBreakSprites = function (axisBreak) {\n axisBreak.startLine = new WavedLine();\n axisBreak.endLine = new WavedLine();\n var wavedRectangle = new WavedRectangle();\n wavedRectangle.setWavedSides(false, true, false, true);\n axisBreak.fillShape = wavedRectangle;\n };\n /**\r\n * @ignore\r\n */\n\n\n AxisRendererX.prototype.toAxisPosition = function (value) {\n var inversedPosition = value;\n var axis = this.axis;\n\n if (axis) {\n var relativePositionSprite = axis.relativePositionSprite;\n var x = axis.pixelX;\n\n if (relativePositionSprite) {\n x = $utils.spritePointToSprite({\n x: this.pixelX,\n y: 0\n }, this.parent, relativePositionSprite).x;\n } else {\n relativePositionSprite = axis.parent;\n }\n\n if (relativePositionSprite) {\n var relativeX = x / relativePositionSprite.innerWidth;\n var relativeWidth = axis.axisLength / relativePositionSprite.innerWidth;\n return (inversedPosition - relativeX) / relativeWidth;\n }\n }\n\n return value;\n };\n /**\r\n * Updates and positions axis bullets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\n\n\n AxisRendererX.prototype.updateBullet = function (bullet, position, endPosition) {\n var location = 0.5;\n\n if (bullet instanceof AxisBullet) {\n location = bullet.location;\n }\n\n position = position + (endPosition - position) * location;\n var point = this.positionToPoint(position);\n point.y = $utils.spritePointToSprite({\n x: 0,\n y: this.line.pixelY\n }, this.line.parent, this.gridContainer).y;\n this.positionItem(bullet, point);\n this.toggleVisibility(bullet, position, 0, 1);\n };\n\n return AxisRendererX;\n}(AxisRenderer);\n\nexport { AxisRendererX };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AxisRendererX\"] = AxisRendererX;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Put labels inside plot area.\r\n * Disable first and last labels.\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXS,\n state: function state(target, stateId) {\n if (target instanceof AxisRendererX) {\n var state = target.states.create(stateId);\n state.properties.inside = true;\n state.properties.maxLabelPosition = 0.9;\n state.properties.minLabelPosition = 0.1;\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Disable labels altogather on very small charts\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXXS,\n state: function state(target, stateId) {\n if (target instanceof AxisRendererX) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * HeatLegend module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\nimport { registry } from \"../../core/Registry\";\nimport { toColor, Color } from \"../../core/utils/Color\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { percent } from \"../../core/utils/Percent\";\nimport { ValueAxis } from \"../../charts/axes/ValueAxis\";\nimport { AxisRendererX } from \"../../charts/axes/AxisRendererX\";\nimport { AxisRendererY } from \"../../charts/axes/AxisRendererY\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $colors from \"../../core/utils/Colors\";\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Sankey Diagram.\r\n *\r\n * @see {@link IHeatLegendEvents} for a list of available events\r\n * @see {@link IHeatLegendAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar HeatLegend =\n/** @class */\nfunction (_super) {\n __extends(HeatLegend, _super);\n /**\r\n * Constructor\r\n */\n\n\n function HeatLegend() {\n var _this = _super.call(this) || this;\n\n _this.className = \"HeatLegend\";\n _this.markerContainer = _this.createChild(Container);\n _this.markerContainer.shouldClone = false;\n _this.markerCount = 1; // Create a template container and list for the a marker\n\n var marker = new RoundedRectangle();\n marker.minHeight = 20;\n marker.minWidth = 20;\n marker.interactionsEnabled = false;\n marker.fillOpacity = 1;\n marker.cornerRadius(0, 0, 0, 0);\n _this.markerContainer.minHeight = 20;\n _this.markerContainer.minWidth = 20;\n _this.orientation = \"horizontal\";\n _this.markers = new ListTemplate(marker);\n\n _this._disposers.push(new ListDisposer(_this.markers));\n\n _this._disposers.push(_this.markers.template);\n\n _this.applyTheme();\n\n return _this;\n }\n\n HeatLegend.prototype.getMinFromRules = function (property) {\n var series = this.series;\n\n if (series) {\n var minValue_1;\n $iter.eachContinue(series.heatRules.iterator(), function (heatRule) {\n if (heatRule.property == property) {\n minValue_1 = heatRule.min;\n return false;\n }\n\n return true;\n });\n return minValue_1;\n }\n };\n\n HeatLegend.prototype.getMaxFromRules = function (property) {\n var series = this.series;\n\n if (series) {\n var maxValue_1;\n $iter.each(series.heatRules.iterator(), function (heatRule) {\n if (heatRule.property == property) {\n maxValue_1 = heatRule.max;\n return false;\n }\n\n return true;\n });\n return maxValue_1;\n }\n };\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n HeatLegend.prototype.validate = function () {\n _super.prototype.validate.call(this);\n\n this.valueAxis.renderer.inversed = this.reverseOrder;\n var series = this.series;\n var minColor = this.minColor;\n var maxColor = this.maxColor;\n\n if (!$type.hasValue(minColor)) {\n minColor = toColor(this.getMinFromRules(\"fill\"));\n }\n\n if (!$type.hasValue(maxColor)) {\n maxColor = toColor(this.getMaxFromRules(\"fill\"));\n }\n\n if (series) {\n var seriesFill = series.fill;\n\n if (!$type.hasValue(minColor) && seriesFill instanceof Color) {\n minColor = seriesFill;\n }\n\n if (!$type.hasValue(maxColor) && seriesFill instanceof Color) {\n maxColor = seriesFill;\n }\n }\n\n if (!$type.hasValue(maxColor)) {\n maxColor = toColor(this.getMaxFromRules(\"fill\"));\n }\n\n var minOpacity = $type.toNumber(this.getMinFromRules(\"fillOpacity\"));\n\n if (!$type.isNumber(minOpacity)) {\n minOpacity = 1;\n }\n\n var maxOpacity = $type.toNumber(this.getMaxFromRules(\"fillOpacity\"));\n\n if (!$type.isNumber(maxOpacity)) {\n maxOpacity = 1;\n }\n\n var minStrokeOpacity = $type.toNumber(this.getMinFromRules(\"strokeOpacity\"));\n\n if (!$type.isNumber(minStrokeOpacity)) {\n minStrokeOpacity = 1;\n }\n\n var maxStrokeOpacity = $type.toNumber(this.getMaxFromRules(\"strokeOpacity\"));\n\n if (!$type.isNumber(maxStrokeOpacity)) {\n maxStrokeOpacity = 1;\n }\n\n var minStroke = toColor(this.getMinFromRules(\"stroke\"));\n var maxStroke = toColor(this.getMaxFromRules(\"stroke\")); //if (series) {\n\n for (var i = 0; i < this.markerCount; i++) {\n var marker = this.markers.getIndex(i);\n\n if (!marker) {\n marker = this.markers.create();\n marker.parent = this.markerContainer;\n marker.height = percent(100);\n marker.width = percent(100);\n }\n\n if (this.markerCount == 1) {\n var gradient = new LinearGradient();\n\n if (this.reverseOrder) {\n gradient.addColor(maxColor, maxOpacity);\n gradient.addColor(minColor, minOpacity);\n } else {\n gradient.addColor(minColor, minOpacity);\n gradient.addColor(maxColor, maxOpacity);\n }\n\n if (this.orientation == \"vertical\") {\n gradient.rotation = -90;\n }\n\n marker.fill = gradient;\n\n if ($type.hasValue(minStroke) && $type.hasValue(maxStroke)) {\n var strokeGradient = new LinearGradient();\n\n if (this.reverseOrder) {\n strokeGradient.addColor(maxStroke, maxStrokeOpacity);\n strokeGradient.addColor(minStroke, minStrokeOpacity);\n } else {\n strokeGradient.addColor(minStroke, minStrokeOpacity);\n strokeGradient.addColor(maxStroke, maxStrokeOpacity);\n }\n\n if (this.orientation == \"vertical\") {\n strokeGradient.rotation = -90;\n }\n\n marker.stroke = strokeGradient;\n }\n } else {\n var c = i;\n\n if (this.reverseOrder) {\n c = this.markerCount - i - 1;\n }\n\n var color = new Color($colors.interpolate(minColor.rgb, maxColor.rgb, c / this.markerCount));\n marker.fill = color;\n var opacity = minOpacity + (maxOpacity - minOpacity) * c / this.markerCount;\n marker.fillOpacity = opacity;\n\n if ($type.hasValue(minStroke) && $type.hasValue(maxStroke)) {\n var color_1 = new Color($colors.interpolate(minStroke.rgb, maxStroke.rgb, c / this.markerCount));\n marker.stroke = color_1;\n var opacity_1 = minStrokeOpacity + (maxStrokeOpacity - minStrokeOpacity) * c / this.markerCount;\n marker.strokeOpacity = opacity_1;\n }\n }\n }\n\n var renderer = this.valueAxis.renderer;\n\n if (this.markerCount > 1) {\n if (this.orientation == \"horizontal\") {\n renderer.minGridDistance = this.measuredWidth / this.markerCount;\n } else {\n renderer.minGridDistance = this.measuredHeight / this.markerCount;\n }\n }\n\n this.valueAxis.invalidate();\n\n for (var i = this.markerCount, len = this.markers.length; i < len; i++) {\n this.markers.getIndex(i).parent = undefined;\n }\n };\n\n Object.defineProperty(HeatLegend.prototype, \"minColor\", {\n /**\r\n * Returns minColor value\r\n * @return {Color}\r\n */\n get: function get() {\n return this.getPropertyValue(\"minColor\");\n },\n\n /**\r\n * Min color of a heat legend. If a series is set for the legend, minColor is taken from series.\r\n *\r\n * @param {Color}\r\n */\n set: function set(value) {\n if (!(value instanceof Color)) {\n value = toColor(value);\n }\n\n this.setColorProperty(\"minColor\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"maxColor\", {\n /**\r\n * Returns maxColor value\r\n * @return {Color}\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxColor\");\n },\n\n /**\r\n * Max color of a heat legend. If a series is set for the legend, maxColor is taken from series.\r\n *\r\n * @param {Color}\r\n */\n set: function set(value) {\n if (!(value instanceof Color)) {\n value = toColor(value);\n }\n\n this.setColorProperty(\"maxColor\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"markerCount\", {\n /**\r\n * Returns number of color squares (markers).\r\n * @return {number}\r\n */\n get: function get() {\n return this.getPropertyValue(\"markerCount\");\n },\n\n /**\r\n * Number of color squares (markers) in the heat legend. If only 1 marker is used, it will be filled with gradient.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n this.setPropertyValue(\"markerCount\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"minValue\", {\n /**\r\n * Returns minimum value of heat legend.\r\n * @return {number}\r\n */\n get: function get() {\n return this.getPropertyValue(\"minValue\");\n },\n\n /**\r\n * Minimum value of heat legend's value axis. If a series is set for the legend, min is taken from series.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minValue\", value);\n this.valueAxis.min = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"maxValue\", {\n /**\r\n * Returns maximum value of heat legend.\r\n * @return {number}\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxValue\");\n },\n\n /**\r\n * Maximum value of heat legend's value axis. If a series is set for the legend, max is taken from series.\r\n *\r\n * @param {number}\r\n */\n set: function set(value) {\n this.setPropertyValue(\"maxValue\", value);\n this.valueAxis.max = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"orientation\", {\n /**\r\n * Returns orientation value.\r\n *\r\n * @return {\"horizontal\" | \"vertical\"}\r\n */\n get: function get() {\n return this.getPropertyValue(\"orientation\");\n },\n\n /**\r\n * Heat legend orientation. Note, if you change orientation of a heat legend, you must set value axis renderer properties after that, as with orientation renderer changes.\r\n *\r\n * @param {\"horizontal\" | \"vertical\"}\r\n */\n set: function set(value) {\n this.setPropertyValue(\"orientation\", value, true);\n var markerContainer = this.markerContainer;\n var valueAxis = this.valueAxis; // HORIZONTAL\n\n if (value == \"horizontal\") {\n if (!$type.hasValue(this.width)) {\n this.width = 200;\n }\n\n this.height = undefined;\n valueAxis.width = percent(100);\n valueAxis.height = undefined;\n valueAxis.tooltip.pointerOrientation = \"vertical\";\n this.layout = \"vertical\";\n markerContainer.width = percent(100);\n markerContainer.height = undefined;\n\n if (!(valueAxis.renderer instanceof AxisRendererX)) {\n valueAxis.renderer = new AxisRendererX();\n }\n } // VERTICAL\n else {\n if (!$type.hasValue(this.height)) {\n this.height = 200;\n }\n\n this.width = undefined;\n this.layout = \"horizontal\";\n markerContainer.width = undefined;\n markerContainer.height = percent(100);\n valueAxis.height = percent(100);\n valueAxis.width = undefined;\n valueAxis.tooltip.pointerOrientation = \"horizontal\";\n\n if (!(valueAxis.renderer instanceof AxisRendererY)) {\n valueAxis.renderer = new AxisRendererY();\n }\n\n valueAxis.renderer.inside = true;\n valueAxis.renderer.labels.template.inside = true;\n this.markerContainer.reverseOrder = true;\n }\n\n var renderer = valueAxis.renderer;\n renderer.grid.template.disabled = true;\n renderer.axisFills.template.disabled = true;\n renderer.baseGrid.disabled = true;\n renderer.labels.template.padding(2, 3, 2, 3);\n renderer.minHeight = undefined;\n renderer.minWidth = undefined;\n this.markerContainer.layout = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"valueAxis\", {\n /**\r\n * Returns valueAxis value.\r\n * @return {ValueAxis}\r\n */\n get: function get() {\n if (!this._valueAxis) {\n this.valueAxis = this.createChild(ValueAxis);\n this.valueAxis.shouldClone = false;\n }\n\n return this._valueAxis;\n },\n\n /**\r\n * Sets a value axis of heat legend. Value axis for heat legend is created automatically.\r\n * @param {ValueAxis}\r\n */\n set: function set(valueAxis) {\n this._valueAxis = valueAxis;\n valueAxis.parent = this;\n valueAxis.strictMinMax = true;\n this.orientation = this.orientation;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeatLegend.prototype, \"series\", {\n /**\r\n * Returns series value.\r\n * @return {Series}\r\n */\n get: function get() {\n return this._series;\n },\n\n /**\r\n * You can set series for heat legend. It will take min, max, minColor and maxColor values from this series.\r\n * @param series\r\n */\n set: function set(series) {\n var _this = this;\n\n this._series = series;\n var dataField = \"value\";\n\n try {\n var dataFieldDefined = series.heatRules.getIndex(0).dataField;\n\n if (dataFieldDefined) {\n dataField = dataFieldDefined;\n }\n } catch (err) {}\n\n this.updateMinMax(series.dataItem.values[dataField].low, series.dataItem.values[dataField].high);\n series.dataItem.events.on(\"calculatedvaluechanged\", function (event) {\n _this.updateMinMax(series.dataItem.values[dataField].low, series.dataItem.values[dataField].high);\n }, undefined, false);\n series.heatRules.events.on(\"inserted\", this.invalidate, this, false);\n series.heatRules.events.on(\"removed\", this.invalidate, this, false);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates min/max of value axis.\r\n * @ignore\r\n */\n\n HeatLegend.prototype.updateMinMax = function (min, max) {\n var valueAxis = this.valueAxis;\n\n if (!$type.isNumber(this.minValue)) {\n valueAxis.min = min;\n valueAxis.invalidate();\n }\n\n if (!$type.isNumber(this.maxValue)) {\n valueAxis.max = max;\n valueAxis.invalidate();\n }\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n HeatLegend.prototype.processConfig = function (config) {\n if (config) {\n // Set up series\n if ($type.hasValue(config.series) && $type.isString(config.series)) {\n if ($type.isString(config.series)) {\n if (this.map.hasKey(config.series)) {\n config.series = this.map.getKey(config.series);\n } else {\n var seriesId_1 = config.series;\n var disposer_1 = this.map.events.on(\"insertKey\", function (ev) {\n if (ev.key == seriesId_1) {\n this.series = ev.newValue;\n disposer_1.dispose();\n }\n }, this);\n\n this._disposers.push(disposer_1);\n\n delete config.series;\n }\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return HeatLegend;\n}(Container);\n\nexport { HeatLegend };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"HeatLegend\"] = HeatLegend;","/**\r\n * Grip module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Button } from \"./Button\";\nimport { Sprite } from \"../Sprite\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { registry } from \"../Registry\";\nimport { percent } from \"../utils/Percent\";\nimport * as $path from \"../rendering/Path\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a grip element that can be used for scrolling or other things.\r\n *\r\n * @see {@link IGripEvents} for a list of available events\r\n * @see {@link IGripAdapters} for a list of available Adapters\r\n * @since 4.4.0\r\n */\n\nvar Grip =\n/** @class */\nfunction (_super) {\n __extends(Grip, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Grip() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Grip\";\n var cs = new InterfaceColorSet(); // Set defaults\n\n _this.layout = \"absolute\";\n\n _this.padding(10, 10, 10, 10);\n\n _this.margin(3, 3, 3, 3);\n\n _this.background.fillOpacity = 0.3;\n\n _this.background.cornerRadius(10, 10, 10, 10); // Create an icon\n\n\n var icon = new Sprite();\n icon.element = _this.paper.add(\"path\");\n var path = $path.moveTo({\n x: -6,\n y: 0\n });\n path += $path.lineTo({\n x: 6,\n y: 0\n });\n path += $path.moveTo({\n x: -8,\n y: -6\n });\n path += $path.lineTo({\n x: 0,\n y: -12\n });\n path += $path.lineTo({\n x: 8,\n y: -6\n });\n path += $path.moveTo({\n x: -8,\n y: 6\n });\n path += $path.lineTo({\n x: 0,\n y: 12\n });\n path += $path.lineTo({\n x: 8,\n y: 6\n });\n icon.path = path;\n icon.strokeWidth = 2;\n icon.fillOpacity = 0;\n icon.pixelPerfect = true;\n icon.padding(0, 4, 0, 4);\n icon.stroke = cs.getFor(\"text\");\n icon.strokeOpacity = 0.7;\n icon.align = \"center\";\n icon.valign = \"middle\";\n _this.icon = icon;\n\n _this.label.dispose();\n\n _this.label = undefined; // Set default position\n\n _this.position = \"right\"; // Set up autohide\n\n _this.autoHideDelay = 3000;\n\n _this.events.on(\"shown\", function (ev) {\n if (_this._autoHideTimeout) {\n _this._autoHideTimeout.dispose();\n }\n\n if (_this.autoHideDelay) {\n _this._autoHideTimeout = _this.setTimeout(function () {\n _this.hide();\n }, _this.autoHideDelay);\n }\n });\n\n _this.events.on(\"down\", function (ev) {\n if (_this._autoHideTimeout) {\n _this._autoHideTimeout.dispose();\n }\n });\n\n _this.events.on(\"out\", function (ev) {\n if (_this.autoHideDelay) {\n _this._autoHideTimeout = _this.setTimeout(function () {\n _this.hide();\n }, _this.autoHideDelay);\n }\n }); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Grip.prototype, \"position\", {\n /**\r\n * @return Position\r\n */\n get: function get() {\n return this.getPropertyValue(\"position\");\n },\n\n /**\r\n * Sets position of the grip.\r\n *\r\n * Available options: \"left\", \"right\" (default), \"top\", \"bottom\".\r\n *\r\n * @param value Position\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"position\", value)) {\n switch (value) {\n case \"left\":\n this.align = \"left\";\n this.valign = \"middle\";\n this.horizontalCenter = \"left\";\n this.verticalCenter = \"middle\";\n this.icon.rotation = 0;\n this.width = undefined;\n this.height = percent(30);\n break;\n\n case \"right\":\n this.align = \"right\";\n this.valign = \"middle\";\n this.horizontalCenter = \"right\";\n this.verticalCenter = \"middle\";\n this.icon.rotation = 0;\n this.width = undefined;\n this.height = percent(30);\n break;\n\n case \"top\":\n this.align = \"center\";\n this.valign = \"top\";\n this.horizontalCenter = \"middle\";\n this.verticalCenter = \"top\";\n this.icon.rotation = 90;\n this.width = percent(30);\n this.height = undefined;\n break;\n\n case \"bottom\":\n this.align = \"center\";\n this.valign = \"bottom\";\n this.horizontalCenter = \"middle\";\n this.verticalCenter = \"bottom\";\n this.icon.rotation = 90;\n this.width = percent(30);\n this.height = undefined;\n break;\n\n default:\n this.align = \"center\";\n this.valign = \"middle\";\n this.horizontalCenter = \"middle\";\n this.verticalCenter = \"middle\";\n this.icon.rotation = 90;\n this.width = percent(30);\n this.height = undefined;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Grip.prototype, \"autoHideDelay\", {\n /**\r\n * @return Delay\r\n */\n get: function get() {\n return this.getPropertyValue(\"autoHideDelay\");\n },\n\n /**\r\n * Number of milliseconds to show grip until it is hidden automatically.\r\n *\r\n * @default 3000\r\n * @param value Delay\r\n */\n set: function set(value) {\n this.setPropertyValue(\"autoHideDelay\", value);\n },\n enumerable: true,\n configurable: true\n });\n return Grip;\n}(Button);\n\nexport { Grip };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Grip\"] = Grip;","/**\r\n * [[Chart]] class provides base functionality for all chart types to inherit.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { registry } from \"../core/Registry\";\nimport { Component } from \"../core/Component\";\nimport { MutableValueDisposer, Disposer } from \"../core/utils/Disposer\";\nimport { ListTemplate, ListDisposer } from \"../core/utils/List\";\nimport { Container } from \"../core/Container\";\nimport { Label } from \"../core/elements/Label\";\nimport { Grip } from \"../core/elements/Grip\";\nimport { DataItem } from \"../core/DataItem\";\nimport { percent } from \"../core/utils/Percent\";\nimport * as $iter from \"../core/utils/Iterator\";\nimport * as $type from \"../core/utils/Type\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../core/utils/Responsive\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[Chart]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar ChartDataItem =\n/** @class */\nfunction (_super) {\n __extends(ChartDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ChartDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"ChartDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return ChartDataItem;\n}(DataItem);\n\nexport { ChartDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all Charts.\r\n *\r\n * @see {@link IChartEvents} for a list of available Events\r\n * @see {@link IChartAdapters} for a list of available Adapters\r\n */\n\nvar Chart =\n/** @class */\nfunction (_super) {\n __extends(Chart, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Chart() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A reference to chart's [[Legend]].\r\n * @ignore\r\n */\n\n\n _this._legend = new MutableValueDisposer();\n\n if (_this.constructor === Chart) {\n throw new Error(\"'Chart' cannot be instantiated directly. Please use a specific chart type.\");\n }\n\n _this.className = \"Chart\"; // Create a list of titles\n\n var template = new Label();\n _this.titles = new ListTemplate(template);\n\n _this._disposers.push(new ListDisposer(_this.titles));\n\n _this._disposers.push(template); // Chart component is also a container. it holds _chartAndLegendCont and titles\n\n\n _this.width = percent(100);\n _this.height = percent(100);\n _this.layout = \"vertical\"; // Chart and legend\n\n var chartAndLegendContainer = _this.createChild(Container);\n\n chartAndLegendContainer.shouldClone = false;\n chartAndLegendContainer.layout = \"vertical\";\n chartAndLegendContainer.width = percent(100);\n chartAndLegendContainer.height = percent(100);\n _this.chartAndLegendContainer = chartAndLegendContainer; // Chart container holds all the elements of a chart, extept titles and legend\n\n var chartContainer = chartAndLegendContainer.createChild(Container);\n chartContainer.shouldClone = false;\n chartContainer.width = percent(100);\n chartContainer.height = percent(100);\n _this.chartContainer = chartContainer;\n _this.showOnInit = true;\n\n _this._disposers.push(_this._legend); // Add title list events to apply certain formatting options and to make\n // the chart reference them as accessible screen reader labels\n\n\n _this.titles.events.on(\"inserted\", function (label) {\n _this.processTitle(label);\n\n _this.updateReaderTitleReferences();\n }, _this, false);\n\n _this.titles.events.on(\"removed\", function (label) {\n _this.updateReaderTitleReferences();\n }, _this, false); // Accessibility\n // It seems we can't set focusable on the whole chart because it seems to\n // mess up the whole focus event system - getting a focus on an inside\n // object also trigger focus on parent\n //this.focusable = true;\n\n\n _this.role = \"region\";\n _this.defaultState.transitionDuration = 1; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n Chart.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Chart\");\n }\n };\n /**\r\n * Initiates drawing of the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Chart.prototype.draw = function () {\n this.fixLayout();\n\n _super.prototype.draw.call(this);\n };\n /**\r\n * Updates legend's hierarchy based on the position.\r\n */\n\n\n Chart.prototype.fixLayout = function () {\n var legend = this.legend;\n\n if (legend) {\n var chartAndLegendContainer = this.chartAndLegendContainer;\n var chartContainer = this.chartContainer;\n chartContainer.x = undefined;\n chartContainer.y = undefined;\n\n if (legend.position != \"absolute\") {\n legend.x = undefined;\n legend.y = undefined;\n }\n\n switch (legend.position) {\n case \"left\":\n chartAndLegendContainer.layout = \"horizontal\";\n legend.toBack();\n break;\n\n case \"right\":\n chartAndLegendContainer.layout = \"horizontal\";\n legend.toFront();\n break;\n\n case \"top\":\n chartAndLegendContainer.layout = \"vertical\";\n legend.toBack();\n break;\n\n case \"bottom\":\n chartAndLegendContainer.layout = \"vertical\";\n legend.toFront();\n break;\n\n case \"absolute\":\n legend.isMeasured = false;\n break;\n }\n }\n };\n /**\r\n * Setups the legend to use the chart's data.\r\n */\n\n\n Chart.prototype.feedLegend = function () {// Nothing here. This method is provided only as a \"placeholder\" for\n // extending classes to override\n };\n /**\r\n * Adds a new title to the chart when it is inserted into chart's titles\r\n * list.\r\n * @param event An event object which is triggered when inserting into titles list\r\n * @return Label object\r\n */\n\n\n Chart.prototype.processTitle = function (event) {\n var title = event.newValue;\n title.parent = this;\n title.toBack();\n title.shouldClone = false;\n title.align = \"center\"; // Need to explicitly apply the `id` attribute so it can be referenced by\n // `aria-labelledby`\n\n title.uidAttr();\n return title;\n };\n /**\r\n * Checks if chart has any title elements. If it does, we will use them in an\r\n * `aria-labelledby` attribute so that screen readers can use them to properly\r\n * describe the chart when it is focused or hovered.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Chart.prototype.updateReaderTitleReferences = function () {\n if (this.titles.length) {\n var titleIds_1 = [];\n $iter.each(this.titles.iterator(), function (title) {\n titleIds_1.push(title.uid);\n });\n this.setSVGAttribute({\n \"aria-labelledby\": titleIds_1.join(\" \")\n });\n } else {\n this.removeSVGAttribute(\"aria-labelledby\");\n }\n };\n\n Object.defineProperty(Chart.prototype, \"legend\", {\n /**\r\n * @return Legend\r\n */\n get: function get() {\n return this._legend.get();\n },\n\n /**\r\n * Holds the instance of chart's [[Leged]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/} for more information about legends\r\n * @param Legend\r\n */\n set: function set(legend) {\n this.setLegend(legend);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Prepares the legend instance for use in this chart.\r\n *\r\n * @param legend Legend\r\n */\n\n Chart.prototype.setLegend = function (legend) {\n var _this = this;\n\n if (this._legend.get() !== legend) {\n if (legend) {\n // Set legend options\n legend.parent = this.chartAndLegendContainer;\n\n this._legend.set(legend, legend.events.on(\"propertychanged\", function (event) {\n if (event.property == \"position\") {\n _this.fixLayout();\n }\n }, undefined, false));\n\n legend.addDisposer(new Disposer(function () {\n _this.legend = undefined;\n }));\n } else {\n this._legend.reset();\n }\n\n this.feedLegend();\n }\n };\n /**\r\n * Destroys this object and all related data.\r\n */\n\n\n Chart.prototype.dispose = function () {\n // otherwise there might be some errors when disposing chart which was just inited\n if (this.legend) {\n this.legend.dispose();\n }\n\n _super.prototype.dispose.call(this);\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n Chart.prototype.processConfig = function (config) {\n if (config) {\n // Set up legend\n if ($type.hasValue(config.legend) && !$type.hasValue(config.legend.type)) {\n config.legend.type = \"Legend\";\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\n\n\n Chart.prototype.copyFrom = function (source) {\n this.titles.copyFrom(source.titles);\n this.chartContainer.copyFrom(source.chartContainer);\n\n if (source.legend) {\n this.legend = source.legend.clone();\n this.legend.removeChildren();\n }\n\n _super.prototype.copyFrom.call(this, source);\n };\n\n Object.defineProperty(Chart.prototype, \"dragGrip\", {\n /**\r\n * @return Grip\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._dragGrip) {\n var grip_1 = this.tooltipContainer.createChild(Grip);\n grip_1.align = \"right\";\n grip_1.valign = \"middle\";\n grip_1.hide(0);\n grip_1.events.on(\"down\", function (ev) {\n if (ev.touch) {\n _this.interactionsEnabled = false;\n }\n });\n grip_1.events.on(\"up\", function (ev) {\n _this.interactionsEnabled = true;\n });\n this.events.on(\"down\", function (ev) {\n if (ev.touch) {\n grip_1.show();\n }\n });\n this._dragGrip = grip_1;\n }\n\n return this._dragGrip;\n },\n\n /**\r\n * An instance of [[Grip]] which serves as a grip point which appears on\r\n * touch and allows scrolling whole page even if chart is occupying the\r\n * whole of the screen and would otherwise prevent scrolling.\r\n *\r\n * @since 4.4.0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/touch/} For more information.\r\n * @param value Grip\r\n */\n set: function set(value) {\n this._dragGrip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"focusable\", {\n get: function get() {\n return this.parent.focusable;\n },\n set: function set(value) {\n this.parent.focusable = value;\n },\n enumerable: true,\n configurable: true\n });\n return Chart;\n}(Component);\n\nexport { Chart };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Chart\"] = Chart;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Reduce horizontal margins\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.widthXS,\n state: function state(target, stateId) {\n if (target instanceof Chart) {\n var state = target.states.create(stateId);\n\n if (target.pixelPaddingLeft > 10) {\n state.properties.paddingLeft = 10;\n }\n\n if (target.pixelPaddingRight > 10) {\n state.properties.paddingRight = 10;\n }\n\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Reduce vertical margins\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXS,\n state: function state(target, stateId) {\n if (target instanceof Chart) {\n var state = target.states.create(stateId);\n\n if (target.pixelPaddingTop > 10) {\n state.properties.paddingTop = 10;\n }\n\n if (target.pixelPaddingBottom > 10) {\n state.properties.paddingBottom = 10;\n }\n\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Remove horizontal padding\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.widthXXS,\n state: function state(target, stateId) {\n if (target instanceof Chart) {\n var state = target.states.create(stateId);\n state.properties.paddingLeft = 0;\n state.properties.paddingRight = 0;\n return state;\n }\n\n return null;\n }\n});\n/**\r\n * Remove vertical padding\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.heightXXS,\n state: function state(target, stateId) {\n if (target instanceof Chart) {\n var state = target.states.create(stateId);\n state.properties.paddingTop = 0;\n state.properties.paddingBottom = 0;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * Module that defines everything related to building bullets.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { registry } from \"../../core/Registry\";\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Class used to creates bullets.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\n\nvar Bullet =\n/** @class */\nfunction (_super) {\n __extends(Bullet, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Bullet() {\n var _this = _super.call(this) || this;\n\n _this.className = \"Bullet\";\n _this.isMeasured = false;\n _this.tooltipX = 0;\n _this.tooltipY = 0;\n _this.layout = \"none\";\n _this.applyOnClones = true;\n _this.copyToLegendMarker = true;\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(Bullet.prototype, \"locationX\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"locationX\");\n },\n\n /**\r\n * Relative horizontal location within cell. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"locationX\", value)) {\n var dataItem = this.dataItem;\n\n if (dataItem && dataItem.component) {\n dataItem.component.invalidate();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Bullet.prototype, \"locationY\", {\n /**\r\n * @return Location (0-1)\r\n */\n get: function get() {\n return this.getPropertyValue(\"locationY\");\n },\n\n /**\r\n * Relative vertical location within cell. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"locationY\", value)) {\n var dataItem = this.dataItem;\n\n if (dataItem && dataItem.component) {\n dataItem.component.invalidate();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Bullet.prototype, \"xField\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this.getPropertyValue(\"xField\");\n },\n\n /**\r\n * [xField description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\n set: function set(value) {\n this.setPropertyValue(\"xField\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Bullet.prototype, \"yField\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this.getPropertyValue(\"yField\");\n },\n\n /**\r\n * [yField description]\r\n *\r\n * Description\r\n * @param value [description]\r\n */\n set: function set(value) {\n this.setPropertyValue(\"yField\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Bullet.prototype, \"isDynamic\", {\n /**\r\n * @return Redraw on data change?\r\n */\n get: function get() {\n return this.getPropertyValue(\"isDynamic\");\n },\n\n /**\r\n * Indicates if the bullet is \"dynamic\".\r\n *\r\n * In most cases the bullets remain the same, even if the underlying data\r\n * changes.\r\n *\r\n * However, in cases where bullet also displays a label, or its size depends\r\n * on data, it also needs to be redrawn when the underlying data changes.\r\n *\r\n * Only those bullets that have set `isDynamic = true` will be redrawn each\r\n * time data changes. Regular bullets will be reused as they are.\r\n *\r\n * @default false\r\n * @param value Redraw on data change?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"isDynamic\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Bullet.prototype, \"copyToLegendMarker\", {\n /**\r\n * @return Redraw on data change?\r\n */\n get: function get() {\n return this.getPropertyValue(\"copyToLegendMarker\");\n },\n\n /**\r\n * Indicates if the bullet should be copied to legend marker\r\n *\r\n * @default false\r\n * @param value Redraw on data change?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"copyToLegendMarker\", value);\n },\n enumerable: true,\n configurable: true\n });\n return Bullet;\n}(Container);\n\nexport { Bullet };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Bullet\"] = Bullet;\n/**\r\n * Add default responsive rules\r\n */\n\n/**\r\n * Hide bullets\r\n */\n\ndefaultRules.push({\n relevant: ResponsiveBreakpoints.isXS,\n state: function state(target, stateId) {\n if (target instanceof Bullet) {\n var state = target.states.create(stateId);\n state.properties.disabled = true;\n return state;\n }\n\n return null;\n }\n});","/**\r\n * Functionality for any series-based elements, like Line Series (graphs),\r\n * Pie slice lists, etc.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Component } from \"../../core/Component\";\nimport { Sprite } from \"../../core/Sprite\";\nimport { List, ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { Dictionary, DictionaryDisposer } from \"../../core/utils/Dictionary\";\nimport { DataItem } from \"../../core/DataItem\";\nimport { Container } from \"../../core/Container\";\nimport { Tooltip } from \"../../core/elements/Tooltip\";\nimport { Bullet } from \"../elements/Bullet\";\nimport { LegendSettings } from \"../Legend\";\nimport { options } from \"../../core/Options\";\nimport { Color } from \"../../core/utils/Color\";\nimport { registry } from \"../../core/Registry\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $ease from \"../../core/utils/Ease\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $object from \"../../core/utils/Object\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $array from \"../../core/utils/Array\";\nimport * as $colors from \"../../core/utils/Colors\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[Series]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar SeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(SeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"SeriesDataItem\"; //@todo Should we make `bullets` list disposable?\n //this._disposers.push(new DictionaryDisposer(this.bullets));\n\n _this.values.value = {};\n _this.values.value = {};\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(SeriesDataItem.prototype, \"bullets\", {\n /**\r\n * A dictionary of data items bullets, where key is uid of a bullet template.\r\n */\n get: function get() {\n if (!this._bullets) {\n this._bullets = new Dictionary();\n\n this._disposers.push(new DictionaryDisposer(this._bullets));\n }\n\n return this._bullets;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Destroys this object and all related data.\r\n */\n\n SeriesDataItem.prototype.dispose = function () {\n this.bullets.clear();\n\n _super.prototype.dispose.call(this);\n };\n\n Object.defineProperty(SeriesDataItem.prototype, \"value\", {\n /**\r\n * @return Value\r\n */\n get: function get() {\n return this.values.value.value;\n },\n\n /**\r\n * data items's numeric value.\r\n *\r\n * @param value Value\r\n */\n set: function set(value) {\n this.setValue(\"value\", value);\n },\n enumerable: true,\n configurable: true\n });\n return SeriesDataItem;\n}(DataItem);\n\nexport { SeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines base class for any kind of serial data.\r\n *\r\n * @see {@link ISeriesEvents} for a list of available Events\r\n * @see {@link ISeriesAdapters} for a list of available Adapters\r\n * @todo Separate axis-related stuff to some other class so that MapSeries would not have unrelated stuff\r\n */\n\nvar Series =\n/** @class */\nfunction (_super) {\n __extends(Series, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Series() {\n var _this = _super.call(this) || this;\n /**\r\n * Should this series excluded from the axis scale calculations?\r\n *\r\n * @default false\r\n */\n\n\n _this._ignoreMinMax = false;\n /**\r\n * Should series' bullets?\r\n *\r\n * @default true\r\n */\n\n _this._showBullets = true;\n /**\r\n * Settings for the appearance of the related legend items.\r\n */\n\n _this.legendSettings = new LegendSettings();\n /**\r\n * Lowest overal values by type.\r\n */\n\n _this._tmin = new Dictionary();\n /**\r\n * Highest overal values by type.\r\n */\n\n _this._tmax = new Dictionary();\n /**\r\n * Lowest values in current selection by type.\r\n */\n\n _this._smin = new Dictionary();\n /**\r\n * Highest values in current selection by type.\r\n */\n\n _this._smax = new Dictionary();\n /**\r\n * [dataItemsByAxis description]\r\n *\r\n * Both by category and date.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\n\n _this.dataItemsByAxis = new Dictionary();\n /**\r\n * Normally series items are focusable using keyboard, so that people can\r\n * select them with a TAB key. However, if there are a lot of data points on\r\n * screen it might be long and useless to tab through all o fthem.\r\n *\r\n * This is where `skipFocusThreshold` comes in. If there are more items than\r\n * the value set here, we will not make those focusable and rather let screen\r\n * reader software rely on the series summary, or authors provide alternative\r\n * detailed information display, such as HTML table.\r\n *\r\n * Different series might have different threshold defaults.\r\n */\n\n _this.skipFocusThreshold = 20;\n /**\r\n * Used to indicate if `itemReaderText` was changed \"from the outside\".\r\n */\n\n _this._itemReaderTextChanged = false;\n /**\r\n * Most of the series use absolute values. However sometimes various\r\n * calculated percent values are need, e.g. item's percent representation\r\n * across all values in series, etc.\r\n *\r\n * It's a resource-intensive operation, so it is disabled by default.\r\n *\r\n * If you need percents to be calculated, e.g. for showing them in tooltips,\r\n * or creating 100% stacks, this setting needs to be set to `true`.\r\n *\r\n * NOTE: `PieChart`, which relies on slice percentages, has this\r\n * automatically set to `true`.\r\n *\r\n * @default false\r\n */\n\n _this.calculatePercent = false;\n /**\r\n * When `calculatePercent` is enabled and data item's percent value is\r\n * calculated, last item's real value is used instead of its working value.\r\n *\r\n * This is done for the animations when last item in series (e.g. slice in\r\n * a `PieSeries`) is hidden or shown. (if we would use real value, the\r\n * calculated percent would always be 100%).\r\n *\r\n * Sometimes there is a need (e.g. for drill-down Sunburst) to disable this\r\n * hack by setting `usePercentHack` to `false`.\r\n *\r\n * @since 4.9.13\r\n * @default true\r\n */\n\n _this.usePercentHack = true;\n /**\r\n * Specifies if series should be automatically disposed when removing from\r\n * chart's `series` list.\r\n *\r\n * @default true\r\n */\n\n _this.autoDispose = true;\n /**\r\n * When chart/series' data is processed, all kinds of derivative values are\r\n * calculated. E.g. sum, min, max, change, etc. This is a potentially\r\n * time-consuming operation, especially prominent in data-heavy charts.\r\n *\r\n * If your chart does not need those values, and you have a lot of data,\r\n * setting this to `true` might give a dramatic increase in initial chart\r\n * load speed.\r\n *\r\n * Please note, regular column and line series usage scenarios do not\r\n * require derivative values. Those come into play only when you do advanced\r\n * functionality like coloring segments of charts in different colors\r\n * depending on change between open and close values, have stacked series, or\r\n * display any of the derived values, like percent, in tooltips or bullets.\r\n *\r\n * @default false\r\n */\n\n _this.simplifiedProcessing = false;\n\n if (_this.constructor === Series) {\n throw new Error(\"'Series' cannot be instantiated directly. Please use a specific series type.\");\n }\n\n _this.className = \"Series\";\n _this.isMeasured = false;\n _this.layout = \"none\";\n _this.shouldClone = false;\n\n _this.setPropertyValue(\"hidden\", false);\n\n _this.axisRanges = new List();\n\n _this.axisRanges.events.on(\"inserted\", _this.processAxisRange, _this, false);\n\n _this.minBulletDistance = 0; // otherwise we'll have a lot of cases when people won't see bullets and think it's a bug\n\n _this.mainContainer = _this.createChild(Container);\n _this.mainContainer.shouldClone = false;\n _this.mainContainer.mask = _this.createChild(Sprite);\n\n _this._disposers.push(_this.mainContainer); // all bullets should go on top of lines/fills. So we add a separate container for bullets and later set it's parent to chart.bulletsContainer\n\n\n var bulletsContainer = _this.mainContainer.createChild(Container);\n\n _this._shouldBeReady.push(bulletsContainer);\n\n bulletsContainer.shouldClone = false;\n bulletsContainer.layout = \"none\";\n bulletsContainer.virtualParent = _this;\n\n _this._disposers.push(bulletsContainer);\n\n _this.bulletsContainer = bulletsContainer;\n _this.tooltip = new Tooltip();\n _this.tooltip.virtualParent = _this;\n\n _this._disposers.push(_this.tooltip);\n\n _this.hiddenState.transitionEasing = $ease.cubicIn; // this data item holds sums, averages, etc\n\n _this.dataItem = _this.createDataItem();\n\n _this._disposers.push(_this.dataItem);\n\n _this.dataItem.component = _this; // Apply accessibility\n\n _this.role = \"group\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * We need this here so that class names can be applied to bullets container.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Series.prototype.applyTheme = function () {\n _super.prototype.applyTheme.call(this);\n\n if (options.autoSetClassName && this.bulletsContainer) {\n this.bulletsContainer.className = this.className + \"-bullets\";\n this.bulletsContainer.setClassName();\n }\n };\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n Series.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this);\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Series\");\n }\n };\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n Series.prototype.createDataItem = function () {\n return new SeriesDataItem();\n };\n\n Object.defineProperty(Series.prototype, \"chart\", {\n /**\r\n * @return Chart\r\n */\n get: function get() {\n return this._chart;\n },\n\n /**\r\n * Chart series is used on.\r\n *\r\n * @param value Chart\r\n */\n set: function set(value) {\n this._chart = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Positions bullet.\r\n *\r\n * @param bullet Sprite\r\n */\n\n Series.prototype.positionBullet = function (bullet) {// Placeholder method for extending classes to override.\n };\n /**\r\n * Decorates newly created bullet after it has been instert into the list.\r\n *\r\n * @param event List event\r\n * @todo investigate why itemReaderText is undefined\r\n */\n\n\n Series.prototype.processBullet = function (event) {\n var _this = this;\n\n var bullet = event.newValue;\n bullet.isTemplate = true; // Add accessibility options to bullet\n // If there are relatively few bullets, make them focusable\n\n this.events.once(\"datavalidated\", function (ev) {\n if (_this.itemsFocusable()) {\n bullet.focusable = true;\n }\n });\n this.invalidate();\n };\n /**\r\n * removes bullets\r\n *\r\n * @param event List event\r\n */\n\n\n Series.prototype.removeBullet = function (event) {\n var bullet = event.oldValue;\n this.dataItems.each(function (dataItem) {\n var eachBullet = dataItem.bullets.getKey(bullet.uid);\n\n if (eachBullet) {\n eachBullet.dispose();\n }\n });\n this.invalidate();\n };\n /**\r\n * Validates data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Series.prototype.validateDataItems = function () {\n _super.prototype.validateDataItems.call(this);\n\n this.processValues(false);\n };\n /**\r\n * Returns first value for the specific key in the series.\r\n *\r\n * @param key Key\r\n * @return Value\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n */\n\n\n Series.prototype.getFirstValue = function (key, startIndex) {\n // find first\n\n /*\r\n return $iter.findMap(this.dataItems.iterator(), (dataItem) => {\r\n for (let key in dataItem.values) {\r\n if ($object.hasKey(dataItem.values, key)) {\r\n let value: number = dataItem.values[key].workingValue;\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n }\r\n }\r\n return null;\r\n });*/\n //if (startIndex > 0 && startIndex < this.dataItems.length - 1) {\n //startIndex++;\n //}\n for (var i = startIndex; i >= 0; i--) {\n var dataItem = this.dataItems.getIndex(i);\n var value = dataItem.getActualWorkingValue(key);\n\n if ($type.isNumber(value)) {\n return value;\n }\n }\n\n return null;\n };\n /**\r\n * Returns first value for the specific key in the series.\r\n *\r\n * @param key Key\r\n * @return Value\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n */\n\n\n Series.prototype.getAbsoluteFirstValue = function (key) {\n for (var i = 0; i < this.dataItems.length; i++) {\n var dataItem = this.dataItems.getIndex(i);\n var value = dataItem.values[key].value;\n\n if ($type.isNumber(value)) {\n return value;\n }\n }\n\n return null;\n };\n /**\r\n * [rangeChangeUpdate description]\r\n *\r\n * @todo Description\r\n */\n\n\n Series.prototype.rangeChangeUpdate = function () {\n _super.prototype.rangeChangeUpdate.call(this);\n\n this.processValues(true);\n };\n /**\r\n * [processValues description]\r\n *\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n * @param dataItems [description]\r\n */\n\n\n Series.prototype.processValues = function (working) {\n var _this = this;\n\n if (!this.simplifiedProcessing) {\n var dataItems = this.dataItems;\n var count_1 = {};\n var sum_1 = {};\n var absoluteSum_1 = {};\n var low_1 = {};\n var high_1 = {};\n var open_1 = {};\n var close_1 = {};\n var previous_1 = {};\n var first_1 = {};\n var absoluteFirst_1 = {}; //let duration: number = 0; // todo: check if series uses selection.change or selection.change.percent and set duration to interpolationduration\n\n var startIndex_1 = $math.max(0, this.startIndex);\n startIndex_1 = $math.min(startIndex_1, this.dataItems.length);\n var endIndex = $math.min(this.endIndex, this.dataItems.length);\n\n if (!$type.isNumber(startIndex_1)) {\n startIndex_1 = 0;\n }\n\n if (!$type.isNumber(endIndex)) {\n endIndex = this.dataItems.length;\n }\n\n if (startIndex_1 > 0) {\n var dataItem_1 = dataItems.getIndex(startIndex_1 - 1);\n $object.each(dataItem_1.values, function (key, values) {\n var value = dataItem_1.getActualWorkingValue(key);\n\n if ($type.isNumber(value)) {\n // save previous\n previous_1[key] = value;\n }\n });\n }\n\n var _loop_1 = function _loop_1(i) {\n var dataItem_2 = dataItems.getIndex(i);\n $object.each(dataItem_2.values, function (key, values) {\n var value = dataItem_2.getActualWorkingValue(key); //if (i >= startIndex && i <= endIndex) { // do not add to count, sum etc if it is not within start/end index\n\n if ($type.isNumber(value)) {\n // count values\n if (!$type.isNumber(count_1[key])) {\n count_1[key] = 0;\n }\n\n count_1[key]++; // sum values\n\n if (!$type.isNumber(sum_1[key])) {\n sum_1[key] = 0;\n }\n\n sum_1[key] += value; // absolute sum values\n\n if (!$type.isNumber(absoluteSum_1[key])) {\n absoluteSum_1[key] = 0;\n }\n\n absoluteSum_1[key] += Math.abs(value); // open\n\n if (!$type.isNumber(open_1[key])) {\n open_1[key] = value;\n } // close\n\n\n close_1[key] = value; // low\n\n if (!$type.isNumber(low_1[key])) {\n low_1[key] = value;\n } else {\n if (low_1[key] > value) {\n low_1[key] = value;\n }\n } // high\n\n\n if (!$type.isNumber(high_1[key])) {\n high_1[key] = value;\n } else {\n if (high_1[key] < value) {\n high_1[key] = value;\n }\n }\n\n if (!$type.isNumber(first_1[key])) {\n first_1[key] = _this.getFirstValue(key, startIndex_1);\n }\n\n if (!$type.isNumber(absoluteFirst_1[key])) {\n absoluteFirst_1[key] = _this.getAbsoluteFirstValue(key);\n } // change\n\n\n dataItem_2.setCalculatedValue(key, value - first_1[key], \"change\"); // change from start percent\n // will fail if first value is 0\n\n dataItem_2.setCalculatedValue(key, (value - first_1[key]) / first_1[key] * 100, \"changePercent\");\n dataItem_2.setCalculatedValue(key, value - absoluteFirst_1[key], \"startChange\");\n dataItem_2.setCalculatedValue(key, (value - absoluteFirst_1[key]) / absoluteFirst_1[key] * 100, \"startChangePercent\"); // previous change\n\n var prevValue = previous_1[key];\n\n if (!$type.isNumber(prevValue)) {\n prevValue = value;\n }\n\n dataItem_2.setCalculatedValue(key, value - prevValue, \"previousChange\"); // previous change percent\n\n dataItem_2.setCalculatedValue(key, (value - prevValue) / prevValue * 100, \"previousChangePercent\"); // save previous\n\n previous_1[key] = value;\n }\n });\n };\n\n for (var i = startIndex_1; i < endIndex; i++) {\n _loop_1(i);\n }\n\n if (this.calculatePercent) {\n var _loop_2 = function _loop_2(i) {\n var dataItem_3 = dataItems.getIndex(i);\n $object.each(dataItem_3.values, function (key) {\n var ksum = absoluteSum_1[key];\n var value = dataItem_3.getActualWorkingValue(key);\n\n if ($type.isNumber(value)) {\n if (ksum > 0) {\n if (_this.usePercentHack) {\n // this hack is made in order to make it possible to animate single slice to 0\n // if there is only one slice left, percent value is always 100%, so it won't animate\n // so we use real value of a slice instead of current value\n if (value == ksum) {\n ksum = dataItem_3.values[key].value;\n }\n }\n\n var percent = value / ksum * 100;\n dataItem_3.setCalculatedValue(key, percent, \"percent\");\n } else {\n dataItem_3.setCalculatedValue(key, 0, \"percent\");\n }\n }\n });\n };\n\n for (var i = startIndex_1; i < endIndex; i++) {\n _loop_2(i);\n }\n } // calculate one before first (cant do that in cycle, as we don't know open yet\n // when drawing line chart we should draw line to the invisible data point to the left, otherwise the line will always look like it starts from the selected point\n // so we do startIndex - 1\n\n\n if (startIndex_1 > 0) {\n var zeroItem_1 = dataItems.getIndex(startIndex_1 - 1);\n $object.each(zeroItem_1.values, function (key) {\n var value = zeroItem_1.values[key].value; // change\n\n zeroItem_1.setCalculatedValue(key, value - open_1[key], \"change\"); // change percent\n\n zeroItem_1.setCalculatedValue(key, (value - open_1[key]) / open_1[key] * 100, \"changePercent\");\n });\n } // we save various data like sum, average to dataPoint of the series\n\n\n var dataItem_4 = this.dataItem;\n $object.each(dataItem_4.values, function (key) {\n dataItem_4.setCalculatedValue(key, sum_1[key], \"sum\");\n dataItem_4.setCalculatedValue(key, absoluteSum_1[key], \"absoluteSum\");\n dataItem_4.setCalculatedValue(key, sum_1[key] / count_1[key], \"average\");\n dataItem_4.setCalculatedValue(key, open_1[key], \"open\");\n dataItem_4.setCalculatedValue(key, close_1[key], \"close\");\n dataItem_4.setCalculatedValue(key, low_1[key], \"low\");\n dataItem_4.setCalculatedValue(key, high_1[key], \"high\");\n dataItem_4.setCalculatedValue(key, count_1[key], \"count\");\n });\n }\n };\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Series.prototype.validate = function () {\n if ($utils.isIE()) {\n this.filters.clear();\n }\n\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\n //axisRange.contents.disposeChildren(); // not good for columns, as they are reused\n //\t\t\taxisRange.appendChildren();\n axisRange.validate();\n });\n\n _super.prototype.validate.call(this);\n\n var bulletsContainer = this.bulletsContainer;\n bulletsContainer.fill = this.fill;\n bulletsContainer.stroke = this.stroke;\n bulletsContainer.x = this.pixelX;\n bulletsContainer.y = this.pixelY;\n\n if (this.bulletsContainer.children.length > 0) {\n if (this._showBullets) {\n for (var i = 0; i < this.startIndex; i++) {\n var dataItem = this.dataItems.getIndex(i);\n\n if (dataItem) {\n dataItem.bullets.each(function (key, bullet) {\n bullet.__disabled = true;\n });\n }\n }\n\n for (var i = this.dataItems.length - 1; i > this.endIndex; i--) {\n var dataItem = this.dataItems.getIndex(i);\n\n if (dataItem) {\n dataItem.bullets.each(function (key, bullet) {\n bullet.__disabled = true;\n });\n }\n }\n } else {\n this.bulletsContainer.children.each(function (bullet) {\n bullet.__disabled = true;\n });\n }\n }\n\n this.updateTooltipBounds();\n };\n /**\r\n * @ignore\r\n */\n\n\n Series.prototype.updateTooltipBounds = function () {\n if (this.topParent) {\n var x = 0;\n var y = 0;\n var w = this.topParent.maxWidth;\n var h = this.topParent.maxHeight;\n var rect = {\n x: x,\n y: y,\n width: w,\n height: h\n };\n this.tooltip.setBounds(rect);\n }\n };\n\n Series.prototype.shouldCreateBullet = function (dataItem, bulletTemplate) {\n return true;\n };\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\n\n\n Series.prototype.validateDataElement = function (dataItem) {\n var _this = this;\n\n _super.prototype.validateDataElement.call(this, dataItem);\n\n if (this._showBullets) {\n if (!this.isHidden) {\n this.bulletsContainer.visible = true;\n }\n\n this.bullets.each(function (bulletTemplate) {\n // always better to use the same, this helps to avoid redrawing\n var bullet = dataItem.bullets.getKey(bulletTemplate.uid);\n\n if (_this.shouldCreateBullet(dataItem, bulletTemplate)) {\n if (!bullet) {\n var disabledField = bulletTemplate.propertyFields.disabled;\n var dataContext = dataItem.dataContext;\n\n if (disabledField && dataContext && dataContext[disabledField] === false) {\n bulletTemplate.applyOnClones = false;\n bulletTemplate.disabled = false;\n bullet = bulletTemplate.clone();\n bulletTemplate.disabled = true;\n bulletTemplate.applyOnClones = true;\n } else {\n bullet = bulletTemplate.clone();\n }\n\n bullet.shouldClone = false;\n dataItem.addSprite(bullet);\n\n if (!_this.visible || _this.isHiding) {\n bullet.hide(0);\n }\n }\n\n var currentDataItem = bullet.dataItem;\n\n if (currentDataItem != dataItem) {\n // set to undefined in order not to reuse\n if (currentDataItem) {\n currentDataItem.bullets.setKey(bulletTemplate.uid, undefined);\n }\n\n var readerText_1 = _this.itemReaderText;\n\n if (bullet instanceof Bullet) {\n if (!readerText_1) {\n readerText_1 = \"{\" + bullet.xField + \"}: {\" + bullet.yField + \"}\";\n }\n\n if (bullet.isDynamic) {\n dataItem.events.on(\"workingvaluechanged\", bullet.deepInvalidate, bullet, false); //dataItem.events.on(\"calculatedvaluechanged\", bullet.deepInvalidate, bullet, false);\n\n _this.dataItem.events.on(\"workingvaluechanged\", bullet.deepInvalidate, bullet, false);\n }\n\n bullet.deepInvalidate();\n } // Add accessibility to bullet\n\n\n if (bullet.focusable) {\n bullet.events.on(\"focus\", function (ev) {\n bullet.readerTitle = _this.populateString(readerText_1, bullet.dataItem);\n }, undefined, false);\n bullet.events.on(\"blur\", function (ev) {\n bullet.readerTitle = \"\";\n }, undefined, false);\n }\n\n if (bullet.hoverable) {\n bullet.events.on(\"over\", function (ev) {\n bullet.readerTitle = _this.populateString(readerText_1, bullet.dataItem);\n }, undefined, false);\n bullet.events.on(\"out\", function (ev) {\n bullet.readerTitle = \"\";\n }, undefined, false);\n }\n }\n\n bullet.parent = _this.bulletsContainer;\n dataItem.bullets.setKey(bulletTemplate.uid, bullet); // pass max w/h so we'd know if we should show/hide somethings\n\n bullet.maxWidth = dataItem.itemWidth;\n bullet.maxHeight = dataItem.itemHeight;\n bullet.__disabled = false;\n\n _this.positionBullet(bullet);\n } else {\n if (bullet) {\n bullet.__disabled = true;\n }\n }\n });\n } else {\n this.bulletsContainer.visible = false;\n }\n };\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Series.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\n if (!this.dataRangeInvalid) {\n this.invalidateProcessedData();\n }\n };\n\n Object.defineProperty(Series.prototype, \"ignoreMinMax\", {\n /**\r\n * @return Exclude from calculations?\r\n */\n get: function get() {\n return this._ignoreMinMax;\n },\n\n /**\r\n * Should this series excluded from the axis scale calculations?\r\n *\r\n * @default false\r\n * @param value Exclude from calculations?\r\n */\n set: function set(value) {\n this._ignoreMinMax = value;\n this.invalidateDataItems();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Create a mask for the series.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n Series.prototype.createMask = function () {// A placeholder method for extending classes to override.\n };\n /**\r\n * Process axis range after it has been added to the list.\r\n *\r\n * @param event Event\r\n */\n\n\n Series.prototype.processAxisRange = function (event) {\n // create container if not existing\n if (!this.rangesContainer) {\n this.rangesContainer = this.createChild(Container);\n this.rangesContainer.shouldClone = false;\n this.rangesContainer.isMeasured = false;\n }\n\n var axisRange = event.newValue;\n\n if (axisRange) {\n axisRange.contents.parent = this.rangesContainer;\n axisRange.isRange = true;\n axisRange.events.on(\"valuechanged\", this.invalidateDataItems, this, false);\n }\n };\n /**\r\n * [getAxisField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param axis [description]\r\n * @return [description]\r\n */\n\n\n Series.prototype.getAxisField = function (axis) {\n return;\n };\n /**\r\n * Shows the tooltip at specific position.\r\n *\r\n * @ignore Exclude from docs\r\n * @param xPosition X\r\n * @param yPosition Y\r\n */\n\n\n Series.prototype.showTooltipAtPosition = function (xPosition, yPosition) {// Placeholder method for extending classes to override.\n };\n\n Object.defineProperty(Series.prototype, \"minBulletDistance\", {\n /**\r\n * @return Distance (px)\r\n */\n get: function get() {\n return this.getPropertyValue(\"minBulletDistance\");\n },\n\n /**\r\n * Minimal distance between data points in pixels.\r\n *\r\n * If distance gets smaller than this, bullets are turned off to avoid\r\n * overlapping.\r\n *\r\n * `0` (zero) disables this behavior.\r\n *\r\n * IMPORTANT: This setting will work only when Series' base axis\r\n * is [[CategoryAxis]] or [[DateAxis]]. If base axis is [[ValueAxis]] the\r\n * setting will be ignored, because it would be a huge overhead to measure\r\n * distance between each and every bullet.\r\n *\r\n * @default 0\r\n * @param value Distance (px)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"minBulletDistance\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Series.prototype, \"bullets\", {\n /**\r\n * A list of bullets that will be added to each and every items in the\r\n * series.\r\n *\r\n * You can push any object that is a descendant of a [[Sprite]] here. All\r\n * items added to this list will be copied and used as a bullet on all data\r\n * items, including their properties, events, etc.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/bullets/} for more info about the concept of Bullets\r\n * @return List of bullets.\r\n */\n get: function get() {\n if (!this._bullets) {\n this._bullets = new ListTemplate(new Bullet());\n this._bullets.template.virtualParent = this;\n\n this._bullets.events.on(\"inserted\", this.processBullet, this, false);\n\n this._bullets.events.on(\"removed\", this.removeBullet, this, false);\n\n this._disposers.push(new ListDisposer(this._bullets));\n\n this._disposers.push(this._bullets.template);\n }\n\n return this._bullets;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Binds related legend data item's visual settings to this series' visual\r\n * settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\n\n Series.prototype.createLegendMarker = function (marker) {// This is a placeholder method for extending classes to override.\n };\n\n Object.defineProperty(Series.prototype, \"hiddenInLegend\", {\n /**\r\n * @return Hidden in legend?\r\n */\n get: function get() {\n return this.getPropertyValue(\"hiddenInLegend\");\n },\n\n /**\r\n * Should the series be hidden in legend?\r\n *\r\n * @param value Hidden in legend?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"hiddenInLegend\", value)) {\n if (this.chart) {\n this.chart.feedLegend();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Series.prototype, \"name\", {\n /**\r\n * @return Name\r\n */\n get: function get() {\n return this.getPropertyValue(\"name\");\n },\n\n /**\r\n * Series' name.\r\n *\r\n * @param value Name\r\n */\n set: function set(value) {\n this.setPropertyValue(\"name\", value);\n var legendDataItem = this.legendDataItem;\n\n if (legendDataItem) {\n legendDataItem.component.invalidate();\n legendDataItem.component.invalidateRawData();\n }\n\n this.readerTitle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Series.prototype, \"itemReaderText\", {\n /**\r\n * @return Screen reader text template\r\n */\n get: function get() {\n // Get explicitly set reader text\n var readerText = this._itemReaderText; // Not set? Let's try something else\n\n if (!readerText) {\n // Tooltip text?\n if (this.tooltipText) {\n readerText = $utils.plainText(this.tooltipText);\n } else if (this.tooltipHTML) {\n readerText = $utils.plainText(this.tooltipHTML);\n }\n }\n\n if (!this._adapterO) {\n return readerText;\n } else {\n return this._adapterO.apply(\"itemReaderText\", readerText);\n }\n },\n\n /**\r\n * Screen reader text to be applied to each individual data item, such\r\n * as bullets, columns or slices.\r\n *\r\n * The template can contain field reference meta codes, i.e. `{dateX}`,\r\n * `{valueY}`, etc.\r\n *\r\n * Any text formatting options, e.g. `[bold]` will be ignored.\r\n *\r\n * @param value Screen reader text template\r\n */\n set: function set(value) {\n this._itemReaderText = value;\n this._itemReaderTextChanged = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns if number of data items in the series are beyond non-focusable\r\n * count and should not be available for TAB-through.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Items focusable?\r\n */\n\n Series.prototype.itemsFocusable = function () {\n return this.dataItems.length >= this.skipFocusThreshold ? false : true;\n };\n\n Object.defineProperty(Series.prototype, \"legendDataItem\", {\n /**\r\n * @return Data item\r\n */\n get: function get() {\n return this._legendDataItem;\n },\n\n /**\r\n * Legend data item that corresponds to this series.\r\n *\r\n * @param value Data item\r\n */\n set: function set(value) {\n this._legendDataItem = value;\n\n this._legendDataItem.itemContainer.deepInvalidate();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\n\n Series.prototype.updateLegendValue = function (dataItem, notRange) {\n // if this series has legend item\n if (this.legendDataItem) {\n var legendSettings = this.legendSettings;\n var legendDataItem = this.legendDataItem;\n var label = legendDataItem.label;\n var valueLabel = legendDataItem.valueLabel; // update legend\n\n if (dataItem && !dataItem.isDisposed() || notRange) {\n if (valueLabel) {\n if (legendSettings.itemValueText) {\n valueLabel.text = legendSettings.itemValueText;\n }\n\n valueLabel.dataItem = dataItem;\n }\n\n if (label) {\n if (legendSettings.itemLabelText) {\n label.text = legendSettings.itemLabelText;\n }\n\n label.dataItem = dataItem;\n }\n } else {\n if (label) {\n // if itemLabelText is set, means we have to reset label even if labelText is not set\n if (legendSettings.labelText || legendSettings.itemLabelText != undefined) {\n label.text = legendSettings.labelText;\n }\n\n label.dataItem = this.dataItem;\n }\n\n if (valueLabel) {\n if (legendSettings.valueText || legendSettings.itemValueText != undefined) {\n valueLabel.text = legendSettings.valueText;\n }\n\n valueLabel.dataItem = this.dataItem;\n }\n }\n }\n };\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\n\n\n Series.prototype.copyFrom = function (source) {\n this.bullets.copyFrom(source.bullets);\n this.bulletsContainer.copyFrom(source.bulletsContainer);\n this.calculatePercent = source.calculatePercent;\n this.usePercentHack = source.usePercentHack;\n this.simplifiedProcessing = source.simplifiedProcessing;\n\n _super.prototype.copyFrom.call(this, source);\n };\n /**\r\n * Displays a modal or console message with error, and halts any further\r\n * processing of this element.\r\n *\r\n * @param e Error\r\n */\n\n\n Series.prototype.raiseCriticalError = function (e) {\n if (this._chart && this._chart.modal) {\n this._chart.modal.content = this._chart.adapter.apply(\"criticalError\", e).message;\n this._chart.modal.closable = false;\n\n if (!options.suppressErrors) {\n this._chart.modal.open();\n }\n\n this._chart.disabled = true;\n }\n\n if (options.verbose) {\n console.log(e);\n }\n };\n /**\r\n * Applies filters to the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n Series.prototype.applyFilters = function () {\n var _this = this;\n\n _super.prototype.applyFilters.call(this);\n\n this.bulletsContainer.filters.clear(); // copyFrom of a list copies, does not clone\n\n $iter.each(this.filters.iterator(), function (filter) {\n _this.bulletsContainer.filters.push(filter.clone());\n });\n };\n\n Object.defineProperty(Series.prototype, \"heatRules\", {\n /**\r\n * A list of heat rules to apply to series' elements based on the value\r\n * of the data item.\r\n *\r\n * Heat rules can be any \"numeric\" (including `Color`) property, and can also\r\n * be applied to child objects of series, like columns, bullets, etc.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * series.heatRules.push({\r\n * \"target\": series.columns.template,\r\n * \"property\": \"fill\",\r\n * \"min\": am4core.color(\"#F5DBCB\"),\r\n * \"max\": am4core.color(\"#ED7B84\"),\r\n * \"dataField\": \"valueY\"\r\n *});\r\n *```\r\n * ```Javacript\r\n * series.heatRules.push({\r\n * \"target\": series.columns.template,\r\n * \"property\": \"fill\",\r\n * \"min\": am4core.color(\"#F5DBCB\"),\r\n * \"max\": am4core.color(\"#ED7B84\"),\r\n * \"dataField\": \"valueY\"\r\n *});\r\n *```\r\n *```JSON\r\n *{\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"ColumnSeries\",\r\n * \"heatRules\": [{\r\n * \"target\": \"columns.template\",\r\n * \"property\": \"fill\",\r\n * \"min\": \"#F5DBCB\",\r\n * \"max\": \"#ED7B84\",\r\n * \"dataField\": \"valueY\"\r\n * }]\r\n * }]\r\n *}\r\n *```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/series/#Heat_maps} for more about heat rules\r\n * @return Heat rules\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._heatRules) {\n this._heatRules = new List();\n\n this._heatRules.events.on(\"inserted\", function (event) {\n var heatRule = event.newValue;\n var target = heatRule.target;\n\n if (target) {\n var dataField_1 = heatRule.dataField;\n\n if (!$type.hasValue(dataField_1)) {\n dataField_1 = \"value\";\n }\n\n var seriesDataItem_1 = _this.dataItem;\n var property_1 = heatRule.property;\n var minValue = $type.toNumber(heatRule.minValue);\n var maxValue = $type.toNumber(heatRule.maxValue);\n\n if (!$type.isNumber(minValue) && !$type.isNumber(maxValue)) {\n _this.dataItem.events.on(\"calculatedvaluechanged\", function (event) {\n if (event.property == dataField_1) {\n $iter.each(_this.dataItems.iterator(), function (dataItem) {\n var foundSprite = false;\n $array.each(dataItem.sprites, function (sprite) {\n if (sprite.clonedFrom == target) {\n var anySprite = sprite;\n anySprite[property_1] = anySprite[property_1];\n foundSprite = true;\n }\n });\n\n if (!foundSprite) {\n $array.each(dataItem.sprites, function (sprite) {\n if (sprite instanceof Container) {\n $iter.each(sprite.children.iterator(), function (child) {\n if (child.className == target.className) {\n var anyChild = child;\n anyChild[property_1] = anyChild[property_1];\n } // giveup here\n else if (child instanceof Container) {\n child.deepInvalidate();\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n _this.dataItems.template.events.on(\"workingvaluechanged\", function (event) {\n if (event.property == dataField_1) {\n var dataItem = event.target;\n var foundSprite_1 = false;\n $array.each(dataItem.sprites, function (sprite) {\n if (sprite.clonedFrom == target) {\n var anySprite = sprite;\n anySprite[property_1] = anySprite[property_1];\n foundSprite_1 = true;\n }\n });\n\n if (!foundSprite_1) {\n $array.each(dataItem.sprites, function (sprite) {\n if (sprite instanceof Container) {\n $iter.each(sprite.children.iterator(), function (child) {\n if (child.className == target.className) {\n var anyChild = child;\n anyChild[property_1] = anyChild[property_1];\n } // givup here\n else if (child instanceof Container) {\n child.deepInvalidate();\n }\n });\n }\n });\n }\n }\n });\n\n target.adapter.add(property_1, function (value, ruleTarget, property) {\n var minValue = $type.toNumber(heatRule.minValue);\n var maxValue = $type.toNumber(heatRule.maxValue);\n var min = heatRule.min;\n var max = heatRule.max;\n\n if (ruleTarget instanceof Sprite) {\n var anySprite = ruleTarget;\n var propertyField = anySprite.propertyFields[property];\n\n if (propertyField && ruleTarget.dataItem) {\n var dataContext = ruleTarget.dataItem.dataContext;\n\n if (dataContext && $type.hasValue(dataContext[propertyField])) {\n return value;\n }\n }\n }\n\n var dataItem = ruleTarget.dataItem;\n\n if (!$type.isNumber(minValue)) {\n minValue = seriesDataItem_1.values[dataField_1].low;\n }\n\n if (!$type.isNumber(maxValue)) {\n maxValue = seriesDataItem_1.values[dataField_1].high;\n }\n\n if (dataItem) {\n var fieldValues = dataItem.values[dataField_1];\n\n if (fieldValues) {\n var workingValue = dataItem.getActualWorkingValue(dataField_1);\n\n if ($type.hasValue(min) && $type.hasValue(max) && $type.isNumber(minValue) && $type.isNumber(maxValue) && $type.isNumber(workingValue)) {\n var percent = void 0;\n\n if (heatRule.logarithmic) {\n percent = (Math.log(workingValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E) / (Math.log(maxValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E);\n } else {\n percent = (workingValue - minValue) / (maxValue - minValue);\n }\n\n if ($type.isNumber(workingValue) && (!$type.isNumber(percent) || Math.abs(percent) == Infinity)) {\n percent = 0.5;\n } // fixes problems if all values are the same\n\n\n if ($type.isNumber(min)) {\n return min + (max - min) * percent;\n } else if (min instanceof Color) {\n return new Color($colors.interpolate(min.rgb, max.rgb, percent));\n }\n }\n }\n }\n\n return value;\n });\n }\n });\n }\n\n return this._heatRules;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n Series.prototype.processConfig = function (config) {\n var heatRules;\n\n if (config) {\n // Set up bullets\n if ($type.hasValue(config.bullets) && $type.isArray(config.bullets)) {\n for (var i = 0, len = config.bullets.length; i < len; i++) {\n var bullets = config.bullets[i];\n\n if (!$type.hasValue(bullets.type)) {\n bullets.type = \"Bullet\";\n }\n }\n } // Let's take heatRules out of the config, so that we can process\n // them later, when bullets are already there\n\n\n if ($type.hasValue(config.heatRules) && $type.isArray(config.heatRules)) {\n heatRules = config.heatRules;\n delete config.heatRules;\n }\n }\n\n _super.prototype.processConfig.call(this, config); // Process heat rules again, when all other elements are ready\n\n\n if (heatRules) {\n for (var i = 0, len = heatRules.length; i < len; i++) {\n var rule = heatRules[i]; // Resolve target\n\n var target = this;\n\n if ($type.hasValue(rule.target) && $type.isString(rule.target)) {\n // Check if we can find this element by id\n if (this.map.hasKey(rule.target)) {\n target = this.map.getKey(rule.target);\n } else {\n var parts = rule.target.split(\".\");\n\n for (var x = 0; x < parts.length; x++) {\n if (target instanceof List) {\n var listitem = target.getIndex($type.toNumber(parts[x]));\n\n if (!listitem) {\n target = target[parts[x]];\n } else {\n target = listitem;\n }\n } else {\n var maybeIndex = parts[x].match(/^(.*)\\[([0-9]+)\\]/);\n\n if (maybeIndex) {\n if (target[maybeIndex[1]] instanceof List) {\n target = target[maybeIndex[1]].getIndex($type.toNumber(maybeIndex[2]));\n } else {\n target = target[maybeIndex[1]][$type.toNumber(maybeIndex[2])];\n }\n } else {\n target = target[parts[x]];\n }\n }\n }\n }\n }\n\n rule.target = target; // Resolve colors and percents\n\n if ($type.hasValue(rule.min)) {\n rule.min = this.maybeColorOrPercent(rule.min);\n }\n\n if ($type.hasValue(rule.max)) {\n rule.max = this.maybeColorOrPercent(rule.max);\n }\n }\n\n _super.prototype.processConfig.call(this, {\n heatRules: heatRules\n });\n }\n };\n /**\r\n * Returns visibility value\r\n * @ignore\r\n */\n\n /*\r\n protected getVisibility(): boolean {\r\n let hidden = this.getPropertyValue(\"hidden\");\r\n if (hidden) {\r\n return false;\r\n }\r\n else {\r\n return super.getVisibility();\r\n }\r\n }*/\n\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\n\n\n Series.prototype.configOrder = function (a, b) {\n if (a == b) {\n return 0;\n } // Must come last\n else if (a == \"heatRules\") {\n return 1;\n } else if (b == \"heatRules\") {\n return -1;\n } else {\n return _super.prototype.configOrder.call(this, a, b);\n }\n };\n /**\r\n * Sets `visibility` property:\r\n *\r\n * * `true` - visible\r\n * * `false` - hidden\r\n *\r\n * @param value true - visible, false - hidden\r\n * @return Current visibility\r\n */\n\n\n Series.prototype.setVisibility = function (value) {\n _super.prototype.setVisibility.call(this, value);\n\n this.bulletsContainer.visible = value;\n };\n\n return Series;\n}(Component);\n\nexport { Series };\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Series\"] = Series;\nregistry.registeredClasses[\"SeriesDataItem\"] = SeriesDataItem;","/**\r\n * Serial chart module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Chart, ChartDataItem } from \"../Chart\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { Container } from \"../../core/Container\";\nimport { Series } from \"../series/Series\";\nimport { percent } from \"../../core/utils/Percent\";\nimport { ColorSet } from \"../../core/utils/ColorSet\";\nimport { registry } from \"../../core/Registry\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $array from \"../../core/utils/Array\";\nimport { Disposer } from \"../../core/utils/Disposer\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[SerialChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar SerialChartDataItem =\n/** @class */\nfunction (_super) {\n __extends(SerialChartDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SerialChartDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"SerialChartDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return SerialChartDataItem;\n}(ChartDataItem);\n\nexport { SerialChartDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all series-based charts, like XY, Pie, etc.\r\n *\r\n * Is not useful on its own.\r\n *\r\n * @see {@link ISerialChartEvents} for a list of available Events\r\n * @see {@link ISerialChartAdapters} for a list of available Adapters\r\n */\n\nvar SerialChart =\n/** @class */\nfunction (_super) {\n __extends(SerialChart, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SerialChart() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"SerialChart\";\n _this.colors = new ColorSet();\n _this._usesData = false; // Create a container for series\n\n var seriesContainer = _this.chartContainer.createChild(Container);\n\n seriesContainer.shouldClone = false;\n seriesContainer.width = percent(100);\n seriesContainer.height = percent(100);\n seriesContainer.isMeasured = false;\n seriesContainer.layout = \"none\";\n seriesContainer.zIndex = 2;\n _this.seriesContainer = seriesContainer; // Create a container for bullets\n\n var bulletsContainer = _this.chartContainer.createChild(Container);\n\n bulletsContainer.shouldClone = false;\n bulletsContainer.width = percent(100);\n bulletsContainer.height = percent(100);\n bulletsContainer.isMeasured = false;\n bulletsContainer.zIndex = 3;\n bulletsContainer.layout = \"none\";\n _this.bulletsContainer = bulletsContainer; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n\n SerialChart.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n\n if (this.colors) {\n this.colors.dispose();\n }\n\n if (this.patterns) {\n this.patterns.dispose();\n }\n };\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor\r\n */\n\n\n SerialChart.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this); // Add a default screen reader title for accessibility\n // This will be overridden in screen reader if there are any `titles` set\n\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Serial chart\");\n }\n };\n\n Object.defineProperty(SerialChart.prototype, \"series\", {\n /**\r\n * A list of chart's series.\r\n *\r\n * @return Chart's series\r\n */\n get: function get() {\n if (!this._series) {\n this._series = new ListTemplate(this.createSeries());\n\n this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\n\n this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\n\n this._disposers.push(new ListDisposer(this._series, false));\n\n this._disposers.push(this._series.template);\n }\n\n return this._series;\n },\n enumerable: true,\n configurable: true\n });\n\n SerialChart.prototype.handleSeriesRemoved = function (event) {\n var series = event.oldValue;\n this.dataUsers.removeValue(series);\n this.dataUsers.each(function (dataUser) {\n dataUser.invalidateDataItems();\n });\n\n if (series.autoDispose) {\n series.dispose();\n } else {\n series.parent = undefined;\n series.bulletsContainer.parent = undefined;\n } //this.feedLegend();\n\n\n var legend = this.legend;\n\n if (legend) {\n var dataItems = this.legend.dataItems;\n\n for (var i = dataItems.length - 1; i >= 0; i--) {\n var dataItem = dataItems.getIndex(i);\n\n if (dataItem && dataItem.dataContext == series) {\n legend.dataItems.remove(dataItem);\n }\n }\n\n for (var i = legend.data.length - 1; i >= 0; i--) {\n var di = legend.data[i];\n\n if (di && di == series) {\n $array.remove(legend.data, di);\n }\n }\n }\n };\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n SerialChart.prototype.handleSeriesAdded = function (event) {\n var _this = this;\n\n var series = event.newValue;\n\n if (series.isDisposed()) {\n return;\n }\n\n series.chart = this;\n series.parent = this.seriesContainer;\n series.bulletsContainer.parent = this.bulletsContainer;\n\n this._dataUsers.moveValue(series);\n\n series.addDisposer(new Disposer(function () {\n _this.dataUsers.removeValue(series);\n }));\n this.handleSeriesAdded2(series);\n this.handleLegendSeriesAdded(series);\n };\n\n SerialChart.prototype.handleLegendSeriesAdded = function (series) {\n if (!series.hiddenInLegend) {\n if (this.legend) {\n this.legend.addData(series);\n }\n }\n };\n\n SerialChart.prototype.handleSeriesAdded2 = function (series) {\n var _this = this;\n\n if (!this.dataInvalid) {\n this._disposers.push( // on exit only as data is usually passed after push\n registry.events.once(\"exitframe\", function () {\n if (!series.data || series.data.length == 0) {\n series.data = _this.data;\n\n if (series.showOnInit) {\n series.reinit();\n series.setPropertyValue(\"showOnInit\", false);\n series.showOnInit = true;\n }\n\n if (!series.isDisposed()) {\n series.events.once(\"datavalidated\", function () {\n if (series.data == _this.data) {\n series._data = [];\n }\n });\n }\n }\n }));\n }\n };\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\n\n\n SerialChart.prototype.feedLegend = function () {\n var legend = this.legend;\n\n if (legend) {\n var legendData_1 = [];\n $iter.each(this.series.iterator(), function (series) {\n if (!series.hiddenInLegend) {\n legendData_1.push(series);\n }\n });\n legend.dataFields.name = \"name\";\n legend.data = legendData_1;\n }\n };\n /**\r\n * Creates and returns a new Series, suitable for this chart type.\r\n *\r\n * @return New series\r\n */\n\n\n SerialChart.prototype.createSeries = function () {\n return new Series();\n };\n\n Object.defineProperty(SerialChart.prototype, \"colors\", {\n /**\r\n * @return Color list\r\n */\n get: function get() {\n return this.getPropertyValue(\"colors\");\n },\n\n /**\r\n * Chart's color list.\r\n *\r\n * This list can be used by a number of serial items, like applying a new\r\n * color for each Series added. Or, applying a new color for each slice\r\n * of a Pie chart.\r\n *\r\n * Please see [[ColorSet]] for information on how you can set up to generate\r\n * unique colors.\r\n *\r\n * A theme you are using may override default pre-defined colors.\r\n *\r\n * @param value Color list\r\n */\n set: function set(value) {\n this.setPropertyValue(\"colors\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SerialChart.prototype, \"patterns\", {\n /**\r\n * @return Pattern set\r\n */\n get: function get() {\n return this.getPropertyValue(\"patterns\");\n },\n\n /**\r\n * A [[PatternSet]] to use when creating patterned fills for slices.\r\n *\r\n * @since 4.7.5\r\n * @param value Pattern set\r\n */\n set: function set(value) {\n this.setPropertyValue(\"patterns\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all parameters from another [[SerialChart]].\r\n *\r\n * @param source Source SerialChart\r\n */\n\n SerialChart.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.series.copyFrom(source.series);\n };\n /**\r\n * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state.\r\n */\n\n\n SerialChart.prototype.appear = function () {\n _super.prototype.appear.call(this);\n\n this.series.each(function (series) {\n if (series.showOnInit && series.inited) {\n series.appear();\n }\n });\n };\n\n return SerialChart;\n}(Chart);\n\nexport { SerialChart };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"SerialChart\"] = SerialChart;","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { 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 = it.call(o); }, 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\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); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport var Adder = /*#__PURE__*/function () {\n function Adder() {\n _classCallCheck(this, Adder);\n\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n\n _createClass(Adder, [{\n key: \"add\",\n value: function add(x) {\n var p = this._partials;\n var i = 0;\n\n for (var j = 0; j < this._n && j < 32; j++) {\n var y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n var p = this._partials;\n var n = this._n,\n x,\n y,\n lo,\n hi = 0;\n\n if (n > 0) {\n hi = p[--n];\n\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n\n if (n > 0 && (lo < 0 && p[n - 1] < 0 || lo > 0 && p[n - 1] > 0)) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n\n return hi;\n }\n }]);\n\n return Adder;\n}();\nexport function fsum(values, valueof) {\n var adder = new Adder();\n\n if (valueof === undefined) {\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (value = +value) {\n adder.add(value);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var index = -1;\n\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if (_value = +valueof(_value, ++index, values)) {\n adder.add(_value);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return +adder;\n}\nexport function fcumsum(values, valueof) {\n var adder = new Adder();\n var index = -1;\n return Float64Array.from(values, valueof === undefined ? function (v) {\n return adder.add(+v || 0);\n } : function (v) {\n return adder.add(+valueof(v, ++index, values) || 0);\n });\n}","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function (x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n};\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}","export default function noop() {}","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function Feature(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function FeatureCollection(object, stream) {\n var features = object.features,\n i = -1,\n n = features.length;\n\n while (++i < n) {\n streamGeometry(features[i].geometry, stream);\n }\n }\n};\nvar streamGeometryType = {\n Sphere: function Sphere(object, stream) {\n stream.sphere();\n },\n Point: function Point(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function MultiPoint(object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) {\n object = coordinates[i], stream.point(object[0], object[1], object[2]);\n }\n },\n LineString: function LineString(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function MultiLineString(object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) {\n streamLine(coordinates[i], stream, 0);\n }\n },\n Polygon: function Polygon(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function MultiPolygon(object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) {\n streamPolygon(coordinates[i], stream);\n }\n },\n GeometryCollection: function GeometryCollection(object, stream) {\n var geometries = object.geometries,\n i = -1,\n n = geometries.length;\n\n while (++i < n) {\n streamGeometry(geometries[i], stream);\n }\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1,\n n = coordinates.length - closed,\n coordinate;\n stream.lineStart();\n\n while (++i < n) {\n coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n }\n\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1,\n n = coordinates.length;\n stream.polygonStart();\n\n while (++i < n) {\n streamLine(coordinates[i], stream, 1);\n }\n\n stream.polygonEnd();\n}\n\nexport default function (object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}","import { Adder } from \"d3-array\";\nimport { atan2, cos, quarterPi, radians, sin, tau } from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\nexport var areaRingSum = new Adder(); // hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function polygonStart() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function polygonEnd() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function sphere() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u)); // Advance the previous points.\n\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function (object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}","import { Adder } from \"d3-array\";\nimport { areaStream, areaRingSum } from \"./area.js\";\nimport { cartesian, cartesianCross, cartesianNormalizeInPlace, spherical } from \"./cartesian.js\";\nimport { abs, degrees, epsilon, radians } from \"./math.js\";\nimport stream from \"./stream.js\";\nvar lambda0, phi0, lambda1, phi1, // bounds\nlambda2, // previous lambda-coordinate\nlambda00, phi00, // first point\np0, // previous 3D point\ndeltaSum, ranges, range;\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function polygonStart() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function polygonEnd() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);else if (deltaSum > epsilon) phi1 = 90;else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function sphere() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n} // Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\n\n\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function (feature) {\n var i, n, a, b, merged, deltaMax, delta;\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream); // First, sort ranges by their minimum longitudes.\n\n if (n = ranges.length) {\n ranges.sort(rangeCompare); // Then, merge any ranges that overlap.\n\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n } // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n\n\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n return lambda0 === Infinity || phi0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0, phi0], [lambda1, phi1]];\n}","import { asin, atan2, cos, sin, sqrt } from \"./math.js\";\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\nexport function cartesian(spherical) {\n var lambda = spherical[0],\n phi = spherical[1],\n cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n} // TODO return a\n\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n} // TODO return d\n\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}","/**\r\n * Map series module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Series, SeriesDataItem } from \"../series/Series\";\nimport { registry } from \"../../core/Registry\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar MapSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapSeriesDataItem\";\n _this.values.value = {};\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(MapSeriesDataItem.prototype, \"value\", {\n /**\r\n * @return Value\r\n */\n get: function get() {\n return this.values.value.value;\n },\n\n /**\r\n * Numeric value of the data item.\r\n *\r\n * Value may be used in heat-map calculations.\r\n *\r\n * @param value Value\r\n */\n set: function set(value) {\n this.setValue(\"value\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"zoomLevel\", {\n /**\r\n * @return Zoom level\r\n */\n get: function get() {\n return this.properties[\"zoomLevel\"];\n },\n\n /**\r\n * When `zoomToMapObject()` is called the map will either calculate suitable\r\n * zoom level itself or use object's `zoomLevel` if set.\r\n *\r\n * @param value Zoom level\r\n */\n set: function set(value) {\n this.setProperty(\"zoomLevel\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"zoomGeoPoint\", {\n /**\r\n * @return Zoom geo point\r\n */\n get: function get() {\n return this.properties[\"zoomGeoPoint\"];\n },\n\n /**\r\n * When `zoomToMapObject()` is called the map will either calculate suitable\r\n * center position itself or use object's `zoomGeoPoint` if set.\r\n *\r\n * @param value Zoom geo point\r\n */\n set: function set(value) {\n this.setProperty(\"zoomGeoPoint\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"east\", {\n /**\r\n * Longitude of the East-most point of the element.\r\n */\n get: function get() {\n return this._east;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"west\", {\n /**\r\n * Longitude of the West-most point of the element.\r\n */\n get: function get() {\n return this._west;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"south\", {\n /**\r\n * Latitude of the South-most point of the element.\r\n */\n get: function get() {\n return this._south;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeriesDataItem.prototype, \"north\", {\n /**\r\n * Latitude of the North-most point of the element.\r\n */\n get: function get() {\n return this._north;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates the item's bounding coordinates: coordinates of the East, West,\r\n * North, and South-most points.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n MapSeriesDataItem.prototype.updateExtremes = function () {\n var geometry = this.getFeature().geometry;\n\n if (geometry) {\n var bounds = d3geo.geoBounds(geometry);\n var west = bounds[0][0];\n var south = bounds[0][1];\n var north = bounds[1][1];\n var east = bounds[1][0];\n var changed = false;\n\n if (north != this.north) {\n this._north = $math.round(north, 6);\n changed = true;\n }\n\n if (south != this.south) {\n this._south = $math.round(south, 6);\n changed = true;\n }\n\n if (east != this.east) {\n this._east = $math.round(east, 6);\n changed = true;\n }\n\n if (west != this.west) {\n this._west = $math.round(west, 6);\n changed = true;\n } // solves single russia prob\n\n\n if (this._east < this._west) {\n this._east = 180;\n this._west = -180;\n }\n\n if (changed) {\n this.component.invalidateDataItems();\n }\n }\n };\n\n MapSeriesDataItem.prototype.getFeature = function () {\n return {};\n };\n\n return MapSeriesDataItem;\n}(SeriesDataItem);\n\nexport { MapSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for series of map objects.\r\n *\r\n * @see {@link IMapSeriesEvents} for a list of available Events\r\n * @see {@link IMapSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapSeries =\n/** @class */\nfunction (_super) {\n __extends(MapSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapSeries() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapSeries\"; // Set defaults\n\n _this.isMeasured = false;\n _this.nonScalingStroke = true; // Set data fields\n\n _this.dataFields.value = \"value\";\n _this.ignoreBounds = false;\n\n if (_this.tooltip) {\n _this.tooltip.showInViewport = true;\n } // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapSeries.prototype.createDataItem = function () {\n return new MapSeriesDataItem();\n };\n /**\r\n * Checks whether object should be included in series.\r\n *\r\n * @param includes A list of explicitly included ids\r\n * @param excludes A list of explicitly excluded ids\r\n * @param id Id of the object\r\n * @return Include?\r\n */\n\n\n MapSeries.prototype.checkInclude = function (includes, excludes, id) {\n if (includes) {\n if (includes.length == 0) {\n return false;\n } else {\n if (includes.indexOf(id) == -1) {\n return false;\n }\n }\n }\n\n if (excludes && excludes.length > 0) {\n if (excludes.indexOf(id) != -1) {\n return false;\n }\n }\n\n return true;\n };\n\n Object.defineProperty(MapSeries.prototype, \"useGeodata\", {\n /**\r\n * @return Use GeoJSON data?\r\n */\n get: function get() {\n return this.getPropertyValue(\"useGeodata\");\n },\n\n /**\r\n * Should the map extract all the data about element from the GeoJSON?\r\n *\r\n * This is especially relevant for [[MapPolygonSeries]]. If not set to `true`\r\n * polygon series will need to contain geographical data in itself in order\r\n * to be drawn.\r\n *\r\n * If this is set to `true`, series will try to extract data for its objects\r\n * from either chart-level `geodata` or from series' `geodata` which holds\r\n * map infor in GeoJSON format.\r\n *\r\n * @default false\r\n * @param value Use GeoJSON data?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"useGeodata\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"include\", {\n /**\r\n * @return Included objects\r\n */\n get: function get() {\n return this.getPropertyValue(\"include\");\n },\n\n /**\r\n * A list of object ids that should be explictly included in the series.\r\n *\r\n * If this is not set, the series will automatically include all of the\r\n * objects, available in the GeoJSON map. (minus the ones listed in\r\n * `exclude`)\r\n *\r\n * If you need to display only specific objects, use `include`. E.g.:\r\n *\r\n * `include = [\"FR\", \"ES\", \"DE\"];`\r\n *\r\n * The above will show only France, Spain, and Germany out of the whole map.\r\n *\r\n * @param value Included objects\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"include\", value)) {\n this.processIncExc();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n MapSeries.prototype.processIncExc = function () {\n //this.data = [];\n this.invalidateData();\n };\n\n Object.defineProperty(MapSeries.prototype, \"ignoreBounds\", {\n /**\r\n * @return Ignore bounds?\r\n */\n get: function get() {\n return this.getPropertyValue(\"ignoreBounds\");\n },\n\n /**\r\n * Should this series be included when calculating bounds of the map?\r\n *\r\n * This affects initial zoom as well as limits for zoom/pan.\r\n *\r\n * By default, `MapPolygonSeries` included (true), while `MapImageSeries` and\r\n * `MapLineSeries` are not (`false`).\r\n *\r\n * @since 4.3.0\r\n * @param value Ignore bounds?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"ignoreBounds\", value)) {\n if (this.chart) {\n this.chart.updateExtremes();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"exclude\", {\n /**\r\n * @return Excluded ids\r\n */\n get: function get() {\n return this.getPropertyValue(\"exclude\");\n },\n\n /**\r\n * A list of object ids that should be excluded from the series.\r\n *\r\n * E.g. you want to include all of the areas from a GeoJSON map, except\r\n * Antarctica.\r\n *\r\n * You'd leave `include` empty, and set `exclude = [\"AQ\"]`.\r\n *\r\n * @param value Excluded ids\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"exclude\", value)) {\n this.processIncExc();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Decorates a newly added object.\r\n *\r\n * @param event [description]\r\n */\n\n MapSeries.prototype.handleObjectAdded = function (event) {\n var mapObject = event.newValue;\n mapObject.parent = this;\n mapObject.series = this;\n mapObject.strokeWidth = mapObject.strokeWidth;\n };\n\n Object.defineProperty(MapSeries.prototype, \"geodata\", {\n /**\r\n * @return GeoJSON data\r\n */\n get: function get() {\n return this._geodata;\n },\n\n /**\r\n * Map data in GeoJSON format.\r\n *\r\n * The series supports the following GeoJSON objects: `Point`, `LineString`,\r\n * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n *\r\n * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n * @param geoJSON GeoJSON data\r\n */\n set: function set(geodata) {\n if (geodata != this._geodata) {\n this._geodata = geodata;\n\n if (this.reverseGeodata) {\n this.chart.processReverseGeodata(this._geodata);\n }\n\n for (var i = this.data.length - 1; i >= 0; i--) {\n if (this.data[i].madeFromGeoData == true) {\n this.data.splice(i, 1);\n }\n }\n\n this.disposeData();\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"reverseGeodata\", {\n /**\r\n * @returns Reverse the order of geodata coordinates?\r\n */\n get: function get() {\n return this.getPropertyValue(\"reverseGeodata\");\n },\n\n /**\r\n * Indicates whether GeoJSON geodata supplied to the chart uses\r\n * ESRI (clockwise) or non-ESRI (counter-clockwise) order of the polygon\r\n * coordinates.\r\n *\r\n * `MapChart` supports only ESRI standard, so if your custom maps appears\r\n * garbled, try setting `reverseGeodata = true`.\r\n *\r\n * @default false\r\n * @since 4.10.11\r\n * @param value Reverse the order of geodata coordinates?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"reverseGeodata\", value) && this._geodata) {\n this.chart.processReverseGeodata(this._geodata);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"geodataSource\", {\n /**\r\n * Returns a [[DataSource]] specifically for loading Component's data.\r\n *\r\n * @return Data source\r\n */\n get: function get() {\n if (!this._dataSources[\"geodata\"]) {\n this.getDataSource(\"geodata\");\n }\n\n return this._dataSources[\"geodata\"];\n },\n\n /**\r\n * Sets a [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @param value Data source\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this._dataSources[\"geodata\"]) {\n this.removeDispose(this._dataSources[\"geodata\"]);\n }\n\n this._dataSources[\"geodata\"] = value;\n this._dataSources[\"geodata\"].component = this;\n this.events.on(\"inited\", function () {\n _this.loadData(\"geodata\");\n }, undefined, false);\n this.setDataSourceEvents(value, \"geodata\");\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n MapSeries.prototype.getFeatures = function () {\n return;\n };\n /**\r\n * @ignore\r\n */\n\n\n MapSeries.prototype.validateDataItems = function () {\n _super.prototype.validateDataItems.call(this);\n\n this.updateExtremes();\n };\n /**\r\n * @ignore\r\n */\n\n\n MapSeries.prototype.updateExtremes = function () {\n var north;\n var south;\n var east;\n var west;\n this.dataItems.each(function (dataItem) {\n if (dataItem.north > north || !$type.isNumber(north)) {\n north = dataItem.north;\n }\n\n if (dataItem.south < south || !$type.isNumber(south)) {\n south = dataItem.south;\n }\n\n if (dataItem.west < west || !$type.isNumber(west)) {\n west = dataItem.west;\n }\n\n if (dataItem.east > east || !$type.isNumber(east)) {\n east = dataItem.east;\n }\n });\n\n if (this._mapObjects) {\n this._mapObjects.each(function (mapObject) {\n if (mapObject.north > north || !$type.isNumber(north)) {\n north = mapObject.north;\n }\n\n if (mapObject.south < south || !$type.isNumber(south)) {\n south = mapObject.south;\n }\n\n if (mapObject.west < west || !$type.isNumber(west)) {\n west = mapObject.west;\n }\n\n if (mapObject.east > east || !$type.isNumber(east)) {\n east = mapObject.east;\n }\n });\n }\n\n if (this.north != north || this.east != east || this.south != south || this.west != west) {\n this._north = north;\n this._east = east;\n this._west = west;\n this._south = south;\n this.dispatch(\"geoBoundsChanged\");\n\n if (!this.ignoreBounds) {\n this.chart.updateExtremes();\n }\n }\n };\n\n Object.defineProperty(MapSeries.prototype, \"north\", {\n /**\r\n * @return Latitude\r\n */\n get: function get() {\n if ($type.isNumber(this._northDefined)) {\n return this._northDefined;\n }\n\n return this._north;\n },\n\n /**\r\n * North-most latitude of the series.\r\n *\r\n * By default, this holds auto-calculated latitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Latitude\r\n */\n set: function set(value) {\n this._northDefined = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"south\", {\n /**\r\n * @return Latitude\r\n */\n get: function get() {\n if ($type.isNumber(this._southDefined)) {\n return this._southDefined;\n }\n\n return this._south;\n },\n\n /**\r\n * South-most latitude of the series.\r\n *\r\n * By default, this holds auto-calculated latitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Latitude\r\n */\n set: function set(value) {\n this._southDefined = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"west\", {\n /**\r\n * @return Longitude\r\n */\n get: function get() {\n if ($type.isNumber(this._westDefined)) {\n return this._westDefined;\n }\n\n return this._west;\n },\n\n /**\r\n * West-most longitude of the series.\r\n *\r\n * By default, this holds auto-calculated longitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Longitude\r\n */\n set: function set(value) {\n this._westDefined = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapSeries.prototype, \"east\", {\n /**\r\n * @return Longitude\r\n */\n get: function get() {\n if ($type.isNumber(this._eastDefined)) {\n return this._eastDefined;\n }\n\n return this._east;\n },\n\n /**\r\n * East-most longitude of the series.\r\n *\r\n * By default, this holds auto-calculated longitude of the extremity.\r\n *\r\n * It can be overridden manually.\r\n *\r\n * @param value Longitude\r\n */\n set: function set(value) {\n this._eastDefined = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n MapSeries.prototype.processConfig = function (config) {\n if ($type.hasValue(config[\"geodata\"]) && $type.isString(config[\"geodata\"])) {\n var name_1 = config[\"geodata\"]; // Check if there's a map loaded by such name\n\n if ($type.hasValue(window[\"am4geodata_\" + config[\"geodata\"]])) {\n config[\"geodata\"] = window[\"am4geodata_\" + config[\"geodata\"]];\n } // Nope. Let's try maybe we got JSON as string?\n else {\n try {\n config[\"geodata\"] = JSON.parse(config[\"geodata\"]);\n } catch (e) {\n // No go again. Error out.\n throw Error(\"MapChart error: Geodata `\" + name_1 + \"` is not loaded or is incorrect.\");\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * Adds `projection` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\n\n\n MapSeries.prototype.asIs = function (field) {\n return field == \"geodata\" || _super.prototype.asIs.call(this, field);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapSeries.prototype.updateTooltipBounds = function () {\n if (this.tooltip && this.topParent) {\n this.tooltip.setBounds({\n x: 10,\n y: 10,\n width: this.topParent.maxWidth - 20,\n height: this.topParent.maxHeight - 20\n });\n }\n };\n\n return MapSeries;\n}(Series);\n\nexport { MapSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapSeries\"] = MapSeries;\nregistry.registeredClasses[\"MapSeriesDataItem\"] = MapSeriesDataItem;","/**\r\n * Map object module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { registry } from \"../../core/Registry\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as d3geo from \"d3-geo\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A base class for all map objects: lines, images, etc.\r\n *\r\n * @see {@link IMapObjectEvents} for a list of available events\r\n * @see {@link IMapObjectAdapters} for a list of available Adapters\r\n */\n\nvar MapObject =\n/** @class */\nfunction (_super) {\n __extends(MapObject, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapObject() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapObject\"; // Set defaults\n\n _this.isMeasured = false;\n _this.layout = \"none\";\n _this.clickable = true; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * (Re)validates this object, forcing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapObject.prototype.validate = function () {\n if (this.series && this.series.itemReaderText) {\n this.readerTitle = this.series.itemReaderText;\n }\n\n _super.prototype.validate.call(this);\n };\n /**\r\n * Updates the item's bounding coordinates: coordinates of the East, West,\r\n * North, and South-most points.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapObject.prototype.updateExtremes = function () {\n var feature = this.getFeature();\n\n if (feature) {\n var geometry = feature.geometry;\n\n if (geometry) {\n var bounds = d3geo.geoBounds(geometry);\n var west = bounds[0][0];\n var south = bounds[0][1];\n var north = bounds[1][1];\n var east = bounds[1][0];\n var changed = false;\n\n if (north != this.north) {\n this._north = $math.round(north, 8);\n changed = true;\n }\n\n if (south != this.south) {\n this._south = $math.round(south);\n changed = true;\n }\n\n if (east != this.east) {\n this._east = $math.round(east);\n changed = true;\n }\n\n if (west != this.west) {\n this._west = $math.round(west);\n changed = true;\n }\n\n if (changed) {\n this.dispatch(\"geoBoundsChanged\");\n\n if (this.series) {\n this.series.invalidateDataItems();\n }\n }\n }\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n MapObject.prototype.getFeature = function () {\n return {};\n };\n\n Object.defineProperty(MapObject.prototype, \"east\", {\n /**\r\n * Longitude of the East-most point of the element.\r\n */\n get: function get() {\n if ($type.isNumber(this._east)) {\n return this._east;\n } else if (this.dataItem) {\n return this.dataItem.east;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapObject.prototype, \"west\", {\n /**\r\n * Longitude of the West-most point of the element.\r\n */\n get: function get() {\n if ($type.isNumber(this._west)) {\n return this._west;\n } else if (this.dataItem) {\n return this.dataItem.west;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapObject.prototype, \"south\", {\n /**\r\n * Latitude of the South-most point of the element.\r\n */\n get: function get() {\n if ($type.isNumber(this._south)) {\n return this._south;\n } else if (this.dataItem) {\n return this.dataItem.south;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapObject.prototype, \"north\", {\n /**\r\n * Latitude of the North-most point of the element.\r\n */\n get: function get() {\n if ($type.isNumber(this._north)) {\n return this._north;\n } else if (this.dataItem) {\n return this.dataItem.north;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Shows the element's [[Tooltip]].\r\n *\r\n * A tooltip will be populated using text templates in either `tooltipHTML` or\r\n * `tooltipText` as well as data in `tooltipDataItem`.\r\n *\r\n * @see {@link Tooltip}\r\n * @param optional point (sprite-related) to which tooltip must point.\r\n * @return returns true if the tooltip was shown and false if it wasn't (no text was found)\r\n */\n\n MapObject.prototype.showTooltip = function (point) {\n var res = _super.prototype.showTooltip.call(this, point);\n\n if (res && this.showTooltipOn == \"always\" && !this.series.chart.events.has(\"mappositionchanged\", this.handleTooltipMove, this)) {\n this.addDisposer(this.series.chart.events.on(\"mappositionchanged\", this.handleTooltipMove, this));\n }\n\n return res;\n };\n\n MapObject.prototype.handleTooltipMove = function (ev) {\n if (!this.tooltip.isHidden) {\n this.showTooltip();\n }\n };\n /**\r\n * Sets a [[DataItem]].\r\n * @param dataItem DataItem\r\n */\n\n\n MapObject.prototype.setDataItem = function (dataItem) {\n _super.prototype.setDataItem.call(this, dataItem);\n\n this.applyAccessibility();\n };\n\n return MapObject;\n}(Container);\n\nexport { MapObject };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapObject\"] = MapObject;","/**\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapObject } from \"./MapObject\";\nimport { registry } from \"../../core/Registry\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to place an image on the map.\r\n *\r\n * @see {@link IMapImageEvents} for a list of available events\r\n * @see {@link IMapImageAdapters} for a list of available Adapters\r\n */\n\nvar MapImage =\n/** @class */\nfunction (_super) {\n __extends(MapImage, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapImage() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapImage\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(MapImage.prototype, \"latitude\", {\n /**\r\n * @return Latitude\r\n */\n get: function get() {\n var latitude = this.getPropertyValue(\"latitude\");\n\n if (!$type.isNumber(latitude) && this.dataItem && this.dataItem.geoPoint) {\n latitude = this.dataItem.geoPoint.latitude;\n }\n\n return latitude;\n },\n\n /**\r\n * Latitude image is placed at.\r\n *\r\n * @param value Latitude\r\n */\n set: function set(value) {\n this.setPropertyValue(\"latitude\", value, false, true);\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapImage.prototype, \"longitude\", {\n /**\r\n * @return Longitude\r\n */\n get: function get() {\n var longitude = this.getPropertyValue(\"longitude\");\n\n if (!$type.isNumber(longitude) && this.dataItem && this.dataItem.geoPoint) {\n longitude = this.dataItem.geoPoint.longitude;\n }\n\n return longitude;\n },\n\n /**\r\n * Longitude image is placed on.\r\n *\r\n * @param value Longitude\r\n */\n set: function set(value) {\n this.setPropertyValue(\"longitude\", value, false, true);\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Repositions the image to it's current position.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n MapImage.prototype.validatePosition = function () {\n if ($type.isNumber(this.latitude) && $type.isNumber(this.longitude)) {\n //this.moveTo(this.series.chart.projection.convert({ latitude: this.latitude, longitude: this.longitude }));\n var p = this.series.chart.projection.d3Projection([this.longitude, this.latitude]);\n var visible = this.series.chart.projection.d3Path({\n type: 'Point',\n coordinates: [this.longitude, this.latitude]\n });\n\n if (!visible) {\n this.__disabled = true;\n } else {\n this.__disabled = false;\n }\n\n this.moveTo({\n x: p[0],\n y: p[1]\n });\n }\n\n _super.prototype.validatePosition.call(this);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapImage.prototype.getFeature = function () {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [this.longitude, this.latitude]\n }\n };\n };\n\n return MapImage;\n}(MapObject);\n\nexport { MapImage };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapImage\"] = MapImage;","export default function (a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function (x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n}","import compose from \"./compose.js\";\nimport { abs, asin, atan2, cos, degrees, pi, radians, sin, tau } from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) : rotationLambda(deltaLambda) : deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) : rotationIdentity;\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function (lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), asin(k * cosDeltaGamma + y * sinDeltaGamma)];\n }\n\n rotation.invert = function (lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), asin(k * cosDeltaPhi - x * sinDeltaPhi)];\n };\n\n return rotation;\n}\n\nexport default function (rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function (coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}","import { cartesian, cartesianNormalizeInPlace, spherical } from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport { acos, cos, degrees, epsilon, radians, sin, tau } from \"./math.js\";\nimport { rotateRadians } from \"./rotation.js\"; // Generates a circle centered at [0°, 0°], with a given radius and precision.\n\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n} // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\n\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function () {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {\n point: point\n };\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {\n type: \"Polygon\",\n coordinates: [ring]\n };\n ring = rotate = null;\n return c;\n }\n\n circle.center = function (_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function (_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function (_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}","/**\r\n * A collection of Map-related utility functions.\r\n */\nimport * as $array from \"../../core/utils/Array\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Converts a multi-part polygon in X/Y coordinates to a geo-multipolygon in\r\n * geo-points (lat/long).\r\n *\r\n * @param multiPolygon Source multi-polygon\r\n * @return Geo-multipolygon\r\n */\n\nexport function multiPolygonToGeo(multiPolygon) {\n return $array.map(multiPolygon, function (polygon) {\n var surface = polygon[0];\n var hole = polygon[1]; //let holePoints: Array<IGeoPoint> = [];\n\n var geoArea = [];\n\n if (surface) {\n geoArea.push(multiPointToGeo(surface));\n }\n\n if (hole) {\n geoArea.push(multiPointToGeo(hole));\n }\n\n return geoArea;\n });\n}\n/**\r\n * Converts a multiline in X/Y coordinates to a geo-multiline in geo-points\r\n * (lat/long).\r\n *\r\n * @param multiLine Source multiline\r\n * @return Geo-multiline\r\n */\n\nexport function multiLineToGeo(multiLine) {\n return $array.map(multiLine, function (multiLine) {\n return multiPointToGeo(multiLine);\n });\n}\n/**\r\n * Converts multiple X/Y points into a lat/long geo-points.\r\n *\r\n * @param points Source points\r\n * @return Geo-points\r\n */\n\nexport function multiPointToGeo(points) {\n return $array.map(points, function (point) {\n return pointToGeo(point);\n });\n}\n/**\r\n * Converts multiple X/Y points into a lat/long geo-points.\r\n *\r\n * @param points Source points\r\n * @return Geo-points\r\n */\n\nexport function multiGeoToPoint(geoPoints) {\n return $array.map(geoPoints, geoToPoint);\n}\n/**\r\n * Converts X/Y point into a lat/long geo-point.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\n\nexport function pointToGeo(point) {\n return {\n longitude: point[0],\n latitude: point[1]\n };\n}\n/**\r\n * Converts lat/long geo-point into a X/Y point.\r\n *\r\n * @param point Source geo-point\r\n * @return X/Y point\r\n */\n\nexport function geoToPoint(geoPoint) {\n return [geoPoint.longitude, geoPoint.latitude];\n}\n/**\r\n * Converts geo line (collection of lat/long coordinates) to screen line (x/y).\r\n *\r\n * @param multiGeoLine Source geo line\r\n * @return Screen line\r\n */\n\nexport function multiGeoLineToMultiLine(multiGeoLine) {\n return $array.map(multiGeoLine, function (segment) {\n return $array.map(segment, geoToPoint);\n });\n}\n/**\r\n * Converts a geo polygon (collection of lat/long coordinates) to screen\r\n * polygon (x/y).\r\n *\r\n * @param multiGeoPolygon Source polygon\r\n * @return Screen polygon\r\n */\n\nexport function multiGeoPolygonToMultipolygon(multiGeoPolygon) {\n return $array.map(multiGeoPolygon, function (geoPolygon) {\n var surface = geoPolygon[0];\n var hole = geoPolygon[1];\n var multiPolygon = [];\n\n if (surface) {\n multiPolygon.push(multiGeoToPoint(surface));\n }\n\n if (hole) {\n multiPolygon.push(multiGeoToPoint(hole));\n }\n\n return multiPolygon;\n });\n}\n/**\r\n * Returns a set of geographical coordinates for the circle with a center\r\n * at specific lat/long coordinates and radius (in degrees).\r\n *\r\n * @since 4.3.0\r\n * @param longitude Center longitude\r\n * @param latitude Center latitude\r\n * @param radius Radius (degrees)\r\n * @return Circle coordinates\r\n */\n\nexport function getCircle(longitude, latitude, radius) {\n return [d3geo.geoCircle().center([longitude, latitude]).radius(radius)().coordinates];\n}\n/**\r\n * Returns a set of screen coordinates that represents a \"background\" area\r\n * between provided extremities.\r\n *\r\n * @since 4.3.0\r\n * @param north North latitude\r\n * @param east East longitude\r\n * @param south South latitude\r\n * @param west West longitude\r\n * @return Polygon\r\n */\n\nexport function getBackground(north, east, south, west) {\n var multiPolygon = [];\n\n if (west == -180) {\n west = -179.9999;\n }\n\n if (south == -90) {\n south = -89.9999;\n }\n\n if (north == 90) {\n north = 89.9999;\n }\n\n if (east == 180) {\n east = 179.9999;\n }\n\n var stepLong = Math.min(90, (east - west) / Math.ceil((east - west) / 90));\n var stepLat = (north - south) / Math.ceil((north - south) / 90);\n\n for (var ln = west; ln < east; ln = ln + stepLong) {\n var surface = [];\n multiPolygon.push([surface]);\n\n if (ln + stepLong > east) {\n stepLong = east - ln;\n }\n\n for (var ll = ln; ll <= ln + stepLong; ll = ll + 5) {\n surface.push([ll, north]);\n }\n\n for (var lt = north; lt >= south; lt = lt - stepLat) {\n surface.push([ln + stepLong, lt]);\n }\n\n for (var ll = ln + stepLong; ll >= ln; ll = ll - 5) {\n surface.push([ll, south]);\n }\n\n for (var lt = south; lt <= north; lt = lt + stepLat) {\n surface.push([ln, lt]);\n }\n }\n\n return multiPolygon;\n}","/**\r\n * Map polygon module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapObject } from \"./MapObject\";\nimport { Polygon } from \"../../core/elements/Polygon\";\nimport { registry } from \"../../core/Registry\";\nimport * as $type from \"../../core/utils/Type\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport $polylabel from \"polylabel\";\nimport * as $mapUtils from \"./MapUtils\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a polygon on the map.\r\n *\r\n * @see {@link IMapPolygonEvents} for a list of available events\r\n * @see {@link IMapPolygonAdapters} for a list of available Adapters\r\n */\n\nvar MapPolygon =\n/** @class */\nfunction (_super) {\n __extends(MapPolygon, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapPolygon() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapPolygon\";\n _this.polygon = _this.createChild(Polygon);\n _this.polygon.shouldClone = false;\n _this.polygon.applyOnClones = true;\n\n _this.setPropertyValue(\"precision\", 0.5);\n\n var interfaceColors = new InterfaceColorSet();\n _this.fill = interfaceColors.getFor(\"secondaryButton\");\n _this.stroke = interfaceColors.getFor(\"secondaryButtonStroke\");\n _this.strokeOpacity = 1;\n _this.tooltipPosition = \"pointer\";\n _this.nonScalingStroke = true;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapPolygon.prototype.getFeature = function () {\n if (this.multiPolygon && this.multiPolygon.length > 0) {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"MultiPolygon\",\n coordinates: this.multiPolygon\n }\n };\n }\n };\n\n Object.defineProperty(MapPolygon.prototype, \"multiGeoPolygon\", {\n /**\r\n * @return Polygon coordinates\r\n */\n get: function get() {\n var multiGeoPolygon = this.getPropertyValue(\"multiGeoPolygon\");\n\n if (!multiGeoPolygon && this.dataItem) {\n multiGeoPolygon = this.dataItem.multiGeoPolygon;\n }\n\n return multiGeoPolygon;\n },\n\n /**\r\n * Set of coordinates for the polygon.\r\n *\r\n * @param multiGeoPolygon Polygon coordinates\r\n */\n set: function set(multiGeoPolygon) {\n this.setPropertyValue(\"multiGeoPolygon\", multiGeoPolygon, true);\n this.multiPolygon = $mapUtils.multiGeoPolygonToMultipolygon(multiGeoPolygon);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"multiPolygon\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n var multiPolygon = this.getPropertyValue(\"multiPolygon\");\n\n if (!multiPolygon && this.dataItem) {\n multiPolygon = this.dataItem.multiPolygon;\n }\n\n return multiPolygon;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Part 1\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 220 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ],\r\n *\r\n * // Part 2\r\n * [\r\n * [\r\n * [ 300, 350 ],\r\n * [ 320, 400 ],\r\n * [ 350, 420 ],\r\n * [ 370, 440 ],\r\n * [ 300, 350 ]\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiPolygon Coordinates\r\n */\n set: function set(multiPolygon) {\n if (this.setPropertyValue(\"multiPolygon\", multiPolygon)) {\n this.updateExtremes();\n this.invalidate();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * (Re)validates the polygon, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n MapPolygon.prototype.validate = function () {\n if (this.series) {\n var projection = this.series.chart.projection;\n var pathGenerator = projection.d3Path;\n\n if (this.multiPolygon) {\n if (this.series) {\n var feature = {\n type: \"MultiPolygon\",\n coordinates: this.multiPolygon\n };\n projection.d3Projection.precision(this.precision);\n this.polygon.path = pathGenerator(feature);\n }\n\n if (this.series.calculateVisualCenter) {\n var biggestArea = 0;\n var biggestPolygon = this.multiPolygon[0];\n\n if (this.multiPolygon.length > 1) {\n for (var i = 0; i < this.multiPolygon.length; i++) {\n var polygon = this.multiPolygon[i];\n var area = d3geo.geoArea({\n type: \"Polygon\",\n coordinates: polygon\n });\n\n if (area > biggestArea) {\n biggestPolygon = polygon;\n biggestArea = area;\n }\n }\n }\n\n var center = $polylabel(biggestPolygon);\n this._visualLongitude = center[0];\n this._visualLatitude = center[1];\n } else {\n this._visualLongitude = this.longitude;\n this._visualLatitude = this.latitude;\n }\n }\n }\n\n _super.prototype.validate.call(this);\n };\n /**\r\n * @ignore Exclude from docs\r\n */\n\n\n MapPolygon.prototype.measureElement = function () {// Overriding, just to avoid extra measure\n };\n\n Object.defineProperty(MapPolygon.prototype, \"latitude\", {\n /**\r\n * Latitude of the geometrical center of the polygon.\r\n *\r\n * @readonly\r\n * @return Center latitude\r\n */\n get: function get() {\n return this.north + (this.south - this.north) / 2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"longitude\", {\n /**\r\n * Longitude of the geometrical center of the polygon.\r\n *\r\n * @readonly\r\n * @return Center longitude\r\n */\n get: function get() {\n return this.east + (this.west - this.east) / 2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"visualLatitude\", {\n /**\r\n * @return Latitude\r\n */\n get: function get() {\n var latitude = this.getPropertyValue(\"visualLatitude\");\n\n if ($type.isNumber(latitude)) {\n return latitude;\n }\n\n if (!this._adapterO) {\n return this._visualLatitude;\n } else {\n return this._adapterO.apply(\"visualLatitude\", this._visualLatitude);\n }\n },\n\n /**\r\n * Latitude of the visual center of the polygon.\r\n *\r\n * It may (and probably won't) coincide with geometrical center.\r\n *\r\n * @since 4.3.0\r\n * @param value Latitude\r\n */\n set: function set(value) {\n this.setPropertyValue(\"visualLatitude\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"visualLongitude\", {\n /**\r\n * @return Longitude\r\n */\n get: function get() {\n var longitude = this.getPropertyValue(\"visualLongitude\");\n\n if ($type.isNumber(longitude)) {\n return longitude;\n }\n\n if (!this._adapterO) {\n return this._visualLongitude;\n } else {\n return this._adapterO.apply(\"visualLongitude\", this._visualLongitude);\n }\n },\n\n /**\r\n * Longitude of the visual center of the polygon.\r\n *\r\n * It may (and probably won't) coincide with geometrical center.\r\n *\r\n * @since 4.3.0\r\n * @param value Longitude\r\n */\n set: function set(value) {\n this.setPropertyValue(\"visualLongitude\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"pixelWidth\", {\n /**\r\n * Not 100% sure about this, as if we add something to MapPolygon this\r\n * won't be true, but otherwise we will get all 0 and the tooltip won't\r\n * be positioned properly\r\n * @hidden\r\n */\n\n /**\r\n * Element's width in pixels.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.polygon.pixelWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygon.prototype, \"pixelHeight\", {\n /**\r\n * Element's height in pixels.\r\n *\r\n * @readonly\r\n * @return Width (px)\r\n */\n get: function get() {\n return this.polygon.pixelHeight;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies all properties from another instance of [[MapPolygon]].\r\n *\r\n * @param source Source series\r\n */\n\n MapPolygon.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.polygon.copyFrom(source.polygon);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapPolygon.prototype.updateExtremes = function () {\n _super.prototype.updateExtremes.call(this);\n };\n\n Object.defineProperty(MapPolygon.prototype, \"boxArea\", {\n /**\r\n * @ignore\r\n * used to sorth polygons from big to small\r\n */\n get: function get() {\n return (this.north - this.south) * (this.east - this.west);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return X\r\n */\n\n MapPolygon.prototype.getTooltipX = function () {\n return this.series.chart.projection.convert({\n longitude: this.visualLongitude,\n latitude: this.visualLatitude\n }).x;\n };\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return Y\r\n */\n\n\n MapPolygon.prototype.getTooltipY = function () {\n return this.series.chart.projection.convert({\n longitude: this.visualLongitude,\n latitude: this.visualLatitude\n }).y;\n };\n\n Object.defineProperty(MapPolygon.prototype, \"precision\", {\n get: function get() {\n return this.getPropertyValue(\"precision\");\n },\n\n /**\r\n * When polygon's sides are plotted, they are bent according to the used\r\n * projection.\r\n *\r\n * `precision` introduces a setting which can control when such bending\r\n * occurs.\r\n *\r\n * If the distance (in degrees) between two points of polygon's side is less\r\n * than `precision`, no bending will take place and the line will be straight.\r\n *\r\n * Set to large number (e.g. 10000) for perfectly straight lines on all\r\n * polygon's sides.\r\n *\r\n * @since 4.9.1\r\n * @default 0.5\r\n * @param value Precision\r\n */\n set: function set(value) {\n this.setPropertyValue(\"precision\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return MapPolygon;\n}(MapObject);\n\nexport { MapPolygon };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapPolygon\"] = MapPolygon;","/**\r\n * Map polygon series module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\nimport { MapPolygon } from \"./MapPolygon\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { registry } from \"../../core/Registry\";\nimport * as $mapUtils from \"./MapUtils\";\nimport * as $array from \"../../core/utils/Array\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport { Disposer } from \"../../core/utils/Disposer\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapPolygonSeries]]\r\n * @see {@link DataItem}\r\n */\n\nvar MapPolygonSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapPolygonSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapPolygonSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapPolygonSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapPolygonSeriesDataItem.prototype.getFeature = function () {\n if (this.multiPolygon && this.multiPolygon.length > 0) {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"MultiPolygon\",\n coordinates: this.multiPolygon\n }\n };\n }\n };\n\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"mapPolygon\", {\n /**\r\n * A [[MapPolygon]] element related to this data item.\r\n *\r\n * @readonly\r\n * @return Element\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._mapPolygon) {\n var mapPolygon_1 = this.component.mapPolygons.create();\n this._mapPolygon = mapPolygon_1;\n this.addSprite(mapPolygon_1);\n\n this._disposers.push(new Disposer(function () {\n if (_this.component) {\n _this.component.mapPolygons.removeValue(mapPolygon_1);\n }\n }));\n\n this.mapObject = mapPolygon_1;\n }\n\n return this._mapPolygon;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"polygon\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._polygon;\n },\n\n /**\r\n * A collection of X/Y coordinates for a single polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 200 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param polygon Coordinates\r\n */\n set: function set(polygon) {\n this._polygon = polygon;\n this.multiPolygon = [polygon];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"multiPolygon\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._multiPolygon;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Part 1\r\n * [\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ],\r\n * [ 150, 220 ],\r\n * [ 170, 240 ],\r\n * [ 100, 150 ]\r\n * ]\r\n * ],\r\n *\r\n * // Part 2\r\n * [\r\n * [\r\n * [ 300, 350 ],\r\n * [ 320, 400 ],\r\n * [ 350, 420 ],\r\n * [ 370, 440 ],\r\n * [ 300, 350 ]\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiPolygon Coordinates\r\n */\n set: function set(multiPolygon) {\n this._multiPolygon = multiPolygon;\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"geoPolygon\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._geoPolygon;\n },\n\n /**\r\n * A collection of lat/long coordinates for a single polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * { latitude: -10.0, longitude: -10.0 },\r\n * { latitude: 10.0, longitude: -10.0 },\r\n * { latitude: 10.0, longitude: 10.0 },\r\n * { latitude: -10.0, longitude: -10.0 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.6} GeoJSON Polygon reference\r\n * @param geoPolygon Coordinates\r\n */\n set: function set(geoPolygon) {\n this._geoPolygon = geoPolygon;\n this.multiGeoPolygon = [geoPolygon];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygonSeriesDataItem.prototype, \"multiGeoPolygon\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._multiGeoPolygon;\n },\n\n /**\r\n * A collection of lat/long coordinates for a multi-part polygon. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [\r\n * [\r\n * { longitude: 180.0, latitude: 40.0 },\r\n * { longitude: 180.0, latitude: 50.0 },\r\n * { longitude: 170.0, latitude: 50.0 },\r\n * { longitude: 170.0, latitude: 40.0 },\r\n * { longitude: 180.0, latitude: 40.0 }\r\n * ]\r\n * ],\r\n * [\r\n * [\r\n * { longitude: -170.0, latitude: 40.0 },\r\n * { longitude: -170.0, latitude: 50.0 },\r\n * { longitude: -180.0, latitude: 50.0 },\r\n * { longitude: -180.0, latitude: 40.0 },\r\n * { longitude: -170.0, latitude: 40.0 }\r\n * ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.7} GeoJSON MultiPolygon reference\r\n * @param multiGeoPolygon Coordinates\r\n */\n set: function set(multiGeoPolygon) {\n this._multiGeoPolygon = multiGeoPolygon;\n this.multiPolygon = $mapUtils.multiGeoPolygonToMultipolygon(multiGeoPolygon);\n },\n enumerable: true,\n configurable: true\n });\n return MapPolygonSeriesDataItem;\n}(MapSeriesDataItem);\n\nexport { MapPolygonSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A series of map polygon elements.\r\n *\r\n * @see {@link IMapPolygonSeriesEvents} for a list of available Events\r\n * @see {@link IMapPolygonSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapPolygonSeries =\n/** @class */\nfunction (_super) {\n __extends(MapPolygonSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapPolygonSeries() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * Indicates if series should automatically calculate visual center of the\r\n * polygons (accessible via `visualLongitude` and `visualLatitude` properties\r\n * of the [[MapPolygon]]).\r\n *\r\n * @default false\r\n * @since 4.3.0\r\n */\n\n\n _this.calculateVisualCenter = false;\n _this.className = \"MapPolygonSeries\"; // Set data fields\n\n _this.dataFields.multiPolygon = \"multiPolygon\";\n _this.dataFields.polygon = \"polygon\";\n _this.dataFields.geoPolygon = \"geoPolygon\";\n _this.dataFields.multiGeoPolygon = \"multiGeoPolygon\";\n\n _this.setPropertyValue(\"sortPolygonsBy\", \"area\");\n\n _this.setPropertyValue(\"sortPolygonsReversed\", false); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapPolygonSeries.prototype.createDataItem = function () {\n return new MapPolygonSeriesDataItem();\n };\n /**\r\n * @ignore\r\n */\n\n\n MapPolygonSeries.prototype.processIncExc = function () {\n this.mapPolygons.clear();\n\n _super.prototype.processIncExc.call(this);\n };\n /**\r\n * (Re)validates series data, effectively causing the whole series to be\r\n * redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapPolygonSeries.prototype.validateData = function () {\n // process geoJSON and created map objects\n if (this.useGeodata || this.geodata) {\n var geoJSON = !this._dataSources[\"geodata\"] ? this.chart.geodata : undefined;\n\n if (this.geodata) {\n geoJSON = this.geodata;\n }\n\n if (geoJSON) {\n var features = void 0;\n\n if (geoJSON.type == \"FeatureCollection\") {\n features = geoJSON.features;\n } else if (geoJSON.type == \"Feature\") {\n features = [geoJSON];\n } else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\n features = [{\n geometry: geoJSON\n }];\n } else {\n console.log(\"nothing found in geoJSON\");\n }\n\n if (features) {\n var _loop_1 = function _loop_1(i, len) {\n var feature = features[i];\n var geometry = feature.geometry;\n\n if (geometry) {\n var type = geometry.type;\n var id_1 = feature.id;\n\n if (this_1.chart.geodataNames && this_1.chart.geodataNames[id_1]) {\n feature.properties.name = this_1.chart.geodataNames[id_1];\n }\n\n if (type == \"Polygon\" || type == \"MultiPolygon\") {\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\n return \"continue\";\n }\n\n var coordinates = geometry.coordinates;\n\n if (coordinates) {\n // make the same as MultiPolygon\n if (type == \"Polygon\") {\n coordinates = [coordinates];\n }\n } // find data object in user-provided data\n\n\n var dataObject = $array.find(this_1.data, function (value, i) {\n return value.id == id_1;\n }); // create one if not found\n\n if (!dataObject) {\n dataObject = {\n multiPolygon: coordinates,\n id: id_1,\n madeFromGeoData: true\n };\n this_1.data.push(dataObject);\n } // in case found\n else {\n // if user-provided object doesn't have points data provided in any way:\n if (!dataObject.multiPolygon) {\n dataObject.multiPolygon = coordinates;\n }\n } // copy properties data to datacontext\n\n\n $utils.softCopyProperties(feature.properties, dataObject);\n }\n }\n };\n\n var this_1 = this;\n\n for (var i = 0, len = features.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n }\n }\n\n _super.prototype.validateData.call(this);\n };\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapPolygonSeries.prototype.validate = function () {\n _super.prototype.validate.call(this);\n\n this.dataItems.each(function (dataItem) {\n $utils.used(dataItem.mapPolygon);\n });\n\n if (this.sortPolygonsBy != \"none\") {\n var sortBy_1 = this.sortPolygonsBy;\n var reversed_1 = this.sortPolygonsReversed;\n this.mapPolygons.sort(function (a, b) {\n var valA = \"\";\n var valB = \"\";\n var dirA = -1;\n var dirB = 1;\n\n switch (sortBy_1) {\n case \"area\":\n valA = a.boxArea;\n valB = b.boxArea;\n dirA = -1;\n dirB = 1;\n break;\n\n case \"name\":\n valA = a.dataItem.dataContext.name || \"\";\n valB = b.dataItem.dataContext.name || \"\";\n dirA = 1;\n dirB = -1;\n break;\n\n case \"id\":\n valA = a.dataItem.dataContext.id || \"\";\n valB = b.dataItem.dataContext.id || \"\";\n dirA = 1;\n dirB = -1;\n break;\n\n case \"latitude\":\n valA = reversed_1 ? a.south : a.north;\n valB = reversed_1 ? b.south : b.north;\n dirA = -1;\n dirB = 1;\n break;\n\n case \"longitude\":\n valA = reversed_1 ? a.east : a.west;\n valB = reversed_1 ? b.east : b.west;\n dirA = 1;\n dirB = -1;\n break;\n }\n\n if (valA < valB) {\n return reversed_1 ? dirB : dirA;\n }\n\n if (valA > valB) {\n return reversed_1 ? dirA : dirB;\n }\n\n return 0;\n });\n this.mapPolygons.each(function (mapPolygon, index) {\n mapPolygon.validate(); // makes small go first to avoid hover problems with IE\n\n if (!mapPolygon.zIndex && !mapPolygon.propertyFields.zIndex) {\n mapPolygon.zIndex = 1000000 - index;\n }\n });\n }\n };\n\n Object.defineProperty(MapPolygonSeries.prototype, \"mapPolygons\", {\n /**\r\n * List of polygon elements in the series.\r\n *\r\n * @return Polygon list\r\n */\n get: function get() {\n if (!this._mapPolygons) {\n var polygonTemplate = new MapPolygon();\n var mapPolygons = new ListTemplate(polygonTemplate);\n\n this._disposers.push(new ListDisposer(mapPolygons));\n\n this._disposers.push(mapPolygons.template);\n\n mapPolygons.template.focusable = true;\n mapPolygons.events.on(\"inserted\", this.handleObjectAdded, this, false);\n this._mapPolygons = mapPolygons;\n this._mapObjects = mapPolygons;\n }\n\n return this._mapPolygons;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * returns MapPolygon by id in geoJSON file\r\n * @param polygon id\r\n * @return {MapPolygon}\r\n */\n\n MapPolygonSeries.prototype.getPolygonById = function (id) {\n return $iter.find(this.mapPolygons.iterator(), function (mapPolygon) {\n var dataContext = mapPolygon.dataItem.dataContext;\n return dataContext.id == id;\n });\n };\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\n\n\n MapPolygonSeries.prototype.copyFrom = function (source) {\n this.mapPolygons.template.copyFrom(source.mapPolygons.template);\n\n _super.prototype.copyFrom.call(this, source);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapPolygonSeries.prototype.getFeatures = function () {\n var _this = this;\n\n var features = [];\n this.dataItems.each(function (dataItem) {\n var feature = dataItem.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n });\n this.mapPolygons.each(function (mapPolygon) {\n if (_this.dataItems.indexOf(mapPolygon._dataItem) == -1) {\n var feature = mapPolygon.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n }\n });\n return features;\n };\n\n Object.defineProperty(MapPolygonSeries.prototype, \"sortPolygonsBy\", {\n /**\r\n * @return How to sort map polygons\r\n */\n get: function get() {\n return this.getPropertyValue(\"sortPolygonsBy\");\n },\n\n /**\r\n * How to order polygons in actual SVG document. Affects selection order\r\n * using TAB key.\r\n *\r\n * Available options: `\"area\"` (default), `\"name\"`, `\"longitude\"`,\r\n * `\"latitude\"`, `\"id\"`, and `\"none\"`.\r\n *\r\n * @default area\r\n * @since 4.9.36\r\n * @param value How to sort map polygons\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"sortPolygonsBy\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapPolygonSeries.prototype, \"sortPolygonsReversed\", {\n /**\r\n * @return Reverse polygon sort direction\r\n */\n get: function get() {\n return this.getPropertyValue(\"sortPolygonsReversed\");\n },\n\n /**\r\n * If `sortPolygonsBy` is set to something other than `\"none\"`, polygons\r\n * will be sorted by the given parameter, using natural sort direction.\r\n *\r\n * Setting `sortPolygonsReversed = true` will reverse this direction.\r\n *\r\n * @default false\r\n * @since 4.9.36\r\n * @param value Reverse polygon sort direction\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"sortPolygonsReversed\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n return MapPolygonSeries;\n}(MapSeries);\n\nexport { MapPolygonSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapPolygonSeries\"] = MapPolygonSeries;\nregistry.registeredClasses[\"MapPolygonSeriesDataItem\"] = MapPolygonSeriesDataItem;","import noop from \"../noop.js\";\nexport default function () {\n var lines = [],\n line;\n return {\n point: function point(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function lineStart() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function rejoin() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function result() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}","import { abs, epsilon } from \"./math.js\";\nexport default function (a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}","import pointEqual from \"../pointEqual.js\";\nimport { epsilon } from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n\n this.e = entry; // is an entry?\n\n this.v = false; // visited\n\n this.n = this.p = null; // next & previous\n} // A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\n\n\nexport default function (segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n segments.forEach(function (segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n,\n p0 = segment[0],\n p1 = segment[n],\n x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n\n for (i = 0; i < n; ++i) {\n stream.point((p0 = segment[i])[0], p0[1]);\n }\n\n stream.lineEnd();\n return;\n } // handle degenerate cases by moving the point\n\n\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n if (!subject.length) return;\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n\n while (current.v) {\n if ((current = current.n) === start) return;\n }\n\n points = current.z;\n stream.lineStart();\n\n do {\n current.v = current.o.v = true;\n\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) {\n stream.point((point = points[i])[0], point[1]);\n }\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n\n for (i = points.length - 1; i >= 0; --i) {\n stream.point((point = points[i])[0], point[1]);\n }\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n\n current = current.p;\n }\n\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n\n a.n = b = array[0];\n b.p = a;\n}","import { Adder } from \"d3-array\";\nimport { cartesian, cartesianCross, cartesianNormalizeInPlace } from \"./cartesian.js\";\nimport { abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau } from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi) return point[0];else return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function (polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n var sum = new Adder();\n if (sinPhi === 1) phi = halfPi + epsilon;else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta; // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n } // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ winding & 1;\n}","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nvar _marked = /*#__PURE__*/_regeneratorRuntime.mark(flatten);\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { 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 = it.call(o); }, 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\nfunction flatten(arrays) {\n var _iterator, _step, array;\n\n return _regeneratorRuntime.wrap(function flatten$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _iterator = _createForOfIteratorHelper(arrays);\n _context.prev = 1;\n\n _iterator.s();\n\n case 3:\n if ((_step = _iterator.n()).done) {\n _context.next = 8;\n break;\n }\n\n array = _step.value;\n return _context.delegateYield(array, \"t0\", 6);\n\n case 6:\n _context.next = 3;\n break;\n\n case 8:\n _context.next = 13;\n break;\n\n case 10:\n _context.prev = 10;\n _context.t1 = _context[\"catch\"](1);\n\n _iterator.e(_context.t1);\n\n case 13:\n _context.prev = 13;\n\n _iterator.f();\n\n return _context.finish(13);\n\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, _marked, null, [[1, 10, 13, 16]]);\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport { epsilon, halfPi } from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport { merge } from \"d3-array\";\nexport default function (pointVisible, clipLine, interpolate, start) {\n return function (sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function polygonStart() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function polygonEnd() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function sphere() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i,\n n = ringSegments.length,\n m,\n segment,\n point;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return; // No intersections.\n\n if (clean & 1) {\n segment = ringSegments[0];\n\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n\n for (i = 0; i < m; ++i) {\n sink.point((point = segment[i])[0], point[1]);\n }\n\n sink.lineEnd();\n }\n\n return;\n } // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n\n\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n} // Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\n\n\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}","import clip from \"./index.js\";\nimport { abs, atan, cos, epsilon, halfPi, pi, sin } from \"../math.js\";\nexport default clip(function () {\n return true;\n}, clipAntimeridianLine, clipAntimeridianInterpolate, [-pi, -halfPi]); // Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\n\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n _clean; // no intersections\n\n\n return {\n lineStart: function lineStart() {\n stream.lineStart();\n _clean = 1;\n },\n point: function point(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n\n if (abs(delta - pi) < epsilon) {\n // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n _clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) {\n // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n _clean = 0;\n }\n\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function lineEnd() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function clean() {\n return 2 - _clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1) - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0)) / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}","import { cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical } from \"../cartesian.js\";\nimport { circleStream } from \"../circle.js\";\nimport { abs, cos, epsilon, pi, radians, sqrt } from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\nexport default function (radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n } // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n\n\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n _clean; // no intersections\n\n\n return {\n lineStart: function lineStart() {\n v00 = v0 = false;\n _clean = 1;\n },\n point: function point(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius ? v ? 0 : code(lambda, phi) : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) point1[2] = 1;\n }\n\n if (v !== v0) {\n _clean = 0;\n\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t; // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n _clean = 0;\n\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function lineEnd() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function clean() {\n return _clean | (v00 && v0) << 1;\n }\n };\n } // Intersects the great circle between a and b with the clip circle.\n\n\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b); // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n\n var n1 = [1, 0, 0],\n // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0],\n // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2; // Two polar points.\n\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B); // Solve |p(t)|^2 = 1.\n\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n if (!two) return q; // Two intersection points.\n\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; // Check that the first point is between a and b.\n\n if (meridian ? polar ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1) : phi0 <= q[1] && q[1] <= phi1 : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n } // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n\n\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}","import { abs, epsilon } from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport { merge } from \"d3-array\";\nvar clipMax = 1e9,\n clipMin = -clipMax; // TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0,\n a1 = 0;\n\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoint(from, to) < 0 ^ direction > 0) {\n do {\n stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n\n return function (stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__,\n y__,\n v__,\n // first point\n x_,\n y_,\n v_,\n // previous point\n first,\n clean;\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n\n if (a1 <= y1) {\n if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding;\n } else {\n if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding;\n }\n }\n }\n\n return winding;\n } // Buffer geometry within a polygon and then clip it en masse.\n\n\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n\n if (cleanInside || visible) {\n stream.polygonStart();\n\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n\n stream.polygonEnd();\n }\n\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n } // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n\n\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}","export default function (a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}","export default (function (x) {\n return x;\n});","export default function (methods) {\n return {\n stream: transformer(methods)\n };\n}\nexport function transformer(methods) {\n return function (stream) {\n var s = new TransformStream();\n\n for (var key in methods) {\n s[key] = methods[key];\n }\n\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function point(x, y) {\n this.stream.point(x, y);\n },\n sphere: function sphere() {\n this.stream.sphere();\n },\n lineStart: function lineStart() {\n this.stream.lineStart();\n },\n lineEnd: function lineEnd() {\n this.stream.lineEnd();\n },\n polygonStart: function polygonStart() {\n this.stream.polygonStart();\n },\n polygonEnd: function polygonEnd() {\n this.stream.polygonEnd();\n }\n};","import noop from \"../noop.js\";\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function result() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;","import { default as geoStream } from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function (b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\nexport function fitWidth(projection, width, object) {\n return fit(projection, function (b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\nexport function fitHeight(projection, height, object) {\n return fit(projection, function (b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}","import { cartesian } from \"../cartesian.js\";\nimport { abs, asin, atan2, cos, epsilon, radians, sqrt } from \"../math.js\";\nimport { transformer } from \"../transform.js\";\nvar maxDepth = 16,\n // maximum depth of subdivision\ncosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function (project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function point(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n\n return function (stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function polygonStart() {\n stream.polygonStart();\n resampleStream.lineStart = ringStart;\n },\n polygonEnd: function polygonEnd() {\n stream.polygonEnd();\n resampleStream.lineStart = lineStart;\n }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]),\n p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport { cos, degrees, radians, sin, sqrt } from \"../math.js\";\nimport { rotateRadians } from \"../rotation.js\";\nimport { transformer } from \"../transform.js\";\nimport { fitExtent, fitSize, fitWidth, fitHeight } from \"./fit.js\";\nimport resample from \"./resample.js\";\nvar transformRadians = transformer({\n point: function point(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function point(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx;\n y *= sy;\n return [dx + k * x, dy - k * y];\n }\n\n transform.invert = function (x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n\n function transform(x, y) {\n x *= sx;\n y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n\n transform.invert = function (x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function () {\n return project;\n })();\n}\nexport function projectionMutator(projectAt) {\n var project,\n k = 150,\n // scale\n x = 480,\n y = 250,\n // translate\n lambda = 0,\n phi = 0,\n // center\n deltaLambda = 0,\n deltaPhi = 0,\n deltaGamma = 0,\n rotate,\n // pre-rotate\n alpha = 0,\n // post-rotate angle\n sx = 1,\n // reflectX\n sy = 1,\n // reflectX\n theta = null,\n preclip = clipAntimeridian,\n // pre-clip angle\n x0 = null,\n y0,\n x1,\n y1,\n postclip = identity,\n // post-clip extent\n delta2 = 0.5,\n // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function (_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function (_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function (_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function (_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function (_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function (_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function (_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function (_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function (_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function (_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function (_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function (_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function (extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function (size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function (width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function (height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function () {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}","import projection from \"./index.js\";\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\nequirectangularRaw.invert = equirectangularRaw;\nexport default function () {\n return projection(equirectangularRaw).scale(152.63);\n}","import { Adder } from \"d3-array\";\nimport { abs } from \"../math.js\";\nimport noop from \"../noop.js\";\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function polygonStart() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function polygonEnd() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function result() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;","import { sqrt } from \"../math.js\"; // TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function polygonStart() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function polygonEnd() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function result() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2] : Z1 ? [X1 / Z1, Y1 / Z1] : Z0 ? [X0 / Z0, Y0 / Z0] : [NaN, NaN];\n X0 = Y0 = Z0 = X1 = Y1 = Z1 = X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;","import { tau } from \"../math.js\";\nimport noop from \"../noop.js\";\nexport default function PathContext(context) {\n this._context = context;\n}\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function pointRadius(_) {\n return this._radius = _, this;\n },\n polygonStart: function polygonStart() {\n this._line = 0;\n },\n polygonEnd: function polygonEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function point(x, y) {\n switch (this._point) {\n case 0:\n {\n this._context.moveTo(x, y);\n\n this._point = 1;\n break;\n }\n\n case 1:\n {\n this._context.lineTo(x, y);\n\n break;\n }\n\n default:\n {\n this._context.moveTo(x + this._radius, y);\n\n this._context.arc(x, y, this._radius, 0, tau);\n\n break;\n }\n }\n },\n result: noop\n};","import { Adder } from \"d3-array\";\nimport { sqrt } from \"../math.js\";\nimport noop from \"../noop.js\";\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\nvar lengthStream = {\n point: noop,\n lineStart: function lineStart() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function lineEnd() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function polygonStart() {\n lengthRing = true;\n },\n polygonEnd: function polygonEnd() {\n lengthRing = null;\n },\n result: function result() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;","export default function PathString() {\n this._string = [];\n}\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function pointRadius(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function polygonStart() {\n this._line = 0;\n },\n polygonEnd: function polygonEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function point(x, y) {\n switch (this._point) {\n case 0:\n {\n this._string.push(\"M\", x, \",\", y);\n\n this._point = 1;\n break;\n }\n\n case 1:\n {\n this._string.push(\"L\", x, \",\", y);\n\n break;\n }\n\n default:\n {\n if (this._circle == null) this._circle = circle(this._radius);\n\n this._string.push(\"M\", x, \",\", y, this._circle);\n\n break;\n }\n }\n },\n result: function result() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n}","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\nexport default function (projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n\n return contextStream.result();\n }\n\n path.area = function (object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function (object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function (object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function (object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function (_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function (_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString()) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function (_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}","import { Adder } from \"d3-array\";\nimport { abs, atan2, cos, radians, sin, sqrt } from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\nvar lengthSum, lambda0, sinPhi0, cosPhi0;\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function (object) {\n lengthSum = new Adder();\n stream(object, lengthStream);\n return +lengthSum;\n}","import length from \"./length.js\";\nvar coordinates = [null, null],\n object = {\n type: \"LineString\",\n coordinates: coordinates\n};\nexport default function (a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}","/**\r\n * This module contains funcitonality related to geographical projections\r\n */\nimport { registry } from \"../../../core/Registry\";\nimport * as $math from \"../../../core/utils/Math\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This is a base class for a geographical projection.\r\n */\n\nvar Projection =\n/** @class */\nfunction () {\n function Projection() {\n this.d3Projection = d3geo.geoEquirectangular();\n }\n\n Object.defineProperty(Projection.prototype, \"d3Projection\", {\n /**\r\n * d3 projection\r\n */\n get: function get() {\n return this._d3Projection;\n },\n\n /**\r\n * d3 projection\r\n */\n set: function set(projection) {\n this._d3Projection = projection;\n projection.precision(0.1);\n this._d3Path = d3geo.geoPath().projection(projection);\n\n if (this.chart) {\n this.chart.invalidateProjection();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Projection.prototype, \"d3Path\", {\n /**\r\n * d3 path generator method\r\n * @ignore\r\n */\n get: function get() {\n return this._d3Path;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Projection.prototype, \"scale\", {\n /**\r\n * @ignore\r\n */\n get: function get() {\n return this.d3Projection.scale() / 100;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Converts a geographical point (lat/long) to a screen point (x/y)\r\n * @param geoPoint Geo point (lat/long)\r\n * @return Screen point (x/y)\r\n */\n\n Projection.prototype.convert = function (geoPoint) {\n /*\r\n geoPoint = $geo.normalizePoint(geoPoint);\r\n geoPoint = this.rotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n let pointInRadians: IPoint = this.project(geoPoint.longitude * $math.RADIANS, geoPoint.latitude * $math.RADIANS);\r\n return {\r\n x: $math.round(pointInRadians.x * $math.DEGREES - this.centerPoint.x, 4) * this.scale,\r\n y: $math.round(-pointInRadians.y * $math.DEGREES - this.centerPoint.y, 4) * this.scale\r\n };*/\n var p = this.d3Projection([geoPoint.longitude, geoPoint.latitude]);\n\n if (p) {\n return {\n x: p[0],\n y: p[1]\n };\n }\n };\n /**\r\n * Converts a screen point (x/y) to a geographical point (lat/long)\r\n * @param point Screen point (x/y)\r\n * @return Geo point (lat/long)\r\n */\n\n\n Projection.prototype.invert = function (point) {\n /*\r\n let pointInRadians: IGeoPoint = this.unproject((point.x / this.scale + this.centerPoint.x) * $math.RADIANS, (-point.y / this.scale - this.centerPoint.y) * $math.RADIANS);\r\n let geoPoint = { longitude: pointInRadians.longitude * $math.DEGREES, latitude: pointInRadians.latitude * $math.DEGREES };\r\n geoPoint = this.unrotate(geoPoint, this.deltaLongitude, this.deltaLatitude, this.deltaGama);\r\n */\n var p = this.d3Projection.invert([point.x, point.y]);\n\n if (p) {\n return {\n longitude: p[0],\n latitude: p[1]\n };\n }\n };\n /**\r\n * Returns X/Y coordinates.\r\n * Individual projections will override this method to apply their own\r\n * projection logic.\r\n * @deprecated\r\n * @param lambda [description]\r\n * @param phi [description]\r\n * @return X/Y coordinates\r\n * @todo Needs description\r\n */\n\n\n Projection.prototype.project = function (lambda, phi) {\n return this.convert({\n longitude: lambda * $math.DEGREES,\n latitude: phi * $math.DEGREES\n });\n };\n /**\r\n * Returns geographical coordinates (lat/long).\r\n * Individual projections will override this method to apply their own\r\n * projection logic.\r\n * @deprecated\r\n * @param x X coordinate\r\n * @param y Y coordinate\r\n * @return Geographical point\r\n * @todo Needs description\r\n */\n\n\n Projection.prototype.unproject = function (x, y) {\n return this.invert({\n x: x,\n y: y\n });\n };\n /**\r\n * @ignore\r\n * @deprecated\r\n */\n\n\n Projection.prototype.rotate = function (geoPoint, deltaLongitude, deltaLatitude, deltaGamma) {\n var deltaLambda = deltaLongitude * $math.RADIANS;\n var deltaPhi = deltaLatitude * $math.RADIANS;\n deltaGamma = deltaGamma * $math.RADIANS;\n var lambda = geoPoint.longitude * $math.RADIANS + deltaLambda;\n var phi = geoPoint.latitude * $math.RADIANS;\n var cosDeltaPhi = Math.cos(deltaPhi);\n var sinDeltaPhi = Math.sin(deltaPhi);\n var cosDeltaGamma = Math.cos(deltaGamma);\n var sinDeltaGamma = Math.sin(deltaGamma);\n var cosPhi = Math.cos(phi);\n var x = Math.cos(lambda) * cosPhi;\n var y = Math.sin(lambda) * cosPhi;\n var z = Math.sin(phi);\n var k = z * cosDeltaPhi + x * sinDeltaPhi;\n return {\n longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n latitude: $math.DEGREES * Math.asin(k * cosDeltaGamma + y * sinDeltaGamma)\n };\n };\n /**\r\n * @ignore\r\n * @deprecated\r\n */\n\n\n Projection.prototype.unrotate = function (geoPoint, deltaLongitude, deltaLatitude, deltaGamma) {\n var deltaLambda = deltaLongitude * $math.RADIANS;\n var deltaPhi = deltaLatitude * $math.RADIANS;\n deltaGamma = deltaGamma * $math.RADIANS;\n var lambda = geoPoint.longitude * $math.RADIANS - deltaLambda;\n var phi = geoPoint.latitude * $math.RADIANS;\n var cosDeltaPhi = Math.cos(deltaPhi);\n var sinDeltaPhi = Math.sin(deltaPhi);\n var cosDeltaGamma = Math.cos(deltaGamma);\n var sinDeltaGamma = Math.sin(deltaGamma);\n var cosPhi = Math.cos(phi);\n var x = Math.cos(lambda) * cosPhi;\n var y = Math.sin(lambda) * cosPhi;\n var z = Math.sin(phi);\n var k = z * cosDeltaGamma - y * sinDeltaGamma;\n return {\n longitude: $math.DEGREES * Math.atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n latitude: $math.DEGREES * Math.asin(k * cosDeltaPhi - x * sinDeltaPhi)\n };\n }; //@todo: move to some utils?\n //@todo: add credits to: https://www.movable-type.co.uk/scripts/latlong.html\n\n\n Projection.prototype.intermediatePoint = function (pointA, pointB, position) {\n var p = d3geo.geoInterpolate([pointA.longitude, pointA.latitude], [pointB.longitude, pointB.latitude])(position);\n return {\n longitude: p[0],\n latitude: p[1]\n };\n };\n\n ; // returns radians\n\n Projection.prototype.multiDistance = function (multiGeoLine) {\n var distance = 0;\n\n for (var s = 0; s < multiGeoLine.length; s++) {\n var points = multiGeoLine[s];\n\n if (points.length > 1) {\n for (var p = 1; p < points.length; p++) {\n var pointA = points[p - 1];\n var pointB = points[p];\n distance += this.distance(pointA, pointB);\n }\n }\n }\n\n return distance;\n }; // returns radians\n\n\n Projection.prototype.distance = function (pointA, pointB) {\n return d3geo.geoDistance([pointA.longitude, pointA.latitude], [pointB.longitude, pointB.latitude]);\n };\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n\n Projection.prototype.positionToPoint = function (multiGeoLine, position) {\n if (multiGeoLine) {\n var intermediatePoint = this.positionToGeoPoint(multiGeoLine, position);\n var intermediatePointA = this.positionToGeoPoint(multiGeoLine, position - 0.01);\n var intermediatePointB = this.positionToGeoPoint(multiGeoLine, position + 0.01);\n\n if (intermediatePointA && intermediatePointB) {\n var point = this.convert(intermediatePoint);\n var pa = this.convert(intermediatePointA);\n var pb = this.convert(intermediatePointB);\n return {\n x: point.x,\n y: point.y,\n angle: $math.getAngle(pa, pb)\n };\n }\n }\n\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n };\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n\n Projection.prototype.positionToGeoPoint = function (multiGeoLine, position) {\n if (multiGeoLine) {\n var totalDistance = this.multiDistance(multiGeoLine);\n var currentDistance = 0;\n var distanceAB = void 0;\n var positionA = 0;\n var positionB = 0;\n var pointA = void 0;\n var pointB = void 0;\n\n for (var s = 0; s < multiGeoLine.length; s++) {\n var points = multiGeoLine[s];\n\n if (points.length > 1) {\n for (var p = 1; p < points.length; p++) {\n pointA = points[p - 1];\n pointB = points[p];\n positionA = currentDistance / totalDistance;\n distanceAB = this.distance(pointA, pointB);\n currentDistance += distanceAB;\n positionB = currentDistance / totalDistance;\n\n if (positionA <= position && positionB > position) {\n s = multiGeoLine.length;\n break;\n }\n }\n } else if (points.length == 1) {\n pointA = points[0];\n pointB = points[0];\n positionA = 0;\n positionB = 1;\n }\n }\n\n if (pointA && pointB) {\n var positionAB = (position - positionA) / (positionB - positionA);\n return this.intermediatePoint(pointA, pointB, positionAB);\n }\n }\n\n return {\n longitude: 0,\n latitude: 0\n };\n };\n\n return Projection;\n}();\n\nexport { Projection };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Projection\"] = Projection;","import { asin, atan2, cos, degrees, haversin, radians, sin, sqrt } from \"./math.js\";\nexport default function (a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n var interpolate = d ? function (t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [atan2(y, x) * degrees, atan2(z, sqrt(x * x + y * y)) * degrees];\n } : function () {\n return [x0 * degrees, y0 * degrees];\n };\n interpolate.distance = d;\n return interpolate;\n}","/**\r\n * A module for the mini-map control.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { Rectangle } from \"../../core/elements/Rectangle\";\nimport { List } from \"../../core/utils/List\";\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\nimport { registry } from \"../../core/Registry\";\nimport { color } from \"../../core/utils/Color\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $type from \"../../core/utils/Type\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a \"bird's eye\" view of the whole map.\r\n *\r\n * This control creates a mini-map with the whole of the map, highlighting\r\n * the area which is in the current viewport of the map map.\r\n *\r\n * @see {@link ISmallMapEvents} for a list of available events\r\n * @see {@link ISmallMapAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar SmallMap =\n/** @class */\nfunction (_super) {\n __extends(SmallMap, _super);\n /**\r\n * Constructor\r\n */\n\n\n function SmallMap() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A target map.\r\n */\n\n\n _this._chart = new MutableValueDisposer();\n _this.className = \"SmallMap\"; // Set defaults\n\n _this.align = \"left\";\n _this.valign = \"bottom\";\n _this.percentHeight = 20;\n _this.percentWidth = 20;\n\n _this.margin(5, 5, 5, 5);\n\n var interfaceColors = new InterfaceColorSet(); // Set background defailts\n\n _this.background.fillOpacity = 0.9;\n _this.background.fill = interfaceColors.getFor(\"background\"); // Set up events\n\n _this.events.on(\"hit\", _this.moveToPosition, _this, false);\n\n _this.events.on(\"maxsizechanged\", _this.updateMapSize, _this, false); // Create a container\n\n\n _this.seriesContainer = _this.createChild(Container);\n _this.seriesContainer.shouldClone = false; // Create an outline rectangle\n\n var rectangle = _this.createChild(Rectangle);\n\n rectangle.shouldClone = false;\n rectangle.stroke = interfaceColors.getFor(\"alternativeBackground\");\n rectangle.strokeWidth = 1;\n rectangle.strokeOpacity = 0.5;\n rectangle.fill = color(); //\"none\";\n\n rectangle.verticalCenter = \"middle\";\n rectangle.horizontalCenter = \"middle\";\n rectangle.isMeasured = false;\n rectangle.visible = false;\n _this.rectangle = rectangle;\n\n _this._disposers.push(_this._chart); // Apply theme\n\n\n _this.applyTheme();\n\n return _this;\n }\n\n Object.defineProperty(SmallMap.prototype, \"series\", {\n /**\r\n * A list of map series used to draw the mini-map.\r\n *\r\n * @readonly\r\n * @return Series\r\n */\n get: function get() {\n if (!this._series) {\n this._series = new List();\n\n this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\n\n this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\n }\n\n return this._series;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Decorates a new series when they are pushed into a `series` list.\r\n *\r\n * @param event Event\r\n */\n\n SmallMap.prototype.handleSeriesAdded = function (event) {\n var series = event.newValue;\n\n if (this.chart.series.contains(series)) {\n var newSeries = series.clone();\n\n this._series.removeValue(series);\n\n this._series.push(newSeries);\n\n series = newSeries;\n this.chart.dataUsers.push(newSeries);\n }\n\n series.chart = this.chart;\n series.parent = this.seriesContainer;\n series.interactionsEnabled = false;\n series.events.on(\"inited\", this.updateMapSize, this, false);\n series.hidden = false;\n };\n /**\r\n * Cleans up after series are removed from Scrollbar.\r\n *\r\n * @param event Event\r\n */\n\n\n SmallMap.prototype.handleSeriesRemoved = function (event) {\n //let sourceSeries: MapSeries = event.oldValue;\n this.invalidate();\n };\n /**\r\n * Moves main map pan position after click on the small map.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n SmallMap.prototype.moveToPosition = function (event) {\n var rectPoint = $utils.spritePointToSprite(event.spritePoint, this, this.seriesContainer);\n var geoPoint = this.chart.seriesPointToGeo(rectPoint);\n this.chart.zoomToGeoPoint(geoPoint, this.chart.zoomLevel, true);\n };\n\n Object.defineProperty(SmallMap.prototype, \"chart\", {\n /**\r\n * @return Chart/map\r\n */\n get: function get() {\n return this._chart.get();\n },\n\n /**\r\n * A chart/map that this control is meant for.\r\n *\r\n * @param chart Chart/map\r\n */\n set: function set(chart) {\n if (this.chart != chart) {\n this._chart.set(chart, new MultiDisposer([//chart.events.on(\"zoomlevelchanged\", this.updateRectangle, this, false),\n chart.events.on(\"mappositionchanged\", this.updateRectangle, this, false), chart.events.on(\"scaleratiochanged\", this.updateMapSize, this, false)]));\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates the viewport recangle as per current map zoom/pan position.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n SmallMap.prototype.updateRectangle = function () {\n var chart = this.chart;\n var zoomLevel = chart.zoomLevel;\n var rectangle = this.rectangle;\n rectangle.width = this.pixelWidth / zoomLevel;\n rectangle.height = this.pixelHeight / zoomLevel;\n var scale = Math.min(this.percentWidth, this.percentHeight) / 100;\n var seriesContainer = chart.seriesContainer;\n rectangle.x = Math.ceil(-seriesContainer.pixelX * scale / zoomLevel) + this.seriesContainer.pixelX;\n rectangle.y = Math.ceil(-seriesContainer.pixelY * scale / zoomLevel) + this.seriesContainer.pixelY;\n rectangle.validate();\n };\n /**\r\n * Update map size so that internal elements can redraw themselves after\r\n * the size of the small map changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n SmallMap.prototype.updateMapSize = function () {\n if (this.chart) {\n var scale = this.chart.scaleRatio * Math.min(this.percentWidth, this.percentHeight) / 100;\n this.seriesContainer.scale = scale;\n var bbox = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n\n try {\n // Add exception catching to tame FF\n bbox = this.seriesContainer.group.node.getBBox();\n } catch (err) {}\n\n if (bbox.width > 0) {\n this.rectangle.visible = true;\n }\n\n this.seriesContainer.x = this.pixelWidth / 2 - bbox.x * scale - bbox.width / 2 * scale;\n this.seriesContainer.y = this.pixelHeight / 2 - bbox.y * scale - bbox.height / 2 * scale;\n this.updateRectangle();\n this.afterDraw();\n }\n };\n /**\r\n * Update elements after drawing the small map.\r\n */\n\n\n SmallMap.prototype.afterDraw = function () {\n _super.prototype.afterDraw.call(this); //this.seriesContainer.moveTo({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 });\n\n\n this.rectangle.maskRectangle = {\n x: -1,\n y: -1,\n width: Math.ceil(this.pixelWidth + 2),\n height: Math.ceil(this.pixelHeight + 2)\n };\n };\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n\n SmallMap.prototype.processConfig = function (config) {\n if (config) {\n // Set up series\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\n for (var i = 0, len = config.series.length; i < len; i++) {\n var series = config.series[i];\n\n if ($type.hasValue(series) && $type.isString(series) && this.map.hasKey(series)) {\n config.series[i] = this.map.getKey(series);\n }\n }\n }\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n\n return SmallMap;\n}(Container);\n\nexport { SmallMap };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"SmallMap\"] = SmallMap;","/**\r\n * A collection of GeoJSON format-related utility functions.\r\n */\nimport * as $math from \"../../core/utils/Math\";\nimport * as $array from \"../../core/utils/Array\";\n/**\r\n * Normalizes a geo-point.\r\n *\r\n * @ignore Exclude from docs\r\n * @param geoPoint Source geo-point\r\n * @return Normalized geo-point\r\n */\n\nexport function normalizePoint(geoPoint) {\n var longitude = wrapAngleTo180(geoPoint.longitude);\n var latitude = Math.asin(Math.sin(geoPoint.latitude * $math.RADIANS)) * $math.DEGREES;\n var latitude180 = wrapAngleTo180(geoPoint.latitude);\n\n if (Math.abs(latitude180) > 90) {\n longitude = wrapAngleTo180(longitude + 180);\n }\n\n geoPoint.longitude = longitude;\n geoPoint.latitude = latitude;\n return geoPoint;\n}\n/**\r\n * Normalizes all points of a geo-line.\r\n *\r\n * @ignore Exclude from docs\r\n * @param multiline Source geo-line\r\n * @return Normalized geo-line\r\n */\n\nexport function normalizeMultiline(multiline) {\n $array.each(multiline, function (segment) {\n $array.each(segment, function (point) {\n normalizePoint(point);\n });\n });\n return multiline;\n}\n/**\r\n * [wrapAngleTo180 description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n * @param angle Angle\r\n * @return Angle\r\n */\n\nexport function wrapAngleTo180(angle) {\n angle = angle % 360;\n\n if (angle > 180) {\n angle -= 360;\n }\n\n if (angle < -180) {\n angle += 360;\n }\n\n return angle;\n}\n/**\r\n * Converts a geo point to a regular point object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param geoPoint Source geo point\r\n * @return Point\r\n */\n\nexport function geoToPoint(geoPoint) {\n return {\n x: geoPoint.longitude,\n y: geoPoint.latitude\n };\n}","/**\r\n * Map line module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Draws a line on the map.\r\n *\r\n * @see {@link IMapLineObjectEvents} for a list of available events\r\n * @see {@link IMapLineObjectAdapters} for a list of available Adapters\r\n */\n\nvar MapLineObject =\n/** @class */\nfunction (_super) {\n __extends(MapLineObject, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapLineObject() {\n var _this = _super.call(this) || this;\n\n _this.adjustRotation = true;\n _this.className = \"MapLineObject\";\n _this.isMeasured = false;\n _this.layout = \"none\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * (Re)validates element's position.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapLineObject.prototype.validatePosition = function () {\n var mapLine = this.mapLine;\n\n if (mapLine) {\n var point = mapLine.positionToPoint(this.position);\n this.x = point.x;\n this.y = point.y;\n\n if (this.adjustRotation) {\n this.rotation = point.angle;\n }\n\n var dataItem = this.mapLine.dataItem;\n\n if (dataItem) {\n var series = this.mapLine.dataItem.component;\n this.scale = 1 / series.scale;\n } // hide out of bounds\n\n\n if (mapLine.shortestDistance) {\n var projection = this.mapLine.series.chart.projection;\n var geoPoint = projection.positionToGeoPoint(mapLine.multiGeoLine, this.position);\n var visible = projection.d3Path({\n type: 'Point',\n coordinates: [geoPoint.longitude, geoPoint.latitude]\n });\n\n if (!visible) {\n this.__disabled = true;\n } else {\n this.__disabled = false;\n }\n }\n }\n\n _super.prototype.validatePosition.call(this);\n };\n\n Object.defineProperty(MapLineObject.prototype, \"position\", {\n /**\r\n * @return Position within the line\r\n */\n get: function get() {\n return this.getPropertyValue(\"position\");\n },\n\n /**\r\n * Sets object's relative position (0-1) within the line.\r\n *\r\n * `0` will place the object at the beginning of the line. `1` - at the end.\r\n *\r\n * Any intermediate number will place the object at some point within the\r\n * line.\r\n *\r\n * @param value Position within the line (0-1)\r\n */\n set: function set(value) {\n this.setPropertyValue(\"position\", value, false, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLineObject.prototype, \"adjustRotation\", {\n /**\r\n * @return Auto-rotate\r\n */\n get: function get() {\n return this.getPropertyValue(\"adjustRotation\");\n },\n\n /**\r\n * If set to `true`, the object will be automatically rotated to face the\r\n * direction of the line at the specific position.\r\n *\r\n * This allows creating images that has its \"front\" always facing the logical\r\n * direction of the line.\r\n *\r\n * @default false\r\n * @param value Auto-rotate\r\n */\n set: function set(value) {\n this.setPropertyValue(\"adjustRotation\", value, false, true);\n },\n enumerable: true,\n configurable: true\n });\n return MapLineObject;\n}(Container);\n\nexport { MapLineObject };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapLineObject\"] = MapLineObject;","/**\r\n * Map image series module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\nimport { MapImage } from \"./MapImage\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { registry } from \"../../core/Registry\";\nimport * as $array from \"../../core/utils/Array\";\nimport * as $mapUtils from \"./MapUtils\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $type from \"../../core/utils/Type\";\nimport { Disposer } from \"../../core/utils/Disposer\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapImageSeries]]\r\n * @see {@link DataItem}\r\n */\n\nvar MapImageSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapImageSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapImageSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapImageSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapImageSeriesDataItem.prototype.getFeature = function () {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: this.point\n }\n };\n };\n\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"mapImage\", {\n /**\r\n * A [[MapImage]] element related to this data item.\r\n *\r\n * @return Element\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._mapImage) {\n var mapImage_1 = this.component.mapImages.create();\n this.addSprite(mapImage_1);\n this._mapImage = mapImage_1;\n\n this._disposers.push(mapImage_1);\n\n this._disposers.push(new Disposer(function () {\n if (_this.component) {\n _this.component.mapImages.removeValue(mapImage_1);\n }\n }));\n\n this.mapObject = mapImage_1;\n }\n\n return this._mapImage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"point\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return this._point;\n },\n\n /**\r\n * [point description]\r\n *\r\n * @todo Description\r\n * @param point [description]\r\n */\n set: function set(point) {\n this._point = point;\n this._geoPoint = $mapUtils.pointToGeo(point);\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"multiPoint\", {\n /**\r\n * @return [description]\r\n */\n get: function get() {\n return [this._point];\n },\n\n /**\r\n * [point description]\r\n *\r\n * @todo Description\r\n * @param point [description]\r\n */\n set: function set(multiPoint) {\n this._point = multiPoint[0];\n this._geoPoint = $mapUtils.pointToGeo(this._point);\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapImageSeriesDataItem.prototype, \"geoPoint\", {\n /**\r\n * @return Image coordinates\r\n */\n get: function get() {\n return this._geoPoint;\n },\n\n /**\r\n * Geographical coordinates (lat/long) image is placed at.\r\n *\r\n * @param geoPoint Image coordinates\r\n */\n set: function set(geoPoint) {\n this._geoPoint = geoPoint;\n this.point = [geoPoint.longitude, geoPoint.latitude];\n },\n enumerable: true,\n configurable: true\n });\n return MapImageSeriesDataItem;\n}(MapSeriesDataItem);\n\nexport { MapImageSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A series of map image (marker) elements.\r\n *\r\n * @see {@link IMapImageSeriesEvents} for a list of available Events\r\n * @see {@link IMapImageSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapImageSeries =\n/** @class */\nfunction (_super) {\n __extends(MapImageSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapImageSeries() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapImageSeries\"; // Set data fields\n\n _this.dataFields.multiPoint = \"multiPoint\";\n _this.dataFields.point = \"point\";\n _this.dataFields.geoPoint = \"geoPoint\";\n _this.dataFields.multiGeoPoint = \"multiGeoPoint\";\n _this.ignoreBounds = true; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapImageSeries.prototype.createDataItem = function () {\n return new MapImageSeriesDataItem();\n };\n /**\r\n * (Re)validates the data of the sries, effectively forcing it to redraw\r\n * all of its elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapImageSeries.prototype.validateData = function () {\n var _this = this;\n\n if (this.data.length > 0 && this._parseDataFrom == 0) {\n this.mapImages.clear();\n } // process geoJSON and created map objects\n\n\n if (this.useGeodata) {\n if (this.useGeodata || this.geodata) {\n var geoJSON = this.chart.geodata;\n var features = void 0;\n\n if (geoJSON.type == \"FeatureCollection\") {\n features = geoJSON.features;\n } else if (geoJSON.type == \"Feature\") {\n features = [geoJSON];\n } else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\n features = [{\n geometry: geoJSON\n }];\n } else {\n console.log(\"nothing found in geoJSON\");\n }\n\n if (features) {\n var _loop_1 = function _loop_1(i, len) {\n var feature = features[i];\n var geometry = feature.geometry;\n\n if (geometry) {\n var type = geometry.type;\n var id_1 = feature.id;\n\n if (type == \"Point\" || type == \"MultiPoint\") {\n // todo: we don't support multipoints at the moment actually\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\n return \"continue\";\n }\n\n var coordinates = geometry.coordinates; // make the same as MultiPoint\n\n if (type == \"Point\") {\n coordinates = [coordinates];\n }\n\n var dataObject = $array.find(this_1.data, function (value, i) {\n return value.id == id_1;\n });\n\n if (!dataObject) {\n dataObject = {\n multiPoint: coordinates,\n id: id_1,\n madeFromGeoData: true\n };\n this_1.data.push(dataObject);\n } else {\n if (!dataObject.multiPoint) {\n dataObject.multiPoint = coordinates;\n }\n } // copy properties data to datacontext\n\n\n $utils.softCopyProperties(feature.properties, dataObject);\n }\n }\n };\n\n var this_1 = this;\n\n for (var i = 0, len = features.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n }\n }\n\n _super.prototype.validateData.call(this); // important! this should go after super.validateData\n // if data is parsed in chunks, images list is corrupted, fix it here\n\n\n $iter.each(this.dataItems.iterator(), function (dataItem) {\n var mapImage = dataItem.mapImage;\n\n if (!mapImage.isDisposed()) {\n _this.mapImages.moveValue(mapImage);\n\n if ($type.isNumber(mapImage.latitude) && $type.isNumber(mapImage.latitude)) {\n dataItem.geoPoint = {\n latitude: mapImage.latitude,\n longitude: mapImage.longitude\n };\n }\n }\n });\n };\n\n Object.defineProperty(MapImageSeries.prototype, \"mapImages\", {\n /**\r\n * A list of map images in the series.\r\n *\r\n * @return Map images\r\n */\n get: function get() {\n if (!this._mapImages) {\n var template = new MapImage();\n var mapImages = new ListTemplate(template);\n\n this._disposers.push(new ListDisposer(mapImages));\n\n this._disposers.push(mapImages.template);\n\n mapImages.template.focusable = true;\n mapImages.events.on(\"inserted\", this.handleObjectAdded, this, false);\n this._mapImages = mapImages;\n this._mapObjects = mapImages;\n }\n\n return this._mapImages;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * (Re)validates data element, effectively triggering its redrawal.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\n\n MapImageSeries.prototype.validateDataElement = function (dataItem) {\n _super.prototype.validateDataElement.call(this, dataItem);\n\n dataItem.mapImage.invalidate();\n };\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapImageSeries.prototype.validate = function () {\n _super.prototype.validate.call(this);\n\n $iter.each(this.mapImages.iterator(), function (mapImage) {\n mapImage.validatePosition();\n });\n };\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\n\n\n MapImageSeries.prototype.copyFrom = function (source) {\n this.mapImages.template.copyFrom(source.mapImages.template);\n\n _super.prototype.copyFrom.call(this, source);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapImageSeries.prototype.getFeatures = function () {\n var _this = this;\n\n var features = [];\n this.dataItems.each(function (dataItem) {\n var feature = dataItem.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n });\n this.mapImages.each(function (mapImage) {\n if (_this.dataItems.indexOf(mapImage._dataItem) == -1) {\n var feature = mapImage.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n }\n });\n return features;\n };\n /**\r\n * returns MapImage by id\r\n * @param image id\r\n * @return {MapImage}\r\n */\n\n\n MapImageSeries.prototype.getImageById = function (id) {\n return $iter.find(this.mapImages.iterator(), function (mapImage) {\n var dataContext = mapImage.dataItem.dataContext;\n\n if (mapImage.id == id || dataContext && dataContext.id == id) {\n return true;\n }\n });\n };\n\n return MapImageSeries;\n}(MapSeries);\n\nexport { MapImageSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapImageSeries\"] = MapImageSeries;\nregistry.registeredClasses[\"MapImageSeriesDataItem\"] = MapImageSeriesDataItem;","/**\r\n * Map line module\r\n */\nimport { __extends, __values } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapObject } from \"./MapObject\";\nimport { MapLineObject } from \"./MapLineObject\";\nimport { MapImage } from \"./MapImage\";\nimport { MapImageSeries } from \"./MapImageSeries\";\nimport { Triangle } from \"../../core/elements/Triangle\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { Polyline } from \"../../core/elements/Polyline\";\nimport { registry } from \"../../core/Registry\";\nimport { color } from \"../../core/utils/Color\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { percent, Percent } from \"../../core/utils/Percent\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $geo from \"./Geo\";\nimport * as $mapUtils from \"./MapUtils\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a line on the map.\r\n *\r\n * @see {@link IMapLineEvents} for a list of available events\r\n * @see {@link IMapLineAdapters} for a list of available Adapters\r\n */\n\nvar MapLine =\n/** @class */\nfunction (_super) {\n __extends(MapLine, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapLine() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A list of event disposers for images.\r\n */\n\n\n _this._imageListeners = {};\n _this.className = \"MapLine\";\n\n _this.createLine();\n\n _this.line.stroke = color();\n _this.line.parent = _this;\n _this.strokeOpacity = 1;\n\n _this.setPropertyValue(\"precision\", 0.1);\n\n var interfaceColors = new InterfaceColorSet();\n _this.stroke = interfaceColors.getFor(\"grid\");\n _this.shortestDistance = true; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapLine.prototype.createLine = function () {\n this.line = new Polyline();\n };\n /**\r\n * Converts a position within the line (0-1) to a physical point\r\n * coordinates.\r\n *\r\n * 0 indicates start of the line, 0.5 - middle, while 1 indicates the end.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\n\n\n MapLine.prototype.positionToPoint = function (position) {\n if (this.shortestDistance) {\n return this.series.chart.projection.positionToPoint(this.multiGeoLine, position);\n } else {\n if (this.line) {\n return this.line.positionToPoint(position);\n }\n }\n\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n };\n\n Object.defineProperty(MapLine.prototype, \"multiGeoLine\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n var multiGeoLine = this.getPropertyValue(\"multiGeoLine\");\n\n if (!multiGeoLine && this.dataItem && this.dataItem.multiGeoLine) {\n multiGeoLine = this.dataItem.multiGeoLine;\n }\n\n return multiGeoLine;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * { longitude: -5.199, latitude: 21.223 },\r\n * { longitude: -12.9, latitude: 25.85 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.5} GeoJSON MultiLineString reference\r\n * @param multiGeoLine Coordinates\r\n */\n set: function set(multiGeoLine) {\n if (multiGeoLine && multiGeoLine.length > 0) {\n this.setPropertyValue(\"multiGeoLine\", $geo.normalizeMultiline(multiGeoLine), true);\n var multiLine = $mapUtils.multiGeoLineToMultiLine(multiGeoLine);\n this.setPropertyValue(\"multiLine\", multiLine);\n this.updateExtremes();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLine.prototype, \"multiLine\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n var multiLine = this.getPropertyValue(\"multiLine\");\n\n if (!multiLine && this.dataItem && this.dataItem.multiLine) {\n multiLine = this.dataItem.multiLine;\n }\n\n return multiLine;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * [ 120, 200 ],\r\n * [ 150, 100 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiLine Coordinates\r\n */\n set: function set(multiLine) {\n this.setPropertyValue(\"multiLine\", multiLine);\n this.multiGeoLine = $mapUtils.multiLineToGeo(multiLine);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLine.prototype, \"imagesToConnect\", {\n /**\r\n * @return {MapImages[]}\r\n */\n get: function get() {\n return this.getPropertyValue(\"imagesToConnect\");\n },\n\n /**\r\n * Instead of setting longitudes/latitudes you can set an array of images\r\n * which will be connected by the line.\r\n *\r\n * Parameter is an array that can hold string `id`'s to of the images, or\r\n * references to actual [[MapImage]] objects.\r\n *\r\n * @param images Images\r\n */\n set: function set(images) {\n var _this = this;\n\n this.setPropertyValue(\"imagesToConnect\", images, true);\n this.handleImagesToConnect();\n\n if (this.series) {\n var chart = this.series.chart;\n\n if (chart) {\n chart.series.each(function (series) {\n if (series instanceof MapImageSeries) {\n if (!series.isReady()) {\n _this._disposers.push(series.events.on(\"ready\", _this.handleImagesToConnect, _this, false));\n }\n }\n });\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n MapLine.prototype.handleImagesToConnect = function () {\n var e_1, _a;\n\n var _this = this;\n\n if (this.imagesToConnect) {\n var segment = [];\n var multiGeoLine = [segment];\n\n var _loop_1 = function _loop_1(image) {\n if ($type.isString(image)) {\n var chart = this_1.series.chart;\n\n if (chart) {\n chart.series.each(function (series) {\n if (series instanceof MapImageSeries) {\n var img = series.getImageById(image);\n\n if (img) {\n image = img;\n }\n }\n });\n }\n }\n\n if (image instanceof MapImage) {\n segment.push({\n longitude: image.longitude,\n latitude: image.latitude\n });\n\n if (!this_1._imageListeners[image.uid]) {\n var disposer = image.events.on(\"propertychanged\", function (event) {\n if (event.property == \"longitude\" || event.property == \"latitude\") {\n _this.handleImagesToConnect();\n\n _this.invalidate();\n }\n }, this_1, false);\n this_1._imageListeners[image.uid] = disposer;\n\n this_1._disposers.push(disposer);\n }\n }\n };\n\n var this_1 = this;\n\n try {\n for (var _b = __values(this.imagesToConnect), _c = _b.next(); !_c.done; _c = _b.next()) {\n var image = _c.value;\n\n _loop_1(image);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n this.multiGeoLine = multiGeoLine;\n }\n };\n /**\r\n * (Re)validates the line, effectively forcing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapLine.prototype.validate = function () {\n var chart = this.series.chart;\n\n if (this.multiLine) {\n if (!this.shortestDistance) {\n var convertedPoints = [];\n\n for (var i = 0, len = this.multiLine.length; i < len; i++) {\n var segment = this.multiLine[i];\n var convertedSegmentPoints = [];\n\n for (var s = 0, slen = segment.length; s < slen; s++) {\n var geoPoint = segment[s];\n var point = this.series.chart.projection.convert({\n longitude: geoPoint[0],\n latitude: geoPoint[1]\n });\n convertedSegmentPoints.push(point);\n }\n\n convertedPoints.push(convertedSegmentPoints);\n }\n\n this.line.segments = convertedPoints;\n } else {\n chart.projection.d3Projection.precision(this.precision);\n this.line.path = chart.projection.d3Path(this.getFeature());\n }\n\n if (this._arrow) {\n this._arrow.validatePosition();\n }\n\n $iter.each(this.lineObjects.iterator(), function (x) {\n x.validatePosition();\n });\n this.handleGlobalScale();\n } else if (this.imagesToConnect) {\n this.handleImagesToConnect();\n }\n\n _super.prototype.validate.call(this);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapLine.prototype.getFeature = function () {\n if (this.multiLine && this.multiLine.length > 0 && this.multiLine[0] && this.multiLine[0].length > 0) {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"MultiLineString\",\n coordinates: this.multiLine\n }\n };\n }\n };\n /**\r\n * @ignore Exclude from docs\r\n */\n\n\n MapLine.prototype.measureElement = function () {// Overriding, just to avoid extra measure\n };\n\n Object.defineProperty(MapLine.prototype, \"shortestDistance\", {\n /**\r\n * @return Real path?\r\n */\n get: function get() {\n return this.getPropertyValue(\"shortestDistance\");\n },\n\n /**\r\n * The line should take the shortest path over the globe.\r\n *\r\n * Enabling this will make the line look differently in different\r\n * projections. Only `MapLine` supports this setting, `MapArc` and\r\n * `MapSplice` don't.\r\n *\r\n * @default true\r\n * @param value Real path?\r\n */\n set: function set(value) {\n this.setPropertyValue(\"shortestDistance\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLine.prototype, \"lineObjects\", {\n /**\r\n * List of separate line objects the line consists of.\r\n *\r\n * @readonly\r\n * @return List of line objects\r\n */\n get: function get() {\n if (!this._lineObjects) {\n this._lineObjects = new ListTemplate(new MapLineObject());\n\n this._lineObjects.events.on(\"inserted\", this.handleLineObjectAdded, this, false);\n\n this._disposers.push(new ListDisposer(this._lineObjects));\n\n this._disposers.push(this._lineObjects.template);\n }\n\n return this._lineObjects;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Decorate a [[LineObject]] when it is added to the line.\r\n *\r\n * @param event Event\r\n */\n\n MapLine.prototype.handleLineObjectAdded = function (event) {\n var mapLineObject = event.newValue;\n mapLineObject.mapLine = this;\n mapLineObject.shouldClone = false;\n mapLineObject.parent = this;\n };\n\n Object.defineProperty(MapLine.prototype, \"arrow\", {\n /**\r\n * @return Arrow element\r\n */\n get: function get() {\n if (!this._arrow) {\n var arrow = this.createChild(MapLineObject);\n arrow.shouldClone = false;\n arrow.width = 8;\n arrow.height = 10;\n arrow.mapLine = this;\n arrow.position = 0.5;\n var triangle = arrow.createChild(Triangle); //triangle.shouldClone = false;\n\n triangle.fillOpacity = 1;\n triangle.width = percent(100);\n triangle.height = percent(100);\n triangle.rotation = 90;\n triangle.horizontalCenter = \"middle\";\n triangle.verticalCenter = \"middle\";\n this._arrow = arrow;\n }\n\n return this._arrow;\n },\n\n /**\r\n * A [[MapLineObject]] to use as an option arrowhead on the line.\r\n *\r\n * Just accessing this property will create a default arrowhead on the line\r\n * automatically.\r\n *\r\n * @param arrow Arrow element\r\n */\n set: function set(arrow) {\n this._arrow = arrow;\n arrow.mapLine = this;\n arrow.parent = this;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Copies line properties and other attributes, like arrow, from another\r\n * instance of [[MapLine]].\r\n *\r\n * @param source Source map line\r\n */\n\n MapLine.prototype.copyFrom = function (source) {\n _super.prototype.copyFrom.call(this, source);\n\n this.line.copyFrom(source.line);\n this.lineObjects.copyFrom(source.lineObjects);\n\n if (source._arrow) {\n this.arrow = source.arrow.clone();\n }\n };\n\n Object.defineProperty(MapLine.prototype, \"latitude\", {\n /**\r\n * Latitude of the line center.\r\n *\r\n * @readonly\r\n * @return Latitude\r\n */\n get: function get() {\n return this.north + (this.south - this.north) / 2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLine.prototype, \"longitude\", {\n /**\r\n * Longitude of the line center.\r\n *\r\n * @readonly\r\n * @return Latitude\r\n */\n get: function get() {\n return this.east + (this.west - this.east) / 2;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return X\r\n */\n\n MapLine.prototype.getTooltipX = function () {\n var x = this.getPropertyValue(\"tooltipX\");\n\n if (!(x instanceof Percent)) {\n x = percent(50);\n }\n\n if (x instanceof Percent) {\n return this.positionToPoint(x.value).x;\n } else {\n return 0;\n }\n };\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @ignore\r\n * @return Y\r\n */\n\n\n MapLine.prototype.getTooltipY = function () {\n var y = this.getPropertyValue(\"tooltipY\");\n\n if (!(y instanceof Percent)) {\n y = percent(50);\n }\n\n if (y instanceof Percent) {\n return this.positionToPoint(y.value).y;\n } else {\n return 0;\n }\n };\n\n Object.defineProperty(MapLine.prototype, \"precision\", {\n /**\r\n * @return Precision\r\n */\n get: function get() {\n return this.getPropertyValue(\"precision\");\n },\n\n /**\r\n * When line is plotted, if its `shortestDistance` is set to `true` it is\r\n * bent according to the used projection, to depict the shortest distance how\r\n * it would go on the actual land.\r\n *\r\n * `precision` introduces a setting which can control when such bending\r\n * occurs.\r\n *\r\n * If the distance (in degrees) between line start and end points\r\n * is less than `precision`, no bending will take place and the line will be\r\n * straight.\r\n *\r\n * Set to large number (e.g. 10000) for perfectly straight line.\r\n *\r\n * @since 4.9.1\r\n * @default 0.1\r\n * @param value Precision\r\n */\n set: function set(value) {\n this.setPropertyValue(\"precision\", value, true);\n },\n enumerable: true,\n configurable: true\n });\n return MapLine;\n}(MapObject);\n\nexport { MapLine };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapLine\"] = MapLine;","/**\r\n * Map line series module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapSeries, MapSeriesDataItem } from \"./MapSeries\";\nimport { MapLine } from \"./MapLine\";\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\nimport { registry } from \"../../core/Registry\";\nimport * as $mapUtils from \"./MapUtils\";\nimport * as $array from \"../../core/utils/Array\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport { Disposer } from \"../../core/utils/Disposer\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapLineSeries]]\r\n * @see {@link DataItem}\r\n */\n\nvar MapLineSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapLineSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapLineSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapLineSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n MapLineSeriesDataItem.prototype.getFeature = function () {\n if (this.multiLine && this.multiLine.length > 0) {\n return {\n \"type\": \"Feature\",\n geometry: {\n type: \"MultiLineString\",\n coordinates: this.multiLine\n }\n };\n }\n };\n\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"mapLine\", {\n /**\r\n * A [[MapLine]] element related to this data item.\r\n *\r\n * @readonly\r\n * @return Element\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._mapLine) {\n var mapLine_1 = this.component.mapLines.create();\n this._mapLine = mapLine_1;\n this.addSprite(mapLine_1);\n\n this._disposers.push(mapLine_1);\n\n this._disposers.push(new Disposer(function () {\n if (_this.component) {\n _this.component.mapLines.removeValue(mapLine_1);\n }\n }));\n\n this.mapObject = mapLine_1;\n }\n\n return this._mapLine;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"line\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._line;\n },\n\n /**\r\n * A collection of X/Y coordinates for a single-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ]\r\n * ```\r\n *\r\n * @param line Coordinates\r\n */\n set: function set(line) {\n this._line = line;\n this.multiLine = [line];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"multiLine\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._multiLine;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * [ 100, 150 ],\r\n * [ 120, 200 ]\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * [ 120, 200 ],\r\n * [ 150, 100 ]\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @param multiLine Coordinates\r\n */\n set: function set(multiLine) {\n this._multiLine = multiLine;\n this._multiGeoLine = $mapUtils.multiLineToGeo(multiLine);\n this.updateExtremes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"geoLine\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._geoLine;\n },\n\n /**\r\n * A collection of lat/long coordinates for a single-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.4} GeoJSON LineString reference\r\n * @param geoLine Coordinates\r\n */\n set: function set(geoLine) {\n this._geoLine = geoLine;\n this.multiLine = $mapUtils.multiGeoLineToMultiLine([geoLine]);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapLineSeriesDataItem.prototype, \"multiGeoLine\", {\n /**\r\n * @return Coordinates\r\n */\n get: function get() {\n return this._multiGeoLine;\n },\n\n /**\r\n * A collection of X/Y coordinates for a multi-segment line. E.g.:\r\n *\r\n * ```JSON\r\n * [\r\n * // Segment 1\r\n * [\r\n * { longitude: 3.121, latitude: 0.58 },\r\n * { longitude: -5.199, latitude: 21.223 }\r\n * ],\r\n *\r\n * // Segment 2\r\n * [\r\n * { longitude: -5.199, latitude: 21.223 },\r\n * { longitude: -12.9, latitude: 25.85 }\r\n * ]\r\n * ]\r\n * ```\r\n *\r\n * @see {@link https://tools.ietf.org/html/rfc7946#section-3.1.5} GeoJSON MultiLineString reference\r\n * @param multiGeoLine Coordinates\r\n */\n set: function set(multiGeoLine) {\n this._multiGeoLine = multiGeoLine;\n this.multiLine = $mapUtils.multiGeoLineToMultiLine(multiGeoLine);\n },\n enumerable: true,\n configurable: true\n });\n return MapLineSeriesDataItem;\n}(MapSeriesDataItem);\n\nexport { MapLineSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A series of map line series.\r\n *\r\n * @see {@link IMapLineSeriesEvents} for a list of available Events\r\n * @see {@link IMapLineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapLineSeries =\n/** @class */\nfunction (_super) {\n __extends(MapLineSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapLineSeries() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapLineSeries\"; // Set data fields\n\n _this.dataFields.multiLine = \"multiLine\";\n _this.dataFields.line = \"line\";\n _this.dataFields.geoLine = \"geoLine\";\n _this.dataFields.multiGeoLine = \"multiGeoLine\";\n _this.ignoreBounds = true; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapLineSeries.prototype.createDataItem = function () {\n return new MapLineSeriesDataItem();\n };\n /**\r\n * (Re)validates series data, effectively causing the whole series to be\r\n * redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapLineSeries.prototype.validateData = function () {\n // process geoJSON and created map objects\n if (this.useGeodata || this.geodata) {\n var geoJSON = this.chart.geodata;\n\n if (geoJSON) {\n var features = void 0;\n\n if (geoJSON.type == \"FeatureCollection\") {\n features = geoJSON.features;\n } else if (geoJSON.type == \"Feature\") {\n features = [geoJSON];\n } else if ([\"Point\", \"LineString\", \"Polygon\", \"MultiPoint\", \"MultiLineString\", \"MultiPolygon\"].indexOf(geoJSON.type) != -1) {\n features = [{\n geometry: geoJSON\n }];\n } else {\n console.log(\"nothing found in geoJSON\");\n }\n\n if (features) {\n var _loop_1 = function _loop_1(i, len) {\n var feature = features[i];\n var geometry = feature.geometry;\n\n if (geometry) {\n var type = geometry.type;\n var id_1 = feature.id;\n\n if (type == \"LineString\" || type == \"MultiLineString\") {\n if (!this_1.checkInclude(this_1.include, this_1.exclude, id_1)) {\n return \"continue\";\n }\n\n var coordinates = geometry.coordinates;\n var dataObject = $array.find(this_1.data, function (value, i) {\n return value.id == id_1;\n });\n\n if (type == \"LineString\") {\n coordinates = [coordinates];\n }\n\n if (!dataObject) {\n dataObject = {\n multiLine: coordinates,\n id: id_1,\n madeFromGeoData: true\n };\n this_1.data.push(dataObject);\n } else {\n if (!dataObject.multiLine) {\n dataObject.multiLine = coordinates;\n }\n } // copy properties data to datacontext\n\n\n $utils.softCopyProperties(feature.properties, dataObject);\n }\n }\n };\n\n var this_1 = this;\n\n for (var i = 0, len = features.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n }\n }\n\n _super.prototype.validateData.call(this);\n };\n\n Object.defineProperty(MapLineSeries.prototype, \"mapLines\", {\n /**\r\n * A list of lines in the series.\r\n *\r\n * @return Lines\r\n */\n get: function get() {\n if (!this._mapLines) {\n var lineTemplate = this.createLine();\n var mapLines = new ListTemplate(lineTemplate);\n\n this._disposers.push(new ListDisposer(mapLines));\n\n this._disposers.push(mapLines.template);\n\n mapLines.events.on(\"inserted\", this.handleObjectAdded, this, false);\n this._mapLines = mapLines;\n this._mapObjects = mapLines;\n }\n\n return this._mapLines;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\n\n MapLineSeries.prototype.createLine = function () {\n return new MapLine();\n };\n /**\r\n * (Re)validates the series\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapLineSeries.prototype.validate = function () {\n this.dataItems.each(function (dataItem) {\n $utils.used(dataItem.mapLine);\n });\n\n _super.prototype.validate.call(this);\n\n this.mapLines.each(function (mapLine) {\n mapLine.validate();\n });\n };\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\n\n\n MapLineSeries.prototype.copyFrom = function (source) {\n this.mapLines.template.copyFrom(source.mapLines.template);\n\n _super.prototype.copyFrom.call(this, source);\n };\n /**\r\n * @ignore\r\n */\n\n\n MapLineSeries.prototype.getFeatures = function () {\n var _this = this;\n\n var features = [];\n this.dataItems.each(function (dataItem) {\n var feature = dataItem.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n });\n this.mapLines.each(function (mapLine) {\n if (_this.dataItems.indexOf(mapLine._dataItem) == -1) {\n var feature = mapLine.getFeature();\n\n if (feature) {\n features.push(feature);\n }\n }\n });\n return features;\n };\n /**\r\n * returns MapLine by id\r\n * @param line id\r\n * @return {MapLine}\r\n */\n\n\n MapLineSeries.prototype.getLineById = function (id) {\n return $iter.find(this.mapLines.iterator(), function (mapLine) {\n var dataContext = mapLine.dataItem.dataContext;\n return dataContext.id == id;\n });\n };\n\n return MapLineSeries;\n}(MapSeries);\n\nexport { MapLineSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapLineSeries\"] = MapLineSeries;\nregistry.registeredClasses[\"MapLineSeriesDataItem\"] = MapLineSeriesDataItem;","/**\r\n * Graticule (map grid line).\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLine } from \"./MapLine\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Graticule is a map line spanning from the poles or around the globe.\r\n *\r\n * @since 4.3.0\r\n * @see {@link IGraticuleEvents} for a list of available events\r\n * @see {@link IGraticuleAdapters} for a list of available Adapters\r\n */\n\nvar Graticule =\n/** @class */\nfunction (_super) {\n __extends(Graticule, _super);\n /**\r\n * Constructor\r\n */\n\n\n function Graticule() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"Graticule\"; // Apply theme\n\n _this.applyTheme();\n\n _this.shortestDistance = true;\n return _this;\n }\n\n return Graticule;\n}(MapLine);\n\nexport { Graticule };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Graticule\"] = Graticule;","export default function (start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}","import { range } from \"d3-array\";\nimport { abs, ceil, epsilon } from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function (x) {\n return y.map(function (y) {\n return [x, y];\n });\n };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function (y) {\n return x.map(function (x) {\n return [x, y];\n });\n };\n}\n\nexport default function graticule() {\n var x1,\n x0,\n X1,\n X0,\n y1,\n y0,\n Y1,\n Y0,\n dx = 10,\n dy = dx,\n DX = 90,\n DY = 360,\n x,\n y,\n X,\n Y,\n precision = 2.5;\n\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X).concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function (x) {\n return abs(x % DX) > epsilon;\n }).map(x)).concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function (y) {\n return abs(y % DY) > epsilon;\n }).map(y));\n }\n\n graticule.lines = function () {\n return lines().map(function (coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n\n graticule.outline = function () {\n return {\n type: \"Polygon\",\n coordinates: [X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1))]\n };\n };\n\n graticule.extent = function (_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function (_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function (_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function (_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function (_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function (_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function (_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule.extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]]).extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\nexport function graticule10() {\n return graticule()();\n}","/**\r\n * Graticule (map grid) series functionality.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\nimport { Graticule } from \"./Graticule\";\nimport { registry } from \"../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\nimport * as $array from \"../../core/utils/Array\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[GraticuleSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar GraticuleSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(GraticuleSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function GraticuleSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"GraticuleSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return GraticuleSeriesDataItem;\n}(MapLineSeriesDataItem);\n\nexport { GraticuleSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * This class is used to create a set of graticules (map grid).\r\n *\r\n * To enable, create like you would create any regular map series:\r\n *\r\n * ```TypeScript\r\n * let graticule = chart.series.push(new am4maps.GraticuleSeries())\r\n * graticule.mapLines.template.line.stroke = am4core.color(\"#000000\");\r\n * graticule.mapLines.template.line.strokeOpacity = 0.1;\r\n * ```\r\n * ```JavaScript\r\n * var graticule = chart.series.push(new am4maps.GraticuleSeries())\r\n * graticule.mapLines.template.line.stroke = am4core.color(\"#000000\");\r\n * graticule.mapLines.template.line.strokeOpacity = 0.1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"GraticuleSeries\",\r\n * \"mapLines\": {\r\n * \"line\": {\r\n * \"stroke\": \"#000000\",\r\n * \"strokeOpacity\": 0.1\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.0\r\n * @see {@link IGraticuleSeriesEvents} for a list of available Events\r\n * @see {@link IGraticuleSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar GraticuleSeries =\n/** @class */\nfunction (_super) {\n __extends(GraticuleSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function GraticuleSeries() {\n var _this = _super.call(this) || this;\n\n _this.className = \"GraticuleSeries\";\n _this.longitudeStep = 10;\n _this.latitudeStep = 10;\n _this.north = 90;\n _this.south = -90;\n _this.east = -180;\n _this.west = 180; //this.majorLatitudeStep = 90;\n //this.majorLongitudeStep = 360;\n\n _this.fitExtent = true;\n _this.singleSprite = true;\n\n _this.events.disableType(\"geoBoundsChanged\");\n\n _this.mapLines.template.line.strokeOpacity = 0.08;\n _this.ignoreBounds = false;\n _this.hiddenInLegend = true;\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n GraticuleSeries.prototype.createDataItem = function () {\n return new GraticuleSeriesDataItem();\n };\n\n GraticuleSeries.prototype.validateData = function () {\n var _this = this;\n\n _super.prototype.validateData.call(this);\n\n this.mapLines.clear();\n var graticule = d3geo.geoGraticule();\n\n if (graticule) {\n graticule.stepMinor([this.longitudeStep, this.latitudeStep]);\n graticule.stepMajor([360, 360]);\n var chart = this.chart;\n\n if (this.fitExtent) {\n graticule.extent([[chart.east, chart.north], [chart.west, chart.south]]);\n } else {\n graticule.extent([[this.east, this.north], [this.west, this.south]]);\n }\n\n if (this.singleSprite) {\n var mapLine = this.mapLines.create();\n mapLine.multiLine = graticule().coordinates;\n } else {\n var lineStrings = graticule.lines();\n $array.each(lineStrings, function (lineString) {\n var mapLine = _this.mapLines.create();\n\n mapLine.multiLine = [lineString.coordinates];\n });\n }\n }\n };\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\n\n\n GraticuleSeries.prototype.createLine = function () {\n return new Graticule();\n };\n\n Object.defineProperty(GraticuleSeries.prototype, \"latitudeStep\", {\n /**\r\n * @return Step\r\n */\n get: function get() {\n return this.getPropertyValue(\"latitudeStep\");\n },\n\n /**\r\n * Draw a graticule (grid) every X degrees of latitude.\r\n *\r\n * @default 10\r\n * @param value Step\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"latitudeStep\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GraticuleSeries.prototype, \"longitudeStep\", {\n /**\r\n * @return Step\r\n */\n get: function get() {\n return this.getPropertyValue(\"longitudeStep\");\n },\n\n /**\r\n * Draw a graticule (grid) every X degrees of longitude.\r\n *\r\n * @default 10\r\n * @param value Step\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"longitudeStep\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GraticuleSeries.prototype, \"fitExtent\", {\n /**\r\n * @return Fit?\r\n */\n get: function get() {\n return this.getPropertyValue(\"fitExtent\");\n },\n\n /**\r\n * Draw a thicker (major) graticule every X degrees of latitude.\r\n *\r\n * @default 90\r\n * @param value Step\r\n */\n // public set majorLatitudeStep(value: number) {\n // \tif (this.setPropertyValue(\"majorLatitudeStep\", value)) {\n // \t\tthis.invalidateData();\n // \t}\n // }\n\n /**\r\n * @return Step\r\n */\n // public get majorLatitudeStep(): number {\n // \treturn this.getPropertyValue(\"majorLatitudeStep\");\n // }\n\n /**\r\n * Draw a thicker (major) graticule every X degrees of longitude.\r\n *\r\n * @default 360\r\n * @param value Step\r\n */\n // public set majorLongitudeStep(value: number) {\n // \tif (this.setPropertyValue(\"majorLongitudeStep\", value)) {\n // \t\tthis.invalidateData();\n // \t}\n // }\n\n /**\r\n * @return Step\r\n */\n // public get majorLongitudeStep(): number {\n // \treturn this.getPropertyValue(\"majorLongitudeStep\");\n // }\n\n /**\r\n * Whether to cap graticules (grid) to actual span of the map (`true`), e.g.\r\n * where there are polygons, or draw full-world grid (`false`).\r\n *\r\n * For world maps, using `false` makes sense. For smaller maps - not so much.\r\n *\r\n * If set to `false`, the grid will be drawn from this series `east` to\r\n * `west`, and from `south` to `north` (default values: `east = -180`;\r\n * `west = 180`; `south =-90`; `north =90`).\r\n *\r\n * These can be overridden by setting `GraticuleSeries`' respective\r\n * properties.\r\n *\r\n * @default true\r\n * @param value Fit?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"fitExtent\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GraticuleSeries.prototype, \"singleSprite\", {\n /**\r\n * @return Use single sprite?\r\n */\n get: function get() {\n return this.getPropertyValue(\"singleSprite\");\n },\n\n /**\r\n * Whether to draw all the grid as a single element or as separate lines.\r\n *\r\n * Setting `true` (default) will result in better performance, whereas\r\n * `false` allows setting visual properties of each line individually.\r\n *\r\n * @default true\r\n * @param value Use single sprite?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"singleSprite\", value)) {\n this.invalidateData();\n }\n },\n enumerable: true,\n configurable: true\n });\n return GraticuleSeries;\n}(MapLineSeries);\n\nexport { GraticuleSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"GraticuleSeries\"] = GraticuleSeries;\nregistry.registeredClasses[\"GraticuleSeriesDataItem\"] = GraticuleSeriesDataItem;","/**\r\n * Map module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\nimport { Disposer } from \"../../core/utils/Disposer\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\nimport { MapSeries } from \"../map/MapSeries\";\nimport { MapImage } from \"../map/MapImage\";\nimport { MapPolygon } from \"../map/MapPolygon\";\nimport { MapPolygonSeries } from \"../map/MapPolygonSeries\";\nimport { Projection } from \"../map/projections/Projection\";\nimport { Circle } from \"../../core/elements/Circle\";\nimport { SmallMap } from \"../map/SmallMap\";\nimport * as $mapUtils from \"../map/MapUtils\";\nimport { keyboard } from \"../../core/utils/Keyboard\";\nimport { registry } from \"../../core/Registry\";\nimport { options } from \"../../core/Options\";\nimport * as $math from \"../../core/utils/Math\";\nimport * as $utils from \"../../core/utils/Utils\";\nimport * as $ease from \"../../core/utils/Ease\";\nimport * as $iter from \"../../core/utils/Iterator\";\nimport * as $type from \"../../core/utils/Type\";\nimport * as $geo from \"../map/Geo\";\nimport { GraticuleSeries } from \"../map/GraticuleSeries\";\nimport { getInteraction } from \"../../core/interaction/Interaction\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar MapChartDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapChartDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapChartDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapChartDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return MapChartDataItem;\n}(SerialChartDataItem);\n\nexport { MapChartDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a map.\r\n *\r\n * @see {@link IMapChartEvents} for a list of available Events\r\n * @see {@link IMapChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/} for documentation\r\n */\n\nvar MapChart =\n/** @class */\nfunction (_super) {\n __extends(MapChart, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapChart() {\n var _this = // Init\n _super.call(this) || this;\n /**\r\n * A ratio to be used when scaling the map shapes.\r\n *\r\n * @readonly\r\n */\n\n\n _this.scaleRatio = 1;\n /**\r\n * Default duration of zoom animations (ms).\r\n */\n\n _this.zoomDuration = 1000;\n /**\r\n * Default zooming animation easing function.\r\n */\n\n _this.zoomEasing = $ease.cubicOut;\n /**\r\n * Smallest available zoom level. The map will not allow to zoom out past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 1\r\n */\n\n _this.minZoomLevel = 1;\n /**\r\n * Biggest available zoom level. The map will not allow to zoom in past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 32\r\n */\n\n _this.maxZoomLevel = 32;\n /**\r\n * [_prevZoomGeoPoint description]\r\n *\r\n * @todo Description\r\n */\n\n _this._prevZoomGeoPoint = {\n latitude: 0,\n longitude: 0\n };\n _this.className = \"MapChart\"; // Set default projection\n\n _this.projection = new Projection();\n\n _this.setPropertyValue(\"deltaLatitude\", 0);\n\n _this.setPropertyValue(\"deltaLongitude\", 0);\n\n _this.setPropertyValue(\"deltaGamma\", 0);\n\n _this.maxPanOut = 0.7;\n _this.homeZoomLevel = 1;\n _this.zoomStep = 2;\n _this.layout = \"absolute\";\n _this.centerMapOnZoomOut = true; // Set padding\n\n _this.padding(0, 0, 0, 0);\n\n $utils.used(_this.backgroundSeries); // so that the map would render in a hidden div too\n\n _this.minWidth = 10;\n _this.minHeight = 10;\n\n _this.events.once(\"inited\", _this.handleAllInited, _this, false); // Create a container for map series\n\n\n var seriesContainer = _this.seriesContainer;\n seriesContainer.visible = false;\n seriesContainer.inert = true;\n seriesContainer.resizable = true;\n seriesContainer.events.on(\"transformed\", _this.handleMapTransform, _this, false);\n seriesContainer.events.on(\"doublehit\", _this.handleDoubleHit, _this, false);\n seriesContainer.events.on(\"dragged\", _this.handleDrag, _this, false);\n seriesContainer.zIndex = 0;\n seriesContainer.dragWhileResize = true; //seriesContainer.background.fillOpacity = 0;\n\n seriesContainer.adapter.add(\"scale\", function (scale, target) {\n return $math.fitToRange(scale, _this.minZoomLevel, _this.maxZoomLevel);\n }); // Set up events\n //this.events.on(\"validated\", this.updateExtremes, this);\n //this.events.on(\"datavalidated\", this.handleAllValidated, this, false);\n //this.events.on(\"datavalidated\", this.updateExtremes, this, false);\n\n _this.events.on(\"maxsizechanged\", function (event) {\n if (event.previousWidth == 0 || event.previousHeight == 0) {\n _this.updateExtremes();\n\n _this.updateCenterGeoPoint();\n }\n }, undefined, false); // Set up main chart container, e.g. set backgrounds and events to monitor\n // size changes, etc.\n\n\n var chartContainer = _this.chartContainer;\n chartContainer.parent = _this;\n chartContainer.zIndex = -1;\n\n _this._disposers.push(_this.events.on(\"maxsizechanged\", function () {\n if (_this.inited) {\n if (_this._mapAnimation) {\n _this._mapAnimation.stop();\n }\n\n var allInited_1 = true;\n\n _this.series.each(function (series) {\n series.updateTooltipBounds();\n\n if (!series.inited || series.dataInvalid) {\n allInited_1 = false;\n }\n });\n\n if (allInited_1) {\n _this.updateScaleRatio();\n }\n\n _this.zoomToGeoPoint(_this._zoomGeoPointReal, _this.zoomLevel, true, 0);\n }\n }, undefined, false));\n\n var chartContainerBg = chartContainer.background;\n chartContainerBg.fillOpacity = 0;\n chartContainerBg.events.on(\"down\", function (e) {\n _this.seriesContainer.dragStart(e.target.interactions.downPointers.getIndex(0));\n }, _this);\n chartContainerBg.events.on(\"up\", function (e) {\n _this.seriesContainer.dragStop();\n }, _this);\n chartContainerBg.events.on(\"doublehit\", _this.handleDoubleHit, _this);\n chartContainerBg.focusable = true;\n chartContainer.events.on(\"down\", _this.handleMapDown, _this, false);\n\n _this.addDisposer(seriesContainer.events.on(\"down\", function () {\n // Cancel any move inertia if there is one\n var inertia = _this.seriesContainer.interactions.inertias.getKey(\"move\");\n\n if (inertia) {\n inertia.done();\n }\n })); // Add description to background\n\n\n _this.background.fillOpacity = 0; // Add keyboard events for panning\n\n _this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\n if (_this.topParent.hasFocused) {\n var key = keyboard.getEventKey(ev.event);\n\n if (!_this._zoomControl || !_this._zoomControl.thumb.isFocused) {\n switch (key) {\n case \"up\":\n _this.pan({\n x: 0,\n y: 0.1\n });\n\n break;\n\n case \"down\":\n _this.pan({\n x: 0,\n y: -0.1\n });\n\n break;\n\n case \"left\":\n _this.pan({\n x: 0.1,\n y: 0\n });\n\n break;\n\n case \"right\":\n _this.pan({\n x: -0.1,\n y: 0\n });\n\n break;\n }\n }\n }\n }, _this));\n\n _this.mouseWheelBehavior = \"zoom\";\n var interaction = getInteraction();\n\n _this._disposers.push(interaction.body.events.on(\"down\", _this.handlePanDown, _this));\n\n _this._disposers.push(interaction.body.events.on(\"up\", _this.handlePanUp, _this)); //this._disposers.push(interaction.body.events.on(\"track\", this.handlePanMove, this));\n\n\n var panSprite = _this.seriesContainer.createChild(Circle);\n\n panSprite.radius = 10;\n panSprite.inert = true;\n panSprite.isMeasured = false;\n panSprite.events.on(\"transformed\", _this.handlePanMove, _this, false);\n panSprite.interactionsEnabled = false;\n panSprite.opacity = 0;\n panSprite.x = 0;\n panSprite.y = 0;\n _this.panSprite = panSprite;\n _this.panBehavior = \"move\";\n /*\r\n this.panSprite.inertiaOptions.setKey(\"move\", {\r\n \"time\": 100,\r\n \"duration\": 1000,\r\n \"factor\": 3,\r\n \"easing\": $ease.sinOut\r\n });*/\n // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.handlePanDown = function (event) {\n var svgPoint = $utils.documentPointToSvg(event.pointer.point, this.htmlContainer);\n\n if (svgPoint.x > 0 && svgPoint.y > 0 && svgPoint.x < this.svgContainer.width && svgPoint.y < this.svgContainer.height) {\n // Get local point\n this._downPointOrig = $utils.documentPointToSprite(event.pointer.point, this.seriesContainer);\n this.panSprite.moveTo(this._downPointOrig);\n this.panSprite.dragStart(event.pointer);\n this._downDeltaLongitude = this.deltaLongitude;\n this._downDeltaLatitude = this.deltaLatitude;\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.handlePanUp = function (event) {\n if (this._downPointOrig) {\n this.panSprite.dragStop(event.pointer, true);\n }\n\n this._downPointOrig = undefined;\n };\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.handlePanMove = function () {\n if (!this.seriesContainer.isResized) {\n if (getInteraction().areTransformed([this.panSprite.interactions, this.seriesContainer.interactions])) {\n return;\n }\n\n var d3Projection = this.projection.d3Projection;\n var panBehavior = this.panBehavior;\n\n if (panBehavior != \"move\" && panBehavior != \"none\" && this._downPointOrig && d3Projection.rotate) {\n var rotation = d3Projection.rotate();\n var dln = rotation[0];\n var dlt = rotation[1];\n var dlg = rotation[2];\n d3Projection.rotate([0, 0, 0]);\n var downGeoLocal = this.projection.invert(this._downPointOrig);\n var local = {\n x: this.panSprite.pixelX,\n y: this.panSprite.pixelY\n };\n var geoLocal = void 0;\n\n if (local) {\n geoLocal = this.projection.invert(local);\n }\n\n d3Projection.rotate([dln, dlt, dlg]);\n\n if (geoLocal) {\n if (panBehavior == \"rotateLat\" || panBehavior == \"rotateLongLat\") {\n this.deltaLatitude = this._downDeltaLatitude + geoLocal.latitude - downGeoLocal.latitude;\n }\n\n if (panBehavior == \"rotateLong\" || panBehavior == \"rotateLongLat\") {\n this.deltaLongitude = this._downDeltaLongitude + geoLocal.longitude - downGeoLocal.longitude;\n }\n }\n }\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.handleAllInited = function () {\n var _this = this;\n\n var inited = true;\n this.seriesContainer.visible = true;\n this.series.each(function (series) {\n if (!series.inited || series.dataInvalid) {\n inited = false;\n }\n });\n\n if (inited) {\n this.updateCenterGeoPoint();\n this.updateScaleRatio();\n this.goHome(0);\n } else {\n // TODO verify that this is correct\n var disposer_1 = registry.events.once(\"exitframe\", function () {\n _this.removeDispose(disposer_1);\n\n _this.handleAllInited();\n }, this, false);\n this.addDisposer(disposer_1);\n }\n };\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.updateZoomGeoPoint = function () {\n var seriesPoint = $utils.svgPointToSprite({\n x: this.innerWidth / 2 + this.pixelPaddingLeft,\n y: this.innerHeight / 2 + this.pixelPaddingTop\n }, this.series.getIndex(0));\n var geoPoint = this.projection.invert(seriesPoint);\n this._zoomGeoPointReal = geoPoint;\n };\n /**\r\n * @ignore\r\n */\n\n\n MapChart.prototype.updateCenterGeoPoint = function () {\n var maxLeft;\n var maxRight;\n var maxTop;\n var maxBottom;\n\n if (this.backgroundSeries) {\n var features = this.backgroundSeries.getFeatures();\n\n if (features.length > 0) {\n var bounds = this.projection.d3Path.bounds(features[0].geometry);\n maxLeft = bounds[0][0];\n maxTop = bounds[0][1];\n maxRight = bounds[1][0];\n maxBottom = bounds[1][1];\n }\n } else {\n this.series.each(function (series) {\n var bbox = series.group.node.getBBox();\n\n if (maxLeft > bbox.x || !$type.isNumber(maxLeft)) {\n maxLeft = bbox.x;\n }\n\n if (maxRight < bbox.x + bbox.width || !$type.isNumber(maxRight)) {\n maxRight = bbox.x + bbox.width;\n }\n\n if (maxTop > bbox.y || !$type.isNumber(maxTop)) {\n maxTop = bbox.y;\n }\n\n if (maxBottom < bbox.y + bbox.height || !$type.isNumber(maxBottom)) {\n maxBottom = bbox.y + bbox.height;\n }\n });\n }\n\n this.seriesMaxLeft = maxLeft;\n this.seriesMaxRight = maxRight;\n this.seriesMaxTop = maxTop;\n this.seriesMaxBottom = maxBottom;\n this.seriesWidth = maxRight - maxLeft;\n this.seriesHeight = maxBottom - maxTop;\n\n if (this.seriesWidth > 0 && this.seriesHeight > 0) {\n this.chartContainer.visible = true;\n this._centerGeoPoint = this.projection.invert({\n x: maxLeft + (maxRight - maxLeft) / 2,\n y: maxTop + (maxBottom - maxTop) / 2\n });\n\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\n this._zoomGeoPointReal = this._centerGeoPoint;\n }\n } else {\n this.chartContainer.visible = false;\n }\n };\n /**\r\n * Prevents map to be dragged out of the container area\r\n * @ignore\r\n */\n\n\n MapChart.prototype.handleDrag = function () {\n var d = this.zoomLevel * this.scaleRatio;\n var ww = this.seriesWidth * d;\n var hh = this.seriesHeight * d;\n var seriesContainer = this.seriesContainer;\n var maxLeft = this.seriesMaxLeft * d;\n var maxRight = this.seriesMaxRight * d;\n var maxTop = this.seriesMaxTop * d;\n var maxBottom = this.seriesMaxBottom * d;\n var x = seriesContainer.pixelX;\n var y = seriesContainer.pixelY;\n var maxPanOut = this.maxPanOut;\n var minX = Math.min(this.maxWidth * (1 - maxPanOut) - ww - maxLeft, -maxLeft);\n\n if (x < minX) {\n x = minX;\n }\n\n var maxX = Math.max(this.maxWidth * maxPanOut - maxLeft, this.maxWidth - maxRight);\n\n if (x > maxX) {\n x = maxX;\n }\n\n var minY = Math.min(this.maxHeight * (1 - maxPanOut) - hh - maxTop, -maxTop);\n\n if (y < minY) {\n y = minY;\n }\n\n var maxY = Math.max(this.maxHeight * maxPanOut - maxTop, this.maxHeight - maxBottom);\n\n if (y > maxY) {\n y = maxY;\n }\n\n seriesContainer.moveTo({\n x: x,\n y: y\n }, undefined, undefined, true);\n this._zoomGeoPointReal = this.zoomGeoPoint;\n };\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\n\n\n MapChart.prototype.applyInternalDefaults = function () {\n _super.prototype.applyInternalDefaults.call(this); // Add a default screen reader title for accessibility\n // This will be overridden in screen reader if there are any `titles` set\n\n\n if (!$type.hasValue(this.readerTitle)) {\n this.readerTitle = this.language.translate(\"Map\");\n }\n\n if (!$type.hasValue(this.background.readerTitle)) {\n this.background.readerTitle = this.language.translate(\"Use plus and minus keys on your keyboard to zoom in and out\");\n }\n };\n /**\r\n * Handles event when a pointer presses down on the map, e.g. user presses\r\n * down mouse or touches the map on a screen.\r\n *\r\n * Stops all animations currently going on.\r\n */\n\n\n MapChart.prototype.handleMapDown = function () {\n if (this._mapAnimation) {\n this._mapAnimation.stop();\n }\n };\n /**\r\n * Handles the event when user doubleclicks or dooubletaps the map: zooms\r\n * in on the reference point.\r\n *\r\n * @param event Original event\r\n */\n\n\n MapChart.prototype.handleDoubleHit = function (event) {\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\n var geoPoint = this.svgPointToGeo(svgPoint);\n this.zoomIn(geoPoint);\n };\n /**\r\n * Handles mouse wheel event, e.g. user rotates mouse wheel while over the\r\n * map: zooms in or out depending on the direction of the wheel turn.\r\n *\r\n * @param event Original event\r\n */\n\n\n MapChart.prototype.handleWheel = function (event) {\n // Cancel any move inertia if there is one\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\n\n if (inertia) {\n inertia.done();\n }\n\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\n var geoPoint = this.svgPointToGeo(svgPoint);\n\n if (event.shift.y < 0) {\n this.zoomIn(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\n } else {\n this.zoomOut(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\n }\n };\n\n Object.defineProperty(MapChart.prototype, \"mouseWheelBehavior\", {\n /**\r\n * @return mouse wheel behavior\r\n */\n get: function get() {\n return this.getPropertyValue(\"mouseWheelBehavior\");\n },\n\n /**\r\n * Specifies what should chart do if when mouse wheel is rotated.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n * @default zoomX\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\n if (value != \"none\") {\n this._mouseWheelDisposer = this.chartContainer.events.on(\"wheel\", this.handleWheel, this, false);\n\n this._disposers.push(this._mouseWheelDisposer);\n } else {\n if (this._mouseWheelDisposer) {\n this._mouseWheelDisposer.dispose();\n }\n\n this.chartContainer.wheelable = false;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"panBehavior\", {\n /**\r\n * @returns Behavior\r\n */\n get: function get() {\n return this.getPropertyValue(\"panBehavior\");\n },\n\n /**\r\n * What \"dragging\" map does.\r\n *\r\n * Available values:\r\n * * `\"move\"` (default): changes position of the map.\r\n * * `\"rotateLat\"`: changes `deltaLatitude` (rotates the globe vertically).\r\n * * `\"rotateLong\"`: changes `deltaLongitude` (rotates the globe horizontally).\r\n * * `\"rotateLongLat\"`: changes both `deltaLongitude` and `deltaLatitude` (rotates the globe in any direction).\r\n *\r\n * @default \"move\"\r\n * @since 4.3.0\r\n * @param value Behavior\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"panBehavior\", value)) {\n var seriesContainer = this.seriesContainer;\n this.panSprite.draggable = false;\n seriesContainer.draggable = false;\n\n switch (value) {\n case \"move\":\n seriesContainer.draggable = true;\n break;\n\n default:\n this.panSprite.draggable = true;\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"centerMapOnZoomOut\", {\n /**\r\n * @returns If the map should be centered when zooming out.\r\n */\n get: function get() {\n return this.getPropertyValue(\"centerMapOnZoomOut\");\n },\n\n /**\r\n * Specifies if the map should be centered when zooming out\r\n * @default true\r\n * @since 4.7.12\r\n */\n set: function set(value) {\n this.setPropertyValue(\"centerMapOnZoomOut\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"projection\", {\n /**\r\n * @return Projection\r\n */\n get: function get() {\n return this.getPropertyValue(\"projection\");\n },\n\n /**\r\n * Projection to use for the map.\r\n *\r\n * Available projections:\r\n * * Albers\r\n * * AlbersUSA\r\n * * AzimuthalEqualArea\r\n * * Eckert6\r\n * * EqualEarth\r\n * * Mercator\r\n * * Miller\r\n * * NaturalEarth\r\n * * Orthographic\r\n * * Stereographic\r\n *\r\n * ```TypeScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JavaScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"projection\": \"Mercator\"\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Setting_projection} More about projections\r\n * @param projection Projection\r\n */\n set: function set(projection) {\n var _this = this;\n\n if (this.setPropertyValue(\"projection\", projection)) {\n this.invalidateProjection();\n projection.chart = this;\n\n if (this._backgroundSeries) {\n this._backgroundSeries.invalidate();\n }\n\n if (this.inited) {\n this.updateExtremes();\n }\n\n this.series.each(function (series) {\n series.events.once(\"validated\", function () {\n _this.updateCenterGeoPoint();\n\n _this.updateScaleRatio();\n\n _this.goHome(0);\n });\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n MapChart.prototype.validateDataItems = function () {\n _super.prototype.validateDataItems.call(this);\n\n this.updateExtremes();\n };\n /**\r\n * Calculates the longitudes and latitudes of the most distant points from\r\n * the center in all four directions: West, East, North, and South.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n MapChart.prototype.updateExtremes = function () {\n var east;\n var north;\n var west;\n var south;\n this.series.each(function (series) {\n if (series.ignoreBounds || series instanceof GraticuleSeries && series.fitExtent) {} else {\n if (series.north > north || !$type.isNumber(north)) {\n north = series.north;\n }\n\n if (series.south < south || !$type.isNumber(south)) {\n south = series.south;\n }\n\n if (series.west < west || !$type.isNumber(west)) {\n west = series.west;\n }\n\n if (series.east > east || !$type.isNumber(east)) {\n east = series.east;\n }\n }\n });\n var features = [];\n var foundGraticule = false; // if we gave graticule, get features of these series only for faster fitSize\n\n this.series.each(function (series) {\n if (series instanceof GraticuleSeries && !series.fitExtent) {\n features = series.getFeatures();\n foundGraticule = true;\n }\n });\n\n if (!foundGraticule) {\n this.series.each(function (series) {\n if (series.ignoreBounds || series instanceof GraticuleSeries && series.fitExtent) {} else {\n features = features.concat(series.getFeatures());\n }\n });\n }\n\n var w = $math.max(50, this.innerWidth);\n var h = $math.max(50, this.innerHeight);\n var d3Projection = this.projection.d3Projection;\n\n if (features.length > 0 && d3Projection && (this.east != east || this.west != west || this.north != north || this.south != south)) {\n this.east = east;\n this.west = west;\n this.north = north;\n this.south = south;\n\n if (d3Projection.rotate) {\n var rotation = d3Projection.rotate();\n var deltaLong = rotation[0];\n var deltaLat = rotation[1];\n var deltaGamma = rotation[2];\n this.deltaLongitude = deltaLong;\n this.deltaLatitude = deltaLat;\n this.deltaGamma = deltaGamma;\n }\n\n var geoJSON = {\n \"type\": \"FeatureCollection\",\n features: features\n };\n var initialScale = d3Projection.scale();\n d3Projection.fitSize([w, h], geoJSON);\n\n if (d3Projection.scale() != initialScale) {\n this.invalidateDataUsers();\n }\n\n this.series.each(function (series) {\n if (series instanceof GraticuleSeries) {\n series.invalidateData();\n }\n });\n\n if (this._backgroundSeries) {\n var polygon = this._backgroundSeries.mapPolygons.getIndex(0);\n\n if (polygon) {\n polygon.multiPolygon = $mapUtils.getBackground(this.north, this.east, this.south, this.west);\n }\n }\n\n this._fitWidth = w;\n this._fitHeight = h;\n }\n\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\n this.goHome(0);\n }\n };\n /**\r\n * (Re)calculates a ratio which should be used to scale the actual map so\r\n * that it fits perfectly into available space. Helps to avoid redrawing of all the map if container size changes\r\n * @ignore\r\n */\n\n\n MapChart.prototype.updateScaleRatio = function () {\n var scaleRatio;\n this.updateCenterGeoPoint();\n var hScale = this.innerWidth / this.seriesWidth;\n var vScale = this.innerHeight / this.seriesHeight;\n scaleRatio = $math.min(hScale, vScale);\n\n if ($type.isNaN(scaleRatio) || scaleRatio == Infinity) {\n scaleRatio = 1;\n }\n\n if (scaleRatio != this.scaleRatio) {\n this.scaleRatio = scaleRatio;\n $iter.each(this.series.iterator(), function (series) {\n series.scale = scaleRatio;\n series.updateTooltipBounds();\n });\n this.backgroundSeries.scale = scaleRatio;\n this.dispatch(\"scaleratiochanged\");\n }\n };\n /**\r\n * Converts a point within map container to geographical (lat/long)\r\n * coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\n\n\n MapChart.prototype.svgPointToGeo = function (point) {\n var series = this.series.getIndex(0);\n\n if (series) {\n var seriesPoint = $utils.svgPointToSprite(point, series);\n return this.seriesPointToGeo(seriesPoint);\n }\n };\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within map's\r\n * container.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\n\n\n MapChart.prototype.geoPointToSVG = function (point) {\n var series = this.series.getIndex(0);\n\n if (series) {\n var seriesPoint = this.geoPointToSeries(point);\n return $utils.spritePointToSvg(seriesPoint, series);\n }\n };\n /**\r\n * Converts a point (X/Y) within actual objects of the map to geographical\r\n * (lat/long) coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\n\n\n MapChart.prototype.seriesPointToGeo = function (point) {\n return this.projection.invert(point);\n };\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within\r\n * actual elements/objects of the maps.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\n\n\n MapChart.prototype.geoPointToSeries = function (point) {\n return this.projection.convert(point);\n };\n\n Object.defineProperty(MapChart.prototype, \"geodata\", {\n /**\r\n * @return GeoJSON data\r\n */\n get: function get() {\n return this._geodata;\n },\n\n /**\r\n * Map data in GeoJSON format.\r\n *\r\n * The Map supports the following GeoJSON objects: `Point`, `LineString`,\r\n * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n *\r\n * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n * @param geoJSON GeoJSON data\r\n */\n set: function set(geodata) {\n if (geodata != this._geodata) {\n this._geodata = geodata;\n\n if (this.reverseGeodata) {\n this.processReverseGeodata(this._geodata);\n }\n\n this.invalidateData();\n this.dataUsers.each(function (dataUser) {\n for (var i = dataUser.data.length - 1; i >= 0; i--) {\n if (dataUser.data[i].madeFromGeoData == true) {\n dataUser.data.splice(i, 1);\n }\n }\n\n dataUser.disposeData();\n dataUser.invalidateData();\n });\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"reverseGeodata\", {\n /**\r\n * @returns Reverse the order of geodata coordinates?\r\n */\n get: function get() {\n return this.getPropertyValue(\"reverseGeodata\");\n },\n\n /**\r\n * Indicates whether GeoJSON geodata supplied to the chart uses\r\n * ESRI (clockwise) or non-ESRI (counter-clockwise) order of the polygon\r\n * coordinates.\r\n *\r\n * `MapChart` supports only ESRI standard, so if your custom maps appears\r\n * garbled, try setting `reverseGeodata = true`.\r\n *\r\n * @default false\r\n * @since 4.10.11\r\n * @param value Reverse the order of geodata coordinates?\r\n */\n set: function set(value) {\n if (this.setPropertyValue(\"reverseGeodata\", value) && this._geodata) {\n this.processReverseGeodata(this._geodata);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Reverses the order of polygons on a GeoJSON data.\r\n *\r\n * @since 4.10.11\r\n * @param geodata Source geodata\r\n */\n\n MapChart.prototype.processReverseGeodata = function (geodata) {\n for (var i = 0; i < geodata.features.length; i++) {\n var feature = geodata.features[i];\n\n for (var x = 0; x < feature.geometry.coordinates.length; x++) {\n if (feature.geometry.type == \"MultiPolygon\") {\n for (var y = 0; y < feature.geometry.coordinates[x].length; y++) {\n feature.geometry.coordinates[x][y].reverse();\n }\n } else {\n feature.geometry.coordinates[x].reverse();\n }\n }\n }\n };\n /**\r\n * Zooms the map to particular zoom level and centers on a latitude/longitude\r\n * coordinate.\r\n *\r\n * @param point Center coordinate\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\n\n\n MapChart.prototype.zoomToGeoPoint = function (point, zoomLevel, center, duration, mapObject) {\n var _this = this;\n\n if (!point) {\n var hasData_1 = false;\n this.series.each(function (series) {\n if (series.dataItems.length > 0) {\n hasData_1 = true;\n }\n });\n\n if (hasData_1) {\n point = this.zoomGeoPoint;\n } else {\n return;\n }\n }\n\n if (!point || !$type.isNumber(point.longitude) || !$type.isNumber(point.latitude)) {\n return;\n }\n\n this._zoomGeoPointReal = point;\n zoomLevel = $math.fitToRange(zoomLevel, this.minZoomLevel, this.maxZoomLevel);\n var seriesPoint = this.projection.convert(point);\n\n if (seriesPoint) {\n var svgPoint = this.geoPointToSVG(point);\n var mapPoint = $utils.svgPointToSprite(svgPoint, this);\n\n if (center) {\n mapPoint = {\n x: this.innerWidth / 2,\n y: this.innerHeight / 2\n };\n }\n\n if (!$type.isNumber(duration)) {\n duration = this.zoomDuration;\n }\n\n var x = mapPoint.x - seriesPoint.x * zoomLevel * this.scaleRatio;\n var y = mapPoint.y - seriesPoint.y * zoomLevel * this.scaleRatio;\n\n if (!mapObject && zoomLevel < this.zoomLevel && this.centerMapOnZoomOut && zoomLevel < 1.5) {\n x = this.innerWidth / 2 - (this.seriesMaxLeft + (this.seriesMaxRight - this.seriesMaxLeft) / 2) * zoomLevel * this.scaleRatio;\n y = this.innerHeight / 2 - (this.seriesMaxTop + (this.seriesMaxBottom - this.seriesMaxTop) / 2) * zoomLevel * this.scaleRatio;\n }\n\n this._mapAnimation = this.seriesContainer.animate([{\n property: \"scale\",\n to: zoomLevel\n }, {\n property: \"x\",\n from: this.seriesContainer.pixelX,\n to: x\n }, {\n property: \"y\",\n from: this.seriesContainer.pixelY,\n to: y\n }], duration, this.zoomEasing);\n\n this._disposers.push(this._mapAnimation.events.on(\"animationended\", function () {\n _this._zoomGeoPointReal = _this.zoomGeoPoint;\n }));\n\n this.seriesContainer.validatePosition();\n return this._mapAnimation;\n }\n };\n /**\r\n * Zooms the map to a particular map object.\r\n *\r\n * @param mapObject Target map object\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\n\n\n MapChart.prototype.zoomToMapObject = function (mapObject, zoomLevel, center, duration) {\n if (center == undefined) {\n center = true;\n }\n\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\n\n if (inertia) {\n inertia.done();\n }\n\n if (mapObject instanceof MapImage) {\n if ($type.isNaN(zoomLevel)) {\n zoomLevel = 5;\n }\n\n return this.zoomToGeoPoint({\n latitude: mapObject.latitude,\n longitude: mapObject.longitude\n }, zoomLevel, center, duration, true);\n }\n\n var dataItem = mapObject.dataItem;\n\n if (dataItem && $type.isNumber(dataItem.zoomLevel)) {\n zoomLevel = dataItem.zoomLevel;\n }\n\n if (mapObject instanceof MapPolygon) {\n var dataItem_1 = mapObject.dataItem;\n var bbox = mapObject.polygon.bbox;\n\n if (bbox.width == 0 || bbox.height == 0) {\n bbox = mapObject.polygon.group.getBBox();\n }\n\n if (!$type.isNumber(zoomLevel)) {\n zoomLevel = Math.min(this.seriesWidth / bbox.width, this.seriesHeight / bbox.height);\n }\n\n var geoPoint = void 0;\n\n if (dataItem_1 && $type.hasValue(dataItem_1.zoomGeoPoint)) {\n geoPoint = dataItem_1.zoomGeoPoint;\n } else {\n // this is more accurate\n var polygonPoint = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n var seriesPoint = $utils.spritePointToSprite(polygonPoint, mapObject.polygon, mapObject.series);\n geoPoint = this.seriesPointToGeo(seriesPoint);\n }\n\n return this.zoomToGeoPoint(geoPoint, zoomLevel, true, duration, true);\n }\n };\n /**\r\n * Zooms the map to a particular viewport.\r\n *\r\n * The `north`, `east`, `south`, and `west` define boundaries of the\r\n * imaginary viewort we want to zoom the map to.\r\n *\r\n * `level` is not actual zoom level. The map will determine the zoom level\r\n * required to accommodated such zoom, and will adjust it by `level` if set.\r\n *\r\n * @param north Latitude of the North-most boundary\r\n * @param east Longitude of the East-most boundary\r\n * @param south Latitude of the South-most boundary\r\n * @param west Longitude of the West-most boundary\r\n * @param level Adjust zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\n\n\n MapChart.prototype.zoomToRectangle = function (north, east, south, west, level, center, duration) {\n if ($type.isNaN(level)) {\n level = 1;\n }\n\n var w = $math.min(west, east);\n var e = $math.max(west, east);\n west = w;\n east = e;\n var splitLongitude = $math.normalizeAngle(180 - this.deltaLongitude);\n\n if (splitLongitude > 180) {\n splitLongitude -= 360;\n }\n\n var newLong = west + (east - west) / 2;\n var d = west - east;\n\n if (west < splitLongitude && east > splitLongitude) {\n newLong += 180;\n d = $math.normalizeAngle(east - west - 360);\n }\n\n var zoomLevel = level * Math.min((this.south - this.north) / (south - north), Math.abs((this.west - this.east) / d));\n return this.zoomToGeoPoint({\n latitude: north + (south - north) / 2,\n longitude: newLong\n }, zoomLevel, center, duration, true);\n };\n /**\r\n * Zooms in the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\n\n\n MapChart.prototype.zoomIn = function (geoPoint, duration, sensitivity) {\n if (sensitivity === void 0) {\n sensitivity = 1;\n }\n\n var step = 1 + (this.zoomStep - 1) * sensitivity;\n\n if (step < 1) {\n step = 1;\n }\n\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel * step, false, duration);\n };\n /**\r\n * Zooms out the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\n\n\n MapChart.prototype.zoomOut = function (geoPoint, duration, sensitivity) {\n if (sensitivity === void 0) {\n sensitivity = 1;\n }\n\n var step = 1 + (this.zoomStep - 1) * sensitivity;\n\n if (step < 1) {\n step = 1;\n }\n\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel / step, false, duration);\n };\n /**\r\n * Pans the maps using relative coordinates. E.g.:\r\n *\r\n * ```JSON\r\n * {\r\n * x: 0.1,\r\n * y: -0.1\r\n * }\r\n * ```\r\n *\r\n * The above will move the map by 10% to the right, and by 10% upwards.\r\n *\r\n * @param shift Vertical and horizontal shift\r\n * @param duration Pan animation duration (ms)\r\n */\n\n\n MapChart.prototype.pan = function (shift, duration) {\n var point = this.geoPointToSVG(this.zoomGeoPoint);\n point.x += this.pixelWidth * shift.x;\n point.y += this.pixelHeight * shift.y;\n this.zoomToGeoPoint(this.svgPointToGeo(point), this.zoomLevel, true, duration, true);\n };\n\n Object.defineProperty(MapChart.prototype, \"zoomGeoPoint\", {\n /**\r\n * Current lat/long coordinates for the center of the viewport. (default\r\n * zoom reference point)\r\n *\r\n * @readonly\r\n * @return Coordinates\r\n */\n get: function get() {\n var point = $utils.spritePointToSvg({\n x: this.pixelWidth / 2,\n y: this.pixelHeight / 2\n }, this);\n return this.svgPointToGeo(point);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"zoomLevel\", {\n /**\r\n * @return Zoom level\r\n */\n get: function get() {\n return this.seriesContainer.scale;\n },\n\n /**\r\n * Current zoom level.\r\n *\r\n * @readonly\r\n * @return Zoom level\r\n */\n set: function set(value) {\n this.seriesContainer.scale = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Dispatches events after some map transformation, like pan or zoom.\r\n *\r\n * @ignore\r\n */\n\n MapChart.prototype.handleMapTransform = function () {\n if (this.zoomLevel != this._prevZoomLevel) {\n this.dispatch(\"zoomlevelchanged\");\n this._prevZoomLevel = this.zoomLevel;\n this.svgContainer.readerAlert(this.language.translate(\"Zoom level changed to %1\", this.language.locale, $type.castString(this.zoomLevel)));\n }\n\n if (this.zoomGeoPoint && (this._prevZoomGeoPoint.latitude != this.zoomGeoPoint.latitude || this._prevZoomGeoPoint.longitude != this.zoomGeoPoint.longitude)) {\n this.dispatch(\"mappositionchanged\");\n }\n };\n\n Object.defineProperty(MapChart.prototype, \"smallMap\", {\n /**\r\n * @return Small map\r\n */\n get: function get() {\n if (!this._smallMap) {\n var smallMap = new SmallMap();\n this.smallMap = smallMap;\n }\n\n return this._smallMap;\n },\n\n /**\r\n * A [[SmallMap]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a small map\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JavaScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"smallMap\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param smallMap Small map\r\n */\n set: function set(smallMap) {\n if (this._smallMap) {\n this.removeDispose(this._smallMap);\n }\n\n this._smallMap = smallMap;\n this._smallMap.chart = this;\n smallMap.parent = this.chartContainer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"zoomControl\", {\n /**\r\n * @return Zoom control\r\n */\n get: function get() {\n return this._zoomControl;\n },\n\n /**\r\n * A [[ZoomControl]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a zoom control\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JavaScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"zoomControl\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param zoomControl Zoom control\r\n */\n set: function set(zoomControl) {\n if (this._zoomControl) {\n this.removeDispose(this._zoomControl);\n }\n\n this._zoomControl = zoomControl;\n zoomControl.chart = this;\n zoomControl.parent = this.chartContainer;\n zoomControl.plusButton.exportable = false;\n zoomControl.minusButton.exportable = false;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates and returns a map series of appropriate type.\r\n *\r\n * @return Map series\r\n */\n\n MapChart.prototype.createSeries = function () {\n return new MapSeries();\n };\n\n Object.defineProperty(MapChart.prototype, \"deltaLongitude\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this.getPropertyValue(\"deltaLongitude\");\n },\n\n /**\r\n * Degrees to rotate the map around vertical axis (Y).\r\n *\r\n * E.g. if set to -160, the longitude 20 will become a new center, creating\r\n * a Pacific-centered map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @param value Rotation\r\n */\n set: function set(value) {\n value = $math.round(value, 3);\n\n if (this.setPropertyValue(\"deltaLongitude\", $geo.wrapAngleTo180(value))) {\n this.rotateMap();\n this.updateZoomGeoPoint();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"deltaLatitude\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this.getPropertyValue(\"deltaLatitude\");\n },\n\n /**\r\n * Degrees to rotate the map around horizontal axis (X).\r\n *\r\n * E.g. setting this to 90 will put Antarctica directly in the center of\r\n * the map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\n set: function set(value) {\n value = $math.round(value, 3);\n\n if (this.setPropertyValue(\"deltaLatitude\", value)) {\n this.rotateMap();\n this.updateZoomGeoPoint();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"deltaGamma\", {\n /**\r\n * @return Rotation\r\n */\n get: function get() {\n return this.getPropertyValue(\"deltaGamma\");\n },\n\n /**\r\n * Degrees to rotate the map around \"Z\" axis. This is the axis that pierces\r\n * the globe directly from the viewer's point of view.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\n set: function set(value) {\n value = $math.round(value, 3);\n\n if (this.setPropertyValue(\"deltaGamma\", value)) {\n this.rotateMap();\n this.updateZoomGeoPoint();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @ignore\r\n */\n\n MapChart.prototype.rotateMap = function () {\n if (this.projection.d3Projection) {\n if (this.projection.d3Projection.rotate) {\n this.projection.d3Projection.rotate([this.deltaLongitude, this.deltaLatitude, this.deltaGamma]);\n this.invalidateProjection(); //this.updateExtremes(); // removal fixes #3292\n }\n }\n };\n\n Object.defineProperty(MapChart.prototype, \"maxPanOut\", {\n /**\r\n * @return Max pan out\r\n */\n get: function get() {\n return this.getPropertyValue(\"maxPanOut\");\n },\n\n /**\r\n * Maximum portion of the map's width/height to allow panning \"off screen\".\r\n *\r\n * A value of 0 (zero) will prevent any portion of the the map to be panned\r\n * outside the viewport.\r\n *\r\n * 0.5 will allow half of the map to be outside viewable area.\r\n *\r\n * @default 0.7\r\n * @param value Max pan out\r\n */\n set: function set(value) {\n this.setPropertyValue(\"maxPanOut\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"homeGeoPoint\", {\n /**\r\n * @return Home geo point\r\n */\n get: function get() {\n return this.getPropertyValue(\"homeGeoPoint\");\n },\n\n /**\r\n * The geographical point to center map on when it is first loaded.\r\n *\r\n * The map will also be centered to this point when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home geo point\r\n */\n set: function set(value) {\n this.setPropertyValue(\"homeGeoPoint\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"homeZoomLevel\", {\n /**\r\n * @return Home zoom level\r\n */\n get: function get() {\n return this.getPropertyValue(\"homeZoomLevel\");\n },\n\n /**\r\n * The zoom level to put the map in when it is first loaded.\r\n *\r\n * The map will also be set to this zoom level when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home zoom level\r\n */\n set: function set(value) {\n this.setPropertyValue(\"homeZoomLevel\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MapChart.prototype, \"zoomStep\", {\n /**\r\n * @return Zoom factor\r\n */\n get: function get() {\n return this.getPropertyValue(\"zoomStep\");\n },\n\n /**\r\n * When user zooms in or out current zoom level is multiplied or divided\r\n * by value of this setting.\r\n *\r\n * @default 2\r\n * @param value Zoom factor\r\n */\n set: function set(value) {\n this.setPropertyValue(\"zoomStep\", value);\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Invalidates projection, causing all series to be redrawn.\r\n *\r\n * Call this after changing projection or its settings.\r\n */\n\n MapChart.prototype.invalidateProjection = function () {\n this.east = undefined;\n this.invalidateDataUsers();\n this.updateCenterGeoPoint();\n };\n\n Object.defineProperty(MapChart.prototype, \"geodataSource\", {\n /**\r\n * Returns a [[DataSource]] specifically for loading Component's data.\r\n *\r\n * @return Data source\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._dataSources[\"geodata\"]) {\n var dataSource = this.getDataSource(\"geodata\");\n dataSource.events.on(\"parseended\", function () {\n _this.events.once(\"datavalidated\", function () {\n _this.goHome(0);\n });\n });\n }\n\n return this._dataSources[\"geodata\"];\n },\n\n /**\r\n * Sets a [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @param value Data source\r\n */\n set: function set(value) {\n var _this = this;\n\n if (this._dataSources[\"geodata\"]) {\n this.removeDispose(this._dataSources[\"geodata\"]);\n }\n\n this._dataSources[\"geodata\"] = value;\n this._dataSources[\"geodata\"].component = this;\n this.events.on(\"inited\", function () {\n _this.loadData(\"geodata\");\n }, this, false);\n this.setDataSourceEvents(value, \"geodata\");\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\n\n MapChart.prototype.processConfig = function (config) {\n if ($type.hasValue(config[\"geodata\"]) && $type.isString(config[\"geodata\"])) {\n var name_1 = config[\"geodata\"]; // Check if there's a map loaded by such name\n\n if ($type.hasValue(window[\"am4geodata_\" + config[\"geodata\"]])) {\n config[\"geodata\"] = window[\"am4geodata_\" + config[\"geodata\"]];\n } // Nope. Let's try maybe we got JSON as string?\n else {\n try {\n config[\"geodata\"] = JSON.parse(config[\"geodata\"]);\n } catch (e) {\n // No go again. Error out.\n this.raiseCriticalError(Error(\"MapChart error: Geodata `\" + name_1 + \"` is not loaded or is incorrect.\"), true);\n }\n }\n } // Instantiate projection\n\n\n if ($type.hasValue(config[\"projection\"]) && $type.isString(config[\"projection\"])) {\n config[\"projection\"] = this.createClassInstance(config[\"projection\"]);\n } // Set up small map\n\n\n if ($type.hasValue(config.smallMap) && !$type.hasValue(config.smallMap.type)) {\n config.smallMap.type = \"SmallMap\";\n } // Set up zoom control\n\n\n if ($type.hasValue(config.zoomControl) && !$type.hasValue(config.zoomControl.type)) {\n config.zoomControl.type = \"ZoomControl\";\n }\n\n _super.prototype.processConfig.call(this, config);\n };\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n MapChart.prototype.handleSeriesAdded = function (event) {\n _super.prototype.handleSeriesAdded.call(this, event);\n\n var series = event.newValue;\n series.scale = this.scaleRatio;\n series.events.on(\"validated\", this.updateCenterGeoPoint, this, false);\n };\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\n\n\n MapChart.prototype.configOrder = function (a, b) {\n if (a == b) {\n return 0;\n } // Must come last\n else if (a == \"smallMap\") {\n return 1;\n } else if (b == \"smallMap\") {\n return -1;\n } else if (a == \"series\") {\n return 1;\n } else if (b == \"series\") {\n return -1;\n } else {\n return _super.prototype.configOrder.call(this, a, b);\n }\n };\n /**\r\n * Adds `projection` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\n\n\n MapChart.prototype.asIs = function (field) {\n return field == \"projection\" || field == \"geodata\" || _super.prototype.asIs.call(this, field);\n };\n\n Object.defineProperty(MapChart.prototype, \"centerGeoPoint\", {\n /**\r\n * Geo point of map center\r\n *\r\n * @readonly\r\n */\n get: function get() {\n return this._centerGeoPoint;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Resets the map to its original position and zoom level.\r\n *\r\n * Use the only parameter to set number of milliseconds for the zoom\r\n * animation to play.\r\n *\r\n * @param duration Duration (ms)\r\n */\n\n MapChart.prototype.goHome = function (duration) {\n var homeGeoPoint = this.homeGeoPoint;\n\n if (!homeGeoPoint) {\n homeGeoPoint = this.centerGeoPoint;\n }\n\n if (homeGeoPoint) {\n this.zoomToGeoPoint(homeGeoPoint, this.homeZoomLevel, true, duration, true);\n }\n };\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n *\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\n\n\n MapChart.prototype.setPaper = function (paper) {\n if (this.svgContainer) {\n this.svgContainer.hideOverflow = true;\n }\n\n return _super.prototype.setPaper.call(this, paper);\n };\n\n Object.defineProperty(MapChart.prototype, \"backgroundSeries\", {\n /**\r\n * Background series will create polygons that will fill all the map area\r\n * with some color (or other fill).\r\n *\r\n * This might be useful with non-rectangular projections, like Orthographic,\r\n * Albers, etc.\r\n *\r\n * To change background color/opacity access polygon template.\r\n *\r\n * ```TypeScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JavaScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * \"backgroundSeries\": {\r\n * \"mapPolygons\": {\r\n * \"polygon\": {\r\n * \"fill\": \"#fff\",\r\n * \"fillOpacity\": 0.1\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.0\r\n */\n get: function get() {\n var _this = this;\n\n if (!this._backgroundSeries) {\n var backgroundSeries = new MapPolygonSeries();\n backgroundSeries.parent = this.seriesContainer;\n backgroundSeries.chart = this;\n backgroundSeries.hiddenInLegend = true;\n backgroundSeries.mapPolygons.template.focusable = false;\n backgroundSeries.addDisposer(new Disposer(function () {\n _this._backgroundSeries = undefined;\n }));\n\n this._disposers.push(backgroundSeries);\n\n var interfaceColors = new InterfaceColorSet();\n var color = interfaceColors.getFor(\"background\");\n var polygonTemplate = backgroundSeries.mapPolygons.template.polygon;\n polygonTemplate.stroke = color;\n polygonTemplate.fill = color;\n polygonTemplate.fillOpacity = 0;\n polygonTemplate.strokeOpacity = 0; //polygonTemplate.focusable = false;\n\n backgroundSeries.mapPolygons.create();\n this._backgroundSeries = backgroundSeries;\n }\n\n return this._backgroundSeries;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Prepares the legend instance for use in this chart.\r\n *\r\n * @param legend Legend\r\n */\n\n MapChart.prototype.setLegend = function (legend) {\n _super.prototype.setLegend.call(this, legend);\n\n if (legend) {\n legend.parent = this;\n }\n };\n /**\r\n * @param value Tap to activate?\r\n */\n\n\n MapChart.prototype.setTapToActivate = function (value) {\n _super.prototype.setTapToActivate.call(this, value); // setup other containers\n\n\n this.seriesContainer.interactions.isTouchProtected = true;\n this.panSprite.interactions.isTouchProtected = true;\n };\n\n MapChart.prototype.handleTapToActivate = function () {\n _super.prototype.handleTapToActivate.call(this);\n\n this.seriesContainer.interactions.isTouchProtected = false;\n this.panSprite.interactions.isTouchProtected = false;\n };\n\n MapChart.prototype.handleTapToActivateDeactivation = function () {\n _super.prototype.handleTapToActivateDeactivation.call(this);\n\n this.seriesContainer.interactions.isTouchProtected = true;\n this.panSprite.interactions.isTouchProtected = true;\n };\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\n\n\n MapChart.prototype.asFunction = function (field) {\n return field == \"zoomEasing\" || _super.prototype.asIs.call(this, field);\n };\n /**\r\n * @ignore\r\n * @return Has license?\r\n */\n\n\n MapChart.prototype.hasLicense = function () {\n if (options.commercialLicense) {\n return true;\n }\n\n if (!_super.prototype.hasLicense.call(this)) {\n return false;\n }\n\n for (var i = 0; i < options.licenses.length; i++) {\n if (options.licenses[i].match(/^MP.{5,}/i)) {\n return true;\n }\n }\n\n return false;\n };\n\n return MapChart;\n}(SerialChart);\n\nexport { MapChart };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapChart\"] = MapChart;","/**\r\n * Map spline module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLine } from \"./MapLine\";\nimport { Polyspline } from \"../../core/elements/Polyspline\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw a spline on the map.\r\n *\r\n * @see {@link IMapSplineEvents} for a list of available events\r\n * @see {@link IMapSplineAdapters} for a list of available Adapters\r\n */\n\nvar MapSpline =\n/** @class */\nfunction (_super) {\n __extends(MapSpline, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapSpline() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapSpline\"; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapSpline.prototype.createLine = function () {\n this.line = new Polyspline();\n this.line.tensionX = 0.8;\n this.line.tensionY = 0.8;\n };\n\n Object.defineProperty(MapSpline.prototype, \"shortestDistance\", {\n /**\r\n * ShortestDistance = true is not supported by MapSpline, only MapLine does support it\r\n * @default false\r\n * @param value\r\n * @todo: review description\r\n */\n get: function get() {\n return false;\n },\n set: function set(value) {},\n enumerable: true,\n configurable: true\n });\n return MapSpline;\n}(MapLine);\n\nexport { MapSpline };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapSpline\"] = MapSpline;","/**\r\n * Map arched line module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLine } from \"./MapLine\";\nimport { Polyarc } from \"../../core/elements/Polyarc\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Used to draw an arched line on the map.\r\n *\r\n * @see {@link IMapArcEvents} for a list of available events\r\n * @see {@link IMapArcAdapters} for a list of available Adapters\r\n */\n\nvar MapArc =\n/** @class */\nfunction (_super) {\n __extends(MapArc, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapArc() {\n var _this = // Init\n _super.call(this) || this;\n\n _this.className = \"MapArc\"; // Apply theme\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n MapArc.prototype.createLine = function () {\n this.line = new Polyarc();\n };\n\n Object.defineProperty(MapArc.prototype, \"shortestDistance\", {\n get: function get() {\n return false;\n },\n\n /**\r\n * `shortestDistance = true` is not supported by `MapArc`.\r\n *\r\n * Only [[MapLine]] supports it.\r\n *\r\n * @default false\r\n * @param value\r\n */\n set: function set(value) {},\n enumerable: true,\n configurable: true\n });\n return MapArc;\n}(MapLine);\n\nexport { MapArc };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapArc\"] = MapArc;","/**\r\n * Map spline series module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\nimport { MapSpline } from \"./MapSpline\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapSplineSeries]]\r\n * @see {@link DataItem}\r\n */\n\nvar MapSplineSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapSplineSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapSplineSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapSplineSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return MapSplineSeriesDataItem;\n}(MapLineSeriesDataItem);\n\nexport { MapSplineSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A series of map spline elements.\r\n *\r\n * @see {@link IMapSplineSeriesEvents} for a list of available Events\r\n * @see {@link IMapSplineSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapSplineSeries =\n/** @class */\nfunction (_super) {\n __extends(MapSplineSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapSplineSeries() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapSplineSeries\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapSplineSeries.prototype.createDataItem = function () {\n return new MapSplineSeriesDataItem();\n };\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\n\n\n MapSplineSeries.prototype.createLine = function () {\n return new MapSpline();\n };\n\n return MapSplineSeries;\n}(MapLineSeries);\n\nexport { MapSplineSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapSplineSeries\"] = MapSplineSeries;\nregistry.registeredClasses[\"MapSplineSeriesDataItem\"] = MapSplineSeriesDataItem;","/**\r\n * Map arc series module.\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { MapLineSeries, MapLineSeriesDataItem } from \"./MapLineSeries\";\nimport { MapArc } from \"./MapArc\";\nimport { registry } from \"../../core/Registry\";\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Defines a [[DataItem]] for [[MapArcSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\n\nvar MapArcSeriesDataItem =\n/** @class */\nfunction (_super) {\n __extends(MapArcSeriesDataItem, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapArcSeriesDataItem() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapArcSeriesDataItem\";\n\n _this.applyTheme();\n\n return _this;\n }\n\n return MapArcSeriesDataItem;\n}(MapLineSeriesDataItem);\n\nexport { MapArcSeriesDataItem };\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * A series of arc elements. (curved lines)\r\n *\r\n * @see {@link IMapArcSeriesEvents} for a list of available Events\r\n * @see {@link IMapArcSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar MapArcSeries =\n/** @class */\nfunction (_super) {\n __extends(MapArcSeries, _super);\n /**\r\n * Constructor\r\n */\n\n\n function MapArcSeries() {\n var _this = _super.call(this) || this;\n\n _this.className = \"MapArcSeries\";\n\n _this.applyTheme();\n\n return _this;\n }\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\n\n\n MapArcSeries.prototype.createDataItem = function () {\n return new MapArcSeriesDataItem();\n };\n /**\r\n * Returns a new line instance of suitable type.\r\n *\r\n * @return New line\r\n */\n\n\n MapArcSeries.prototype.createLine = function () {\n return new MapArc();\n };\n\n return MapArcSeries;\n}(MapLineSeries);\n\nexport { MapArcSeries };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"MapArcSeries\"] = MapArcSeries;\nregistry.registeredClasses[\"MapArcSeriesDataItem\"] = MapArcSeriesDataItem;","/**\r\n * Zoom control module\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Container } from \"../../core/Container\";\nimport { Button } from \"../../core/elements/Button\";\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\nimport { keyboard } from \"../../core/utils/Keyboard\";\nimport { getInteraction } from \"../../core/interaction/Interaction\";\nimport { percent } from \"../../core/utils/Percent\";\nimport { registry } from \"../../core/Registry\";\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\n\n/**\r\n * Creates a control for zooming the map.\r\n *\r\n * @see {@link IZoomControlEvents} for a list of available events\r\n * @see {@link IZoomControlAdapters} for a list of available Adapters\r\n * @important\r\n */\n\nvar ZoomControl =\n/** @class */\nfunction (_super) {\n __extends(ZoomControl, _super);\n /**\r\n * Constructor\r\n */\n\n\n function ZoomControl() {\n var _this = _super.call(this) || this;\n /**\r\n * A target map.\r\n */\n\n\n _this._chart = new MutableValueDisposer();\n _this.className = \"ZoomControl\";\n _this.align = \"right\";\n _this.valign = \"bottom\";\n _this.layout = \"vertical\";\n\n _this.padding(5, 5, 5, 5);\n\n var interfaceColors = new InterfaceColorSet();\n\n var plusButton = _this.createChild(Button);\n\n plusButton.shouldClone = false;\n plusButton.label.text = \"+\"; //plusButton.fontFamily = \"Verdana\";\n\n _this.plusButton = plusButton;\n\n var slider = _this.createChild(Container);\n\n slider.shouldClone = false;\n slider.background.fill = interfaceColors.getFor(\"alternativeBackground\");\n slider.background.fillOpacity = 0.05;\n slider.background.events.on(\"hit\", _this.handleBackgroundClick, _this, false);\n slider.events.on(\"sizechanged\", _this.updateThumbSize, _this, false);\n _this.slider = slider;\n var thumb = slider.createChild(Button);\n thumb.shouldClone = false;\n thumb.padding(0, 0, 0, 0);\n thumb.draggable = true;\n thumb.events.on(\"drag\", _this.handleThumbDrag, _this, false);\n _this.thumb = thumb;\n\n var minusButton = _this.createChild(Button);\n\n minusButton.shouldClone = false;\n minusButton.label.text = \"-\"; //minusButton.fontFamily = \"Verdana\";\n\n _this.minusButton = minusButton; // Set roles\n\n _this.thumb.role = \"slider\";\n _this.thumb.readerLive = \"polite\"; // Set reader text\n\n _this.thumb.readerTitle = _this.language.translate(\"Use arrow keys to zoom in and out\");\n _this.minusButton.readerTitle = _this.language.translate(\"Press ENTER to zoom in\");\n _this.plusButton.readerTitle = _this.language.translate(\"Press ENTER to zoom out\");\n\n _this.applyTheme();\n\n _this.events.on(\"propertychanged\", function (event) {\n if (event.property == \"layout\") {\n _this.fixLayout();\n }\n }, undefined, false);\n\n _this._disposers.push(_this._chart);\n\n _this.fixLayout();\n\n return _this;\n }\n /**\r\n * @ignore\r\n */\n\n\n ZoomControl.prototype.fixLayout = function () {\n var plusButton = this.plusButton;\n var minusButton = this.minusButton;\n var thumb = this.thumb;\n var slider = this.slider;\n plusButton.x = undefined;\n plusButton.y = undefined;\n minusButton.x = undefined;\n minusButton.y = undefined;\n thumb.x = undefined;\n thumb.y = undefined;\n slider.x = undefined;\n slider.y = undefined;\n plusButton.padding(6, 10, 6, 10);\n minusButton.padding(6, 10, 6, 10);\n minusButton.label.align = \"center\";\n minusButton.label.valign = \"middle\";\n plusButton.label.align = \"center\";\n plusButton.label.valign = \"middle\";\n\n if (this.layout == \"vertical\") {\n this.width = 40;\n this.height = undefined;\n minusButton.width = percent(100);\n minusButton.height = undefined;\n thumb.width = percent(100);\n thumb.height = undefined;\n plusButton.width = percent(100);\n plusButton.height = undefined;\n slider.width = percent(100);\n minusButton.marginTop = 1;\n plusButton.marginBottom = 2;\n slider.height = 0;\n minusButton.toFront();\n plusButton.toBack();\n thumb.minX = 0;\n thumb.maxX = 0;\n thumb.minY = 0;\n } else if (this.layout == \"horizontal\") {\n this.height = 40;\n this.width = undefined;\n minusButton.height = percent(100);\n minusButton.width = undefined;\n plusButton.height = percent(100);\n plusButton.width = undefined;\n thumb.height = percent(100);\n thumb.width = undefined;\n thumb.minX = 0;\n thumb.minY = 0;\n thumb.maxY = 0;\n slider.height = percent(100);\n slider.width = 0;\n minusButton.toBack();\n plusButton.toFront();\n }\n };\n /**\r\n * Handles zoom operation after clicking on the slider background.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\n\n\n ZoomControl.prototype.handleBackgroundClick = function (event) {\n var sprite = event.target;\n var y = event.spritePoint.y;\n var chart = this.chart;\n var maxPower = Math.log(chart.maxZoomLevel) / Math.LN2;\n var minPower = Math.log(chart.minZoomLevel) / Math.LN2;\n var power = (sprite.pixelHeight - y) / sprite.pixelHeight * (minPower + (maxPower - minPower));\n var zoomLevel = Math.pow(2, power);\n chart.zoomToGeoPoint(chart.zoomGeoPoint, zoomLevel);\n };\n\n Object.defineProperty(ZoomControl.prototype, \"chart\", {\n /**\r\n * @return Map/chart\r\n */\n get: function get() {\n return this._chart.get();\n },\n\n /**\r\n * A main chart/map that this zoom control is for.\r\n *\r\n * @param chart Map/chart\r\n */\n set: function set(chart) {\n var _this = this;\n\n this._chart.set(chart, new MultiDisposer([chart.events.on(\"maxsizechanged\", this.updateThumbSize, this, false), chart.events.on(\"zoomlevelchanged\", this.updateThumb, this, false), this.minusButton.events.on(\"hit\", function () {\n chart.zoomOut(chart.zoomGeoPoint);\n }, chart, false), getInteraction().body.events.on(\"keyup\", function (ev) {\n if (_this.topParent.hasFocused) {\n // ENTER is now handled globally\n if (keyboard.isKey(ev.event, \"plus\")) {\n chart.zoomIn();\n } else if (keyboard.isKey(ev.event, \"minus\")) {\n chart.zoomOut();\n }\n }\n }, chart), this.plusButton.events.on(\"hit\", function () {\n chart.zoomIn(chart.zoomGeoPoint);\n }, chart, false)]));\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Updates the slider's thumb size based on the available zoom space.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n ZoomControl.prototype.updateThumbSize = function () {\n var chart = this.chart;\n\n if (chart) {\n var slider = this.slider;\n var thumb = this.thumb;\n\n if (this.layout == \"vertical\") {\n thumb.minHeight = Math.min(this.slider.pixelHeight, 20);\n thumb.height = slider.pixelHeight / this.stepCount;\n thumb.maxY = slider.pixelHeight - thumb.pixelHeight;\n\n if (thumb.pixelHeight <= 1) {\n thumb.visible = false;\n } else {\n thumb.visible = true;\n }\n } else {\n thumb.minWidth = Math.min(this.slider.pixelWidth, 20);\n thumb.width = slider.pixelWidth / this.stepCount;\n thumb.maxX = slider.pixelWidth - thumb.pixelWidth;\n\n if (thumb.pixelWidth <= 1) {\n thumb.visible = false;\n } else {\n thumb.visible = true;\n }\n }\n }\n };\n /**\r\n * Updates thumb according to current zoom position from map.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ZoomControl.prototype.updateThumb = function () {\n var slider = this.slider;\n var chart = this.chart;\n var thumb = this.thumb;\n\n if (!thumb.isDown) {\n var step = (Math.log(chart.zoomLevel) - Math.log(this.chart.minZoomLevel)) / Math.LN2;\n\n if (this.layout == \"vertical\") {\n thumb.y = slider.pixelHeight - (slider.pixelHeight - thumb.pixelHeight) * step / this.stepCount - thumb.pixelHeight;\n } else {\n thumb.x = slider.pixelWidth * step / this.stepCount;\n }\n }\n };\n /**\r\n * Zooms the actual map when slider position changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\n\n\n ZoomControl.prototype.handleThumbDrag = function () {\n var slider = this.slider;\n var chart = this.chart;\n var thumb = this.thumb;\n var step;\n var minStep = Math.log(this.chart.minZoomLevel) / Math.LN2;\n\n if (this.layout == \"vertical\") {\n step = this.stepCount * (slider.pixelHeight - thumb.pixelY - thumb.pixelHeight) / (slider.pixelHeight - thumb.pixelHeight);\n } else {\n step = this.stepCount * thumb.pixelX / slider.pixelWidth;\n }\n\n step = minStep + step;\n var zoomLevel = Math.pow(2, step);\n chart.zoomToGeoPoint(undefined, zoomLevel, false, 0);\n };\n\n Object.defineProperty(ZoomControl.prototype, \"stepCount\", {\n /**\r\n * Returns the step countfor the slider grid according to map's min and max\r\n * zoom level settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Step count\r\n */\n get: function get() {\n return Math.log(this.chart.maxZoomLevel) / Math.LN2 - Math.log(this.chart.minZoomLevel) / Math.LN2;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Creates a background element for slider control.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\n\n ZoomControl.prototype.createBackground = function () {\n return new RoundedRectangle();\n };\n\n return ZoomControl;\n}(Container);\n\nexport { ZoomControl };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"ZoomControl\"] = ZoomControl;","import { atan, exp, halfPi, log, pi, tan, tau } from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function (x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function () {\n return mercatorProjection(mercatorRaw).scale(961 / tau);\n}\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null,\n y0,\n x1,\n y1; // clip extent\n\n m.scale = function (_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function (_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function (_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function (_) {\n return arguments.length ? (_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Mercator projection.\r\n */\n\nvar Mercator =\n/** @class */\nfunction (_super) {\n __extends(Mercator, _super);\n\n function Mercator() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoMercator();\n return _this;\n }\n\n return Mercator;\n}(Projection);\n\nexport { Mercator };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Mercator\"] = Mercator;","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function (x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n};\nexport var sin = Math.sin;\nexport var tan = Math.tan;\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}","import { geoProjection as projection } from \"d3-geo\";\nimport { atan, exp, log, quarterPi, pi, tan } from \"./math.js\";\nexport function millerRaw(lambda, phi) {\n return [lambda, 1.25 * log(tan(quarterPi + 0.4 * phi))];\n}\n\nmillerRaw.invert = function (x, y) {\n return [x, 2.5 * atan(exp(0.8 * y)) - 0.625 * pi];\n};\n\nexport default function () {\n return projection(millerRaw).scale(108.318);\n}","/**\r\n * Functionality for Miller projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\"; // @ts-ignore\n\nimport * as d3geoprojection from \"d3-geo-projection\";\n/**\r\n * Miller projection.\r\n */\n\nvar Miller =\n/** @class */\nfunction (_super) {\n __extends(Miller, _super);\n\n function Miller() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geoprojection.geoMiller();\n return _this;\n }\n\n return Miller;\n}(Projection);\n\nexport { Miller };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Miller\"] = Miller;","import { geoProjection as projection } from \"d3-geo\";\nimport { abs, asin, cos, epsilon, halfPi, pi, sin, sqrt } from \"./math.js\";\nexport function eckert6Raw(lambda, phi) {\n var k = (1 + halfPi) * sin(phi);\n\n for (var i = 0, delta = Infinity; i < 10 && abs(delta) > epsilon; i++) {\n phi -= delta = (phi + sin(phi) - k) / (1 + cos(phi));\n }\n\n k = sqrt(2 + pi);\n return [lambda * (1 + cos(phi)) / k, 2 * phi / k];\n}\n\neckert6Raw.invert = function (x, y) {\n var j = 1 + halfPi,\n k = sqrt(j / 2);\n return [x * 2 * k / (1 + cos(y *= k)), asin((y + sin(y)) / j)];\n};\n\nexport default function () {\n return projection(eckert6Raw).scale(173.044);\n}","/**\r\n * Functionality for Eckert6 projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\"; // @ts-ignore\n\nimport * as d3geoprojection from \"d3-geo-projection\";\n/**\r\n * Eckert6 projection.\r\n */\n\nvar Eckert6 =\n/** @class */\nfunction (_super) {\n __extends(Eckert6, _super);\n\n function Eckert6() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geoprojection.geoEckert6();\n return _this;\n }\n\n return Eckert6;\n}(Projection);\n\nexport { Eckert6 };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Eckert6\"] = Eckert6;","import { asin, atan2, cos, sin, sqrt } from \"../math.js\";\nexport function azimuthalRaw(scale) {\n return function (x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [k * cy * sin(x), k * sin(y)];\n };\n}\nexport function azimuthalInvert(angle) {\n return function (x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [atan2(x * sc, z * cc), asin(z && y * sc / z)];\n };\n}","import { asin, cos, epsilon, sin } from \"../math.js\";\nimport { azimuthalInvert } from \"./azimuthal.js\";\nimport projection from \"./index.js\";\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\northographicRaw.invert = azimuthalInvert(asin);\nexport default function () {\n return projection(orthographicRaw).scale(249.5).clipAngle(90 + epsilon);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar Orthographic =\n/** @class */\nfunction (_super) {\n __extends(Orthographic, _super);\n\n function Orthographic() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoOrthographic();\n return _this;\n }\n\n return Orthographic;\n}(Projection);\n\nexport { Orthographic };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Orthographic\"] = Orthographic;","import { atan, cos, sin } from \"../math.js\";\nimport { azimuthalInvert } from \"./azimuthal.js\";\nimport projection from \"./index.js\";\nexport function stereographicRaw(x, y) {\n var cy = cos(y),\n k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\nstereographicRaw.invert = azimuthalInvert(function (z) {\n return 2 * atan(z);\n});\nexport default function () {\n return projection(stereographicRaw).scale(250).clipAngle(142);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar Stereographic =\n/** @class */\nfunction (_super) {\n __extends(Stereographic, _super);\n\n function Stereographic() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoStereographic();\n return _this;\n }\n\n return Stereographic;\n}(Projection);\n\nexport { Stereographic };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Stereographic\"] = Stereographic;","import { abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt } from \"../math.js\";\nimport { conicProjection } from \"./conic.js\";\nimport { cylindricalEqualAreaRaw } from \"./cylindricalEqualArea.js\";\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0),\n n = (sy0 + sin(y1)) / 2; // Are the parallels symmetrical around the Equator?\n\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n var c = 1 + sy0 * (2 * n - sy0),\n r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function (x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0) l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\nexport default function () {\n return conicProjection(conicEqualAreaRaw).scale(155.424).center([0, 33.6442]);\n}","import { asin, cos, sin } from \"../math.js\";\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function (x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}","import { degrees, pi, radians } from \"../math.js\";\nimport { projectionMutator } from \"./index.js\";\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function (_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}","import conicEqualArea from \"./conicEqualArea.js\";\nexport default function () {\n return conicEqualArea().parallels([29.5, 45.5]).scale(1070).translate([480, 250]).rotate([96, 0]).center([-0.6, 38.7]);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar Albers =\n/** @class */\nfunction (_super) {\n __extends(Albers, _super);\n\n function Albers() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoAlbers();\n return _this;\n }\n\n return Albers;\n}(Projection);\n\nexport { Albers };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"Albers\"] = Albers;","import { epsilon } from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport { fitExtent, fitSize, fitWidth, fitHeight } from \"./fit.js\"; // The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\n\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function point(x, y) {\n var i = -1;\n\n while (++i < n) {\n streams[i].point(x, y);\n }\n },\n sphere: function sphere() {\n var i = -1;\n\n while (++i < n) {\n streams[i].sphere();\n }\n },\n lineStart: function lineStart() {\n var i = -1;\n\n while (++i < n) {\n streams[i].lineStart();\n }\n },\n lineEnd: function lineEnd() {\n var i = -1;\n\n while (++i < n) {\n streams[i].lineEnd();\n }\n },\n polygonStart: function polygonStart() {\n var i = -1;\n\n while (++i < n) {\n streams[i].polygonStart();\n }\n },\n polygonEnd: function polygonEnd() {\n var i = -1;\n\n while (++i < n) {\n streams[i].polygonEnd();\n }\n }\n };\n} // A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n\n\nexport default function () {\n var cache,\n cacheStream,\n lower48 = albers(),\n lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n alaskaPoint,\n // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n hawaiiPoint,\n // ESRI:102007\n _point,\n pointStream = {\n point: function point(x, y) {\n _point = [x, y];\n }\n };\n\n function albersUsa(coordinates) {\n var x = coordinates[0],\n y = coordinates[1];\n return _point = null, (lower48Point.point(x, y), _point) || (alaskaPoint.point(x, y), _point) || (hawaiiPoint.point(x, y), _point);\n }\n\n albersUsa.invert = function (coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function (stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function (_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function (_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function (_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(),\n x = +_[0],\n y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]).stream(pointStream);\n alaskaPoint = alaska.translate([x - 0.307 * k, y + 0.201 * k]).clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]]).stream(pointStream);\n hawaiiPoint = hawaii.translate([x - 0.205 * k, y + 0.212 * k]).clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]]).stream(pointStream);\n return reset();\n };\n\n albersUsa.fitExtent = function (extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function (size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function (width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function (height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar AlbersUsa =\n/** @class */\nfunction (_super) {\n __extends(AlbersUsa, _super);\n\n function AlbersUsa() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoAlbersUsa();\n return _this;\n }\n\n return AlbersUsa;\n}(Projection);\n\nexport { AlbersUsa };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AlbersUsa\"] = AlbersUsa;","import projection from \"./index.js\";\nimport { abs, epsilon } from \"../math.js\";\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi,\n phi4 = phi2 * phi2;\n return [lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))];\n}\n\nnaturalEarth1Raw.invert = function (x, y) {\n var phi = y,\n i = 25,\n delta;\n\n do {\n var phi2 = phi * phi,\n phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n\n return [x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), phi];\n};\n\nexport default function () {\n return projection(naturalEarth1Raw).scale(175.295);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar NaturalEarth1 =\n/** @class */\nfunction (_super) {\n __extends(NaturalEarth1, _super);\n\n function NaturalEarth1() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoNaturalEarth1();\n return _this;\n }\n\n return NaturalEarth1;\n}(Projection);\n\nexport { NaturalEarth1 };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"NaturalEarth1\"] = NaturalEarth1;","import { asin, sqrt } from \"../math.js\";\nimport { azimuthalRaw, azimuthalInvert } from \"./azimuthal.js\";\nimport projection from \"./index.js\";\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function (cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function (z) {\n return 2 * asin(z / 2);\n});\nexport default function () {\n return projection(azimuthalEqualAreaRaw).scale(124.75).clipAngle(180 - 1e-3);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar AzimuthalEqualArea =\n/** @class */\nfunction (_super) {\n __extends(AzimuthalEqualArea, _super);\n\n function AzimuthalEqualArea() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoAzimuthalEqualArea();\n return _this;\n }\n\n return AzimuthalEqualArea;\n}(Projection);\n\nexport { AzimuthalEqualArea };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"AzimuthalEqualArea\"] = AzimuthalEqualArea;","import projection from \"./index.js\";\nimport { abs, asin, cos, epsilon2, sin, sqrt } from \"../math.js\";\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)),\n l2 = l * l,\n l6 = l2 * l2 * l2;\n return [lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))];\n}\n\nequalEarthRaw.invert = function (x, y) {\n var l = y,\n l2 = l * l,\n l6 = l2 * l2 * l2;\n\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n\n return [M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l), asin(sin(l) / M)];\n};\n\nexport default function () {\n return projection(equalEarthRaw).scale(177.158);\n}","/**\r\n * Functionality for Mercator projection\r\n *\r\n * The function(s) below are from D3.js library (https://d3js.org/)\r\n *\r\n * ```\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ```\r\n */\nimport { __extends } from \"tslib\";\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\n\nimport { Projection } from \"./Projection\";\nimport { registry } from \"../../../core/Registry\";\nimport * as d3geo from \"d3-geo\";\n/**\r\n * Orthographic projection.\r\n */\n\nvar EqualEarth =\n/** @class */\nfunction (_super) {\n __extends(EqualEarth, _super);\n\n function EqualEarth() {\n var _this = _super.call(this) || this;\n\n _this.d3Projection = d3geo.geoEqualEarth();\n return _this;\n }\n\n return EqualEarth;\n}(Projection);\n\nexport { EqualEarth };\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\n\nregistry.registeredClasses[\"EqualEarth\"] = EqualEarth;","var map = {\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-134.6803, 58.1617], [-134.2401, 58.1441], [-134.3069, 58.0344], [-134.2671, 57.8845], [-133.937, 57.5816], [-133.9737, 57.4513], [-133.9253, 57.3368], [-134.1, 57.3001], [-134.2602, 57.1468], [-134.4353, 57.057], [-134.5915, 57.0919], [-134.4868, 57.482], [-134.6599, 57.6381], [-134.8369, 58.3201], [-134.6803, 58.1617]]], [[[-174.6774, 52.035], [-175.1176, 52.047], [-174.3061, 52.2161], [-174.4355, 52.3172], [-174.1689, 52.4202], [-174.0184, 52.3318], [-174.1206, 52.1352], [-174.3435, 52.0778], [-174.6774, 52.035]]], [[[-172.7422, 60.4575], [-172.5261, 60.3918], [-172.6358, 60.3288], [-173.074, 60.4932], [-172.8602, 60.5057], [-172.7422, 60.4575]]], [[[-176.5933, 51.8667], [-176.4373, 51.7543], [-176.7709, 51.6299], [-176.8744, 51.7905], [-176.7364, 51.84], [-176.6984, 51.986], [-176.5499, 51.9441], [-176.5933, 51.8667]]], [[[-165.8416, 54.0707], [-166.0364, 54.0472], [-166.0877, 54.1691], [-165.8928, 54.207], [-165.7042, 54.1199], [-165.8416, 54.0707]]], [[[-171.463, 63.64], [-171.0349, 63.5855], [-170.4304, 63.6988], [-170.1218, 63.6175], [-170.0174, 63.4917], [-169.6242, 63.4305], [-169.4276, 63.3483], [-168.996, 63.3473], [-168.716, 63.3106], [-168.8524, 63.1712], [-169.3647, 63.1711], [-169.6763, 62.9561], [-169.7778, 63.0938], [-170.1896, 63.1963], [-170.2727, 63.2843], [-170.5271, 63.3793], [-170.8484, 63.4444], [-171.0613, 63.4459], [-171.4012, 63.3392], [-171.6318, 63.3512], [-171.791, 63.4247], [-171.7464, 63.7031], [-171.463, 63.64]]], [[[-147.6583, 60.4505], [-147.7321, 60.222], [-147.8714, 60.2297], [-147.7945, 60.4599], [-147.6583, 60.4505]]], [[[-152.4169, 58.3602], [-152.3163, 58.4135], [-151.9825, 58.2443], [-152.1091, 58.1612], [-152.5377, 58.101], [-152.7815, 58.016], [-152.9826, 57.9971], [-153.3813, 58.0872], [-152.9762, 58.2969], [-152.7719, 58.2786], [-152.8411, 58.4164], [-152.6747, 58.4505], [-152.4169, 58.3602]]], [[[-134.9697, 57.3515], [-134.8232, 57.1565], [-134.6207, 56.7183], [-134.6571, 56.5233], [-134.6301, 56.3025], [-134.7503, 56.2408], [-134.9806, 56.5189], [-135.0178, 56.6601], [-135.159, 56.7254], [-135.1631, 56.8241], [-135.3306, 56.8218], [-135.3151, 56.9318], [-135.1996, 57.0273], [-135.3413, 57.0816], [-135.3753, 57.1885], [-135.5019, 57.2438], [-135.6089, 57.0715], [-135.7677, 57.1004], [-135.7871, 57.3172], [-135.5805, 57.39], [-135.4872, 57.5164], [-135.3463, 57.5332], [-134.9697, 57.3515]]], [[[-159.873, 55.1287], [-160.0384, 55.0445], [-160.1721, 55.1231], [-159.8983, 55.2213], [-159.873, 55.1287]]], [[[-141.0022, 69.6508], [-141.0022, 68.7742], [-141.0022, 68.1897], [-141.0022, 67.3132], [-141.0022, 66.1443], [-141.0022, 65.5599], [-141.0022, 64.3911], [-141.0022, 63.2223], [-141.0022, 62.0535], [-141.0022, 61.1768], [-141.0022, 60.3002], [-140.5254, 60.2183], [-140.4529, 60.2998], [-139.9733, 60.1832], [-139.6763, 60.3283], [-139.0793, 60.3436], [-139.1852, 60.0835], [-139.0434, 59.9933], [-138.7054, 59.9013], [-138.6323, 59.7783], [-137.5933, 59.2262], [-137.4386, 58.9032], [-137.2776, 58.9882], [-136.8133, 59.15], [-136.5788, 59.1523], [-136.4667, 59.28], [-136.4664, 59.4591], [-136.2472, 59.533], [-136.3218, 59.6048], [-135.9347, 59.6627], [-135.4759, 59.7932], [-135.051, 59.5786], [-135.0713, 59.4414], [-134.9437, 59.2882], [-134.4407, 59.0854], [-134.2185, 58.8498], [-133.8207, 58.705], [-133.4011, 58.4109], [-133.4226, 58.337], [-133.2753, 58.2229], [-132.5505, 57.4999], [-132.2322, 57.1986], [-132.3379, 57.0794], [-132.0315, 57.0265], [-132.1043, 56.8568], [-131.8662, 56.7929], [-131.8243, 56.5899], [-131.5751, 56.5988], [-131.0829, 56.4048], [-130.7416, 56.3408], [-130.6491, 56.2637], [-130.4771, 56.2306], [-130.4132, 56.1225], [-130.0229, 56.0145], [-130.0251, 55.8883], [-130.1465, 55.6545], [-130.0365, 55.2979], [-130.2141, 55.0259], [-130.4932, 54.8342], [-130.6158, 54.7909], [-130.8496, 54.8076], [-131.0478, 55.1577], [-130.856, 55.3551], [-130.9185, 55.736], [-131.1277, 55.9601], [-131.2876, 56.0121], [-131.7842, 55.8765], [-131.8694, 55.6472], [-131.9834, 55.535], [-132.119, 55.5697], [-132.2234, 55.7211], [-132.0058, 55.9301], [-131.8438, 56.16], [-132.0219, 56.3801], [-132.182, 56.4206], [-132.3577, 56.6258], [-132.476, 56.6497], [-132.4871, 56.7664], [-132.6395, 56.7964], [-132.8022, 56.8951], [-132.8143, 57.0406], [-133.4658, 57.1721], [-133.4367, 57.3368], [-133.539, 57.5542], [-133.6487, 57.6423], [-133.5542, 57.6951], [-133.1171, 57.5662], [-133.6573, 57.841], [-133.7441, 57.8546], [-134.0311, 58.0722], [-134.0633, 58.2111], [-134.2088, 58.2329], [-134.4854, 58.3672], [-134.6636, 58.3847], [-134.7761, 58.4538], [-134.9425, 58.6463], [-134.9648, 58.7422], [-135.1319, 58.8428], [-135.2174, 59.0766], [-135.3303, 59.2391], [-135.5023, 59.2024], [-135.3862, 59.0876], [-135.334, 58.9096], [-135.0497, 58.3068], [-135.1415, 58.2335], [-135.3025, 58.2559], [-135.5718, 58.412], [-135.8735, 58.3942], [-135.8617, 58.5771], [-136.0455, 58.7891], [-136.2258, 58.7655], [-136.4511, 58.8463], [-136.5662, 58.9409], [-136.831, 58.9838], [-136.8791, 58.8815], [-136.5682, 58.7863], [-136.4101, 58.7006], [-136.4838, 58.6177], [-136.2246, 58.6023], [-136.1029, 58.5063], [-136.1296, 58.3504], [-136.4624, 58.3279], [-136.5826, 58.2453], [-137.072, 58.3951], [-137.544, 58.5812], [-137.75, 58.7071], [-138.0269, 58.9414], [-138.3525, 59.0873], [-139.3409, 59.3757], [-139.7991, 59.5463], [-139.6116, 59.6103], [-139.5056, 59.7263], [-139.5822, 59.8484], [-139.5189, 60.0172], [-139.8502, 59.8307], [-140.2167, 59.7266], [-140.4199, 59.7107], [-140.8432, 59.7488], [-141.4083, 59.9028], [-141.2946, 59.98], [-141.3295, 60.0828], [-141.6702, 59.9698], [-142.5486, 60.0861], [-142.9457, 60.097], [-143.5061, 60.055], [-143.805, 60.0129], [-144.1472, 60.0163], [-144.0885, 60.0843], [-144.3326, 60.191], [-144.643, 60.2246], [-144.9013, 60.3351], [-144.8245, 60.5336], [-144.984, 60.537], [-145.2483, 60.3801], [-145.8989, 60.4782], [-145.6749, 60.6511], [-146.1491, 60.6607], [-146.251, 60.7491], [-146.6385, 60.8973], [-146.5828, 61.1278], [-146.874, 61.0048], [-147.255, 60.9782], [-147.321, 60.9255], [-147.5926, 60.9795], [-147.6557, 60.9095], [-147.8911, 60.8899], [-148.0052, 60.9686], [-147.8448, 61.1864], [-148.2086, 61.0299], [-148.3444, 60.8536], [-148.5574, 60.8029], [-148.2679, 60.6997], [-148.2964, 60.532], [-148.0507, 60.5671], [-147.9641, 60.4849], [-148.1817, 60.393], [-148.1976, 60.1678], [-148.3331, 60.122], [-148.4307, 59.9892], [-148.8427, 59.9512], [-149.1216, 60.0335], [-149.4323, 60.0011], [-149.5491, 59.8943], [-149.7948, 59.8559], [-149.7825, 59.7503], [-150.198, 59.5666], [-150.5815, 59.5645], [-150.6775, 59.427], [-150.9608, 59.2439], [-151.3664, 59.2456], [-151.7382, 59.1885], [-151.9641, 59.2852], [-151.8499, 59.4064], [-151.3996, 59.5164], [-151.1894, 59.6377], [-151.7638, 59.7], [-151.8532, 59.7821], [-151.7345, 59.9884], [-151.4515, 60.2027], [-151.3127, 60.4665], [-151.3218, 60.7429], [-150.9538, 60.8413], [-150.4413, 61.0236], [-149.9975, 60.9352], [-149.6325, 60.9519], [-149.1728, 60.8805], [-149.1422, 60.9357], [-149.5925, 60.9939], [-149.9677, 61.1218], [-149.9452, 61.2943], [-150.4718, 61.26], [-150.6123, 61.3012], [-150.9455, 61.1982], [-151.1502, 61.0859], [-151.5935, 60.9796], [-151.734, 60.9108], [-151.7504, 60.7549], [-151.9962, 60.6822], [-152.2707, 60.5281], [-152.2603, 60.4095], [-152.3689, 60.3364], [-152.6539, 60.2385], [-152.6286, 60.0411], [-152.7595, 59.9209], [-153.106, 59.8751], [-153.0482, 59.73], [-153.364, 59.6598], [-153.4144, 59.7402], [-153.8141, 59.4737], [-154.0883, 59.3634], [-154.1783, 59.1556], [-154.1298, 59.1198], [-153.6564, 59.0386], [-153.4183, 58.9599], [-153.3344, 58.8579], [-153.6173, 58.6547], [-153.8619, 58.5878], [-154.0199, 58.4929], [-154.0859, 58.3658], [-154.2081, 58.2887], [-154.247, 58.1594], [-154.5706, 58.118], [-154.5849, 58.0556], [-155.0069, 58.0161], [-155.0993, 57.9133], [-155.3128, 57.8071], [-155.5903, 57.7336], [-155.7779, 57.5683], [-156.0002, 57.545], [-156.0554, 57.4476], [-156.2422, 57.4493], [-156.4784, 57.3279], [-156.3976, 57.2406], [-156.4751, 57.1052], [-156.629, 57.0099], [-156.7799, 57.0057], [-157.2058, 56.812], [-157.3902, 56.8099], [-157.5784, 56.6345], [-157.8691, 56.6452], [-157.9783, 56.5432], [-158.4144, 56.4358], [-158.5374, 56.3354], [-158.3861, 56.3015], [-158.2757, 56.1962], [-158.5233, 56.0724], [-158.6267, 56.1547], [-158.7898, 55.987], [-159.5232, 55.81], [-159.743, 55.8438], [-159.9623, 55.7949], [-160.4627, 55.5578], [-160.8967, 55.5136], [-161.0995, 55.4057], [-161.3819, 55.3713], [-161.4767, 55.465], [-161.3727, 55.5563], [-161.4588, 55.6291], [-161.6836, 55.53], [-161.7416, 55.3912], [-162.074, 55.1393], [-162.3329, 55.0503], [-162.5419, 55.2427], [-162.6441, 55.218], [-162.6143, 55.0714], [-162.6744, 54.9965], [-162.865, 54.9546], [-163.1196, 55.0647], [-163.1311, 54.9166], [-163.2887, 54.8376], [-163.2788, 55.1219], [-163.1145, 55.194], [-162.962, 55.1839], [-162.5133, 55.45], [-162.1571, 55.7195], [-161.6973, 55.9072], [-161.2156, 56.0214], [-160.8513, 55.7718], [-160.7584, 55.8547], [-160.3085, 55.8645], [-160.5391, 56.0063], [-160.302, 56.3142], [-159.7851, 56.5617], [-159.2831, 56.6886], [-158.9904, 56.86], [-158.6752, 56.7949], [-158.6608, 57.0394], [-158.3209, 57.2979], [-158.0457, 57.4095], [-157.8944, 57.5114], [-157.6076, 57.6015], [-157.684, 57.7439], [-157.6109, 58.0508], [-157.4427, 58.1722], [-157.5236, 58.4213], [-157.4609, 58.503], [-157.2288, 58.6409], [-156.9747, 58.7363], [-157.142, 58.8777], [-157.6657, 58.7485], [-158.0219, 58.6402], [-158.3026, 58.6418], [-158.5032, 58.8504], [-158.4256, 58.9993], [-158.5144, 59.0728], [-158.7606, 58.9501], [-158.8614, 58.7187], [-158.7721, 58.5203], [-158.7886, 58.4409], [-158.9507, 58.4046], [-159.0827, 58.4697], [-159.3583, 58.7213], [-159.6702, 58.9111], [-159.9202, 58.8199], [-160.1526, 58.9059], [-160.3631, 59.0511], [-160.8171, 58.8718], [-161.2159, 58.801], [-161.3613, 58.6695], [-161.7555, 58.6121], [-162.1449, 58.6443], [-161.8564, 58.7171], [-161.7244, 58.7943], [-161.7805, 58.8974], [-161.7945, 59.1094], [-161.9811, 59.1461], [-162.0233, 59.284], [-161.9201, 59.3654], [-161.8287, 59.5886], [-162.1382, 59.98], [-162.2425, 60.1783], [-162.4213, 60.284], [-162.1389, 60.6143], [-162.2651, 60.5953], [-162.5996, 60.297], [-162.5005, 60.1266], [-162.5707, 59.9897], [-162.7326, 59.9937], [-162.8779, 59.9228], [-163.2194, 59.8456], [-163.6804, 59.8015], [-163.9069, 59.8068], [-164.1428, 59.8968], [-164.1316, 59.9943], [-164.4705, 60.1493], [-164.6623, 60.3039], [-164.7999, 60.3073], [-165.0611, 60.4125], [-165.0265, 60.5006], [-165.3538, 60.5412], [-165.016, 60.7401], [-164.8051, 60.892], [-164.37, 60.7959], [-164.2656, 60.7247], [-163.8949, 60.7451], [-163.73, 60.5899], [-163.5287, 60.6645], [-163.421, 60.7575], [-163.6554, 60.8775], [-163.749, 60.9697], [-163.9946, 60.8647], [-164.4415, 60.8699], [-164.754, 60.9313], [-165.0657, 60.9207], [-165.1755, 60.9656], [-165.0771, 61.0942], [-165.3921, 61.2123], [-165.3808, 61.1063], [-165.5659, 61.1023], [-165.6914, 61.2999], [-165.9063, 61.4037], [-165.7971, 61.4912], [-166.1005, 61.6451], [-165.8346, 61.6793], [-166.0788, 61.8031], [-165.6128, 61.8693], [-165.7439, 62.0117], [-165.7073, 62.1005], [-165.1946, 62.4735], [-164.7927, 62.6232], [-164.8454, 62.801], [-164.6775, 63.0205], [-164.409, 63.2151], [-164.1076, 63.2617], [-163.7363, 63.1928], [-163.3588, 63.0458], [-163.0622, 63.0797], [-162.6215, 63.2658], [-162.2828, 63.5292], [-162.1125, 63.5342], [-161.974, 63.453], [-161.5054, 63.4682], [-161.0997, 63.5579], [-160.8265, 63.7293], [-160.7786, 63.8189], [-160.9876, 64.2513], [-161.2201, 64.3966], [-161.3857, 64.44], [-160.932, 64.5791], [-160.836, 64.6819], [-160.887, 64.7955], [-161.1869, 64.9241], [-161.4663, 64.7948], [-161.7594, 64.8162], [-161.8684, 64.7427], [-162.1722, 64.6781], [-162.807, 64.3742], [-162.8764, 64.5164], [-163.0517, 64.5197], [-163.1444, 64.4238], [-163.4862, 64.5498], [-163.7131, 64.5883], [-164.3039, 64.5839], [-164.8995, 64.4607], [-166.1428, 64.5828], [-166.3251, 64.6257], [-166.4814, 64.7281], [-166.4152, 64.9265], [-166.5509, 64.953], [-166.8269, 65.0961], [-166.531, 65.1547], [-166.4516, 65.2473], [-166.6654, 65.3383], [-167.404, 65.4221], [-167.9873, 65.5678], [-168.0884, 65.6578], [-167.58, 65.7583], [-167.4053, 65.8593], [-167.0742, 65.8771], [-166.7477, 66.0518], [-166.2146, 66.1703], [-165.7237, 66.1125], [-165.5602, 66.1671], [-165.8403, 66.245], [-165.7762, 66.319], [-165.4494, 66.4099], [-165.0639, 66.4378], [-164.6741, 66.555], [-164.0583, 66.6108], [-163.7755, 66.5311], [-163.9029, 66.3784], [-163.894, 66.2869], [-164.0337, 66.2156], [-163.6954, 66.0839], [-163.1715, 66.0754], [-162.8865, 66.0992], [-162.5868, 66.0509], [-162.2143, 66.071], [-161.8163, 66.0536], [-161.5569, 66.2505], [-161.2011, 66.2193], [-161.1203, 66.3343], [-161.5444, 66.4071], [-161.8281, 66.3709], [-161.8876, 66.4931], [-162.1912, 66.6932], [-162.4675, 66.7357], [-162.6075, 66.8944], [-162.3617, 66.9473], [-162.1314, 66.8014], [-161.9096, 66.5596], [-161.591, 66.4595], [-161.3359, 66.4964], [-161.0481, 66.4742], [-160.6505, 66.3731], [-160.2317, 66.4203], [-160.2625, 66.5724], [-160.6438, 66.605], [-160.864, 66.6709], [-161.398, 66.5519], [-161.8566, 66.7004], [-161.8787, 66.804], [-161.6222, 66.9793], [-161.9655, 67.0495], [-162.3915, 67.0199], [-163.0017, 67.0273], [-163.5318, 67.1025], [-163.7206, 67.1955], [-163.9427, 67.4776], [-164.1252, 67.6067], [-165.386, 68.0456], [-165.9596, 68.1559], [-166.236, 68.278], [-166.5745, 68.3203], [-166.3805, 68.4251], [-166.182, 68.7972], [-166.2091, 68.8853], [-165.5095, 68.8676], [-165.0439, 68.8825], [-164.3024, 68.9365], [-163.868, 69.0367], [-163.5356, 69.1701], [-163.1615, 69.388], [-163.0936, 69.6107], [-162.9521, 69.7581], [-161.881, 70.3318], [-161.639, 70.2346], [-160.9963, 70.3046], [-160.6341, 70.4464], [-160.1172, 70.5912], [-159.9632, 70.5682], [-160.095, 70.3333], [-159.8552, 70.3242], [-159.7463, 70.5305], [-159.9618, 70.6341], [-159.6809, 70.7868], [-159.3145, 70.8785], [-158.9963, 70.8016], [-158.4844, 70.8411], [-157.9985, 70.8453], [-157.6056, 70.9412], [-157.1953, 71.0933], [-156.7833, 71.3189], [-155.8112, 71.1885], [-155.5795, 71.1211], [-155.8043, 70.9955], [-156.1466, 70.9279], [-155.8722, 70.8346], [-155.5794, 70.8943], [-155.1669, 71.0993], [-154.9438, 71.0831], [-154.6737, 70.9871], [-154.7852, 70.8943], [-154.1953, 70.8011], [-153.9182, 70.8773], [-153.2329, 70.9326], [-152.7849, 70.876], [-152.4912, 70.881], [-152.2329, 70.8103], [-152.4705, 70.6536], [-152.1729, 70.5567], [-151.769, 70.5602], [-151.9447, 70.4521], [-151.2248, 70.4188], [-150.6627, 70.5099], [-150.4032, 70.4439], [-150.1525, 70.4437], [-149.8701, 70.5096], [-149.2695, 70.5008], [-148.6884, 70.4163], [-148.4793, 70.3179], [-148.2487, 70.3567], [-147.8695, 70.3033], [-147.7054, 70.2172], [-147.0629, 70.1704], [-146.7449, 70.1917], [-145.8232, 70.16], [-145.1974, 70.0087], [-144.6192, 69.9821], [-144.4169, 70.039], [-143.7465, 70.102], [-143.2183, 70.1162], [-142.7079, 70.0338], [-142.2969, 69.8699], [-141.6992, 69.7704], [-141.4079, 69.6534], [-141.0022, 69.6508]]], [[[-134.3127, 58.2289], [-134.594, 58.2431], [-134.52, 58.3326], [-134.3127, 58.2289]]], [[[-132.8623, 54.8944], [-132.6173, 54.8925], [-132.6469, 54.7562], [-132.8073, 54.7091], [-133.1227, 54.9698], [-133.2511, 55.1751], [-133.418, 55.2107], [-133.2966, 55.3258], [-133.0974, 55.2137], [-132.8623, 54.8944]]], [[[-160.919, 58.5771], [-161.0703, 58.5691], [-161.1315, 58.6681], [-160.9863, 58.7364], [-160.7151, 58.7953], [-160.919, 58.5771]]], [[[-167.9644, 53.345], [-168.2707, 53.2381], [-168.446, 53.0844], [-168.6986, 52.9634], [-169.0659, 52.834], [-168.7959, 53.0449], [-168.7596, 53.175], [-168.639, 53.2558], [-168.4367, 53.2569], [-168.3572, 53.4576], [-168.1931, 53.5333], [-167.9857, 53.5581], [-167.8047, 53.4849], [-167.9644, 53.345]]], [[[-166.1354, 60.3835], [-166.0436, 60.3339], [-165.7297, 60.3142], [-165.7123, 60.0694], [-165.5918, 59.9131], [-165.9467, 59.89], [-166.1876, 59.7738], [-166.343, 59.8345], [-166.6276, 59.8647], [-167.1389, 60.0085], [-167.4364, 60.2067], [-167.2517, 60.2335], [-166.8363, 60.2169], [-166.7844, 60.2965], [-166.4757, 60.3827], [-166.1354, 60.3835]]], [[[-177.1482, 51.7167], [-177.5776, 51.6942], [-177.2098, 51.8414], [-177.1482, 51.7167]]], [[[-146.394, 60.4496], [-146.1283, 60.3926], [-146.6184, 60.2737], [-146.7026, 60.4085], [-146.5603, 60.4805], [-146.394, 60.4496]]], [[[-147.7358, 59.8132], [-147.8143, 59.902], [-147.4658, 60.097], [-147.12, 60.3631], [-146.9867, 60.2544], [-147.3184, 60.0753], [-147.4993, 59.8902], [-147.7358, 59.8132]]], [[[-177.8791, 51.6497], [-178.0589, 51.6726], [-177.9864, 51.7643], [-178.1945, 51.8822], [-177.9538, 51.9184], [-177.7706, 51.7779], [-177.8791, 51.6497]]], [[[-135.7304, 58.2443], [-135.5875, 58.1468], [-135.6133, 57.9919], [-135.3466, 58.124], [-135.0021, 58.0511], [-134.928, 57.9528], [-134.9706, 57.8173], [-135.2312, 57.8158], [-135.2495, 57.7326], [-134.9789, 57.7243], [-134.8731, 57.5893], [-134.9315, 57.4811], [-135.0848, 57.511], [-135.4979, 57.6623], [-135.6086, 57.6507], [-135.6178, 57.4804], [-135.692, 57.4199], [-135.9108, 57.4465], [-136.0766, 57.6745], [-136.4599, 57.8731], [-136.5686, 57.9722], [-136.5123, 58.0959], [-136.1424, 58.1539], [-135.7871, 58.2684], [-135.7304, 58.2443]]], [[[-166.6153, 53.9009], [-166.4975, 53.8835], [-166.3724, 53.999], [-166.2309, 53.9326], [-166.4887, 53.7855], [-166.5492, 53.701], [-166.4442, 53.6518], [-166.7704, 53.476], [-167.1537, 53.4078], [-167.5225, 53.2762], [-167.6695, 53.2599], [-167.8088, 53.3238], [-167.5302, 53.3937], [-167.1361, 53.5265], [-167.0157, 53.6984], [-167.1182, 53.8726], [-166.9781, 53.9629], [-166.6274, 53.9957], [-166.6153, 53.9009]]], [[[-131.3398, 55.0798], [-131.232, 54.9037], [-131.4062, 54.8943], [-131.4314, 54.9965], [-131.5951, 55.0908], [-131.5778, 55.2009], [-131.4046, 55.2133], [-131.3398, 55.0798]]], [[[-152.898, 57.8239], [-152.5115, 57.8514], [-152.4115, 57.6462], [-152.2163, 57.5771], [-152.4122, 57.4547], [-152.7814, 57.4534], [-152.679, 57.3452], [-152.879, 57.3208], [-153.0516, 57.2377], [-153.2744, 57.2263], [-153.5036, 57.138], [-153.6465, 57.0295], [-153.7572, 56.8584], [-153.9727, 56.7742], [-154.0709, 56.8207], [-153.7932, 56.9895], [-153.9994, 57.05], [-154.0653, 57.1336], [-154.3244, 57.1318], [-154.1843, 57.0053], [-154.3389, 56.9209], [-154.4988, 57.0365], [-154.5693, 57.2059], [-154.706, 57.3353], [-154.6732, 57.4461], [-154.5353, 57.5595], [-154.2814, 57.6381], [-154.0298, 57.6307], [-153.8054, 57.3582], [-153.8184, 57.5956], [-153.6931, 57.6634], [-153.9044, 57.8199], [-153.6627, 57.8579], [-153.5245, 57.731], [-153.2003, 57.82], [-153.1605, 57.972], [-152.8504, 57.8968], [-152.898, 57.8239]]], [[[-163.4761, 54.9808], [-163.3581, 54.7356], [-163.583, 54.6256], [-164.0733, 54.621], [-164.2346, 54.5713], [-164.4635, 54.4273], [-164.8234, 54.4191], [-164.8877, 54.6078], [-164.7062, 54.692], [-164.5298, 54.8808], [-164.2737, 54.9], [-163.868, 55.0392], [-163.6075, 55.0508], [-163.4761, 54.9808]]], [[[-133.9896, 56.845], [-133.8309, 56.7813], [-133.7384, 56.6505], [-133.8553, 56.5822], [-133.8846, 56.2921], [-133.9497, 56.1277], [-134.1896, 56.0769], [-134.245, 56.2032], [-134.1955, 56.4134], [-134.0844, 56.4564], [-134.2902, 56.58], [-134.3844, 56.724], [-134.3737, 56.8387], [-134.1433, 56.9323], [-133.9896, 56.845]]], [[[-133.5661, 56.3393], [-133.203, 56.3198], [-133.0818, 56.1942], [-133.0966, 56.09], [-132.7576, 55.9949], [-132.5977, 55.8951], [-132.4302, 55.687], [-132.5916, 55.4644], [-132.4178, 55.4829], [-132.2153, 55.3835], [-132.2066, 55.2244], [-131.9764, 55.2085], [-132.0004, 55.0338], [-131.9809, 54.8048], [-132.1343, 54.7126], [-132.3413, 54.9073], [-132.5494, 54.9525], [-132.5885, 55.0524], [-132.7823, 55.0485], [-133.103, 55.3602], [-132.9589, 55.3956], [-133.0824, 55.504], [-133.0896, 55.6126], [-133.2983, 55.6069], [-133.369, 55.689], [-133.5533, 55.6912], [-133.6802, 55.7851], [-133.4469, 55.7971], [-133.2415, 55.9209], [-133.3712, 56.0359], [-133.6842, 55.9428], [-133.7552, 55.9995], [-133.5308, 56.1456], [-133.5944, 56.2164], [-133.5661, 56.3393]]], [[[-133.3051, 55.5438], [-133.2817, 55.4979], [-133.6502, 55.2693], [-133.6342, 55.5393], [-133.3051, 55.5438]]], [[[-132.7799, 56.2472], [-133.0351, 56.3409], [-132.9021, 56.4537], [-132.7061, 56.4485], [-132.6694, 56.2873], [-132.7799, 56.2472]]], [[[-153.007, 57.1248], [-153.3746, 57.0519], [-153.2852, 57.185], [-153.007, 57.1248]]], [[[-133.3662, 57.0035], [-133.0708, 56.9743], [-132.9541, 56.8803], [-132.954, 56.713], [-133.1442, 56.5669], [-133.2126, 56.4646], [-133.6028, 56.464], [-133.6493, 56.5168], [-133.681, 56.7975], [-133.9794, 57.0096], [-133.866, 57.0687], [-133.3662, 57.0035]]], [[[-130.9791, 55.4892], [-131.0828, 55.2668], [-131.1879, 55.2063], [-131.4207, 55.2759], [-131.4745, 55.3735], [-131.811, 55.2231], [-131.8461, 55.4163], [-131.6476, 55.5855], [-131.625, 55.8316], [-131.2692, 55.9554], [-131.1207, 55.8566], [-130.966, 55.6695], [-130.9791, 55.4892]]], [[[-160.6849, 55.3148], [-160.5832, 55.3077], [-160.4875, 55.1848], [-160.8255, 55.174], [-160.8465, 55.3114], [-160.6849, 55.3148]]], [[[-132.1123, 56.1094], [-132.1329, 55.9432], [-132.2873, 55.9294], [-132.4511, 56.0564], [-132.6599, 56.0782], [-132.6991, 56.1982], [-132.5987, 56.2416], [-132.3798, 56.4987], [-132.3165, 56.4875], [-132.0669, 56.2442], [-132.1123, 56.1094]]], [[[-132.7468, 56.5257], [-132.9308, 56.5245], [-132.8425, 56.7948], [-132.6559, 56.6847], [-132.568, 56.5758], [-132.7468, 56.5257]]]]\n },\n \"properties\": {\n \"name\": \"Alaska\",\n \"id\": \"US-AK\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-AK\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-85.6235, 35.0009], [-85.3859, 33.8507], [-85.2009, 32.9562], [-85.1565, 32.8042], [-85.0151, 32.5261], [-84.986, 32.3609], [-84.9297, 32.2466], [-85.0346, 32.1474], [-85.1241, 31.8804], [-85.1248, 31.7768], [-85.0549, 31.5726], [-85.0926, 31.2957], [-85.0675, 31.1176], [-85.0073, 31.0016], [-85.9769, 31.0009], [-86.6236, 31.0009], [-87.5937, 31.0008], [-87.6011, 30.8605], [-87.4216, 30.6716], [-87.4294, 30.4778], [-87.4896, 30.3777], [-87.6222, 30.2647], [-87.7903, 30.2919], [-87.9243, 30.4496], [-87.9489, 30.627], [-88.0325, 30.6812], [-88.1355, 30.3666], [-88.3996, 30.3709], [-88.4443, 31.1397], [-88.4862, 31.8904], [-88.3397, 32.9988], [-88.1688, 34.292], [-88.0847, 34.9331], [-88.1733, 34.999], [-88.1905, 35.0249], [-86.9071, 35.0129], [-85.6235, 35.0009]]]\n },\n \"properties\": {\n \"name\": \"Alabama\",\n \"id\": \"US-AL\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-AL\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-89.7047, 36.0015], [-89.7037, 35.9069], [-89.7796, 35.8057], [-89.9436, 35.6791], [-89.9674, 35.5033], [-90.066, 35.4141], [-90.0929, 35.2036], [-90.1423, 35.1142], [-90.2938, 35.0012], [-90.3198, 34.8992], [-90.5392, 34.7281], [-90.5841, 34.5037], [-90.718, 34.3917], [-90.8172, 34.2522], [-90.9097, 34.1888], [-90.9431, 34.0297], [-91.0702, 33.9743], [-91.0528, 33.8276], [-91.2076, 33.6756], [-91.2146, 33.5834], [-91.1411, 33.4386], [-91.1633, 33.2944], [-91.1068, 33.2179], [-91.15, 33.0159], [-92.4243, 33.0139], [-93.3227, 33.0128], [-94.0413, 33.012], [-94.0472, 33.5544], [-94.2947, 33.5875], [-94.3778, 33.5661], [-94.4841, 33.6485], [-94.4616, 34.5178], [-94.4391, 35.3872], [-94.6184, 36.5009], [-93.7829, 36.5009], [-92.3904, 36.5009], [-91.5548, 36.5009], [-90.1623, 36.5009], [-90.0744, 36.3719], [-90.0758, 36.2967], [-90.303, 36.0993], [-90.3811, 35.9927], [-89.7047, 36.0015]]]\n },\n \"properties\": {\n \"name\": \"Arkansas\",\n \"id\": \"US-AR\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-AR\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-109.0467, 37.0009], [-109.0468, 36.2918], [-109.0469, 35.5829], [-109.0469, 34.5194], [-109.0472, 33.4558], [-109.0473, 32.3922], [-109.0478, 31.328], [-110.3351, 31.3255], [-111.0421, 31.3243], [-111.9905, 31.6202], [-112.939, 31.9162], [-113.8875, 32.2123], [-114.836, 32.5083], [-114.7248, 32.7154], [-114.5822, 32.7347], [-114.4775, 32.8419], [-114.4908, 32.9836], [-114.6481, 33.0718], [-114.7045, 33.1698], [-114.7017, 33.4179], [-114.6026, 33.47], [-114.4992, 33.6858], [-114.5091, 33.904], [-114.3293, 34.142], [-114.1255, 34.2865], [-114.1589, 34.3552], [-114.371, 34.4885], [-114.398, 34.5897], [-114.5575, 34.7946], [-114.6105, 34.9912], [-114.5909, 35.3528], [-114.6485, 35.4759], [-114.6452, 35.6305], [-114.6871, 35.9173], [-114.7414, 36.0136], [-114.6691, 36.1218], [-114.4061, 36.1484], [-114.1833, 36.0303], [-114.0429, 36.1817], [-114.0402, 37.0042], [-113.104, 37.0035], [-111.8556, 37.0026], [-111.2313, 37.0022], [-109.9829, 37.0014], [-109.0467, 37.0009]]]\n },\n \"properties\": {\n \"name\": \"Arizona\",\n \"id\": \"US-AZ\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-AZ\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-120.0008, 42.0005], [-120.0006, 40.6879], [-120.0001, 39.5627], [-120.0001, 39.0002], [-119.2974, 38.5098], [-118.5948, 38.0193], [-118.1262, 37.6924], [-117.2097, 37.0033], [-116.6596, 36.5899], [-115.8978, 35.9955], [-115.3901, 35.5991], [-114.6105, 34.9912], [-114.5575, 34.7946], [-114.398, 34.5897], [-114.371, 34.4885], [-114.1589, 34.3552], [-114.1255, 34.2865], [-114.3293, 34.142], [-114.5091, 33.904], [-114.4992, 33.6858], [-114.6026, 33.47], [-114.7017, 33.4179], [-114.7045, 33.1698], [-114.6481, 33.0718], [-114.4908, 32.9836], [-114.4775, 32.8419], [-114.5822, 32.7347], [-114.7248, 32.7154], [-115.6975, 32.6404], [-117.1282, 32.5334], [-117.1374, 32.6491], [-117.2436, 32.6641], [-117.2629, 32.9389], [-117.3188, 33.1], [-117.4675, 33.2955], [-117.7885, 33.5385], [-117.9521, 33.6196], [-118.0806, 33.7221], [-118.2644, 33.7586], [-118.4105, 33.7439], [-118.3929, 33.8583], [-118.5062, 34.0175], [-118.832, 34.0245], [-119.1437, 34.112], [-119.2358, 34.1641], [-119.2676, 34.2575], [-119.606, 34.418], [-119.8533, 34.412], [-120.0529, 34.4692], [-120.4812, 34.4716], [-120.6446, 34.58], [-120.6249, 34.812], [-120.663, 34.9494], [-120.6336, 35.0765], [-120.707, 35.1577], [-120.8574, 35.2096], [-120.8603, 35.3654], [-121.0228, 35.4809], [-121.138, 35.6071], [-121.2839, 35.6764], [-121.3438, 35.7923], [-121.6644, 36.154], [-121.8775, 36.331], [-121.9186, 36.5724], [-121.79, 36.7322], [-121.8074, 36.8513], [-121.8806, 36.9389], [-122.1642, 36.991], [-122.3948, 37.2075], [-122.4084, 37.3731], [-122.4993, 37.5426], [-122.5142, 37.772], [-122.3842, 37.7886], [-122.3698, 37.6559], [-122.2287, 37.5639], [-122.2222, 37.7321], [-122.296, 37.7904], [-122.3854, 37.9606], [-122.217, 38.0407], [-121.7168, 38.0341], [-122.0315, 38.1235], [-122.1538, 38.0655], [-122.3933, 38.1447], [-122.4839, 38.1088], [-122.4669, 37.8381], [-122.7604, 37.9456], [-122.9682, 38.097], [-122.9865, 38.2771], [-123.1212, 38.4493], [-123.2897, 38.5359], [-123.4248, 38.6757], [-123.7011, 38.9073], [-123.7195, 39.111], [-123.8202, 39.3684], [-123.7835, 39.6187], [-123.8845, 39.8608], [-124.1085, 40.0945], [-124.324, 40.2519], [-124.3717, 40.4912], [-124.2837, 40.7106], [-124.1331, 40.9697], [-124.14, 41.1558], [-124.0685, 41.3841], [-124.1177, 41.6218], [-124.2446, 41.7879], [-124.2284, 42.0008], [-123.4283, 42.0005], [-122.3737, 42.0005], [-121.0554, 42.0005], [-120.0008, 42.0005]]], [[[-119.8824, 34.0797], [-119.5622, 34.0065], [-119.8095, 33.9677], [-119.8824, 34.0797]]], [[[-120.0436, 33.9188], [-120.1672, 33.9181], [-120.2519, 34.0138], [-120.0719, 34.0265], [-120.0436, 33.9188]]]]\n },\n \"properties\": {\n \"name\": \"California\",\n \"id\": \"US-CA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-CA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-102.0245, 40.0011], [-102.0209, 39.0636], [-102.018, 38.3135], [-102.0128, 37.0009], [-103.0008, 37.0009], [-103.7566, 37.0009], [-104.8901, 37.0009], [-106.0238, 37.0009], [-106.7795, 37.0009], [-107.9131, 37.0009], [-109.0467, 37.0009], [-109.0465, 38.0009], [-109.0465, 39.2509], [-109.0465, 40.0008], [-109.0464, 41.0009], [-108.1044, 41.0009], [-107.1622, 41.0009], [-105.906, 41.0009], [-104.9638, 41.0009], [-104.0217, 41.0009], [-103.273, 41.0007], [-102.025, 41.0006], [-102.0245, 40.0011]]]\n },\n \"properties\": {\n \"name\": \"Colorado\",\n \"id\": \"US-CO\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-CO\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-71.8009, 42.0119], [-71.7958, 41.5199], [-71.8423, 41.3354], [-72.2653, 41.2917], [-72.8471, 41.2659], [-73.1823, 41.1758], [-73.6305, 40.9918], [-73.7231, 41.1045], [-73.4841, 41.2189], [-73.5447, 41.296], [-73.4806, 42.0556], [-72.8078, 42.0341], [-71.8017, 42.0227], [-71.8009, 42.0119]]]\n },\n \"properties\": {\n \"name\": \"Connecticut\",\n \"id\": \"US-CT\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-CT\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-77.0303, 38.8893], [-77.1221, 38.9435], [-77.0421, 39.0118], [-76.9312, 38.8882], [-77.0303, 38.8893]]]\n },\n \"properties\": {\n \"name\": \"District of Columbia\",\n \"id\": \"US-DC\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"Federal District\"\n },\n \"id\": \"US-DC\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-75.4211, 39.8154], [-75.5877, 39.6407], [-75.5738, 39.477], [-75.4127, 39.2813], [-75.3921, 39.0927], [-75.1851, 38.8194], [-75.0887, 38.7776], [-75.1284, 38.6325], [-75.0377, 38.4556], [-75.7071, 38.455], [-75.7847, 39.7223], [-75.6346, 39.8394], [-75.4211, 39.8154]]]\n },\n \"properties\": {\n \"name\": \"Delaware\",\n \"id\": \"US-DE\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-DE\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-81.504, 30.7313], [-81.4572, 30.6407], [-81.3858, 30.2699], [-81.2495, 29.7938], [-81.1045, 29.4569], [-80.8999, 29.0498], [-80.5241, 28.4861], [-80.6229, 28.3203], [-80.7317, 28.4629], [-80.6885, 28.5785], [-80.766, 28.6328], [-80.7487, 28.3809], [-80.6501, 28.1809], [-80.2261, 27.207], [-80.1257, 27.0829], [-80.05, 26.8077], [-80.0413, 26.5686], [-80.1107, 26.1316], [-80.1264, 25.8335], [-80.3008, 25.6186], [-80.3669, 25.3312], [-80.4846, 25.2299], [-80.5577, 25.2325], [-80.7366, 25.1564], [-80.8622, 25.1761], [-81.1104, 25.138], [-81.1675, 25.2285], [-81.0977, 25.3191], [-81.2272, 25.5834], [-81.3452, 25.7319], [-81.3649, 25.831], [-81.5683, 25.8916], [-81.7155, 25.9832], [-81.8114, 26.1461], [-81.8665, 26.435], [-82.0396, 26.5521], [-82.0778, 26.7043], [-82.067, 26.8915], [-82.1807, 26.8401], [-82.2901, 26.8708], [-82.4413, 27.0596], [-82.6204, 27.4011], [-82.6359, 27.5246], [-82.4006, 27.8353], [-82.5206, 27.8778], [-82.6609, 27.7185], [-82.7429, 27.7094], [-82.8435, 27.846], [-82.7485, 28.2368], [-82.6607, 28.4858], [-82.6515, 28.8875], [-82.7693, 29.0515], [-83.2905, 29.4519], [-83.6944, 29.926], [-84.0443, 30.1037], [-84.3098, 30.0648], [-84.3828, 29.9074], [-84.55, 29.8979], [-84.8005, 29.7731], [-85.0292, 29.7212], [-85.3188, 29.6802], [-85.3069, 29.7978], [-85.3537, 29.8757], [-85.6758, 30.1218], [-85.6035, 30.2868], [-85.7408, 30.2444], [-85.7557, 30.167], [-86.1752, 30.3325], [-86.2574, 30.493], [-86.4479, 30.4956], [-86.6796, 30.4028], [-87.2011, 30.3393], [-86.9858, 30.4308], [-87.1705, 30.5388], [-87.1847, 30.4537], [-87.2811, 30.3393], [-87.4758, 30.2942], [-87.4896, 30.3777], [-87.4294, 30.4778], [-87.4216, 30.6716], [-87.6011, 30.8605], [-87.5937, 31.0008], [-86.6236, 31.0009], [-85.9769, 31.0009], [-85.0073, 31.0016], [-84.8839, 30.7209], [-84.1528, 30.6777], [-82.8775, 30.603], [-82.2399, 30.5657], [-82.1942, 30.3935], [-82.0618, 30.4046], [-82.0219, 30.5598], [-82.0382, 30.7319], [-81.9356, 30.8195], [-81.6733, 30.7403], [-81.504, 30.7313]]]\n },\n \"properties\": {\n \"name\": \"Florida\",\n \"id\": \"US-FL\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-FL\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-80.8724, 32.0295], [-80.9234, 31.9449], [-81.1133, 31.8787], [-81.065, 31.8135], [-81.1979, 31.7042], [-81.1754, 31.5313], [-81.295, 31.3712], [-81.2885, 31.2639], [-81.4532, 31.0883], [-81.5204, 30.8746], [-81.504, 30.7313], [-81.6733, 30.7403], [-81.9356, 30.8195], [-82.0382, 30.7319], [-82.0219, 30.5598], [-82.0618, 30.4046], [-82.1942, 30.3935], [-82.2399, 30.5657], [-82.8775, 30.603], [-84.1528, 30.6777], [-84.8839, 30.7209], [-85.0073, 31.0016], [-85.0675, 31.1176], [-85.0926, 31.2957], [-85.0549, 31.5726], [-85.1248, 31.7768], [-85.1241, 31.8804], [-85.0346, 32.1474], [-84.9297, 32.2466], [-84.986, 32.3609], [-85.0151, 32.5261], [-85.1565, 32.8042], [-85.2009, 32.9562], [-85.3859, 33.8507], [-85.6235, 35.0009], [-84.3247, 34.988], [-83.1149, 35.0015], [-83.3167, 34.8057], [-83.3557, 34.7083], [-83.0528, 34.5109], [-82.8478, 34.4369], [-82.8187, 34.3661], [-82.5894, 34.0176], [-82.2566, 33.7493], [-82.2084, 33.6636], [-82.0057, 33.5229], [-81.9329, 33.3899], [-81.6994, 33.1267], [-81.5783, 33.0686], [-81.4897, 32.9356], [-81.377, 32.6075], [-81.2903, 32.5573], [-81.1714, 32.3801], [-81.1351, 32.1818], [-81.0748, 32.1097], [-80.8724, 32.0295]]]\n },\n \"properties\": {\n \"name\": \"Georgia\",\n \"id\": \"US-GA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-GA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-156.4868, 20.9326], [-156.2775, 20.9514], [-156.1484, 20.8855], [-155.9899, 20.7572], [-156.1072, 20.6448], [-156.31, 20.5988], [-156.4383, 20.6179], [-156.4801, 20.8012], [-156.6155, 20.8218], [-156.6897, 20.9014], [-156.6568, 21.0244], [-156.5855, 21.0343], [-156.4868, 20.9326]]], [[[-157.2136, 21.2155], [-156.7423, 21.1635], [-156.8599, 21.0563], [-157.0209, 21.0978], [-157.2903, 21.1126], [-157.2136, 21.2155]]], [[[-156.8496, 20.7727], [-156.9734, 20.7575], [-157.0506, 20.9126], [-156.9418, 20.9301], [-156.8094, 20.8311], [-156.8496, 20.7727]]], [[[-155.5813, 19.012], [-155.6808, 18.9676], [-155.8813, 19.0704], [-155.9056, 19.1258], [-155.8907, 19.3825], [-155.9659, 19.5908], [-156.0487, 19.7499], [-155.8203, 20.0143], [-155.8928, 20.1674], [-155.8316, 20.2758], [-155.6221, 20.1633], [-155.1988, 19.9944], [-155.0861, 19.8756], [-155.0659, 19.7481], [-154.8042, 19.5245], [-154.8503, 19.4541], [-155.0535, 19.3192], [-155.3097, 19.2601], [-155.5352, 19.109], [-155.5813, 19.012]]], [[[-160.1801, 21.841], [-160.2209, 21.8972], [-160.1006, 22.0153], [-160.08, 21.9075], [-160.1801, 21.841]]], [[[-157.7993, 21.4567], [-157.6355, 21.3076], [-157.7988, 21.2687], [-157.9018, 21.3405], [-158.1104, 21.3186], [-158.2391, 21.4893], [-158.2732, 21.5851], [-158.1231, 21.6002], [-157.9625, 21.7014], [-157.7993, 21.4567]]], [[[-159.3728, 21.9323], [-159.4607, 21.8761], [-159.6089, 21.9094], [-159.7892, 22.0419], [-159.7267, 22.1402], [-159.5792, 22.2232], [-159.3521, 22.2196], [-159.3007, 22.1052], [-159.3728, 21.9323]]]]\n },\n \"properties\": {\n \"name\": \"Hawaii\",\n \"id\": \"US-HI\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-HI\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-90.6506, 42.5129], [-90.4848, 42.3833], [-90.3466, 42.2148], [-90.1675, 42.1003], [-90.1524, 41.9816], [-90.2177, 41.813], [-90.4367, 41.5603], [-90.7541, 41.4498], [-90.9387, 41.4255], [-91.0482, 41.369], [-91.0665, 41.2059], [-90.9638, 41.0825], [-91.0001, 40.9047], [-91.1021, 40.7498], [-91.2151, 40.6496], [-91.3391, 40.604], [-91.4419, 40.3794], [-91.682, 40.5519], [-91.7315, 40.6246], [-93.2451, 40.616], [-94.5063, 40.6087], [-95.765, 40.6018], [-95.859, 40.7451], [-95.8341, 40.8895], [-95.8836, 41.2876], [-95.9329, 41.4254], [-96.0586, 41.5458], [-96.0688, 41.7343], [-96.1543, 41.9652], [-96.2954, 42.1329], [-96.3837, 42.4177], [-96.4809, 42.5113], [-96.5388, 42.6587], [-96.6218, 42.7296], [-96.4627, 43.0992], [-96.5555, 43.2317], [-96.5416, 43.3735], [-96.5985, 43.4976], [-96.4536, 43.5012], [-95.478, 43.5013], [-94.5023, 43.5014], [-93.5267, 43.5016], [-92.2258, 43.5018], [-91.2453, 43.5024], [-91.2187, 43.3953], [-91.1172, 43.3311], [-91.1614, 43.1023], [-91.0695, 42.7885], [-90.9599, 42.7204], [-90.7887, 42.6769], [-90.6879, 42.6104], [-90.6506, 42.5129]]]\n },\n \"properties\": {\n \"name\": \"Iowa\",\n \"id\": \"US-IA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-IA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-111.0514, 44.4989], [-111.051, 43.7182], [-111.0508, 43.0938], [-111.0503, 42.0009], [-111.9855, 42.0009], [-112.7333, 42.001], [-114.0426, 42.001], [-115.1578, 42.0009], [-115.9014, 42.0008], [-117.0166, 42.0005], [-117.019, 43.1165], [-117.0205, 43.8132], [-116.9113, 44.1574], [-116.9531, 44.2453], [-117.1398, 44.2903], [-117.2017, 44.4362], [-117.1189, 44.5783], [-116.9489, 44.7701], [-116.8396, 44.9851], [-116.5492, 45.4567], [-116.4771, 45.6411], [-116.6168, 45.7992], [-116.7647, 45.873], [-116.8965, 46.0021], [-116.943, 46.2321], [-117.025, 46.4291], [-117.0317, 47.7115], [-117.039, 48.993], [-116.0485, 48.993], [-116.0491, 48.0047], [-115.7337, 47.7064], [-115.6697, 47.4979], [-115.7024, 47.4377], [-115.3495, 47.2612], [-114.9357, 46.9229], [-114.7537, 46.7345], [-114.6015, 46.6603], [-114.3368, 46.6592], [-114.3459, 46.5506], [-114.4853, 46.1582], [-114.4784, 46.0356], [-114.4051, 45.8742], [-114.5338, 45.7819], [-114.4958, 45.6859], [-114.5292, 45.5757], [-114.2976, 45.4875], [-113.9426, 45.6815], [-113.8023, 45.601], [-113.697, 45.305], [-113.4711, 45.0729], [-113.4693, 44.93], [-113.3389, 44.8081], [-113.1872, 44.7986], [-113.0933, 44.7154], [-112.9998, 44.4803], [-112.8156, 44.406], [-112.7159, 44.498], [-112.3929, 44.468], [-112.2313, 44.5607], [-111.7972, 44.5399], [-111.4998, 44.5448], [-111.4481, 44.7111], [-111.3374, 44.7449], [-111.1976, 44.5906], [-111.0514, 44.4989]]]\n },\n \"properties\": {\n \"name\": \"Idaho\",\n \"id\": \"US-ID\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-ID\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-87.8121, 42.4971], [-87.7975, 42.2114], [-87.6946, 42.0844], [-87.5212, 41.7277], [-87.5254, 40.8615], [-87.5283, 40.2619], [-87.533, 39.3749], [-87.611, 39.2914], [-87.6472, 39.1688], [-87.5304, 38.9089], [-87.5295, 38.7423], [-87.6359, 38.5427], [-87.784, 38.4191], [-87.8271, 38.3356], [-87.9805, 38.2492], [-88.0425, 37.9366], [-88.0953, 37.8756], [-88.042, 37.7888], [-88.1289, 37.6995], [-88.1075, 37.5343], [-88.1906, 37.4646], [-88.4947, 37.3642], [-88.4533, 37.1782], [-88.4717, 37.0883], [-88.8726, 37.1856], [-89.0462, 37.183], [-89.1345, 37.1025], [-89.1543, 36.9921], [-89.2725, 37.08], [-89.414, 37.1023], [-89.503, 37.3005], [-89.462, 37.4342], [-89.5234, 37.6445], [-89.6233, 37.7472], [-89.823, 37.8841], [-90.1737, 38.069], [-90.299, 38.1739], [-90.374, 38.3097], [-90.3165, 38.4578], [-90.1268, 38.8325], [-90.2201, 38.8977], [-90.4781, 38.9481], [-90.5771, 38.9096], [-90.6635, 38.9875], [-90.7372, 39.1818], [-90.9195, 39.3869], [-91.2099, 39.6029], [-91.3787, 39.7493], [-91.4669, 39.9428], [-91.4998, 40.226], [-91.4419, 40.3794], [-91.3391, 40.604], [-91.2151, 40.6496], [-91.1021, 40.7498], [-91.0001, 40.9047], [-90.9638, 41.0825], [-91.0665, 41.2059], [-91.0482, 41.369], [-90.9387, 41.4255], [-90.7541, 41.4498], [-90.4367, 41.5603], [-90.2177, 41.813], [-90.1524, 41.9816], [-90.1675, 42.1003], [-90.3466, 42.2148], [-90.4848, 42.3833], [-90.6506, 42.5129], [-89.2905, 42.5052], [-87.8121, 42.4971]]]\n },\n \"properties\": {\n \"name\": \"Illinois\",\n \"id\": \"US-IL\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-IL\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-84.7961, 41.7014], [-84.803, 41.0506], [-84.8133, 40.0745], [-84.8216, 39.092], [-84.8541, 38.9129], [-84.8007, 38.8194], [-85.1699, 38.6903], [-85.3068, 38.7372], [-85.4447, 38.6831], [-85.4248, 38.5966], [-85.6464, 38.3473], [-85.8549, 38.2151], [-85.9611, 38.0139], [-86.1035, 37.9918], [-86.2838, 38.1298], [-86.4297, 38.1397], [-86.5487, 37.9171], [-86.6731, 37.889], [-86.7703, 37.9598], [-86.9694, 37.938], [-87.1411, 37.8052], [-87.3724, 37.9234], [-87.5995, 37.9465], [-87.7145, 37.8997], [-87.9059, 37.9019], [-87.9125, 37.8177], [-88.042, 37.7888], [-88.0953, 37.8756], [-88.0425, 37.9366], [-87.9805, 38.2492], [-87.8271, 38.3356], [-87.784, 38.4191], [-87.6359, 38.5427], [-87.5295, 38.7423], [-87.5304, 38.9089], [-87.6472, 39.1688], [-87.611, 39.2914], [-87.533, 39.3749], [-87.5283, 40.2619], [-87.5254, 40.8615], [-87.5212, 41.7277], [-87.4124, 41.6564], [-87.2532, 41.6377], [-87.0726, 41.6695], [-86.8627, 41.7607], [-85.4026, 41.76], [-84.7964, 41.7597], [-84.7961, 41.7014]]]\n },\n \"properties\": {\n \"name\": \"Indiana\",\n \"id\": \"US-IN\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-IN\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-94.6181, 37.0009], [-95.5424, 37.0009], [-96.4668, 37.0009], [-97.1601, 37.0009], [-98.0844, 37.0009], [-99.0086, 37.0009], [-99.9329, 37.0009], [-101.0885, 37.0009], [-102.0128, 37.0009], [-102.018, 38.3135], [-102.0209, 39.0636], [-102.0245, 40.0011], [-100.7669, 40.0011], [-99.2997, 40.0011], [-97.8325, 40.0011], [-96.7845, 40.0011], [-95.3466, 40.0015], [-95.1162, 39.8721], [-94.9841, 39.8911], [-94.8933, 39.7818], [-95.0754, 39.5974], [-95.058, 39.509], [-94.9525, 39.4264], [-94.7778, 39.194], [-94.6225, 39.1245], [-94.623, 38.5647], [-94.62, 37.6525], [-94.6181, 37.0009]]]\n },\n \"properties\": {\n \"name\": \"Kansas\",\n \"id\": \"US-KS\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-KS\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-82.6129, 38.4482], [-82.5784, 38.272], [-82.5887, 38.0998], [-82.2802, 37.6872], [-82.1035, 37.5706], [-81.9652, 37.5396], [-82.3431, 37.2969], [-82.6816, 37.1381], [-82.7319, 37.048], [-82.8945, 36.9064], [-83.1502, 36.7624], [-83.6676, 36.605], [-83.7304, 36.5868], [-84.4247, 36.6062], [-85.8133, 36.6453], [-86.5076, 36.6648], [-87.8392, 36.6439], [-88.0964, 36.693], [-88.0591, 36.4997], [-89.4503, 36.5], [-89.3974, 36.5878], [-89.203, 36.6256], [-89.1225, 36.9116], [-89.1543, 36.9921], [-89.1345, 37.1025], [-89.0462, 37.183], [-88.8726, 37.1856], [-88.4717, 37.0883], [-88.4533, 37.1782], [-88.4947, 37.3642], [-88.1906, 37.4646], [-88.1075, 37.5343], [-88.1289, 37.6995], [-88.042, 37.7888], [-87.9125, 37.8177], [-87.9059, 37.9019], [-87.7145, 37.8997], [-87.5995, 37.9465], [-87.3724, 37.9234], [-87.1411, 37.8052], [-86.9694, 37.938], [-86.7703, 37.9598], [-86.6731, 37.889], [-86.5487, 37.9171], [-86.4297, 38.1397], [-86.2838, 38.1298], [-86.1035, 37.9918], [-85.9611, 38.0139], [-85.8549, 38.2151], [-85.6464, 38.3473], [-85.4248, 38.5966], [-85.4447, 38.6831], [-85.3068, 38.7372], [-85.1699, 38.6903], [-84.8007, 38.8194], [-84.8541, 38.9129], [-84.8216, 39.092], [-84.7069, 39.1289], [-84.5946, 39.0858], [-84.43, 39.0909], [-84.2904, 38.9747], [-84.2272, 38.8652], [-84.1133, 38.7984], [-83.9484, 38.7743], [-83.6898, 38.6495], [-83.5384, 38.6998], [-83.357, 38.6274], [-83.2035, 38.6389], [-83.0001, 38.7141], [-82.8805, 38.7102], [-82.7582, 38.5412], [-82.6129, 38.4482]]]\n },\n \"properties\": {\n \"name\": \"Kentucky\",\n \"id\": \"US-KY\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-KY\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-91.7938, 29.5007], [-91.9963, 29.5731], [-91.8754, 29.6409], [-91.7677, 29.5847], [-91.7938, 29.5007]]], [[[-89.521, 30.1926], [-89.5884, 30.166], [-89.9543, 30.2688], [-90.0452, 30.3514], [-90.2252, 30.3794], [-90.332, 30.2776], [-90.4131, 30.1403], [-90.1753, 30.0291], [-89.9942, 30.0593], [-89.8941, 30.1258], [-89.7373, 30.172], [-89.6651, 30.117], [-89.8152, 30.0073], [-89.7438, 29.9299], [-89.5895, 29.9151], [-89.4945, 30.0582], [-89.3578, 29.9211], [-89.3545, 29.8202], [-89.5307, 29.7722], [-89.7209, 29.6193], [-89.6748, 29.5387], [-89.5137, 29.42], [-89.2456, 29.3331], [-89.0158, 29.2028], [-89.1555, 29.0166], [-89.2362, 29.0811], [-89.3535, 29.0702], [-89.4431, 29.1942], [-89.6202, 29.3024], [-89.7923, 29.3331], [-89.8772, 29.458], [-90.0523, 29.4314], [-90.1013, 29.1817], [-90.2129, 29.1049], [-90.3016, 29.2558], [-90.3792, 29.2951], [-90.5863, 29.2715], [-90.6775, 29.1506], [-90.7511, 29.1309], [-91.0027, 29.1935], [-91.2901, 29.289], [-91.1555, 29.3507], [-91.331, 29.5136], [-91.5142, 29.5554], [-91.6724, 29.7461], [-91.8243, 29.7506], [-91.8932, 29.8361], [-92.0173, 29.8003], [-92.1355, 29.6995], [-92.0841, 29.5928], [-92.2608, 29.5569], [-92.6712, 29.5971], [-92.9525, 29.7142], [-93.1757, 29.7789], [-93.6948, 29.7698], [-93.8265, 29.7251], [-93.8839, 29.81], [-93.7731, 29.9141], [-93.794, 29.9772], [-93.7106, 30.1128], [-93.7504, 30.3448], [-93.7202, 30.5583], [-93.5792, 30.8238], [-93.5306, 31.0462], [-93.5577, 31.1804], [-93.6659, 31.3226], [-93.7376, 31.5138], [-93.8206, 31.604], [-93.8269, 31.7503], [-93.905, 31.877], [-94.0434, 31.9992], [-94.0413, 33.012], [-93.3227, 33.0128], [-92.4243, 33.0139], [-91.15, 33.0159], [-91.0961, 32.9376], [-91.1424, 32.6611], [-91.1038, 32.4905], [-90.9447, 32.3307], [-90.9477, 32.2401], [-91.0887, 32.1042], [-91.1566, 31.9707], [-91.2864, 31.884], [-91.3725, 31.7736], [-91.4146, 31.6399], [-91.529, 31.4488], [-91.529, 31.3451], [-91.6307, 31.2176], [-91.5963, 31.1099], [-91.6565, 31.0018], [-91.1769, 31.0012], [-89.7353, 31.0011], [-89.8354, 30.7308], [-89.82, 30.6112], [-89.6858, 30.4627], [-89.5917, 30.223], [-89.521, 30.1926]]]]\n },\n \"properties\": {\n \"name\": \"Louisiana\",\n \"id\": \"US-LA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-LA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-70.5099, 41.3763], [-70.7854, 41.3275], [-70.6737, 41.4486], [-70.5099, 41.3763]]], [[[-70.8062, 42.8767], [-70.8291, 42.8254], [-70.7357, 42.6692], [-71.0462, 42.3311], [-70.7383, 42.2289], [-70.5488, 41.9386], [-70.5147, 41.8033], [-70.2954, 41.729], [-70.0014, 41.8262], [-69.9486, 41.6772], [-70.4047, 41.6268], [-70.657, 41.5343], [-70.7012, 41.7149], [-70.9742, 41.5485], [-71.1885, 41.5164], [-71.2338, 41.7065], [-71.3407, 41.7978], [-71.3871, 42.0169], [-71.8009, 42.0119], [-71.8017, 42.0227], [-72.8078, 42.0341], [-73.4806, 42.0556], [-73.5072, 42.08], [-73.2533, 42.7522], [-72.4669, 42.7303], [-71.3296, 42.7024], [-70.974, 42.8716], [-70.8062, 42.8767]]]]\n },\n \"properties\": {\n \"name\": \"Massachusetts\",\n \"id\": \"US-MA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-75.7847, 39.7223], [-75.7071, 38.455], [-75.0377, 38.4556], [-75.1342, 38.3843], [-75.376, 38.025], [-75.62, 37.9993], [-75.6592, 37.954], [-75.8508, 37.9716], [-75.7953, 38.0866], [-75.928, 38.1693], [-75.864, 38.2613], [-76.0513, 38.2795], [-76.2116, 38.3613], [-76.2948, 38.4947], [-76.2641, 38.6], [-76.0569, 38.6212], [-76.3003, 38.8183], [-76.1682, 38.8527], [-76.2357, 39.1917], [-76.1532, 39.3151], [-75.9547, 39.4596], [-75.959, 39.5851], [-76.0629, 39.5611], [-76.0972, 39.433], [-76.2764, 39.3228], [-76.4056, 39.3038], [-76.4208, 39.225], [-76.5739, 39.2543], [-76.42, 39.0739], [-76.5196, 38.8982], [-76.5368, 38.7426], [-76.5013, 38.5321], [-76.4164, 38.4202], [-76.4388, 38.3615], [-76.3329, 38.1408], [-76.5936, 38.2282], [-76.8896, 38.2921], [-77.0767, 38.4417], [-77.2326, 38.4077], [-77.2416, 38.4948], [-77.0183, 38.7777], [-77.0303, 38.8893], [-76.9312, 38.8882], [-77.0421, 39.0118], [-77.1221, 38.9435], [-77.3012, 39.0533], [-77.4809, 39.113], [-77.4789, 39.2209], [-77.7266, 39.3465], [-77.7981, 39.5172], [-77.8832, 39.6107], [-78.1812, 39.6857], [-78.4068, 39.6279], [-78.4956, 39.5334], [-78.8148, 39.5701], [-78.9714, 39.4537], [-79.0752, 39.4761], [-79.2935, 39.3115], [-79.488, 39.2109], [-79.4776, 39.7227], [-78.0926, 39.7226], [-76.708, 39.7225], [-75.7847, 39.7223]]]\n },\n \"properties\": {\n \"name\": \"Maryland\",\n \"id\": \"US-MD\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MD\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-68.1872, 44.3325], [-68.4118, 44.2944], [-68.2995, 44.4565], [-68.1872, 44.3325]]], [[[-70.7331, 43.07], [-70.829, 43.2391], [-70.9557, 43.3894], [-71.0314, 44.5297], [-71.0846, 45.294], [-70.8369, 45.3106], [-70.7992, 45.4048], [-70.6898, 45.4283], [-70.7023, 45.5514], [-70.421, 45.7383], [-70.2962, 45.9061], [-70.3045, 46.0574], [-70.2483, 46.2509], [-70.0673, 46.4411], [-70.0076, 46.7089], [-69.2429, 47.4629], [-69.0502, 47.4267], [-69.0486, 47.2737], [-68.8286, 47.2033], [-68.4805, 47.2857], [-68.3109, 47.3544], [-68.0968, 47.2749], [-67.8068, 47.0828], [-67.7958, 46.4984], [-67.7846, 45.7017], [-67.5958, 45.6208], [-67.4326, 45.6031], [-67.4936, 45.4741], [-67.4279, 45.378], [-67.4726, 45.2759], [-67.3669, 45.1738], [-67.1249, 45.1694], [-67.0805, 44.9891], [-67.1066, 44.885], [-66.9871, 44.8277], [-67.1912, 44.6756], [-67.364, 44.6969], [-67.556, 44.6448], [-67.6529, 44.5623], [-67.8392, 44.5763], [-67.907, 44.4536], [-68.0566, 44.3842], [-68.1174, 44.4906], [-68.2774, 44.5074], [-68.6121, 44.3105], [-68.7939, 44.3818], [-68.8473, 44.485], [-68.9615, 44.4339], [-68.9562, 44.3482], [-69.0635, 44.1724], [-69.0685, 44.0975], [-69.2261, 43.9864], [-69.3446, 44.001], [-69.4809, 43.9051], [-69.7298, 43.8521], [-69.7916, 43.8053], [-69.9652, 43.8551], [-70.1789, 43.7663], [-70.2692, 43.6719], [-70.2026, 43.6262], [-70.5207, 43.3488], [-70.6423, 43.1344], [-70.7331, 43.07]]]]\n },\n \"properties\": {\n \"name\": \"Maine\",\n \"id\": \"US-ME\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-ME\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-88.9552, 47.926], [-89.1568, 47.8408], [-89.1466, 47.9526], [-88.5883, 48.1585], [-88.6247, 48.042], [-88.9552, 47.926]]], [[[-88.2219, 47.2106], [-88.2368, 47.1589], [-88.4341, 47.1223], [-88.6158, 47.1741], [-88.5619, 47.2722], [-88.3944, 47.3887], [-88.1102, 47.4725], [-88.0155, 47.3208], [-88.2219, 47.2106]]], [[[-84.1329, 46.3622], [-84.2741, 46.4875], [-84.1423, 46.5309], [-84.1329, 46.3622]]], [[[-87.6059, 45.1085], [-87.721, 45.2427], [-87.6964, 45.3829], [-87.8653, 45.3678], [-87.8152, 45.5059], [-87.8091, 45.6861], [-87.9225, 45.76], [-88.1161, 45.8158], [-88.1518, 45.9454], [-88.4931, 46.0135], [-88.8374, 46.0365], [-89.1193, 46.1491], [-90.1185, 46.3416], [-90.2304, 46.5098], [-90.4077, 46.593], [-90.1536, 46.6546], [-89.8605, 46.7928], [-89.6951, 46.8386], [-89.355, 46.8819], [-89.1548, 46.9886], [-88.9482, 47.043], [-88.8297, 47.1459], [-88.6327, 47.167], [-88.5154, 47.0955], [-88.4558, 46.9628], [-88.4761, 46.8367], [-88.2162, 46.9516], [-87.7776, 46.8878], [-87.6374, 46.8265], [-87.3581, 46.5244], [-87.0341, 46.5432], [-86.8515, 46.4703], [-86.6375, 46.453], [-86.531, 46.5244], [-86.2313, 46.6563], [-85.9467, 46.7021], [-85.6161, 46.6906], [-85.0146, 46.7835], [-85.0343, 46.5058], [-84.7789, 46.4683], [-84.6973, 46.4907], [-84.5283, 46.436], [-84.3274, 46.4915], [-84.229, 46.3658], [-84.2036, 46.247], [-84.0409, 46.0881], [-83.9787, 45.9615], [-84.3409, 45.9998], [-84.5212, 45.9946], [-84.6314, 46.0526], [-84.8019, 45.8743], [-85.1007, 46.0461], [-85.3859, 46.1087], [-85.5551, 46.0782], [-85.7079, 45.9876], [-85.9593, 45.9407], [-86.1229, 45.9689], [-86.2717, 45.9367], [-86.3995, 45.8007], [-86.5594, 45.8063], [-86.5634, 45.8824], [-86.7985, 45.8317], [-86.9378, 45.7003], [-87.0848, 45.7298], [-87.2165, 45.6074], [-87.3989, 45.3646], [-87.6022, 45.157], [-87.6059, 45.1085]]], [[[-83.5035, 46.0131], [-83.518, 45.9578], [-83.7307, 45.9429], [-83.8658, 45.9791], [-83.6082, 46.0965], [-83.5035, 46.0131]]], [[[-83.4542, 41.7456], [-83.4643, 41.7394], [-84.7961, 41.7014], [-84.7964, 41.7597], [-85.4026, 41.76], [-86.8627, 41.7607], [-86.6325, 41.9114], [-86.4073, 42.2237], [-86.2995, 42.4176], [-86.2328, 42.65], [-86.2215, 42.9004], [-86.3292, 43.2242], [-86.5421, 43.6373], [-86.4405, 43.7943], [-86.4486, 43.924], [-86.5192, 44.0738], [-86.296, 44.3306], [-86.2422, 44.5514], [-86.237, 44.7202], [-86.1259, 44.7477], [-86.0577, 44.9164], [-85.8579, 44.9615], [-85.6893, 45.1281], [-85.5877, 45.1613], [-85.6472, 44.8376], [-85.4846, 44.8403], [-85.389, 45.0328], [-85.3756, 45.277], [-85.2229, 45.3561], [-84.9671, 45.3926], [-85.0877, 45.5068], [-85.0878, 45.6053], [-84.9515, 45.7753], [-84.772, 45.7948], [-84.4414, 45.6763], [-84.1892, 45.6112], [-84.1278, 45.5325], [-83.4785, 45.3389], [-83.3201, 45.1389], [-83.4482, 45.0246], [-83.3278, 44.8692], [-83.2944, 44.6834], [-83.3306, 44.3752], [-83.5125, 44.2707], [-83.614, 44.0583], [-83.8789, 43.9626], [-83.9395, 43.782], [-83.9157, 43.7005], [-83.7352, 43.6266], [-83.6217, 43.6365], [-83.4689, 43.7308], [-83.3382, 43.929], [-82.9946, 44.0612], [-82.8782, 44.0477], [-82.7161, 43.939], [-82.5968, 43.6344], [-82.4612, 43.081], [-82.4173, 43.0174], [-82.4884, 42.7394], [-82.5453, 42.6247], [-82.8678, 42.3853], [-83.1047, 42.2864], [-83.2619, 41.9463], [-83.3621, 41.8798], [-83.4542, 41.7456]]]]\n },\n \"properties\": {\n \"name\": \"Michigan\",\n \"id\": \"US-MI\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MI\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-93.3778, 48.6165], [-93.0517, 48.6199], [-92.8367, 48.5678], [-92.5005, 48.4354], [-92.4147, 48.2766], [-92.1718, 48.3384], [-92.0052, 48.3018], [-91.8584, 48.1976], [-91.5183, 48.0583], [-91.2207, 48.1046], [-91.0434, 48.1938], [-90.8402, 48.2005], [-90.7444, 48.1046], [-90.3201, 48.0991], [-90.0918, 48.1181], [-89.9936, 48.0152], [-89.6338, 47.9937], [-89.8288, 47.9009], [-90.1972, 47.7864], [-90.5975, 47.6878], [-90.957, 47.5236], [-91.3862, 47.2147], [-91.6451, 47.05], [-92.0644, 46.8188], [-92.107, 46.7623], [-92.2917, 46.6607], [-92.2926, 46.0843], [-92.6938, 45.909], [-92.8747, 45.7061], [-92.8924, 45.5947], [-92.7071, 45.4937], [-92.6857, 45.3806], [-92.7661, 45.2364], [-92.7931, 45.0713], [-92.7634, 44.9342], [-92.7991, 44.79], [-92.6435, 44.6453], [-92.3669, 44.5522], [-92.2404, 44.4621], [-92.0551, 44.3999], [-91.8409, 44.1942], [-91.3827, 43.9908], [-91.2785, 43.7975], [-91.2453, 43.5024], [-92.2258, 43.5018], [-93.5267, 43.5016], [-94.5023, 43.5014], [-95.478, 43.5013], [-96.4536, 43.5012], [-96.4536, 44.1747], [-96.4536, 45.2973], [-96.5298, 45.3715], [-96.696, 45.4317], [-96.8455, 45.5958], [-96.8137, 45.6592], [-96.6146, 45.8], [-96.5563, 45.9428], [-96.5608, 46.1383], [-96.6175, 46.3271], [-96.7309, 46.4727], [-96.7867, 46.6483], [-96.7702, 46.9196], [-96.8183, 46.9742], [-96.8588, 47.5884], [-96.988, 47.8204], [-97.0074, 47.9255], [-97.1259, 48.1735], [-97.1439, 48.5367], [-97.1281, 48.6811], [-97.2257, 48.9932], [-95.8242, 48.9932], [-95.162, 48.9918], [-95.1553, 49.3697], [-94.8543, 49.3046], [-94.8425, 49.1192], [-94.7052, 48.8085], [-94.6208, 48.7425], [-94.0552, 48.659], [-93.8517, 48.6073], [-93.7077, 48.5255], [-93.4636, 48.5612], [-93.3778, 48.6165]]]\n },\n \"properties\": {\n \"name\": \"Minnesota\",\n \"id\": \"US-MN\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MN\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-91.4419, 40.3794], [-91.4998, 40.226], [-91.4669, 39.9428], [-91.3787, 39.7493], [-91.2099, 39.6029], [-90.9195, 39.3869], [-90.7372, 39.1818], [-90.6635, 38.9875], [-90.5771, 38.9096], [-90.4781, 38.9481], [-90.2201, 38.8977], [-90.1268, 38.8325], [-90.3165, 38.4578], [-90.374, 38.3097], [-90.299, 38.1739], [-90.1737, 38.069], [-89.823, 37.8841], [-89.6233, 37.7472], [-89.5234, 37.6445], [-89.462, 37.4342], [-89.503, 37.3005], [-89.414, 37.1023], [-89.2725, 37.08], [-89.1543, 36.9921], [-89.1225, 36.9116], [-89.203, 36.6256], [-89.3974, 36.5878], [-89.4503, 36.5], [-89.4872, 36.5031], [-89.5573, 36.5011], [-89.5946, 36.2594], [-89.6745, 36.2206], [-89.6419, 36.1045], [-89.7047, 36.0015], [-90.3811, 35.9927], [-90.303, 36.0993], [-90.0758, 36.2967], [-90.0744, 36.3719], [-90.1623, 36.5009], [-91.5548, 36.5009], [-92.3904, 36.5009], [-93.7829, 36.5009], [-94.6184, 36.5009], [-94.6181, 37.0009], [-94.62, 37.6525], [-94.623, 38.5647], [-94.6225, 39.1245], [-94.7778, 39.194], [-94.9525, 39.4264], [-95.058, 39.509], [-95.0754, 39.5974], [-94.8933, 39.7818], [-94.9841, 39.8911], [-95.1162, 39.8721], [-95.3466, 40.0015], [-95.4637, 40.1981], [-95.6071, 40.2955], [-95.765, 40.6018], [-94.5063, 40.6087], [-93.2451, 40.616], [-91.7315, 40.6246], [-91.682, 40.5519], [-91.4419, 40.3794]]]\n },\n \"properties\": {\n \"name\": \"Missouri\",\n \"id\": \"US-MO\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MO\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-88.1733, 34.999], [-88.0847, 34.9331], [-88.1688, 34.292], [-88.3397, 32.9988], [-88.4862, 31.8904], [-88.4443, 31.1397], [-88.3996, 30.3709], [-88.6921, 30.3554], [-88.9051, 30.4151], [-89.2237, 30.3323], [-89.3206, 30.3453], [-89.521, 30.1926], [-89.5917, 30.223], [-89.6858, 30.4627], [-89.82, 30.6112], [-89.8354, 30.7308], [-89.7353, 31.0011], [-91.1769, 31.0012], [-91.6565, 31.0018], [-91.5963, 31.1099], [-91.6307, 31.2176], [-91.529, 31.3451], [-91.529, 31.4488], [-91.4146, 31.6399], [-91.3725, 31.7736], [-91.2864, 31.884], [-91.1566, 31.9707], [-91.0887, 32.1042], [-90.9477, 32.2401], [-90.9447, 32.3307], [-91.1038, 32.4905], [-91.1424, 32.6611], [-91.0961, 32.9376], [-91.15, 33.0159], [-91.1068, 33.2179], [-91.1633, 33.2944], [-91.1411, 33.4386], [-91.2146, 33.5834], [-91.2076, 33.6756], [-91.0528, 33.8276], [-91.0702, 33.9743], [-90.9431, 34.0297], [-90.9097, 34.1888], [-90.8172, 34.2522], [-90.718, 34.3917], [-90.5841, 34.5037], [-90.5392, 34.7281], [-90.3198, 34.8992], [-90.2938, 35.0012], [-89.2418, 35], [-88.1733, 34.999]]]\n },\n \"properties\": {\n \"name\": \"Mississippi\",\n \"id\": \"US-MS\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MS\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-104.0111, 45.943], [-104.0055, 45.001], [-104.0372, 45.0011], [-105.133, 45.0011], [-106.0098, 45.001], [-106.8864, 45.001], [-107.9824, 45.001], [-109.0783, 45.001], [-109.7358, 45.001], [-111.0508, 45.001], [-111.0514, 44.4989], [-111.1976, 44.5906], [-111.3374, 44.7449], [-111.4481, 44.7111], [-111.4998, 44.5448], [-111.7972, 44.5399], [-112.2313, 44.5607], [-112.3929, 44.468], [-112.7159, 44.498], [-112.8156, 44.406], [-112.9998, 44.4803], [-113.0933, 44.7154], [-113.1872, 44.7986], [-113.3389, 44.8081], [-113.4693, 44.93], [-113.4711, 45.0729], [-113.697, 45.305], [-113.8023, 45.601], [-113.9426, 45.6815], [-114.2976, 45.4875], [-114.5292, 45.5757], [-114.4958, 45.6859], [-114.5338, 45.7819], [-114.4051, 45.8742], [-114.4784, 46.0356], [-114.4853, 46.1582], [-114.3459, 46.5506], [-114.3368, 46.6592], [-114.6015, 46.6603], [-114.7537, 46.7345], [-114.9357, 46.9229], [-115.3495, 47.2612], [-115.7024, 47.4377], [-115.6697, 47.4979], [-115.7337, 47.7064], [-116.0491, 48.0047], [-116.0485, 48.993], [-115.4379, 48.993], [-114.1587, 48.993], [-113.306, 48.993], [-112.0269, 48.993], [-110.3213, 48.993], [-109.4684, 48.993], [-107.7631, 48.9932], [-106.0575, 48.9932], [-105.2048, 48.9932], [-104.034, 48.9932], [-104.025, 47.8499], [-104.0195, 47.0872], [-104.0111, 45.943]]]\n },\n \"properties\": {\n \"name\": \"Montana\",\n \"id\": \"US-MT\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-MT\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-75.9664, 36.5514], [-75.9927, 36.4738], [-75.8666, 36.2679], [-75.883, 36.1757], [-76.1478, 36.2793], [-76.15, 36.1458], [-76.3837, 36.1336], [-76.4788, 36.0281], [-76.6789, 36.0753], [-76.7262, 35.9576], [-76.3583, 35.9528], [-76.2065, 35.9912], [-76.0698, 35.9704], [-76.0835, 35.6905], [-76.0012, 35.7222], [-75.979, 35.8959], [-75.8538, 35.9601], [-75.7722, 35.8999], [-75.7447, 35.7655], [-75.774, 35.6469], [-76.1739, 35.3542], [-76.4895, 35.3971], [-76.5326, 35.5084], [-76.7414, 35.4315], [-76.513, 35.2704], [-76.628, 35.0733], [-76.7791, 34.9902], [-76.745, 34.9409], [-76.4568, 34.9894], [-76.3621, 34.9365], [-76.5168, 34.7773], [-76.7071, 34.7521], [-76.7332, 34.7069], [-77.1339, 34.7079], [-77.2518, 34.6156], [-77.3583, 34.6203], [-77.3797, 34.5266], [-77.7508, 34.285], [-77.926, 34.0732], [-78.0134, 33.9118], [-78.4058, 33.9175], [-78.5643, 33.8767], [-78.9784, 34.2261], [-79.6535, 34.7968], [-80.7841, 34.8286], [-80.793, 34.9628], [-80.9337, 35.1136], [-81.0451, 35.0657], [-81.0874, 35.1556], [-82.356, 35.2015], [-83.1149, 35.0015], [-84.3247, 34.988], [-84.287, 35.2009], [-84.2324, 35.2605], [-84.0623, 35.286], [-84.0038, 35.4141], [-83.8712, 35.5149], [-83.5112, 35.5841], [-83.1204, 35.7746], [-82.9902, 35.8004], [-82.8878, 35.9517], [-82.8128, 35.9473], [-82.6111, 36.0474], [-82.5211, 35.9812], [-82.3682, 36.0996], [-82.1826, 36.1539], [-82.0513, 36.1229], [-81.9082, 36.3065], [-81.7342, 36.3554], [-81.6589, 36.6106], [-81.6416, 36.5951], [-80.1944, 36.5837], [-79.471, 36.5781], [-78.3855, 36.5697], [-76.9385, 36.5585], [-75.9664, 36.5514]]]\n },\n \"properties\": {\n \"name\": \"North Carolina\",\n \"id\": \"US-NC\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NC\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-96.5563, 45.9428], [-98.1871, 45.9428], [-99.8179, 45.9429], [-100.7496, 45.9429], [-101.9144, 45.9429], [-103.3122, 45.943], [-104.0111, 45.943], [-104.0195, 47.0872], [-104.025, 47.8499], [-104.034, 48.9932], [-103.0728, 48.9932], [-102.22, 48.9932], [-100.5145, 48.9932], [-99.2354, 48.9932], [-97.9562, 48.9932], [-97.2257, 48.9932], [-97.1281, 48.6811], [-97.1439, 48.5367], [-97.1259, 48.1735], [-97.0074, 47.9255], [-96.988, 47.8204], [-96.8588, 47.5884], [-96.8183, 46.9742], [-96.7702, 46.9196], [-96.7867, 46.6483], [-96.7309, 46.4727], [-96.6175, 46.3271], [-96.5608, 46.1383], [-96.5563, 45.9428]]]\n },\n \"properties\": {\n \"name\": \"North Dakota\",\n \"id\": \"US-ND\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-ND\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-96.4809, 42.5113], [-96.3837, 42.4177], [-96.2954, 42.1329], [-96.1543, 41.9652], [-96.0688, 41.7343], [-96.0586, 41.5458], [-95.9329, 41.4254], [-95.8836, 41.2876], [-95.8341, 40.8895], [-95.859, 40.7451], [-95.765, 40.6018], [-95.6071, 40.2955], [-95.4637, 40.1981], [-95.3466, 40.0015], [-96.7845, 40.0011], [-97.8325, 40.0011], [-99.2997, 40.0011], [-100.7669, 40.0011], [-102.0245, 40.0011], [-102.025, 41.0006], [-103.273, 41.0007], [-104.0217, 41.0009], [-104.0252, 42.0012], [-104.0288, 43.0013], [-103.3366, 43.0013], [-101.9522, 43.0013], [-100.9139, 43.0013], [-99.5294, 43.0012], [-98.4417, 43.0011], [-98.1432, 42.8523], [-97.965, 42.8058], [-97.6981, 42.8746], [-97.4166, 42.8811], [-97.2388, 42.8605], [-97.0198, 42.7601], [-96.8045, 42.7015], [-96.6328, 42.5686], [-96.4809, 42.5113]]]\n },\n \"properties\": {\n \"name\": \"Nebraska\",\n \"id\": \"US-NE\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NE\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-70.7331, 43.07], [-70.8062, 42.8767], [-70.974, 42.8716], [-71.3296, 42.7024], [-72.4669, 42.7303], [-72.5499, 42.8867], [-72.4736, 43.0385], [-72.4071, 43.3319], [-72.385, 43.5293], [-72.2967, 43.7149], [-72.1149, 43.9655], [-72.0313, 44.3007], [-71.683, 44.4503], [-71.5685, 44.6076], [-71.6206, 44.7719], [-71.5102, 44.9083], [-71.5175, 45.0076], [-71.419, 45.2004], [-71.3273, 45.2901], [-71.2017, 45.2603], [-71.0846, 45.294], [-71.0314, 44.5297], [-70.9557, 43.3894], [-70.829, 43.2391], [-70.7331, 43.07]]]\n },\n \"properties\": {\n \"name\": \"New Hampshire\",\n \"id\": \"US-NH\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NH\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-73.9101, 40.9922], [-74.0256, 40.7564], [-74.2267, 40.608], [-74.2415, 40.4563], [-74.0498, 40.4299], [-73.9576, 40.3284], [-74.0283, 40.073], [-74.1177, 39.9382], [-74.1761, 39.7266], [-74.3899, 39.4869], [-74.4288, 39.3872], [-74.603, 39.2926], [-74.7944, 39.0019], [-74.9543, 38.9499], [-74.8971, 39.1455], [-75.1361, 39.2078], [-75.3535, 39.3399], [-75.5243, 39.4902], [-75.5235, 39.6019], [-75.4219, 39.7897], [-75.1538, 39.8706], [-75.0741, 39.9834], [-74.7349, 40.1545], [-75.0975, 40.5431], [-75.1889, 40.5958], [-75.1748, 40.7756], [-75.075, 40.8844], [-75.123, 40.9991], [-74.9123, 41.1553], [-74.8414, 41.2687], [-74.699, 41.3572], [-73.9101, 40.9922]]]\n },\n \"properties\": {\n \"name\": \"New Jersey\",\n \"id\": \"US-NJ\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NJ\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-103.0002, 36.5012], [-103.0422, 36.5006], [-103.048, 35.3761], [-103.0539, 34.2517], [-103.0582, 33.4084], [-103.0613, 32.8461], [-103.0656, 32.0027], [-103.9648, 32.0023], [-105.0886, 32.0019], [-105.9879, 32.0015], [-106.6683, 32.001], [-106.5664, 31.8196], [-106.4454, 31.7684], [-107.3326, 31.7747], [-108.2119, 31.7794], [-108.2145, 31.3295], [-109.0478, 31.328], [-109.0473, 32.3922], [-109.0472, 33.4558], [-109.0469, 34.5194], [-109.0469, 35.5829], [-109.0468, 36.2918], [-109.0467, 37.0009], [-107.9131, 37.0009], [-106.7795, 37.0009], [-106.0238, 37.0009], [-104.8901, 37.0009], [-103.7566, 37.0009], [-103.0008, 37.0009], [-103.0002, 36.5012]]]\n },\n \"properties\": {\n \"name\": \"New Mexico\",\n \"id\": \"US-NM\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NM\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-114.0402, 37.0042], [-114.0429, 36.1817], [-114.1833, 36.0303], [-114.4061, 36.1484], [-114.6691, 36.1218], [-114.7414, 36.0136], [-114.6871, 35.9173], [-114.6452, 35.6305], [-114.6485, 35.4759], [-114.5909, 35.3528], [-114.6105, 34.9912], [-115.3901, 35.5991], [-115.8978, 35.9955], [-116.6596, 36.5899], [-117.2097, 37.0033], [-118.1262, 37.6924], [-118.5948, 38.0193], [-119.2974, 38.5098], [-120.0001, 39.0002], [-120.0001, 39.5627], [-120.0006, 40.6879], [-120.0008, 42.0005], [-119.2547, 42.0005], [-118.1357, 42.0005], [-117.0166, 42.0005], [-115.9014, 42.0008], [-115.1578, 42.0009], [-114.0426, 42.001], [-114.042, 40.908], [-114.0418, 40.1273], [-114.0412, 39.1903], [-114.0408, 37.9411], [-114.0402, 37.0042]]]\n },\n \"properties\": {\n \"name\": \"Nevada\",\n \"id\": \"US-NV\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NV\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-72.5098, 40.9861], [-72.2874, 41.024], [-72.339, 40.8942], [-73.1943, 40.6542], [-73.2655, 40.6635], [-73.6209, 40.5999], [-73.7667, 40.5926], [-73.8228, 40.656], [-74.032, 40.6387], [-73.8793, 40.7916], [-73.5739, 40.9195], [-73.3727, 40.9438], [-73.1858, 40.9298], [-73.0338, 40.966], [-72.5098, 40.9861]]], [[[-73.2533, 42.7522], [-73.5072, 42.08], [-73.4806, 42.0556], [-73.5447, 41.296], [-73.4841, 41.2189], [-73.7231, 41.1045], [-73.6305, 40.9918], [-73.8513, 40.8314], [-73.9485, 40.8388], [-73.9101, 40.9922], [-74.699, 41.3572], [-74.7566, 41.4239], [-74.9354, 41.4743], [-75.0227, 41.5529], [-75.0537, 41.765], [-75.1219, 41.8534], [-75.2388, 41.8922], [-75.3513, 41.9984], [-76.4541, 41.999], [-77.9707, 41.9998], [-78.66, 42.0002], [-79.763, 42.0009], [-79.763, 42.2757], [-79.2092, 42.5551], [-78.8778, 42.7991], [-78.9197, 42.9481], [-78.9082, 43.0703], [-79.0661, 43.1061], [-79.0532, 43.285], [-78.6895, 43.3614], [-78.1749, 43.3946], [-77.8381, 43.3572], [-77.529, 43.2674], [-77.2708, 43.2945], [-76.9764, 43.2775], [-76.6929, 43.3609], [-76.4728, 43.5073], [-76.2027, 43.5745], [-76.1984, 43.8745], [-76.0987, 43.967], [-76.2378, 44.1832], [-75.8322, 44.3972], [-75.792, 44.4971], [-75.4012, 44.7723], [-75.1795, 44.8994], [-74.8565, 45.0039], [-73.3522, 45.0054], [-73.372, 44.5973], [-73.3098, 44.4596], [-73.3209, 44.2689], [-73.425, 44.0383], [-73.3757, 43.7622], [-73.4133, 43.6279], [-73.2471, 43.553], [-73.2666, 42.8648], [-73.2533, 42.7522]]]]\n },\n \"properties\": {\n \"name\": \"New York\",\n \"id\": \"US-NY\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-NY\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-80.519, 40.647], [-80.6591, 40.5629], [-80.6018, 40.3639], [-80.6683, 40.1853], [-80.8722, 39.7355], [-80.9633, 39.5711], [-81.3334, 39.3628], [-81.4396, 39.3926], [-81.6571, 39.272], [-81.8026, 39.0861], [-81.7778, 38.9728], [-82.0722, 38.9629], [-82.2034, 38.7682], [-82.18, 38.6376], [-82.387, 38.4339], [-82.6129, 38.4482], [-82.7582, 38.5412], [-82.8805, 38.7102], [-83.0001, 38.7141], [-83.2035, 38.6389], [-83.357, 38.6274], [-83.5384, 38.6998], [-83.6898, 38.6495], [-83.9484, 38.7743], [-84.1133, 38.7984], [-84.2272, 38.8652], [-84.2904, 38.9747], [-84.43, 39.0909], [-84.5946, 39.0858], [-84.7069, 39.1289], [-84.8216, 39.092], [-84.8133, 40.0745], [-84.803, 41.0506], [-84.7961, 41.7014], [-83.4643, 41.7394], [-83.4542, 41.7456], [-82.9108, 41.5382], [-82.8308, 41.5797], [-82.5243, 41.407], [-82.1213, 41.493], [-81.7232, 41.511], [-81.4471, 41.6714], [-81.2286, 41.7704], [-80.8692, 41.8933], [-80.5202, 41.9895], [-80.5202, 41.2769], [-80.519, 40.647]]]\n },\n \"properties\": {\n \"name\": \"Ohio\",\n \"id\": \"US-OH\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-OH\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-94.6184, 36.5009], [-94.4391, 35.3872], [-94.4616, 34.5178], [-94.4841, 33.6485], [-94.7091, 33.6994], [-94.9624, 33.8433], [-95.238, 33.9565], [-95.3739, 33.8743], [-95.6228, 33.9303], [-95.7839, 33.8645], [-95.9416, 33.8828], [-96.2785, 33.7576], [-96.4111, 33.7752], [-96.5917, 33.8492], [-96.7464, 33.8542], [-96.9777, 33.938], [-97.1724, 33.7568], [-97.2149, 33.8971], [-97.4302, 33.8385], [-97.6604, 33.9901], [-97.8424, 33.8757], [-98.0695, 34.0404], [-98.0987, 34.145], [-98.3559, 34.1414], [-98.4938, 34.0888], [-98.6085, 34.1612], [-98.7989, 34.1547], [-98.9688, 34.2086], [-99.1866, 34.2355], [-99.1999, 34.3183], [-99.3603, 34.4561], [-99.405, 34.392], [-99.6321, 34.3885], [-99.867, 34.5434], [-99.9995, 34.5867], [-100.0005, 35.3045], [-100.0023, 36.5009], [-101.314, 36.5011], [-102.0636, 36.5012], [-103.0002, 36.5012], [-103.0008, 37.0009], [-102.0128, 37.0009], [-101.0885, 37.0009], [-99.9329, 37.0009], [-99.0086, 37.0009], [-98.0844, 37.0009], [-97.1601, 37.0009], [-96.4668, 37.0009], [-95.5424, 37.0009], [-94.6181, 37.0009], [-94.6184, 36.5009]]]\n },\n \"properties\": {\n \"name\": \"Oklahoma\",\n \"id\": \"US-OK\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-OK\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-123.2206, 46.1537], [-123.1209, 46.1787], [-122.942, 46.1148], [-122.8434, 45.9781], [-122.7259, 45.6737], [-122.6498, 45.6275], [-122.2026, 45.591], [-122.0851, 45.6026], [-121.882, 45.6895], [-121.6625, 45.7182], [-121.4021, 45.7118], [-121.1843, 45.6437], [-121.0451, 45.639], [-120.3514, 45.7251], [-119.9343, 45.8379], [-119.4292, 45.9343], [-119.1773, 45.9451], [-119.0197, 46.0003], [-118.2062, 46.0013], [-116.8965, 46.0021], [-116.7647, 45.873], [-116.6168, 45.7992], [-116.4771, 45.6411], [-116.5492, 45.4567], [-116.8396, 44.9851], [-116.9489, 44.7701], [-117.1189, 44.5783], [-117.2017, 44.4362], [-117.1398, 44.2903], [-116.9531, 44.2453], [-116.9113, 44.1574], [-117.0205, 43.8132], [-117.019, 43.1165], [-117.0166, 42.0005], [-118.1357, 42.0005], [-119.2547, 42.0005], [-120.0008, 42.0005], [-121.0554, 42.0005], [-122.3737, 42.0005], [-123.4283, 42.0005], [-124.2284, 42.0008], [-124.3553, 42.1228], [-124.4205, 42.381], [-124.4062, 42.5837], [-124.5396, 42.8128], [-124.4544, 43.0123], [-124.3466, 43.3415], [-124.288, 43.4097], [-124.1487, 43.6918], [-124.0991, 44.3338], [-124.0474, 44.4255], [-124.0592, 44.7778], [-123.9486, 45.4008], [-123.9294, 45.5771], [-123.9612, 45.8429], [-123.9471, 46.1406], [-123.9117, 46.1822], [-123.6737, 46.1826], [-123.5217, 46.2226], [-123.4023, 46.155], [-123.2206, 46.1537]]]\n },\n \"properties\": {\n \"name\": \"Oregon\",\n \"id\": \"US-OR\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-OR\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-74.699, 41.3572], [-74.8414, 41.2687], [-74.9123, 41.1553], [-75.123, 40.9991], [-75.075, 40.8844], [-75.1748, 40.7756], [-75.1889, 40.5958], [-75.0975, 40.5431], [-74.7349, 40.1545], [-75.0741, 39.9834], [-75.1729, 39.8948], [-75.4211, 39.8154], [-75.6346, 39.8394], [-75.7847, 39.7223], [-76.708, 39.7225], [-78.0926, 39.7226], [-79.4776, 39.7227], [-80.5194, 39.7226], [-80.519, 40.647], [-80.5202, 41.2769], [-80.5202, 41.9895], [-80.3344, 42.0408], [-79.763, 42.2757], [-79.763, 42.0009], [-78.66, 42.0002], [-77.9707, 41.9998], [-76.4541, 41.999], [-75.3513, 41.9984], [-75.2388, 41.8922], [-75.1219, 41.8534], [-75.0537, 41.765], [-75.0227, 41.5529], [-74.9354, 41.4743], [-74.7566, 41.4239], [-74.699, 41.3572]]]\n },\n \"properties\": {\n \"name\": \"Pennsylvania\",\n \"id\": \"US-PA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-PA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-71.2338, 41.7065], [-71.3306, 41.7622], [-71.4265, 41.6333], [-71.4437, 41.4536], [-71.5229, 41.3789], [-71.8423, 41.3354], [-71.7958, 41.5199], [-71.8009, 42.0119], [-71.3871, 42.0169], [-71.3407, 41.7978], [-71.2338, 41.7065]]]\n },\n \"properties\": {\n \"name\": \"Rhode Island\",\n \"id\": \"US-RI\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-RI\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-78.5643, 33.8767], [-78.8414, 33.724], [-79.1382, 33.4059], [-79.1937, 33.2441], [-79.276, 33.1354], [-79.42, 33.0425], [-79.5871, 33.0009], [-79.615, 32.9093], [-79.8936, 32.7287], [-80.0217, 32.6199], [-80.2297, 32.5765], [-80.4743, 32.4228], [-80.4857, 32.3517], [-80.6083, 32.2928], [-80.6472, 32.3959], [-80.7653, 32.2984], [-80.6942, 32.2157], [-80.8492, 32.114], [-80.8724, 32.0295], [-81.0748, 32.1097], [-81.1351, 32.1818], [-81.1714, 32.3801], [-81.2903, 32.5573], [-81.377, 32.6075], [-81.4897, 32.9356], [-81.5783, 33.0686], [-81.6994, 33.1267], [-81.9329, 33.3899], [-82.0057, 33.5229], [-82.2084, 33.6636], [-82.2566, 33.7493], [-82.5894, 34.0176], [-82.8187, 34.3661], [-82.8478, 34.4369], [-83.0528, 34.5109], [-83.3557, 34.7083], [-83.3167, 34.8057], [-83.1149, 35.0015], [-82.356, 35.2015], [-81.0874, 35.1556], [-81.0451, 35.0657], [-80.9337, 35.1136], [-80.793, 34.9628], [-80.7841, 34.8286], [-79.6535, 34.7968], [-78.9784, 34.2261], [-78.5643, 33.8767]]]\n },\n \"properties\": {\n \"name\": \"South Carolina\",\n \"id\": \"US-SC\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-SC\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-96.5563, 45.9428], [-96.6146, 45.8], [-96.8137, 45.6592], [-96.8455, 45.5958], [-96.696, 45.4317], [-96.5298, 45.3715], [-96.4536, 45.2973], [-96.4536, 44.1747], [-96.4536, 43.5012], [-96.5985, 43.4976], [-96.5416, 43.3735], [-96.5555, 43.2317], [-96.4627, 43.0992], [-96.6218, 42.7296], [-96.5388, 42.6587], [-96.4809, 42.5113], [-96.6328, 42.5686], [-96.8045, 42.7015], [-97.0198, 42.7601], [-97.2388, 42.8605], [-97.4166, 42.8811], [-97.6981, 42.8746], [-97.965, 42.8058], [-98.1432, 42.8523], [-98.4417, 43.0011], [-99.5294, 43.0012], [-100.9139, 43.0013], [-101.9522, 43.0013], [-103.3366, 43.0013], [-104.0288, 43.0013], [-104.031, 43.5013], [-104.0351, 44.5012], [-104.0372, 45.0011], [-104.0055, 45.001], [-104.0111, 45.943], [-103.3122, 45.943], [-101.9144, 45.9429], [-100.7496, 45.9429], [-99.8179, 45.9429], [-98.1871, 45.9428], [-96.5563, 45.9428]]]\n },\n \"properties\": {\n \"name\": \"South Dakota\",\n \"id\": \"US-SD\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-SD\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-83.6676, 36.605], [-82.9558, 36.6021], [-81.9525, 36.598], [-81.6589, 36.6106], [-81.7342, 36.3554], [-81.9082, 36.3065], [-82.0513, 36.1229], [-82.1826, 36.1539], [-82.3682, 36.0996], [-82.5211, 35.9812], [-82.6111, 36.0474], [-82.8128, 35.9473], [-82.8878, 35.9517], [-82.9902, 35.8004], [-83.1204, 35.7746], [-83.5112, 35.5841], [-83.8712, 35.5149], [-84.0038, 35.4141], [-84.0623, 35.286], [-84.2324, 35.2605], [-84.287, 35.2009], [-84.3247, 34.988], [-85.6235, 35.0009], [-86.9071, 35.0129], [-88.1905, 35.0249], [-88.1733, 34.999], [-89.2418, 35], [-90.2938, 35.0012], [-90.1423, 35.1142], [-90.0929, 35.2036], [-90.066, 35.4141], [-89.9674, 35.5033], [-89.9436, 35.6791], [-89.7796, 35.8057], [-89.7037, 35.9069], [-89.7047, 36.0015], [-89.6419, 36.1045], [-89.6745, 36.2206], [-89.5946, 36.2594], [-89.5573, 36.5011], [-89.4872, 36.5031], [-89.4503, 36.5], [-88.0591, 36.4997], [-88.0964, 36.693], [-87.8392, 36.6439], [-86.5076, 36.6648], [-85.8133, 36.6453], [-84.4247, 36.6062], [-83.7304, 36.5868], [-83.6676, 36.605]]]\n },\n \"properties\": {\n \"name\": \"Tennessee\",\n \"id\": \"US-TN\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-TN\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-97.1708, 26.1594], [-97.2673, 26.3299], [-97.4021, 26.8205], [-97.3512, 26.8014], [-97.1708, 26.1594]]], [[[-97.0144, 27.9017], [-96.8992, 28.1174], [-96.8397, 28.0889], [-97.0144, 27.9017]]], [[[-94.4841, 33.6485], [-94.3778, 33.5661], [-94.2947, 33.5875], [-94.0472, 33.5544], [-94.0413, 33.012], [-94.0434, 31.9992], [-93.905, 31.877], [-93.8269, 31.7503], [-93.8206, 31.604], [-93.7376, 31.5138], [-93.6659, 31.3226], [-93.5577, 31.1804], [-93.5306, 31.0462], [-93.5792, 30.8238], [-93.7202, 30.5583], [-93.7504, 30.3448], [-93.7106, 30.1128], [-93.794, 29.9772], [-93.8414, 29.9798], [-93.9462, 29.815], [-93.8905, 29.6894], [-94.0996, 29.6704], [-94.7501, 29.418], [-94.6053, 29.5677], [-94.7782, 29.5478], [-94.7243, 29.6552], [-94.7419, 29.75], [-94.8323, 29.7526], [-94.8899, 29.6769], [-95.0229, 29.7024], [-94.9928, 29.531], [-94.8883, 29.3705], [-95.139, 29.1679], [-95.1522, 29.0792], [-95.2735, 28.9638], [-95.8534, 28.6404], [-96.0204, 28.5869], [-96.2753, 28.6552], [-96.4488, 28.5944], [-96.5756, 28.7156], [-96.6401, 28.7088], [-96.5246, 28.4887], [-96.5618, 28.3671], [-96.6764, 28.3413], [-96.7736, 28.4217], [-96.8068, 28.2202], [-96.8916, 28.1576], [-96.9667, 28.1895], [-97.1565, 28.1444], [-97.0731, 27.9862], [-97.1714, 27.8796], [-97.3741, 27.87], [-97.4316, 27.8372], [-97.2888, 27.6706], [-97.3804, 27.4194], [-97.4391, 27.3282], [-97.5238, 27.314], [-97.6821, 27.3949], [-97.6924, 27.2872], [-97.4852, 27.2373], [-97.4757, 27.1179], [-97.5547, 26.9673], [-97.4658, 26.6917], [-97.4024, 26.3965], [-97.1462, 25.9614], [-97.2818, 25.9417], [-97.3582, 25.8705], [-97.5872, 25.9843], [-97.8015, 26.042], [-98.0828, 26.0645], [-98.275, 26.1113], [-98.4859, 26.2245], [-98.5983, 26.2378], [-98.7652, 26.3404], [-99.0153, 26.399], [-99.1077, 26.4468], [-99.1721, 26.5641], [-99.2299, 26.7619], [-99.3025, 26.8848], [-99.4436, 27.0366], [-99.4403, 27.1701], [-99.5101, 27.3403], [-99.5053, 27.5483], [-99.7543, 27.73], [-99.8896, 27.8673], [-100.0014, 28.0479], [-100.1119, 28.1729], [-100.296, 28.3277], [-100.3317, 28.5026], [-100.5497, 28.8214], [-100.6586, 29.0686], [-100.7546, 29.1825], [-101.0164, 29.4007], [-101.039, 29.4605], [-101.3035, 29.6341], [-101.4405, 29.7768], [-101.9909, 29.7958], [-102.269, 29.8712], [-102.4763, 29.769], [-102.6149, 29.7523], [-102.7342, 29.644], [-102.834, 29.444], [-102.8919, 29.2164], [-103.0227, 29.1322], [-103.0901, 29.0419], [-103.2576, 29.0011], [-103.423, 29.0707], [-103.664, 29.207], [-104.1107, 29.3862], [-104.3122, 29.5425], [-104.4007, 29.5738], [-104.5041, 29.6777], [-104.6223, 29.8543], [-104.6812, 29.9905], [-104.6812, 30.1343], [-104.8359, 30.4476], [-104.9788, 30.6459], [-105.2758, 30.8073], [-105.514, 30.9808], [-105.8126, 31.241], [-106.0241, 31.3978], [-106.148, 31.4508], [-106.2558, 31.5446], [-106.4454, 31.7684], [-106.5664, 31.8196], [-106.6683, 32.001], [-105.9879, 32.0015], [-105.0886, 32.0019], [-103.9648, 32.0023], [-103.0656, 32.0027], [-103.0613, 32.8461], [-103.0582, 33.4084], [-103.0539, 34.2517], [-103.048, 35.3761], [-103.0422, 36.5006], [-103.0002, 36.5012], [-102.0636, 36.5012], [-101.314, 36.5011], [-100.0023, 36.5009], [-100.0005, 35.3045], [-99.9995, 34.5867], [-99.867, 34.5434], [-99.6321, 34.3885], [-99.405, 34.392], [-99.3603, 34.4561], [-99.1999, 34.3183], [-99.1866, 34.2355], [-98.9688, 34.2086], [-98.7989, 34.1547], [-98.6085, 34.1612], [-98.4938, 34.0888], [-98.3559, 34.1414], [-98.0987, 34.145], [-98.0695, 34.0404], [-97.8424, 33.8757], [-97.6604, 33.9901], [-97.4302, 33.8385], [-97.2149, 33.8971], [-97.1724, 33.7568], [-96.9777, 33.938], [-96.7464, 33.8542], [-96.5917, 33.8492], [-96.4111, 33.7752], [-96.2785, 33.7576], [-95.9416, 33.8828], [-95.7839, 33.8645], [-95.6228, 33.9303], [-95.3739, 33.8743], [-95.238, 33.9565], [-94.9624, 33.8433], [-94.7091, 33.6994], [-94.4841, 33.6485]]]]\n },\n \"properties\": {\n \"name\": \"Texas\",\n \"id\": \"US-TX\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-TX\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-111.0503, 42.0009], [-111.05, 41.0009], [-109.7978, 41.0009], [-109.0464, 41.0009], [-109.0465, 40.0008], [-109.0465, 39.2509], [-109.0465, 38.0009], [-109.0467, 37.0009], [-109.9829, 37.0014], [-111.2313, 37.0022], [-111.8556, 37.0026], [-113.104, 37.0035], [-114.0402, 37.0042], [-114.0408, 37.9411], [-114.0412, 39.1903], [-114.0418, 40.1273], [-114.042, 40.908], [-114.0426, 42.001], [-112.7333, 42.001], [-111.9855, 42.0009], [-111.0503, 42.0009]]]\n },\n \"properties\": {\n \"name\": \"Utah\",\n \"id\": \"US-UT\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-UT\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-77.7266, 39.3465], [-77.4789, 39.2209], [-77.4809, 39.113], [-77.3012, 39.0533], [-77.1221, 38.9435], [-77.0303, 38.8893], [-77.0456, 38.7758], [-77.2603, 38.6], [-77.3136, 38.3966], [-77.2319, 38.34], [-77.0468, 38.3566], [-76.9062, 38.197], [-76.5496, 38.0946], [-76.4717, 38.0112], [-76.2642, 37.8935], [-76.3056, 37.7216], [-76.484, 37.6289], [-76.3055, 37.5714], [-76.2635, 37.357], [-76.4009, 37.3862], [-76.4011, 37.2127], [-76.2833, 37.0527], [-76.4008, 36.9913], [-76.6719, 37.173], [-76.6339, 37.0475], [-76.3996, 36.8899], [-76.2442, 36.9526], [-75.9994, 36.9126], [-75.8575, 36.5506], [-75.8891, 36.5504], [-75.9664, 36.5514], [-76.9385, 36.5585], [-78.3855, 36.5697], [-79.471, 36.5781], [-80.1944, 36.5837], [-81.6416, 36.5951], [-81.6589, 36.6106], [-81.9525, 36.598], [-82.9558, 36.6021], [-83.6676, 36.605], [-83.1502, 36.7624], [-82.8945, 36.9064], [-82.7319, 37.048], [-82.6816, 37.1381], [-82.3431, 37.2969], [-81.9652, 37.5396], [-81.913, 37.369], [-81.8293, 37.2986], [-81.5648, 37.2097], [-81.35, 37.3337], [-81.2272, 37.2633], [-80.9437, 37.3018], [-80.8211, 37.4231], [-80.7199, 37.401], [-80.3161, 37.5097], [-80.2459, 37.6208], [-80.2853, 37.677], [-80.1881, 37.8241], [-79.9717, 38.0461], [-79.9028, 38.1807], [-79.7153, 38.404], [-79.6687, 38.5443], [-79.5977, 38.5771], [-79.3958, 38.4545], [-79.2402, 38.4766], [-79.0412, 38.7896], [-78.8687, 38.8179], [-78.5815, 38.999], [-78.4352, 39.1608], [-78.3223, 39.4519], [-77.8358, 39.1452], [-77.7266, 39.3465]]], [[[-75.6592, 37.954], [-75.62, 37.9993], [-75.376, 38.025], [-75.5963, 37.6312], [-75.5871, 37.5587], [-75.812, 37.4251], [-75.9343, 37.152], [-75.9974, 37.2639], [-75.975, 37.3985], [-75.8882, 37.6191], [-75.7193, 37.8214], [-75.6592, 37.954]]]]\n },\n \"properties\": {\n \"name\": \"Virginia\",\n \"id\": \"US-VA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-VA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-72.4669, 42.7303], [-73.2533, 42.7522], [-73.2666, 42.8648], [-73.2471, 43.553], [-73.4133, 43.6279], [-73.3757, 43.7622], [-73.425, 44.0383], [-73.3209, 44.2689], [-73.3098, 44.4596], [-73.372, 44.5973], [-73.3522, 45.0054], [-72.766, 45.0061], [-71.5175, 45.0076], [-71.5102, 44.9083], [-71.6206, 44.7719], [-71.5685, 44.6076], [-71.683, 44.4503], [-72.0313, 44.3007], [-72.1149, 43.9655], [-72.2967, 43.7149], [-72.385, 43.5293], [-72.4071, 43.3319], [-72.4736, 43.0385], [-72.5499, 42.8867], [-72.4669, 42.7303]]]\n },\n \"properties\": {\n \"name\": \"Vermont\",\n \"id\": \"US-VT\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-VT\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-116.8965, 46.0021], [-118.2062, 46.0013], [-119.0197, 46.0003], [-119.1773, 45.9451], [-119.4292, 45.9343], [-119.9343, 45.8379], [-120.3514, 45.7251], [-121.0451, 45.639], [-121.1843, 45.6437], [-121.4021, 45.7118], [-121.6625, 45.7182], [-121.882, 45.6895], [-122.0851, 45.6026], [-122.2026, 45.591], [-122.6498, 45.6275], [-122.7259, 45.6737], [-122.8434, 45.9781], [-122.942, 46.1148], [-123.1209, 46.1787], [-123.2206, 46.1537], [-123.4649, 46.2712], [-123.6884, 46.2998], [-123.8957, 46.2677], [-124.0727, 46.2795], [-124.0502, 46.4906], [-123.9461, 46.4326], [-123.8891, 46.66], [-124.0717, 46.7448], [-124.1126, 46.8627], [-123.8429, 46.9632], [-124.0422, 47.0297], [-124.1635, 47.0153], [-124.1989, 47.2085], [-124.3093, 47.4046], [-124.376, 47.6587], [-124.46, 47.7843], [-124.6211, 47.9042], [-124.7017, 48.1517], [-124.6326, 48.375], [-123.9758, 48.1685], [-123.2944, 48.1196], [-123.1244, 48.151], [-123.0242, 48.0816], [-122.8609, 48.0901], [-122.7398, 48.0133], [-122.6567, 47.8811], [-122.8214, 47.7931], [-122.7571, 47.7005], [-122.5879, 47.8559], [-122.5239, 47.7694], [-122.6184, 47.7129], [-122.5536, 47.4049], [-122.5779, 47.2931], [-122.8125, 47.3289], [-122.9195, 47.2897], [-122.9876, 47.1726], [-122.7019, 47.1109], [-122.5422, 47.2756], [-122.3538, 47.3716], [-122.3684, 47.6039], [-122.4105, 47.6527], [-122.3928, 47.8205], [-122.242, 48.0108], [-122.353, 48.1138], [-122.494, 48.1304], [-122.5203, 48.2291], [-122.4086, 48.2939], [-122.669, 48.4653], [-122.4967, 48.5056], [-122.562, 48.778], [-122.653, 48.7639], [-122.7888, 48.993], [-121.4072, 48.993], [-119.7018, 48.993], [-117.9962, 48.993], [-117.039, 48.993], [-117.0317, 47.7115], [-117.025, 46.4291], [-116.943, 46.2321], [-116.8965, 46.0021]]], [[[-122.5728, 48.1567], [-122.3667, 47.9855], [-122.5575, 47.9925], [-122.5728, 48.1567]]]]\n },\n \"properties\": {\n \"name\": \"Washington\",\n \"id\": \"US-WA\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-WA\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coordinates\": [[[[-90.4077, 46.593], [-90.2304, 46.5098], [-90.1185, 46.3416], [-89.1193, 46.1491], [-88.8374, 46.0365], [-88.4931, 46.0135], [-88.1518, 45.9454], [-88.1161, 45.8158], [-87.9225, 45.76], [-87.8091, 45.6861], [-87.8152, 45.5059], [-87.8653, 45.3678], [-87.6964, 45.3829], [-87.721, 45.2427], [-87.6059, 45.1085], [-87.627, 45.0323], [-87.8302, 44.9424], [-88.0282, 44.6179], [-87.929, 44.5595], [-87.741, 44.6921], [-87.6044, 44.8469], [-87.4197, 44.8657], [-87.3374, 44.7758], [-87.4866, 44.5086], [-87.5275, 44.3857], [-87.5349, 44.1743], [-87.6584, 44.059], [-87.7238, 43.9073], [-87.6997, 43.7237], [-87.774, 43.5989], [-87.9017, 43.2449], [-87.8935, 43.0411], [-87.787, 42.8092], [-87.8121, 42.4971], [-89.2905, 42.5052], [-90.6506, 42.5129], [-90.6879, 42.6104], [-90.7887, 42.6769], [-90.9599, 42.7204], [-91.0695, 42.7885], [-91.1614, 43.1023], [-91.1172, 43.3311], [-91.2187, 43.3953], [-91.2453, 43.5024], [-91.2785, 43.7975], [-91.3827, 43.9908], [-91.8409, 44.1942], [-92.0551, 44.3999], [-92.2404, 44.4621], [-92.3669, 44.5522], [-92.6435, 44.6453], [-92.7991, 44.79], [-92.7634, 44.9342], [-92.7931, 45.0713], [-92.7661, 45.2364], [-92.6857, 45.3806], [-92.7071, 45.4937], [-92.8924, 45.5947], [-92.8747, 45.7061], [-92.6938, 45.909], [-92.2926, 46.0843], [-92.2917, 46.6607], [-92.107, 46.7623], [-91.9874, 46.699], [-91.8356, 46.7021], [-91.4991, 46.7662], [-91.2177, 46.8856], [-91.1272, 46.8676], [-90.9461, 46.9538], [-90.7684, 46.908], [-90.923, 46.6031], [-90.7368, 46.6888], [-90.5361, 46.5994], [-90.4077, 46.593]]], [[[-86.9919, 45.241], [-87.0589, 45.1025], [-87.2804, 44.8349], [-87.3965, 44.9541], [-87.2587, 45.138], [-87.122, 45.2245], [-86.9919, 45.241]]]]\n },\n \"properties\": {\n \"name\": \"Wisconsin\",\n \"id\": \"US-WI\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-WI\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-79.4776, 39.7227], [-79.488, 39.2109], [-79.2935, 39.3115], [-79.0752, 39.4761], [-78.9714, 39.4537], [-78.8148, 39.5701], [-78.4956, 39.5334], [-78.4068, 39.6279], [-78.1812, 39.6857], [-77.8832, 39.6107], [-77.7981, 39.5172], [-77.7266, 39.3465], [-77.8358, 39.1452], [-78.3223, 39.4519], [-78.4352, 39.1608], [-78.5815, 38.999], [-78.8687, 38.8179], [-79.0412, 38.7896], [-79.2402, 38.4766], [-79.3958, 38.4545], [-79.5977, 38.5771], [-79.6687, 38.5443], [-79.7153, 38.404], [-79.9028, 38.1807], [-79.9717, 38.0461], [-80.1881, 37.8241], [-80.2853, 37.677], [-80.2459, 37.6208], [-80.3161, 37.5097], [-80.7199, 37.401], [-80.8211, 37.4231], [-80.9437, 37.3018], [-81.2272, 37.2633], [-81.35, 37.3337], [-81.5648, 37.2097], [-81.8293, 37.2986], [-81.913, 37.369], [-81.9652, 37.5396], [-82.1035, 37.5706], [-82.2802, 37.6872], [-82.5887, 38.0998], [-82.5784, 38.272], [-82.6129, 38.4482], [-82.387, 38.4339], [-82.18, 38.6376], [-82.2034, 38.7682], [-82.0722, 38.9629], [-81.7778, 38.9728], [-81.8026, 39.0861], [-81.6571, 39.272], [-81.4396, 39.3926], [-81.3334, 39.3628], [-80.9633, 39.5711], [-80.8722, 39.7355], [-80.6683, 40.1853], [-80.6018, 40.3639], [-80.6591, 40.5629], [-80.519, 40.647], [-80.5194, 39.7226], [-79.4776, 39.7227]]]\n },\n \"properties\": {\n \"name\": \"West Virginia\",\n \"id\": \"US-WV\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-WV\"\n }, {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[-104.0288, 43.0013], [-104.0252, 42.0012], [-104.0217, 41.0009], [-104.9638, 41.0009], [-105.906, 41.0009], [-107.1622, 41.0009], [-108.1044, 41.0009], [-109.0464, 41.0009], [-109.7978, 41.0009], [-111.05, 41.0009], [-111.0503, 42.0009], [-111.0508, 43.0938], [-111.051, 43.7182], [-111.0514, 44.4989], [-111.0508, 45.001], [-109.7358, 45.001], [-109.0783, 45.001], [-107.9824, 45.001], [-106.8864, 45.001], [-106.0098, 45.001], [-105.133, 45.0011], [-104.0372, 45.0011], [-104.0351, 44.5012], [-104.031, 43.5013], [-104.0288, 43.0013]]]\n },\n \"properties\": {\n \"name\": \"Wyoming\",\n \"id\": \"US-WY\",\n \"CNTRY\": \"United States of America\",\n \"TYPE\": \"State\"\n },\n \"id\": \"US-WY\"\n }]\n};\nexport default map;","import React from 'react';\nimport * as am4core from '@amcharts/amcharts4/core';\nimport * as am4maps from '@amcharts/amcharts4/maps';\nimport am4geodata_usaLow from '@amcharts/amcharts4-geodata/usaLow';\nimport {colorGradient} from '../../../shared/utils';\n\nimport data from '../../data/map_data.json';\n\nexport default class IndustryBreakdown extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {};\n this.mapRef = React.createRef();\n }\n\n colorFor(value) {\n const colors = colorGradient(colorGradient.defaultLightest, colorGradient.defaultDarkest, 6);\n if (value < 25) {\n return colors[0];\n } else if (value < 50) {\n return colors[1];\n } else if (value < 100) {\n return colors[2];\n } else if (value < 200) {\n return colors[3];\n } else if (value < 500) {\n return colors[4];\n } else {\n return colors[5];\n }\n }\n\n componentDidMount() {\n let chart = am4core.create(this.mapRef.current, am4maps.MapChart);\n chart.height = 300;\n\n chart.projection = new am4maps.projections.Miller();\n chart.geodata = am4geodata_usaLow;\n\n chart.zoomLevel = 4;\n\n let polygonSeries = chart.series.push(new am4maps.MapPolygonSeries());\n\n // Make map load polygon (like country names) data from GeoJSON\n polygonSeries.useGeodata = true;\n polygonSeries.exclude = ['US-AK', 'US-HI'];\n polygonSeries.data = data.counts.map((entry) => {\n entry.fill = am4core.color(this.colorFor(entry.value));\n return entry;\n });\n\n // Configure series\n let polygonTemplate = polygonSeries.mapPolygons.template;\n\n polygonTemplate.tooltipText = '{name} ({value})';\n polygonTemplate.propertyFields.fill = 'fill';\n\n // Create hover state and set alternative fill color\n var hs = polygonTemplate.states.create('hover');\n hs.properties.fill = am4core.color('#FD2A33');\n }\n\n render() {\n return (\n <div ref={this.mapRef} className='map-container' />\n );\n }\n\n}\n","import _ from 'lodash';\nimport React from 'react';\nimport Select from 'react-select';\nimport { Pie } from 'react-chartjs-2';\nimport data from '../../data/source_data.json';\nimport {colorGradient} from '../../../shared/utils';\n\nexport default class Source extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n timeSelection: { value: '30', label: '30 days' },\n timeInterval: '30',\n statusSelection: { value: 'Engage', label: 'Engage' },\n status: 'Engage',\n source: null\n };\n\n this.mainChartRef = React.createRef();\n }\n\n getMainData() {\n const status = this.state.status === 'All' ? '' : this.state.status;\n return _.get(data, [status, this.state.timeInterval, 'summary']);\n }\n\n getBreakdownData() {\n const status = this.state.status === 'All' ? '' : this.state.status;\n return this.state.source\n ? _.get(data, [status, this.state.timeInterval, 'details', this.state.source])\n : null\n ;\n }\n\n colorPalette(count) {\n return colorGradient(colorGradient.defaultLightest, colorGradient.defaultDarkest, count);\n }\n\n renderMainChart() {\n const mainData = this.getMainData();\n return (\n <Pie\n ref={this.mainChartRef}\n data={{\n labels: mainData.labels,\n datasets: [{\n label: `Startups Added: ${this.state.status}: ${this.state.timeInterval}`,\n backgroundColor: this.colorPalette(_.compact(mainData.counts).length),\n data: mainData.counts,\n borderWidth: 0,\n datalabels: {\n anchor: 'end'\n }\n }]\n }}\n options={{\n legend: {\n display: false\n },\n onHover: (e, el) => e.target.style.cursor = el.length ? 'pointer' : 'default',\n pieceLabel: {\n render: args => `${args.label} (${args.percentage}%)`,\n arc: true,\n position: 'border',\n fontSize: 16,\n fontStyle: 'bold',\n fontColor: '#000',\n },\n tooltips: {\n callbacks: {\n label: (tooltipItem, data) => {\n const dataset = data.datasets[tooltipItem.datasetIndex];\n const meta = dataset._meta[Object.keys(dataset._meta)[0]];\n const total = meta.total;\n const currentValue = dataset.data[tooltipItem.index];\n const percentage = parseFloat((currentValue/total*100).toFixed(1));\n return currentValue + ' (' + percentage + '%)';\n },\n title: function(tooltipItem) {\n return mainData.labels[tooltipItem[0].index];\n }\n }\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }}\n onElementsClick={targets => {\n if (targets.length === 0) return;\n const target = targets[0];\n if (target) {\n const chartData = target._chart.config.data;\n const idx = target._index;\n\n const label = chartData.labels[idx];\n this.setState({source: label});\n }\n }}\n />\n );\n }\n\n renderBreakdownChart() {\n const breakdownData = this.getBreakdownData();\n return breakdownData\n ? (\n <Pie\n data={{\n labels: breakdownData.labels,\n datasets: [{\n label: `Startups Added: ${this.state.status}: ${this.state.timeInterval}: ${this.state.source}`,\n backgroundColor: this.colorPalette(breakdownData.labels.length),\n data: breakdownData.counts,\n borderWidth: 0,\n datalabels: {\n anchor: 'end'\n }\n }]\n }}\n options={{\n pieceLabel: {\n render: function (args) {\n return `${args.label} (${args.percentage}%)`;\n },\n arc: true,\n position: 'border',\n fontSize: 16,\n fontStyle: 'bold',\n fontColor: '#000',\n },\n legend: {\n display: false,\n position: 'bottom',\n\n labels: {\n fontSize: 10,\n boxWidth: 10\n }\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }}\n style={{visibility: this.state.source ? 'visible' : 'hidden'}}\n />\n ) : (\n <h4>{this.props.copy.voyager_sources_prompt}</h4>\n )\n ;\n }\n\n handleStatusChange(selectedStatus) {\n this.setState({\n statusSelection: selectedStatus,\n status: selectedStatus.value,\n loading: true\n }, this.fetchChartData);\n }\n\n statusFilter() {\n return (\n <Select\n name=\"industry-breakdown-status-filter\"\n clearable={false}\n value={this.state.statusSelection}\n onChange={selected => this.handleStatusChange(selected)}\n options={[\n { value: '', label: 'All' },\n { value: 'Engage', label: 'Engage' },\n { value: 'Evaluate', label: 'Evaluate' },\n { value: 'Term sheet phase', label: 'Term Sheet' },\n { value: 'Portfolio Company', label: 'Portfolio' },\n ]}\n />\n );\n }\n\n handleTimeChange(selectedTime) {\n this.setState({\n timeSelection: selectedTime,\n timeInterval: selectedTime.value,\n loading: true\n }, this.fetchChartData);\n }\n\n timeFilter() {\n return (\n <Select\n name=\"industry-breakdown-time-filter\"\n clearable={false}\n value={this.state.timeSelection}\n onChange={selected => this.handleTimeChange(selected)}\n options={[\n { value: '7', label: '7 days' },\n { value: '30', label: '30 days' },\n { value: '90', label: '90 days' },\n ]}\n />\n );\n }\n\n render() {\n return(\n <div className='source-breakdown-component'>\n <div className='row' style={{marginBottom: '15px'}}>\n <div className='col-md-3'>\n {this.statusFilter()}\n </div>\n <div className='col-md-3'>\n {this.timeFilter()}\n </div>\n </div>\n <div className='row'>\n <div className='col-md-6'>\n {this.renderMainChart()}\n </div>\n <div className='col-md-6'>\n {this.renderBreakdownChart()}\n </div>\n </div>\n </div>\n );\n }\n}\n\n","import _ from 'lodash';\nimport React from 'react';\nimport { Container, Row, Col } from 'reactstrap';\n\nimport MeetingsPace from './voyager/MeetingsPace';\nimport Stage from './voyager/Stage';\nimport IndustryBreakdown from './voyager/IndustryBreakdown';\nimport Map from './voyager/Map';\nimport Source from './voyager/Source';\n\nexport default class Voyager extends React.Component {\n constructor(props) {\n super(props);\n this.copy = _.reduce(props.copy, (obj, copy) => _.set(obj, copy.slug, copy.copy), {});\n\n this.state = {};\n }\n\n\n render() {\n return (\n <Container fluid>\n <Row className='overview-data-box voyager-chart pace-chart'>\n <Col sm='12'>\n <div className='page-description'>{this.copy.voyager_disclaimer}</div>\n <hr />\n <h3>First Meetings Pace</h3>\n <MeetingsPace />\n </Col>\n </Row>\n <Row className='overview-data-box voyager-chart stage-chart'>\n <Col sm='12'>\n <h3>Stage of Pipeline Deals (Last 90 days)</h3>\n <Stage />\n </Col>\n </Row>\n <Row className='overview-data-box voyager-chart source-chart'>\n <Col sm='12'>\n <h3>Sources Breakdown</h3>\n <Source copy={this.copy} />\n </Col>\n </Row>\n <Row className='overview-data-box voyager-chart industry-chart'>\n <Col sm='12'>\n <h3>Industries Breakdown (Last 90 days)</h3>\n <IndustryBreakdown />\n </Col>\n </Row>\n <Row className='overview-data-box voyager-chart map-chart'>\n <Col sm='12'>\n <h3>Sources Geography (All time)</h3>\n <Map />\n </Col>\n </Row>\n </Container>\n );\n }\n}\n","import ReactOnRails from 'react-on-rails';\n\nimport DataRoom from '../bundles/DataRoom/components/DataRoom';\nimport Downloads from '../bundles/DataRoom/components/Downloads';\nimport Dashboard from '../bundles/Dashboard/components/Dashboard';\nimport AnnualMeeting from '../bundles/AnnualMeeting/components/AnnualMeeting';\nimport Voyager from '../bundles/DataRoom/components/Voyager';\n\n// This is how react_on_rails can see the HelloWorld in the browser.\nReactOnRails.register({\n DataRoom,\n Downloads,\n Dashboard,\n AnnualMeeting,\n Voyager\n});\n"],"sourceRoot":""}