{"version":3,"file":"vendor-1321e98d.js","sources":["../../../../../node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","../../../../../node_modules/@react-spring/core/dist/react-spring-core.esm.js","../../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../../node_modules/uuid/dist/esm-browser/v1.js","../../../../../node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js","../../../../../node_modules/lodash/_isMasked.js","../../../../../node_modules/lodash/_memoizeCapped.js","../../../../../node_modules/lodash/isBuffer.js","../../../../../node_modules/lodash/_nodeUtil.js","../../../../../node_modules/lodash/_overArg.js","../../../../../node_modules/lodash/_basePropertyOf.js","../../../../../node_modules/@popperjs/core/lib/createPopper.js","../../../../../node_modules/use-sidecar/dist/es2015/medium.js","../../../../../node_modules/react-clientside-effect/lib/index.es.js","../../../../../node_modules/lodash-es/_isMasked.js","../../../../../node_modules/lodash-es/_memoizeCapped.js","../../../../../node_modules/lightweight-charts/dist/lightweight-charts.production.mjs","../../../../../node_modules/highcharts/highcharts-more.js","../../../../../node_modules/highcharts/highstock.js","../../../../../node_modules/highcharts/modules/boost.js","../../../../../node_modules/highcharts/modules/coloraxis.js","../../../../../node_modules/highcharts/modules/series-label.js","../../../../../node_modules/highcharts/modules/sunburst.js","../../../../../node_modules/highcharts/modules/treemap.js","../../../../../node_modules/highcharts/highcharts.js","../../../../../node_modules/@dnd-kit/core/dist/core.esm.js","../../../../../node_modules/nanoclone/src/index.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/rng.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/v1.js","../../../../../node_modules/immer/dist/immer.mjs","../../../../../node_modules/react/cjs/react.production.min.js","../../../../../node_modules/react/index.js","../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../../../node_modules/react/jsx-runtime.js","../../../../../node_modules/scheduler/cjs/scheduler.production.min.js","../../../../../node_modules/scheduler/index.js","../../../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../../../node_modules/react-dom/index.js","../../../../../node_modules/react-dom/client.js","../../../../../node_modules/ag-grid-community/dist/package/main.esm.mjs","../../../../../node_modules/ag-charts-community/dist/package/main.esm.mjs","../../../../../node_modules/ag-grid-enterprise/dist/package/main.esm.mjs","../../../../../node_modules/big.js/big.mjs","../../../../../node_modules/@datadog/browser-core/esm/tools/display.js","../../../../../node_modules/@datadog/browser-core/esm/tools/catchUserErrors.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/numberUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/timeUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/byteUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/polyfills.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/objectUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/getGlobalObject.js","../../../../../node_modules/@datadog/browser-core/esm/tools/getZoneJsOriginalValue.js","../../../../../node_modules/@datadog/browser-core/esm/tools/monitor.js","../../../../../node_modules/@datadog/browser-core/esm/tools/timer.js","../../../../../node_modules/@datadog/browser-core/esm/tools/observable.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/functionUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/stringUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/browserDetection.js","../../../../../node_modules/@datadog/browser-core/esm/browser/cookie.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionStoreStrategy.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/sessionState.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/sessionConstants.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInCookie.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInLocalStorage.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/sessionStoreOperations.js","../../../../../node_modules/@datadog/browser-core/esm/domain/trackingConsent.js","../../../../../node_modules/@datadog/browser-core/esm/tools/serialisation/jsonStringify.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/urlPolyfill.js","../../../../../node_modules/@datadog/browser-core/esm/domain/configuration/intakeSites.js","../../../../../node_modules/@datadog/browser-core/esm/domain/configuration/endpointBuilder.js","../../../../../node_modules/@datadog/browser-core/esm/domain/configuration/tags.js","../../../../../node_modules/@datadog/browser-core/esm/domain/configuration/transportConfiguration.js","../../../../../node_modules/@datadog/browser-core/esm/domain/configuration/configuration.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/sessionStore.js","../../../../../node_modules/@datadog/browser-core/esm/tools/experimentalFeatures.js","../../../../../node_modules/@datadog/browser-core/esm/tools/stackTrace/computeStackTrace.js","../../../../../node_modules/@datadog/browser-core/esm/tools/stackTrace/handlingStack.js","../../../../../node_modules/@datadog/browser-core/esm/tools/instrumentMethod.js","../../../../../node_modules/@datadog/browser-core/esm/tools/serialisation/sanitize.js","../../../../../node_modules/@datadog/browser-core/esm/domain/error/error.js","../../../../../node_modules/@datadog/browser-core/esm/domain/error/error.types.js","../../../../../node_modules/@datadog/browser-core/esm/domain/error/trackRuntimeError.js","../../../../../node_modules/@datadog/browser-core/esm/boot/init.js","../../../../../node_modules/@datadog/browser-core/esm/boot/displayAlreadyInitializedError.js","../../../../../node_modules/@datadog/browser-core/esm/browser/addEventListener.js","../../../../../node_modules/@datadog/browser-core/esm/domain/report/reportObservable.js","../../../../../node_modules/@datadog/browser-core/esm/tools/sendToExtension.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/typeUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/mergeInto.js","../../../../../node_modules/@datadog/browser-core/esm/domain/connectivity/connectivity.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/arrayUtils.js","../../../../../node_modules/@datadog/browser-core/esm/tools/boundedBuffer.js","../../../../../node_modules/@datadog/browser-core/esm/domain/telemetry/rawTelemetryEvent.types.js","../../../../../node_modules/@datadog/browser-core/esm/domain/telemetry/telemetry.js","../../../../../node_modules/@datadog/browser-core/esm/tools/valueHistory.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/sessionManager.js","../../../../../node_modules/@datadog/browser-core/esm/domain/session/oldCookiesMigration.js","../../../../../node_modules/@datadog/browser-core/esm/tools/utils/responseUtils.js","../../../../../node_modules/@datadog/browser-core/esm/transport/sendWithRetryStrategy.js","../../../../../node_modules/@datadog/browser-core/esm/transport/httpRequest.js","../../../../../node_modules/@datadog/browser-core/esm/transport/eventBridge.js","../../../../../node_modules/@datadog/browser-core/esm/browser/pageExitObservable.js","../../../../../node_modules/@datadog/browser-core/esm/transport/batch.js","../../../../../node_modules/@datadog/browser-core/esm/transport/startBatchWithReplica.js","../../../../../node_modules/@datadog/browser-core/esm/transport/flushController.js","../../../../../node_modules/@datadog/browser-core/esm/tools/encoder.js","../../../../../node_modules/@datadog/browser-core/esm/tools/abstractLifeCycle.js","../../../../../node_modules/@datadog/browser-core/esm/domain/eventRateLimiter/createEventRateLimiter.js","../../../../../node_modules/@datadog/browser-core/esm/browser/runOnReadyState.js","../../../../../node_modules/@datadog/browser-core/esm/browser/xhrObservable.js","../../../../../node_modules/@datadog/browser-core/esm/browser/fetchObservable.js","../../../../../node_modules/@datadog/browser-core/esm/tools/requestIdleCallback.js","../../../../../node_modules/@datadog/browser-core/esm/domain/console/consoleObservable.js","../../../../../node_modules/@datadog/browser-core/esm/domain/context/contextManager.js","../../../../../node_modules/@datadog/browser-core/esm/domain/context/storeContextManager.js","../../../../../node_modules/@datadog/browser-core/esm/domain/context/customerDataTracker.js","../../../../../node_modules/@datadog/browser-core/esm/tools/readBytesFromStream.js","../../../../../node_modules/@datadog/browser-core/esm/domain/synthetics/syntheticsWorkerValues.js","../../../../../node_modules/@datadog/browser-core/esm/domain/user/user.js","../../../../../node_modules/@datadog/browser-core/esm/tools/matchOption.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/logger/isAuthorized.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/createErrorFieldFromRawError.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/logger.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/configuration.js","../../../../../node_modules/@datadog/browser-logs/esm/boot/logsPublicApi.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/logsSessionManager.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/contexts/rumInternalContext.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/console/consoleCollection.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/networkError/networkErrorCollection.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/logger/loggerCollection.js","../../../../../node_modules/@datadog/browser-logs/esm/entries/main.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/contexts/commonContext.js","../../../../../node_modules/@datadog/browser-logs/esm/boot/preStartLogs.js","../../../../../node_modules/@datadog/browser-logs/esm/boot/startLogs.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/lifeCycle.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/reportError.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/logsTelemetry.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/runtimeError/runtimeErrorCollection.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/report/reportCollection.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/assembly.js","../../../../../node_modules/@datadog/browser-logs/esm/transport/startLogsBridge.js","../../../../../node_modules/@datadog/browser-logs/esm/transport/startLogsBatch.js","../../../../../node_modules/@datadog/browser-logs/esm/domain/contexts/internalContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/vital/vitalCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/tracer.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/configuration.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/remoteConfiguration.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/domMutationObservable.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/limitModification.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/assembly.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceUtils.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/requestCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/discardNegativeDuration.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/trackEventCounts.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/performanceObservable.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/firstInputPolyfill.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/waitPageActivityEnd.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/polyfills.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/htmlDomUtils.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/privacy.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/getActionNameFromElement.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/getSelectorFromElement.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/listenActionEvents.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/computeFrustration.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/interactionSelectorCache.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/actionCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/resource/matchRequestResourceEntry.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/getDocumentTraceId.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/performanceUtils.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/resource/retrieveInitialDocumentResourceTiming.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstHidden.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/interactionCountPolyfill.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/scroll.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/viewportObservable.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViews.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/rumSessionManager.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/locationChangeObservable.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/startCustomerDataTelemetry.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/pageStateHistory.js","../../../../../node_modules/@datadog/browser-rum-core/esm/browser/cookieObservable.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/ciVisibilityContext.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/replayStats.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationUtils.js","../../../../../node_modules/@datadog/browser-rum/esm/types/sessionReplayConstants.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeStyleSheets.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttribute.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttributes.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNode.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/eventsUtils.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/viewports.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/assembly.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMove.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMouseInteraction.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackScroll.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackStyleSheet.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackInput.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMutation.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/mutationBatch.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/shadowRootsController.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateEncoder.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateWorker.js","../../../../../node_modules/@datadog/browser-rum/esm/boot/isBrowserSupported.js","../../../../../node_modules/@datadog/browser-rum/esm/entries/main.js","../../../../../node_modules/@datadog/browser-rum-core/esm/boot/rumPublicApi.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/commonContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/boot/preStartRum.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/plugins.js","../../../../../node_modules/@datadog/browser-rum-core/esm/boot/startRum.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/error/errorCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackConsoleError.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/internalContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/lifeCycle.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/featureFlagContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/transport/startRumEventBridge.js","../../../../../node_modules/@datadog/browser-rum-core/esm/transport/startRumBatch.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/viewHistory.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/urlContexts.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/trackClickActions.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/action/clickChain.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/displayContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/syntheticsContext.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackScrollMetrics.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackNavigationTimings.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCommonViewMetrics.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInitialViewMetrics.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstInput.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViewEventCounts.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLoadingTime.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js","../../../../../node_modules/@datadog/browser-core/esm/tools/taskQueue.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/longAnimationFrame/longAnimationFrameCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/longTask/longTaskCollection.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackReportError.js","../../../../../node_modules/@datadog/browser-rum/esm/boot/recorderApi.js","../../../../../node_modules/@datadog/browser-rum/esm/boot/preStartStrategy.js","../../../../../node_modules/@datadog/browser-rum/esm/boot/postStartStrategy.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/getSessionReplayLink.js","../../../../../node_modules/@datadog/browser-rum-core/esm/domain/getSessionReplayUrl.js","../../../../../node_modules/@datadog/browser-rum/esm/boot/startRecording.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segmentCollection.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/startRecordBridge.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/buildReplayPayload.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segment.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/record.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/elementsScrollPositions.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/startFullSnapshots.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/recordIds.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewportResize.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFrustration.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewEnd.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeDocument.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMediaInteraction.js","../../../../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFocus.js","../../../../../node_modules/lodash/lodash.js","../../../../../node_modules/mixpanel-browser/dist/mixpanel.cjs.js","../../../../../node_modules/sugar-core/sugar-core.js","../../../../../node_modules/sugar/common/internal/isArrayIndex.js","../../../../../node_modules/sugar/common/internal/iterateOverSparseArray.js","../../../../../node_modules/sugar/common/internal/getSparseArrayIndexes.js","../../../../../node_modules/sugar/common/internal/forEach.js","../../../../../node_modules/sugar/common/var/NATIVE_TYPES.js","../../../../../node_modules/sugar/common/var/coreUtilityAliases.js","../../../../../node_modules/sugar/common/internal/isClass.js","../../../../../node_modules/sugar/common/internal/spaceSplit.js","../../../../../node_modules/sugar/common/internal/isObjectType.js","../../../../../node_modules/sugar/common/internal/hasOwnEnumeratedProperties.js","../../../../../node_modules/sugar/common/internal/hasValidPlainObjectPrototype.js","../../../../../node_modules/sugar/common/internal/isPlainObject.js","../../../../../node_modules/sugar/common/var/classChecks.js","../../../../../node_modules/sugar/common/internal/getNormalizedIndex.js","../../../../../node_modules/sugar/common/internal/getEntriesForIndexes.js","../../../../../node_modules/sugar/common/internal/entryAtIndex.js","../../../../../node_modules/sugar/string/at.js","../../../../../node_modules/sugar/common/var/Inflections.js","../../../../../node_modules/sugar/common/internal/getAcronym.js","../../../../../node_modules/sugar/string/internal/stringUnderscore.js","../../../../../node_modules/sugar/common/internal/simpleCapitalize.js","../../../../../node_modules/sugar/string/internal/stringCapitalize.js","../../../../../node_modules/sugar/string/var/CAPITALIZE_REG.js","../../../../../node_modules/sugar/string/internal/stringCamelize.js","../../../../../node_modules/sugar/string/var/CAMELIZE_REG.js","../../../../../node_modules/sugar/string/camelize.js","../../../../../node_modules/sugar/string/capitalize.js","../../../../../node_modules/sugar/common/internal/isDefined.js","../../../../../node_modules/sugar/common/internal/escapeRegExp.js","../../../../../node_modules/sugar/common/internal/getRegExpFlags.js","../../../../../node_modules/sugar/string/internal/stringEach.js","../../../../../node_modules/sugar/string/internal/runGlobalMatch.js","../../../../../node_modules/sugar/string/chars.js","../../../../../node_modules/sugar/string/internal/stringCodes.js","../../../../../node_modules/sugar/string/codes.js","../../../../../node_modules/sugar/common/internal/trim.js","../../../../../node_modules/sugar/string/compact.js","../../../../../node_modules/sugar/string/dasherize.js","../../../../../node_modules/sugar/common/var/chr.js","../../../../../node_modules/sugar/string/var/base64.js","../../../../../node_modules/sugar/string/decodeBase64.js","../../../../../node_modules/sugar/string/encodeBase64.js","../../../../../node_modules/sugar/string/var/HTMLFromEntityMap.js","../../../../../node_modules/sugar/string/var/HTMLToEntityMap.js","../../../../../node_modules/sugar/string/escapeHTML.js","../../../../../node_modules/sugar/string/var/HTML_ESCAPE_REG.js","../../../../../node_modules/sugar/string/escapeURL.js","../../../../../node_modules/sugar/common/internal/isUndefined.js","../../../../../node_modules/sugar/string/first.js","../../../../../node_modules/sugar/string/forEach.js","../../../../../node_modules/sugar/common/var/CommonChars.js","../../../../../node_modules/sugar/common/internal/map.js","../../../../../node_modules/sugar/common/internal/periodSplit.js","../../../../../node_modules/sugar/common/internal/assertArray.js","../../../../../node_modules/sugar/common/internal/isPrimitive.js","../../../../../node_modules/sugar/common/internal/handleDeepProperty.js","../../../../../node_modules/sugar/common/var/PROPERTY_RANGE_REG.js","../../../../../node_modules/sugar/common/internal/assertWritable.js","../../../../../node_modules/sugar/common/internal/deepGetProperty.js","../../../../../node_modules/sugar/common/internal/memoizeFunction.js","../../../../../node_modules/sugar/common/internal/createFormatMatcher.js","../../../../../node_modules/sugar/common/var/STRING_FORMAT_REG.js","../../../../../node_modules/sugar/common/var/INTERNAL_MEMOIZE_LIMIT.js","../../../../../node_modules/sugar/string/var/stringFormatMatcher.js","../../../../../node_modules/sugar/string/format.js","../../../../../node_modules/sugar/string/internal/numberOrIndex.js","../../../../../node_modules/sugar/string/from.js","../../../../../node_modules/sugar/common/var/ENHANCEMENTS_FLAG.js","../../../../../node_modules/sugar/common/internal/fixArgumentLength.js","../../../../../node_modules/sugar/string/var/nativeIncludes.js","../../../../../node_modules/sugar/string/internal/callIncludesWithRegexSupport.js","../../../../../node_modules/sugar/string/includes.js","../../../../../node_modules/sugar/string/var/STRING_ENHANCEMENTS_FLAG.js","../../../../../node_modules/sugar/string/insert.js","../../../../../node_modules/sugar/string/isBlank.js","../../../../../node_modules/sugar/string/isEmpty.js","../../../../../node_modules/sugar/string/last.js","../../../../../node_modules/sugar/string/lines.js","../../../../../node_modules/sugar/common/internal/repeatString.js","../../../../../node_modules/sugar/string/internal/padString.js","../../../../../node_modules/sugar/common/var/mathAliases.js","../../../../../node_modules/sugar/common/var/trunc.js","../../../../../node_modules/sugar/common/internal/coercePositiveInteger.js","../../../../../node_modules/sugar/string/pad.js","../../../../../node_modules/sugar/string/padLeft.js","../../../../../node_modules/sugar/string/padRight.js","../../../../../node_modules/sugar/string/parameterize.js","../../../../../node_modules/sugar/string/internal/stringParameterize.js","../../../../../node_modules/sugar/string/remove.js","../../../../../node_modules/sugar/string/internal/stringReplaceAll.js","../../../../../node_modules/sugar/string/removeAll.js","../../../../../node_modules/sugar/common/internal/indexOf.js","../../../../../node_modules/sugar/string/internal/tagIsVoid.js","../../../../../node_modules/sugar/string/var/HTML_VOID_ELEMENTS.js","../../../../../node_modules/sugar/string/internal/runTagReplacements.js","../../../../../node_modules/sugar/string/internal/replaceTags.js","../../../../../node_modules/sugar/string/removeTags.js","../../../../../node_modules/sugar/string/replaceAll.js","../../../../../node_modules/sugar/string/internal/reverseString.js","../../../../../node_modules/sugar/string/reverse.js","../../../../../node_modules/sugar/string/shift.js","../../../../../node_modules/sugar/string/internal/stringSpacify.js","../../../../../node_modules/sugar/string/spacify.js","../../../../../node_modules/sugar/string/stripTags.js","../../../../../node_modules/sugar/string/internal/stringTitleize.js","../../../../../node_modules/sugar/string/var/DOWNCASED_WORDS.js","../../../../../node_modules/sugar/string/titleize.js","../../../../../node_modules/sugar/common/internal/runHumanRules.js","../../../../../node_modules/sugar/string/internal/eachWord.js","../../../../../node_modules/sugar/common/internal/getHumanWord.js","../../../../../node_modules/sugar/string/to.js","../../../../../node_modules/sugar/common/internal/allCharsReg.js","../../../../../node_modules/sugar/common/var/fullwidthNumberHelpers.js","../../../../../node_modules/sugar/common/internal/stringToNumber.js","../../../../../node_modules/sugar/string/toNumber.js","../../../../../node_modules/sugar/common/var/TRIM_CHARS.js","../../../../../node_modules/sugar/string/var/LEFT_TRIM_REG.js","../../../../../node_modules/sugar/string/trimLeft.js","../../../../../node_modules/sugar/string/var/RIGHT_TRIM_REG.js","../../../../../node_modules/sugar/string/trimRight.js","../../../../../node_modules/sugar/string/var/TRUNC_REG.js","../../../../../node_modules/sugar/common/internal/filter.js","../../../../../node_modules/sugar/string/internal/truncateString.js","../../../../../node_modules/sugar/string/internal/truncateOnWord.js","../../../../../node_modules/sugar/string/truncate.js","../../../../../node_modules/sugar/string/truncateOnWord.js","../../../../../node_modules/sugar/string/underscore.js","../../../../../node_modules/sugar/string/internal/unescapeHTML.js","../../../../../node_modules/sugar/string/var/HTML_ENTITY_REG.js","../../../../../node_modules/sugar/string/unescapeHTML.js","../../../../../node_modules/sugar/string/unescapeURL.js","../../../../../node_modules/sugar/string/words.js","../../../../../node_modules/sugar/number/random.js","../../../../../node_modules/sugar/number/var/AbbreviationUnits.js","../../../../../node_modules/sugar/common/internal/commaSplit.js","../../../../../node_modules/sugar/common/internal/withPrecision.js","../../../../../node_modules/sugar/number/var/NUMBER_OPTIONS.js","../../../../../node_modules/sugar/common/var/namespaceAliases.js","../../../../../node_modules/sugar/common/internal/simpleMerge.js","../../../../../node_modules/sugar/common/internal/simpleClone.js","../../../../../node_modules/sugar/common/internal/defineAccessor.js","../../../../../node_modules/sugar/common/internal/defineOptionsAccessor.js","../../../../../node_modules/sugar/number/var/_numberOptions.js","../../../../../node_modules/sugar/number/internal/numberFormat.js","../../../../../node_modules/sugar/number/internal/abbreviateNumber.js","../../../../../node_modules/sugar/number/abbr.js","../../../../../node_modules/sugar/common/var/methodDefineAliases.js","../../../../../node_modules/sugar/common/internal/wrapNamespace.js","../../../../../node_modules/sugar/common/internal/collectSimilarMethods.js","../../../../../node_modules/sugar/common/internal/defineInstanceSimilar.js","../../../../../node_modules/sugar/number/internal/buildMathAliases.js","../../../../../node_modules/sugar/number/abs.js","../../../../../node_modules/sugar/number/acos.js","../../../../../node_modules/sugar/number/asin.js","../../../../../node_modules/sugar/number/atan.js","../../../../../node_modules/sugar/number/bytes.js","../../../../../node_modules/sugar/number/internal/createRoundingFunction.js","../../../../../node_modules/sugar/number/ceil.js","../../../../../node_modules/sugar/number/chr.js","../../../../../node_modules/sugar/number/cos.js","../../../../../node_modules/sugar/number/exp.js","../../../../../node_modules/sugar/number/floor.js","../../../../../node_modules/sugar/number/format.js","../../../../../node_modules/sugar/common/internal/padNumber.js","../../../../../node_modules/sugar/number/hex.js","../../../../../node_modules/sugar/number/internal/isMultipleOf.js","../../../../../node_modules/sugar/number/isEven.js","../../../../../node_modules/sugar/number/internal/isInteger.js","../../../../../node_modules/sugar/number/isInteger.js","../../../../../node_modules/sugar/number/isMultipleOf.js","../../../../../node_modules/sugar/number/isOdd.js","../../../../../node_modules/sugar/number/log.js","../../../../../node_modules/sugar/number/metric.js","../../../../../node_modules/sugar/common/internal/getOrdinalSuffix.js","../../../../../node_modules/sugar/number/ordinalize.js","../../../../../node_modules/sugar/number/pad.js","../../../../../node_modules/sugar/number/pow.js","../../../../../node_modules/sugar/number/round.js","../../../../../node_modules/sugar/number/sin.js","../../../../../node_modules/sugar/number/sqrt.js","../../../../../node_modules/sugar/number/tan.js","../../../../../node_modules/sugar/number/times.js","../../../../../node_modules/sugar/number/toNumber.js","../../../../../node_modules/sugar/number/getOption.js","../../../../../node_modules/sugar/number/setOption.js","../../../../../node_modules/sugar/array/construct.js","../../../../../node_modules/sugar/array/internal/arrayClone.js","../../../../../node_modules/sugar/array/internal/isArrayOrInherited.js","../../../../../node_modules/sugar/array/internal/arrayCreate.js","../../../../../node_modules/sugar/common/internal/setChainableConstructor.js","../../../../../node_modules/sugar/array/internal/setArrayChainableConstructor.js","../../../../../node_modules/sugar/array/create.js","../../../../../node_modules/sugar/array/internal/arrayAppend.js","../../../../../node_modules/sugar/array/add.js","../../../../../node_modules/sugar/array/append.js","../../../../../node_modules/sugar/array/at.js","../../../../../node_modules/sugar/array/clone.js","../../../../../node_modules/sugar/array/compact.js","../../../../../node_modules/sugar/array/internal/arrayCompact.js","../../../../../node_modules/sugar/common/internal/getKeys.js","../../../../../node_modules/sugar/common/internal/iterateWithCyclicCheck.js","../../../../../node_modules/sugar/common/internal/isEqual.js","../../../../../node_modules/sugar/common/internal/setToArray.js","../../../../../node_modules/sugar/common/internal/mapToArray.js","../../../../../node_modules/sugar/common/internal/getMatcher.js","../../../../../node_modules/sugar/common/internal/dateMatcher.js","../../../../../node_modules/sugar/common/internal/regexMatcher.js","../../../../../node_modules/sugar/common/internal/functionMatcher.js","../../../../../node_modules/sugar/common/internal/defaultMatcher.js","../../../../../node_modules/sugar/array/exclude.js","../../../../../node_modules/sugar/array/internal/arrayExclude.js","../../../../../node_modules/sugar/array/first.js","../../../../../node_modules/sugar/array/internal/arrayFlatten.js","../../../../../node_modules/sugar/array/flatten.js","../../../../../node_modules/sugar/array/from.js","../../../../../node_modules/sugar/common/internal/mapWithShortcuts.js","../../../../../node_modules/sugar/array/internal/arrayGroupBy.js","../../../../../node_modules/sugar/array/groupBy.js","../../../../../node_modules/sugar/common/internal/simpleRepeat.js","../../../../../node_modules/sugar/array/inGroups.js","../../../../../node_modules/sugar/array/inGroupsOf.js","../../../../../node_modules/sugar/common/internal/serializeInternal.js","../../../../../node_modules/sugar/common/internal/isRealNaN.js","../../../../../node_modules/sugar/array/internal/arrayIntersectOrSubtract.js","../../../../../node_modules/sugar/array/internal/arrayWrap.js","../../../../../node_modules/sugar/array/intersect.js","../../../../../node_modules/sugar/array/isEmpty.js","../../../../../node_modules/sugar/array/isEqual.js","../../../../../node_modules/sugar/array/last.js","../../../../../node_modules/sugar/array/remove.js","../../../../../node_modules/sugar/array/internal/arrayRemove.js","../../../../../node_modules/sugar/array/removeAt.js","../../../../../node_modules/sugar/array/sample.js","../../../../../node_modules/sugar/array/shuffle.js","../../../../../node_modules/sugar/array/internal/arrayShuffle.js","../../../../../node_modules/sugar/array/internal/codeIsNumeral.js","../../../../../node_modules/sugar/array/internal/getCollationCharacter.js","../../../../../node_modules/sugar/array/var/ARRAY_OPTIONS.js","../../../../../node_modules/sugar/array/var/HALF_WIDTH_NINE.js","../../../../../node_modules/sugar/array/var/FULL_WIDTH_NINE.js","../../../../../node_modules/sugar/array/internal/getSortOrderIndex.js","../../../../../node_modules/sugar/array/internal/getCollationReadyString.js","../../../../../node_modules/sugar/array/internal/getSortOrder.js","../../../../../node_modules/sugar/array/internal/getSortEquivalents.js","../../../../../node_modules/sugar/array/internal/compareValue.js","../../../../../node_modules/sugar/array/sortBy.js","../../../../../node_modules/sugar/array/subtract.js","../../../../../node_modules/sugar/array/to.js","../../../../../node_modules/sugar/array/internal/arrayUnique.js","../../../../../node_modules/sugar/array/var/HAS_CONCAT_BUG.js","../../../../../node_modules/sugar/array/internal/arraySafeConcat.js","../../../../../node_modules/sugar/array/internal/arrayConcat.js","../../../../../node_modules/sugar/array/union.js","../../../../../node_modules/sugar/array/unique.js","../../../../../node_modules/sugar/array/zip.js","../../../../../node_modules/sugar/array/insert.js","../../../../../node_modules/sugar/array/getOption.js","../../../../../node_modules/sugar/array/setOption.js","../../../../../node_modules/sugar/enumerable/internal/enumerateWithMapping.js","../../../../../node_modules/sugar/enumerable/internal/average.js","../../../../../node_modules/sugar/object/average.js","../../../../../node_modules/sugar/enumerable/internal/objectCount.js","../../../../../node_modules/sugar/object/count.js","../../../../../node_modules/sugar/enumerable/var/objectMatchers.js","../../../../../node_modules/sugar/enumerable/internal/wrapObjectMatcher.js","../../../../../node_modules/sugar/object/every.js","../../../../../node_modules/sugar/enumerable/internal/objectFilter.js","../../../../../node_modules/sugar/object/filter.js","../../../../../node_modules/sugar/object/find.js","../../../../../node_modules/sugar/common/internal/assertCallable.js","../../../../../node_modules/sugar/enumerable/internal/objectForEach.js","../../../../../node_modules/sugar/object/forEach.js","../../../../../node_modules/sugar/enumerable/internal/getReducedMinMaxResult.js","../../../../../node_modules/sugar/enumerable/internal/getMinOrMax.js","../../../../../node_modules/sugar/enumerable/internal/getLeastOrMost.js","../../../../../node_modules/sugar/object/least.js","../../../../../node_modules/sugar/enumerable/internal/objectMap.js","../../../../../node_modules/sugar/object/map.js","../../../../../node_modules/sugar/object/max.js","../../../../../node_modules/sugar/enumerable/internal/median.js","../../../../../node_modules/sugar/object/median.js","../../../../../node_modules/sugar/object/min.js","../../../../../node_modules/sugar/object/most.js","../../../../../node_modules/sugar/enumerable/internal/objectNone.js","../../../../../node_modules/sugar/object/none.js","../../../../../node_modules/sugar/enumerable/internal/objectReduce.js","../../../../../node_modules/sugar/object/reduce.js","../../../../../node_modules/sugar/object/some.js","../../../../../node_modules/sugar/enumerable/internal/sum.js","../../../../../node_modules/sugar/object/sum.js","../../../../../node_modules/sugar/array/average.js","../../../../../node_modules/sugar/enumerable/internal/enhancedMatching.js","../../../../../node_modules/sugar/common/internal/assertArgument.js","../../../../../node_modules/sugar/enumerable/internal/wrapNativeArrayMethod.js","../../../../../node_modules/sugar/enumerable/var/enhancedMatcherMethods.js","../../../../../node_modules/sugar/enumerable/internal/buildEnhancedMatching.js","../../../../../node_modules/sugar/enumerable/internal/arrayCount.js","../../../../../node_modules/sugar/array/count.js","../../../../../node_modules/sugar/enumerable/var/ARRAY_ENHANCEMENTS_FLAG.js","../../../../../node_modules/sugar/array/every.js","../../../../../node_modules/sugar/enumerable/internal/enhancedMapping.js","../../../../../node_modules/sugar/enumerable/internal/buildFromIndexMethods.js","../../../../../node_modules/sugar/enumerable/build/buildFromIndexMethodsCall.js","../../../../../node_modules/sugar/array/everyFromIndex.js","../../../../../node_modules/sugar/array/filter.js","../../../../../node_modules/sugar/array/filterFromIndex.js","../../../../../node_modules/sugar/array/find.js","../../../../../node_modules/sugar/array/findFromIndex.js","../../../../../node_modules/sugar/array/findIndex.js","../../../../../node_modules/sugar/array/findIndexFromIndex.js","../../../../../node_modules/sugar/array/forEachFromIndex.js","../../../../../node_modules/sugar/array/least.js","../../../../../node_modules/sugar/enumerable/var/enhancedMap.js","../../../../../node_modules/sugar/enumerable/internal/buildEnhancedMapping.js","../../../../../node_modules/sugar/array/map.js","../../../../../node_modules/sugar/array/mapFromIndex.js","../../../../../node_modules/sugar/array/max.js","../../../../../node_modules/sugar/array/median.js","../../../../../node_modules/sugar/array/min.js","../../../../../node_modules/sugar/array/most.js","../../../../../node_modules/sugar/enumerable/internal/arrayNone.js","../../../../../node_modules/sugar/array/none.js","../../../../../node_modules/sugar/array/reduceFromIndex.js","../../../../../node_modules/sugar/array/reduceRightFromIndex.js","../../../../../node_modules/sugar/array/some.js","../../../../../node_modules/sugar/array/someFromIndex.js","../../../../../node_modules/sugar/array/sum.js","../../../../../node_modules/sugar/object/var/getOwnPropertyNames.js","../../../../../node_modules/sugar/object/internal/getNewObjectForMerge.js","../../../../../node_modules/sugar/object/var/getOwnPropertyDescriptor.js","../../../../../node_modules/sugar/object/var/getOwnPropertySymbols.js","../../../../../node_modules/sugar/object/internal/iterateOverProperties.js","../../../../../node_modules/sugar/object/internal/iterateOverKeys.js","../../../../../node_modules/sugar/common/var/NO_KEYS_IN_STRING_OBJECTS.js","../../../../../node_modules/sugar/common/internal/coercePrimitiveToObject.js","../../../../../node_modules/sugar/common/internal/forceStringCoercion.js","../../../../../node_modules/sugar/object/internal/mergeByPropertyDescriptor.js","../../../../../node_modules/sugar/object/internal/objectMerge.js","../../../../../node_modules/sugar/object/internal/clone.js","../../../../../node_modules/sugar/object/internal/mergeWithOptions.js","../../../../../node_modules/sugar/object/add.js","../../../../../node_modules/sugar/object/internal/mergeAll.js","../../../../../node_modules/sugar/object/addAll.js","../../../../../node_modules/sugar/object/clone.js","../../../../../node_modules/sugar/object/defaults.js","../../../../../node_modules/sugar/object/internal/defaults.js","../../../../../node_modules/sugar/object/internal/objectExclude.js","../../../../../node_modules/sugar/object/exclude.js","../../../../../node_modules/sugar/object/internal/stringIsDecimal.js","../../../../../node_modules/sugar/object/var/NON_DECIMAL_REG.js","../../../../../node_modules/sugar/object/internal/getQueryValueAuto.js","../../../../../node_modules/sugar/object/internal/setQueryProperty.js","../../../../../node_modules/sugar/object/internal/parseDeepQueryComponent.js","../../../../../node_modules/sugar/object/internal/parseQueryComponent.js","../../../../../node_modules/sugar/object/var/DEEP_QUERY_STRING_REG.js","../../../../../node_modules/sugar/object/internal/mapQuerySeparatorToKeys.js","../../../../../node_modules/sugar/object/internal/fromQueryStringWithOptions.js","../../../../../node_modules/sugar/object/fromQueryString.js","../../../../../node_modules/sugar/object/get.js","../../../../../node_modules/sugar/object/has.js","../../../../../node_modules/sugar/common/internal/deepHasProperty.js","../../../../../node_modules/sugar/object/internal/objectIntersectOrSubtract.js","../../../../../node_modules/sugar/object/intersect.js","../../../../../node_modules/sugar/object/invert.js","../../../../../node_modules/sugar/object/internal/isArguments.js","../../../../../node_modules/sugar/object/isArguments.js","../../../../../node_modules/sugar/common/internal/hasProperty.js","../../../../../node_modules/sugar/common/internal/defineInstanceAndStaticSimilar.js","../../../../../node_modules/sugar/object/internal/buildClassCheckMethods.js","../../../../../node_modules/sugar/object/isArray.js","../../../../../node_modules/sugar/object/isBoolean.js","../../../../../node_modules/sugar/object/isDate.js","../../../../../node_modules/sugar/object/internal/objectSize.js","../../../../../node_modules/sugar/object/internal/getKeysWithObjectCoercion.js","../../../../../node_modules/sugar/object/isEmpty.js","../../../../../node_modules/sugar/object/isEqual.js","../../../../../node_modules/sugar/object/isError.js","../../../../../node_modules/sugar/object/isFunction.js","../../../../../node_modules/sugar/object/isMap.js","../../../../../node_modules/sugar/object/isNumber.js","../../../../../node_modules/sugar/object/isObject.js","../../../../../node_modules/sugar/object/isRegExp.js","../../../../../node_modules/sugar/object/isSet.js","../../../../../node_modules/sugar/object/isString.js","../../../../../node_modules/sugar/object/merge.js","../../../../../node_modules/sugar/object/mergeAll.js","../../../../../node_modules/sugar/object/internal/matchInObject.js","../../../../../node_modules/sugar/object/internal/selectFromObject.js","../../../../../node_modules/sugar/object/reject.js","../../../../../node_modules/sugar/object/internal/objectReject.js","../../../../../node_modules/sugar/object/internal/objectRemove.js","../../../../../node_modules/sugar/object/remove.js","../../../../../node_modules/sugar/object/select.js","../../../../../node_modules/sugar/object/internal/objectSelect.js","../../../../../node_modules/sugar/object/set.js","../../../../../node_modules/sugar/common/internal/deepSetProperty.js","../../../../../node_modules/sugar/object/size.js","../../../../../node_modules/sugar/object/subtract.js","../../../../../node_modules/sugar/object/internal/tap.js","../../../../../node_modules/sugar/object/tap.js","../../../../../node_modules/sugar/object/var/internalToString.js","../../../../../node_modules/sugar/object/internal/sanitizeURIComponent.js","../../../../../node_modules/sugar/object/internal/getURIComponentValue.js","../../../../../node_modules/sugar/object/internal/toQueryString.js","../../../../../node_modules/sugar/object/toQueryString.js","../../../../../node_modules/sugar/object/internal/toQueryStringWithOptions.js","../../../../../node_modules/sugar/object/internal/getValues.js","../../../../../node_modules/sugar/object/values.js","../../../../../node_modules/sugar/object/keys.js","../../../../../node_modules/sugar/date/internal/getEnglishVariant.js","../../../../../node_modules/sugar/date/var/EnglishLocaleBaseDefinition.js","../../../../../node_modules/sugar/date/var/BritishEnglishDefinition.js","../../../../../node_modules/sugar/date/var/AmericanEnglishDefinition.js","../../../../../node_modules/sugar/date/var/CanadianEnglishDefinition.js","../../../../../node_modules/sugar/date/var/ISODefaults.js","../../../../../node_modules/sugar/date/var/LocalizedParsingTokens.js","../../../../../node_modules/sugar/date/internal/getRegNonCapturing.js","../../../../../node_modules/sugar/common/internal/privatePropertyAccessor.js","../../../../../node_modules/sugar/common/var/PRIVATE_PROP_PREFIX.js","../../../../../node_modules/sugar/common/var/_utc.js","../../../../../node_modules/sugar/common/internal/callDateGet.js","../../../../../node_modules/sugar/date/internal/getYear.js","../../../../../node_modules/sugar/date/internal/getMonth.js","../../../../../node_modules/sugar/date/internal/getDaysInMonth.js","../../../../../node_modules/sugar/date/var/DateUnits.js","../../../../../node_modules/sugar/date/var/DateUnitIndexes.js","../../../../../node_modules/sugar/date/internal/iterateOverDateUnits.js","../../../../../node_modules/sugar/date/internal/getAdjustedUnit.js","../../../../../node_modules/sugar/date/internal/getNewLocale.js","../../../../../node_modules/sugar/date/var/LOCALE_ARRAY_FIELDS.js","../../../../../node_modules/sugar/date/var/CoreParsingTokens.js","../../../../../node_modules/sugar/date/var/CoreParsingFormats.js","../../../../../node_modules/sugar/date/internal/getArrayWithOffset.js","../../../../../node_modules/sugar/date/internal/arrayToRegAlternates.js","../../../../../node_modules/sugar/date/internal/getParsingTokenWithSuffix.js","../../../../../node_modules/sugar/date/var/LocaleHelpers.js","../../../../../node_modules/sugar/date/var/LazyLoadedLocales.js","../../../../../node_modules/sugar/date/internal/getAdjustedUnitForNumber.js","../../../../../node_modules/sugar/date/addLocale.js","../../../../../node_modules/sugar/date/internal/tzOffset.js","../../../../../node_modules/sugar/common/internal/callDateSet.js","../../../../../node_modules/sugar/date/internal/getLowerUnitIndex.js","../../../../../node_modules/sugar/date/internal/walkUnitDown.js","../../../../../node_modules/sugar/date/internal/setUnitAndLowerToEdge.js","../../../../../node_modules/sugar/date/internal/resetTime.js","../../../../../node_modules/sugar/date/var/_dateOptions.js","../../../../../node_modules/sugar/date/var/DATE_OPTIONS.js","../../../../../node_modules/sugar/date/internal/defaultNewDate.js","../../../../../node_modules/sugar/date/internal/getNewDate.js","../../../../../node_modules/sugar/date/internal/setDate.js","../../../../../node_modules/sugar/date/internal/getDate.js","../../../../../node_modules/sugar/date/internal/getWeekday.js","../../../../../node_modules/sugar/date/internal/setWeekday.js","../../../../../node_modules/sugar/date/internal/getHigherUnitIndex.js","../../../../../node_modules/sugar/date/internal/cloneDate.js","../../../../../node_modules/sugar/date/internal/moveToBeginningOfWeek.js","../../../../../node_modules/sugar/date/internal/moveToFirstDayOfWeekYear.js","../../../../../node_modules/sugar/date/internal/setISOWeekNumber.js","../../../../../node_modules/sugar/date/internal/setYear.js","../../../../../node_modules/sugar/date/internal/setMonth.js","../../../../../node_modules/sugar/common/internal/getOwnKey.js","../../../../../node_modules/sugar/date/internal/getDateParamKey.js","../../../../../node_modules/sugar/date/internal/getDateParam.js","../../../../../node_modules/sugar/date/internal/iterateOverDateParams.js","../../../../../node_modules/sugar/date/internal/updateDate.js","../../../../../node_modules/sugar/date/internal/callDateSetWithWeek.js","../../../../../node_modules/sugar/date/internal/resetLowerUnits.js","../../../../../node_modules/sugar/date/internal/advanceDate.js","../../../../../node_modules/sugar/date/internal/dateIsValid.js","../../../../../node_modules/sugar/date/internal/moveToEndOfWeek.js","../../../../../node_modules/sugar/date/internal/moveToEndOfUnit.js","../../../../../node_modules/sugar/date/internal/moveToBeginningOfUnit.js","../../../../../node_modules/sugar/date/internal/getYearFromAbbreviation.js","../../../../../node_modules/sugar/date/internal/iterateOverHigherDateParams.js","../../../../../node_modules/sugar/date/internal/getExtendedDate.js","../../../../../node_modules/sugar/date/var/ABBREVIATED_YEAR_REG.js","../../../../../node_modules/sugar/date/internal/deleteDateParam.js","../../../../../node_modules/sugar/date/var/MINUTES.js","../../../../../node_modules/sugar/date/internal/createDate.js","../../../../../node_modules/sugar/date/internal/setDateChainableConstructor.js","../../../../../node_modules/sugar/date/create.js","../../../../../node_modules/sugar/date/getAllLocaleCodes.js","../../../../../node_modules/sugar/date/getAllLocales.js","../../../../../node_modules/sugar/date/getLocale.js","../../../../../node_modules/sugar/date/removeLocale.js","../../../../../node_modules/sugar/date/setLocale.js","../../../../../node_modules/sugar/date/internal/buildNumberUnitMethods.js","../../../../../node_modules/sugar/number/day.js","../../../../../node_modules/sugar/number/dayAfter.js","../../../../../node_modules/sugar/number/dayAgo.js","../../../../../node_modules/sugar/number/dayBefore.js","../../../../../node_modules/sugar/number/dayFromNow.js","../../../../../node_modules/sugar/number/days.js","../../../../../node_modules/sugar/number/daysAfter.js","../../../../../node_modules/sugar/number/daysAgo.js","../../../../../node_modules/sugar/number/daysBefore.js","../../../../../node_modules/sugar/number/daysFromNow.js","../../../../../node_modules/sugar/number/duration.js","../../../../../node_modules/sugar/number/hour.js","../../../../../node_modules/sugar/number/hourAfter.js","../../../../../node_modules/sugar/number/hourAgo.js","../../../../../node_modules/sugar/number/hourBefore.js","../../../../../node_modules/sugar/number/hourFromNow.js","../../../../../node_modules/sugar/number/hours.js","../../../../../node_modules/sugar/number/hoursAfter.js","../../../../../node_modules/sugar/number/hoursAgo.js","../../../../../node_modules/sugar/number/hoursBefore.js","../../../../../node_modules/sugar/number/hoursFromNow.js","../../../../../node_modules/sugar/number/millisecond.js","../../../../../node_modules/sugar/number/millisecondAfter.js","../../../../../node_modules/sugar/number/millisecondAgo.js","../../../../../node_modules/sugar/number/millisecondBefore.js","../../../../../node_modules/sugar/number/millisecondFromNow.js","../../../../../node_modules/sugar/number/milliseconds.js","../../../../../node_modules/sugar/number/millisecondsAfter.js","../../../../../node_modules/sugar/number/millisecondsAgo.js","../../../../../node_modules/sugar/number/millisecondsBefore.js","../../../../../node_modules/sugar/number/millisecondsFromNow.js","../../../../../node_modules/sugar/number/minute.js","../../../../../node_modules/sugar/number/minuteAfter.js","../../../../../node_modules/sugar/number/minuteAgo.js","../../../../../node_modules/sugar/number/minuteBefore.js","../../../../../node_modules/sugar/number/minuteFromNow.js","../../../../../node_modules/sugar/number/minutes.js","../../../../../node_modules/sugar/number/minutesAfter.js","../../../../../node_modules/sugar/number/minutesAgo.js","../../../../../node_modules/sugar/number/minutesBefore.js","../../../../../node_modules/sugar/number/minutesFromNow.js","../../../../../node_modules/sugar/number/month.js","../../../../../node_modules/sugar/number/monthAfter.js","../../../../../node_modules/sugar/number/monthAgo.js","../../../../../node_modules/sugar/number/monthBefore.js","../../../../../node_modules/sugar/number/monthFromNow.js","../../../../../node_modules/sugar/number/months.js","../../../../../node_modules/sugar/number/monthsAfter.js","../../../../../node_modules/sugar/number/monthsAgo.js","../../../../../node_modules/sugar/number/monthsBefore.js","../../../../../node_modules/sugar/number/monthsFromNow.js","../../../../../node_modules/sugar/number/second.js","../../../../../node_modules/sugar/number/secondAfter.js","../../../../../node_modules/sugar/number/secondAgo.js","../../../../../node_modules/sugar/number/secondBefore.js","../../../../../node_modules/sugar/number/secondFromNow.js","../../../../../node_modules/sugar/number/seconds.js","../../../../../node_modules/sugar/number/secondsAfter.js","../../../../../node_modules/sugar/number/secondsAgo.js","../../../../../node_modules/sugar/number/secondsBefore.js","../../../../../node_modules/sugar/number/secondsFromNow.js","../../../../../node_modules/sugar/number/week.js","../../../../../node_modules/sugar/number/weekAfter.js","../../../../../node_modules/sugar/number/weekAgo.js","../../../../../node_modules/sugar/number/weekBefore.js","../../../../../node_modules/sugar/number/weekFromNow.js","../../../../../node_modules/sugar/number/weeks.js","../../../../../node_modules/sugar/number/weeksAfter.js","../../../../../node_modules/sugar/number/weeksAgo.js","../../../../../node_modules/sugar/number/weeksBefore.js","../../../../../node_modules/sugar/number/weeksFromNow.js","../../../../../node_modules/sugar/number/year.js","../../../../../node_modules/sugar/number/yearAfter.js","../../../../../node_modules/sugar/number/yearAgo.js","../../../../../node_modules/sugar/number/yearBefore.js","../../../../../node_modules/sugar/number/yearFromNow.js","../../../../../node_modules/sugar/number/years.js","../../../../../node_modules/sugar/number/yearsAfter.js","../../../../../node_modules/sugar/number/yearsAgo.js","../../../../../node_modules/sugar/number/yearsBefore.js","../../../../../node_modules/sugar/number/yearsFromNow.js","../../../../../node_modules/sugar/date/internal/compareDate.js","../../../../../node_modules/sugar/date/internal/getTimeDistanceForUnit.js","../../../../../node_modules/sugar/date/internal/buildDateUnitMethods.js","../../../../../node_modules/sugar/date/addDays.js","../../../../../node_modules/sugar/date/addHours.js","../../../../../node_modules/sugar/date/addMilliseconds.js","../../../../../node_modules/sugar/date/addMinutes.js","../../../../../node_modules/sugar/date/addMonths.js","../../../../../node_modules/sugar/date/addSeconds.js","../../../../../node_modules/sugar/date/addWeeks.js","../../../../../node_modules/sugar/date/addYears.js","../../../../../node_modules/sugar/date/internal/collectDateParamsFromArguments.js","../../../../../node_modules/sugar/date/internal/collectUpdateDateArguments.js","../../../../../node_modules/sugar/date/internal/getDateParamsFromString.js","../../../../../node_modules/sugar/date/internal/advanceDateWithArgs.js","../../../../../node_modules/sugar/date/advance.js","../../../../../node_modules/sugar/date/beginningOfDay.js","../../../../../node_modules/sugar/date/beginningOfISOWeek.js","../../../../../node_modules/sugar/date/beginningOfMonth.js","../../../../../node_modules/sugar/date/beginningOfWeek.js","../../../../../node_modules/sugar/date/beginningOfYear.js","../../../../../node_modules/sugar/date/clone.js","../../../../../node_modules/sugar/date/daysAgo.js","../../../../../node_modules/sugar/date/daysFromNow.js","../../../../../node_modules/sugar/date/daysInMonth.js","../../../../../node_modules/sugar/date/daysSince.js","../../../../../node_modules/sugar/date/daysUntil.js","../../../../../node_modules/sugar/date/endOfDay.js","../../../../../node_modules/sugar/date/endOfISOWeek.js","../../../../../node_modules/sugar/date/endOfMonth.js","../../../../../node_modules/sugar/date/endOfWeek.js","../../../../../node_modules/sugar/date/endOfYear.js","../../../../../node_modules/sugar/date/var/CoreOutputFormats.js","../../../../../node_modules/sugar/date/internal/getHours.js","../../../../../node_modules/sugar/date/internal/getWeekNumber.js","../../../../../node_modules/sugar/date/internal/getWeekYear.js","../../../../../node_modules/sugar/date/internal/getUTCOffset.js","../../../../../node_modules/sugar/date/internal/getDaysSince.js","../../../../../node_modules/sugar/date/internal/getMeridiemToken.js","../../../../../node_modules/sugar/date/var/FormatTokensBase.js","../../../../../node_modules/sugar/date/var/TIMEZONE_ABBREVIATION_REG.js","../../../../../node_modules/sugar/date/var/formattingTokens.js","../../../../../node_modules/sugar/date/internal/assertDateIsValid.js","../../../../../node_modules/sugar/date/internal/dateFormat.js","../../../../../node_modules/sugar/date/format.js","../../../../../node_modules/sugar/date/get.js","../../../../../node_modules/sugar/date/internal/createDateWithContext.js","../../../../../node_modules/sugar/date/getISOWeek.js","../../../../../node_modules/sugar/date/getUTCOffset.js","../../../../../node_modules/sugar/date/getUTCWeekday.js","../../../../../node_modules/sugar/date/getWeekday.js","../../../../../node_modules/sugar/date/hoursAgo.js","../../../../../node_modules/sugar/date/hoursFromNow.js","../../../../../node_modules/sugar/date/hoursSince.js","../../../../../node_modules/sugar/date/hoursUntil.js","../../../../../node_modules/sugar/date/internal/fullCompareDate.js","../../../../../node_modules/sugar/date/internal/compareDay.js","../../../../../node_modules/sugar/date/is.js","../../../../../node_modules/sugar/date/isAfter.js","../../../../../node_modules/sugar/date/isBefore.js","../../../../../node_modules/sugar/date/isBetween.js","../../../../../node_modules/sugar/date/internal/buildRelativeAliases.js","../../../../../node_modules/sugar/date/isFriday.js","../../../../../node_modules/sugar/date/isFuture.js","../../../../../node_modules/sugar/date/isLastMonth.js","../../../../../node_modules/sugar/date/isLastWeek.js","../../../../../node_modules/sugar/date/isLastYear.js","../../../../../node_modules/sugar/date/isLeapYear.js","../../../../../node_modules/sugar/date/isMonday.js","../../../../../node_modules/sugar/date/isNextMonth.js","../../../../../node_modules/sugar/date/isNextWeek.js","../../../../../node_modules/sugar/date/isNextYear.js","../../../../../node_modules/sugar/date/isPast.js","../../../../../node_modules/sugar/date/isSaturday.js","../../../../../node_modules/sugar/date/isSunday.js","../../../../../node_modules/sugar/date/isThisMonth.js","../../../../../node_modules/sugar/date/isThisWeek.js","../../../../../node_modules/sugar/date/isThisYear.js","../../../../../node_modules/sugar/date/isThursday.js","../../../../../node_modules/sugar/date/isToday.js","../../../../../node_modules/sugar/date/isTomorrow.js","../../../../../node_modules/sugar/date/isTuesday.js","../../../../../node_modules/sugar/date/isUTC.js","../../../../../node_modules/sugar/date/internal/isUTC.js","../../../../../node_modules/sugar/date/isValid.js","../../../../../node_modules/sugar/date/isWednesday.js","../../../../../node_modules/sugar/date/isWeekday.js","../../../../../node_modules/sugar/date/isWeekend.js","../../../../../node_modules/sugar/date/isYesterday.js","../../../../../node_modules/sugar/date/iso.js","../../../../../node_modules/sugar/date/millisecondsAgo.js","../../../../../node_modules/sugar/date/millisecondsFromNow.js","../../../../../node_modules/sugar/date/millisecondsSince.js","../../../../../node_modules/sugar/date/millisecondsUntil.js","../../../../../node_modules/sugar/date/minutesAgo.js","../../../../../node_modules/sugar/date/minutesFromNow.js","../../../../../node_modules/sugar/date/minutesSince.js","../../../../../node_modules/sugar/date/minutesUntil.js","../../../../../node_modules/sugar/date/monthsAgo.js","../../../../../node_modules/sugar/date/monthsFromNow.js","../../../../../node_modules/sugar/date/monthsSince.js","../../../../../node_modules/sugar/date/monthsUntil.js","../../../../../node_modules/sugar/date/internal/getAdjustedUnitForDate.js","../../../../../node_modules/sugar/date/internal/dateRelative.js","../../../../../node_modules/sugar/date/relative.js","../../../../../node_modules/sugar/date/relativeTo.js","../../../../../node_modules/sugar/date/reset.js","../../../../../node_modules/sugar/date/internal/getUnitIndexForParamName.js","../../../../../node_modules/sugar/date/rewind.js","../../../../../node_modules/sugar/date/secondsAgo.js","../../../../../node_modules/sugar/date/secondsFromNow.js","../../../../../node_modules/sugar/date/secondsSince.js","../../../../../node_modules/sugar/date/secondsUntil.js","../../../../../node_modules/sugar/date/set.js","../../../../../node_modules/sugar/date/setISOWeek.js","../../../../../node_modules/sugar/date/setUTC.js","../../../../../node_modules/sugar/date/setWeekday.js","../../../../../node_modules/sugar/date/weeksAgo.js","../../../../../node_modules/sugar/date/weeksFromNow.js","../../../../../node_modules/sugar/date/weeksSince.js","../../../../../node_modules/sugar/date/weeksUntil.js","../../../../../node_modules/sugar/date/yearsAgo.js","../../../../../node_modules/sugar/date/yearsFromNow.js","../../../../../node_modules/sugar/date/yearsSince.js","../../../../../node_modules/sugar/date/yearsUntil.js","../../../../../node_modules/sugar/date/getOption.js","../../../../../node_modules/sugar/date/setOption.js","../../../../../node_modules/sugar/range/internal/getRangeMemberPrimitiveValue.js","../../../../../node_modules/sugar/range/internal/cloneRangeMember.js","../../../../../node_modules/sugar/range/internal/Range.js","../../../../../node_modules/sugar/range/internal/getDateForRange.js","../../../../../node_modules/sugar/range/var/DURATION_UNITS.js","../../../../../node_modules/sugar/range/var/DurationTextFormats.js","../../../../../node_modules/sugar/range/var/FULL_CAPTURED_DURATION.js","../../../../../node_modules/sugar/range/var/MULTIPLIERS.js","../../../../../node_modules/sugar/range/internal/incrementDate.js","../../../../../node_modules/sugar/range/var/DURATION_REG.js","../../../../../node_modules/sugar/range/internal/getDateIncrementObject.js","../../../../../node_modules/sugar/range/internal/createDateRangeFromString.js","../../../../../node_modules/sugar/range/var/DateRangeConstructor.js","../../../../../node_modules/sugar/date/range.js","../../../../../node_modules/sugar/range/var/PrimitiveRangeConstructor.js","../../../../../node_modules/sugar/number/range.js","../../../../../node_modules/sugar/string/range.js","../../../../../node_modules/sugar/range/internal/rangeClamp.js","../../../../../node_modules/sugar/number/cap.js","../../../../../node_modules/sugar/number/clamp.js","../../../../../node_modules/sugar/range/internal/rangeIsValid.js","../../../../../node_modules/sugar/range/internal/isValidRangeMember.js","../../../../../node_modules/sugar/range/internal/valueIsNotInfinite.js","../../../../../node_modules/sugar/range/internal/getGreaterPrecision.js","../../../../../node_modules/sugar/range/internal/getPrecision.js","../../../../../node_modules/sugar/range/internal/rangeEvery.js","../../../../../node_modules/sugar/range/internal/incrementNumber.js","../../../../../node_modules/sugar/range/internal/incrementString.js","../../../../../node_modules/sugar/number/upto.js","../../../../../node_modules/sugar/common/internal/defineOnPrototype.js","../../../../../node_modules/sugar/range/clamp.js","../../../../../node_modules/sugar/range/clone.js","../../../../../node_modules/sugar/range/contains.js","../../../../../node_modules/sugar/range/internal/buildDateRangeUnits.js","../../../../../node_modules/sugar/range/every.js","../../../../../node_modules/sugar/range/intersect.js","../../../../../node_modules/sugar/range/isValid.js","../../../../../node_modules/sugar/range/internal/getRangeMemberNumericValue.js","../../../../../node_modules/sugar/range/span.js","../../../../../node_modules/sugar/range/toArray.js","../../../../../node_modules/sugar/range/toString.js","../../../../../node_modules/sugar/range/union.js","../../../../../node_modules/sugar/number/downto.js","../../../../../node_modules/sugar/function/after.js","../../../../../node_modules/sugar/function/var/_timers.js","../../../../../node_modules/sugar/function/var/_canceled.js","../../../../../node_modules/sugar/function/internal/cancelFunction.js","../../../../../node_modules/sugar/function/cancel.js","../../../../../node_modules/sugar/function/internal/setDelay.js","../../../../../node_modules/sugar/function/debounce.js","../../../../../node_modules/sugar/function/delay.js","../../../../../node_modules/sugar/function/every.js","../../../../../node_modules/sugar/function/internal/createLazyFunction.js","../../../../../node_modules/sugar/function/lazy.js","../../../../../node_modules/sugar/function/var/_lock.js","../../../../../node_modules/sugar/function/var/_partial.js","../../../../../node_modules/sugar/function/lock.js","../../../../../node_modules/sugar/function/internal/createHashedMemoizeFunction.js","../../../../../node_modules/sugar/function/memoize.js","../../../../../node_modules/sugar/function/internal/collectArguments.js","../../../../../node_modules/sugar/function/once.js","../../../../../node_modules/sugar/function/var/createInstanceFromPrototype.js","../../../../../node_modules/sugar/function/partial.js","../../../../../node_modules/sugar/function/throttle.js","../../../../../node_modules/sugar/regexp/escape.js","../../../../../node_modules/sugar/regexp/addFlags.js","../../../../../node_modules/sugar/regexp/getFlags.js","../../../../../node_modules/sugar/regexp/removeFlags.js","../../../../../node_modules/sugar/regexp/setFlags.js","../../../../../node_modules/sugar/index.js","../../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.min.js","../../../../../node_modules/use-sync-external-store/with-selector.js","../../../../../node_modules/react-redux/dist/react-redux.mjs","../../../../../node_modules/tslib/tslib.es6.mjs","../../../../../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../../../../node_modules/rxjs/dist/esm5/internal/Subscription.js","../../../../../node_modules/rxjs/dist/esm5/internal/config.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/noop.js","../../../../../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../../../../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/identity.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../../../../node_modules/rxjs/dist/esm5/internal/Observable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/lift.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../../../../node_modules/rxjs/dist/esm5/internal/Subject.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../../../../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../../../../../node_modules/rxjs/dist/esm5/internal/ReplaySubject.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../../../../../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/args.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../../../../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/from.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/of.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isObservable.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../../../../../node_modules/rxjs/dist/esm5/internal/firstValueFrom.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/timeout.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/map.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/concat.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/concatAll.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/iif.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/defer.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/never.js","../../../../../node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/filter.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/combineLatest.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/combineLatestWith.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/repeat.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/retry.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/scan.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/share.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/shareReplay.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/skip.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/tap.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/throttleTime.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/throttle.js","../../../../../node_modules/rxjs/dist/esm5/internal/operators/withLatestFrom.js","../../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../../node_modules/date-fns/esm/_lib/toInteger/index.js","../../../../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../../../../node_modules/date-fns/esm/toDate/index.js","../../../../../node_modules/date-fns/esm/addDays/index.js","../../../../../node_modules/date-fns/esm/addMonths/index.js","../../../../../node_modules/date-fns/esm/add/index.js","../../../../../node_modules/date-fns/esm/addMilliseconds/index.js","../../../../../node_modules/date-fns/esm/addHours/index.js","../../../../../node_modules/date-fns/esm/_lib/defaultOptions/index.js","../../../../../node_modules/date-fns/esm/startOfWeek/index.js","../../../../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../../node_modules/date-fns/esm/startOfDay/index.js","../../../../../node_modules/date-fns/esm/differenceInCalendarDays/index.js","../../../../../node_modules/date-fns/esm/addMinutes/index.js","../../../../../node_modules/date-fns/esm/addSeconds/index.js","../../../../../node_modules/date-fns/esm/isValid/index.js","../../../../../node_modules/date-fns/esm/isDate/index.js","../../../../../node_modules/date-fns/esm/differenceInMilliseconds/index.js","../../../../../node_modules/date-fns/esm/startOfMonth/index.js","../../../../../node_modules/date-fns/esm/startOfYear/index.js","../../../../../node_modules/date-fns/esm/subMilliseconds/index.js","../../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../../../../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../../../../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../../../../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../../../../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../../../../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../../../../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../../../../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../../../../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../../../../../node_modules/date-fns/esm/_lib/format/formatters/index.js","../../../../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../../../../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../../../../../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../../../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../../../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../../../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../../../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../../../../node_modules/date-fns/esm/locale/en-US/index.js","../../../../../node_modules/date-fns/esm/format/index.js","../../../../../node_modules/date-fns/esm/getHours/index.js","../../../../../node_modules/date-fns/esm/getMilliseconds/index.js","../../../../../node_modules/date-fns/esm/getMinutes/index.js","../../../../../node_modules/date-fns/esm/getSeconds/index.js","../../../../../node_modules/date-fns/esm/isAfter/index.js","../../../../../node_modules/date-fns/esm/isBefore/index.js","../../../../../node_modules/date-fns/esm/isEqual/index.js","../../../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../../../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../../../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../../../node_modules/@babel/runtime/helpers/esm/createSuper.js","../../../../../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../../node_modules/date-fns/esm/parse/_lib/Setter.js","../../../../../node_modules/date-fns/esm/parse/_lib/Parser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/constants.js","../../../../../node_modules/date-fns/esm/parse/_lib/utils.js","../../../../../node_modules/date-fns/esm/constants/index.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js","../../../../../node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js","../../../../../node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js","../../../../../node_modules/date-fns/esm/_lib/setUTCDay/index.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js","../../../../../node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js","../../../../../node_modules/date-fns/esm/parse/_lib/parsers/index.js","../../../../../node_modules/date-fns/esm/parse/index.js","../../../../../node_modules/date-fns/esm/_lib/assign/index.js","../../../../../node_modules/date-fns/esm/isPast/index.js","../../../../../node_modules/date-fns/esm/isWithinInterval/index.js","../../../../../node_modules/date-fns/esm/subDays/index.js","../../../../../node_modules/date-fns/esm/setHours/index.js","../../../../../node_modules/date-fns/esm/setMilliseconds/index.js","../../../../../node_modules/date-fns/esm/setMinutes/index.js","../../../../../node_modules/date-fns/esm/setSeconds/index.js","../../../../../node_modules/date-fns/esm/subMonths/index.js","../../../../../node_modules/date-fns/esm/sub/index.js","../../../../../node_modules/date-fns/esm/subHours/index.js","../../../../../node_modules/date-fns/esm/subMinutes/index.js","../../../../../node_modules/parse-duration/index.mjs","../../../../../node_modules/sugar/locales/de.js","../../../../../node_modules/sugar/locales/es.js","../../../../../node_modules/sugar/locales/fr.js","../../../../../node_modules/sugar/locales/it.js","../../../../../node_modules/sugar/locales/pl.js","../../../../../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../../../../../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../../../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../../../node_modules/@formatjs/ecma402-abstract/lib/utils.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","../../../../../node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../../../../../node_modules/@formatjs/fast-memoize/lib/index.js","../../../../../node_modules/intl-messageformat/lib/src/error.js","../../../../../node_modules/intl-messageformat/lib/src/formatters.js","../../../../../node_modules/intl-messageformat/lib/src/core.js","../../../../../node_modules/@formatjs/intl/lib/src/error.js","../../../../../node_modules/@formatjs/intl/lib/src/utils.js","../../../../../node_modules/@formatjs/intl/lib/src/message.js","../../../../../node_modules/@formatjs/intl/lib/src/dateTime.js","../../../../../node_modules/@formatjs/intl/lib/src/displayName.js","../../../../../node_modules/@formatjs/intl/lib/src/list.js","../../../../../node_modules/@formatjs/intl/lib/src/plural.js","../../../../../node_modules/@formatjs/intl/lib/src/relativeTime.js","../../../../../node_modules/@formatjs/intl/lib/src/number.js","../../../../../node_modules/react-intl/lib/src/utils.js","../../../../../node_modules/react-intl/lib/src/components/injectIntl.js","../../../../../node_modules/react-intl/lib/src/components/useIntl.js","../../../../../node_modules/react-intl/lib/src/components/createFormattedComponent.js","../../../../../node_modules/react-intl/lib/src/components/provider.js","../../../../../node_modules/@formatjs/intl/lib/src/create-intl.js","../../../../../node_modules/react-intl/lib/src/components/plural.js","../../../../../node_modules/react-intl/lib/src/components/message.js","../../../../../node_modules/react-intl/lib/index.js","../../../../../node_modules/react-is/cjs/react-is.production.min.js","../../../../../node_modules/react-is/index.js","../../../../../node_modules/@emotion/stylis/dist/stylis.browser.esm.js","../../../../../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js","../../../../../node_modules/styled-components/dist/styled-components.browser.esm.js","../../../../../node_modules/yup/es/util/printValue.js","../../../../../node_modules/yup/es/locale.js","../../../../../node_modules/lodash/_baseHas.js","../../../../../node_modules/lodash/isArray.js","../../../../../node_modules/lodash/_freeGlobal.js","../../../../../node_modules/lodash/_root.js","../../../../../node_modules/lodash/_Symbol.js","../../../../../node_modules/lodash/_getRawTag.js","../../../../../node_modules/lodash/_objectToString.js","../../../../../node_modules/lodash/_baseGetTag.js","../../../../../node_modules/lodash/isObjectLike.js","../../../../../node_modules/lodash/isSymbol.js","../../../../../node_modules/lodash/_isKey.js","../../../../../node_modules/lodash/isObject.js","../../../../../node_modules/lodash/isFunction.js","../../../../../node_modules/lodash/_coreJsData.js","../../../../../node_modules/lodash/_toSource.js","../../../../../node_modules/lodash/_baseIsNative.js","../../../../../node_modules/lodash/_getNative.js","../../../../../node_modules/lodash/_getValue.js","../../../../../node_modules/lodash/_nativeCreate.js","../../../../../node_modules/lodash/_hashGet.js","../../../../../node_modules/lodash/_hashHas.js","../../../../../node_modules/lodash/_Hash.js","../../../../../node_modules/lodash/_hashClear.js","../../../../../node_modules/lodash/_hashDelete.js","../../../../../node_modules/lodash/_hashSet.js","../../../../../node_modules/lodash/eq.js","../../../../../node_modules/lodash/_assocIndexOf.js","../../../../../node_modules/lodash/_listCacheDelete.js","../../../../../node_modules/lodash/_ListCache.js","../../../../../node_modules/lodash/_listCacheClear.js","../../../../../node_modules/lodash/_listCacheGet.js","../../../../../node_modules/lodash/_listCacheHas.js","../../../../../node_modules/lodash/_listCacheSet.js","../../../../../node_modules/lodash/_Map.js","../../../../../node_modules/lodash/_getMapData.js","../../../../../node_modules/lodash/_isKeyable.js","../../../../../node_modules/lodash/_MapCache.js","../../../../../node_modules/lodash/memoize.js","../../../../../node_modules/lodash/_mapCacheClear.js","../../../../../node_modules/lodash/_mapCacheDelete.js","../../../../../node_modules/lodash/_mapCacheGet.js","../../../../../node_modules/lodash/_mapCacheHas.js","../../../../../node_modules/lodash/_mapCacheSet.js","../../../../../node_modules/lodash/_stringToPath.js","../../../../../node_modules/lodash/_baseToString.js","../../../../../node_modules/lodash/_arrayMap.js","../../../../../node_modules/lodash/toString.js","../../../../../node_modules/lodash/_castPath.js","../../../../../node_modules/lodash/isArguments.js","../../../../../node_modules/lodash/_baseIsArguments.js","../../../../../node_modules/lodash/_isIndex.js","../../../../../node_modules/lodash/isLength.js","../../../../../node_modules/lodash/_toKey.js","../../../../../node_modules/lodash/_hasPath.js","../../../../../node_modules/lodash/has.js","../../../../../node_modules/yup/es/util/isSchema.js","../../../../../node_modules/yup/es/Condition.js","../../../../../node_modules/yup/es/util/toArray.js","../../../../../node_modules/yup/es/ValidationError.js","../../../../../node_modules/yup/es/util/runTests.js","../../../../../node_modules/lodash/_defineProperty.js","../../../../../node_modules/lodash/_baseAssignValue.js","../../../../../node_modules/lodash/stubFalse.js","../../../../../node_modules/lodash/_baseIsTypedArray.js","../../../../../node_modules/lodash/isTypedArray.js","../../../../../node_modules/lodash/_baseUnary.js","../../../../../node_modules/lodash/_arrayLikeKeys.js","../../../../../node_modules/lodash/_baseTimes.js","../../../../../node_modules/lodash/_isPrototype.js","../../../../../node_modules/lodash/_nativeKeys.js","../../../../../node_modules/lodash/_baseKeys.js","../../../../../node_modules/lodash/keys.js","../../../../../node_modules/lodash/isArrayLike.js","../../../../../node_modules/lodash/_baseForOwn.js","../../../../../node_modules/lodash/_createBaseFor.js","../../../../../node_modules/lodash/_Stack.js","../../../../../node_modules/lodash/_SetCache.js","../../../../../node_modules/lodash/_stackClear.js","../../../../../node_modules/lodash/_stackDelete.js","../../../../../node_modules/lodash/_stackGet.js","../../../../../node_modules/lodash/_stackHas.js","../../../../../node_modules/lodash/_stackSet.js","../../../../../node_modules/lodash/_setCacheAdd.js","../../../../../node_modules/lodash/_setCacheHas.js","../../../../../node_modules/lodash/_equalArrays.js","../../../../../node_modules/lodash/_arraySome.js","../../../../../node_modules/lodash/_cacheHas.js","../../../../../node_modules/lodash/_Uint8Array.js","../../../../../node_modules/lodash/_equalByTag.js","../../../../../node_modules/lodash/_mapToArray.js","../../../../../node_modules/lodash/_setToArray.js","../../../../../node_modules/lodash/_baseGetAllKeys.js","../../../../../node_modules/lodash/_arrayPush.js","../../../../../node_modules/lodash/_getSymbols.js","../../../../../node_modules/lodash/_arrayFilter.js","../../../../../node_modules/lodash/stubArray.js","../../../../../node_modules/lodash/_getAllKeys.js","../../../../../node_modules/lodash/_equalObjects.js","../../../../../node_modules/lodash/_DataView.js","../../../../../node_modules/lodash/_Promise.js","../../../../../node_modules/lodash/_Set.js","../../../../../node_modules/lodash/_WeakMap.js","../../../../../node_modules/lodash/_getTag.js","../../../../../node_modules/lodash/_baseIsEqualDeep.js","../../../../../node_modules/lodash/_baseIsEqual.js","../../../../../node_modules/lodash/_isStrictComparable.js","../../../../../node_modules/lodash/_matchesStrictComparable.js","../../../../../node_modules/lodash/_baseMatches.js","../../../../../node_modules/lodash/_baseIsMatch.js","../../../../../node_modules/lodash/_getMatchData.js","../../../../../node_modules/lodash/_baseGet.js","../../../../../node_modules/lodash/hasIn.js","../../../../../node_modules/lodash/_baseHasIn.js","../../../../../node_modules/lodash/_baseMatchesProperty.js","../../../../../node_modules/lodash/get.js","../../../../../node_modules/lodash/_baseIteratee.js","../../../../../node_modules/lodash/identity.js","../../../../../node_modules/lodash/property.js","../../../../../node_modules/lodash/_baseProperty.js","../../../../../node_modules/lodash/_basePropertyDeep.js","../../../../../node_modules/lodash/mapValues.js","../../../../../node_modules/property-expr/index.js","../../../../../node_modules/yup/es/Reference.js","../../../../../node_modules/yup/es/util/createValidation.js","../../../../../node_modules/yup/es/util/reach.js","../../../../../node_modules/yup/es/util/ReferenceSet.js","../../../../../node_modules/yup/es/schema.js","../../../../../node_modules/yup/es/mixed.js","../../../../../node_modules/yup/es/util/isAbsent.js","../../../../../node_modules/yup/es/string.js","../../../../../node_modules/yup/es/number.js","../../../../../node_modules/yup/es/util/isodate.js","../../../../../node_modules/yup/es/date.js","../../../../../node_modules/lodash/_deburrLetter.js","../../../../../node_modules/lodash/deburr.js","../../../../../node_modules/lodash/_asciiWords.js","../../../../../node_modules/lodash/_hasUnicodeWord.js","../../../../../node_modules/lodash/_unicodeWords.js","../../../../../node_modules/lodash/_createCompounder.js","../../../../../node_modules/lodash/_arrayReduce.js","../../../../../node_modules/lodash/words.js","../../../../../node_modules/lodash/snakeCase.js","../../../../../node_modules/lodash/_castSlice.js","../../../../../node_modules/lodash/_baseSlice.js","../../../../../node_modules/lodash/_hasUnicode.js","../../../../../node_modules/lodash/_unicodeToArray.js","../../../../../node_modules/lodash/_createCaseFirst.js","../../../../../node_modules/lodash/capitalize.js","../../../../../node_modules/lodash/_stringToArray.js","../../../../../node_modules/lodash/_asciiToArray.js","../../../../../node_modules/lodash/upperFirst.js","../../../../../node_modules/lodash/camelCase.js","../../../../../node_modules/lodash/mapKeys.js","../../../../../node_modules/toposort/index.js","../../../../../node_modules/yup/es/util/sortByKeyOrder.js","../../../../../node_modules/yup/es/object.js","../../../../../node_modules/yup/es/util/sortFields.js","../../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../node_modules/polished/dist/polished.es.js","../../../../../node_modules/@react-spring/rafz/dist/react-spring-rafz.esm.js","../../../../../node_modules/@react-spring/animated/dist/react-spring-animated.esm.js","../../../../../node_modules/@react-spring/web/dist/react-spring-web.esm.js","../../../../../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../../../../../node_modules/@popperjs/core/lib/enums.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../../../../node_modules/@popperjs/core/lib/utils/math.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../../../../node_modules/@popperjs/core/lib/utils/within.js","../../../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../../../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../../../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../../../../node_modules/@popperjs/core/lib/popper.js","../../../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../../../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../../../../node_modules/@popperjs/core/lib/utils/debounce.js","../../../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../../../../node_modules/react-popper/lib/esm/utils.js","../../../../../node_modules/react-fast-compare/index.js","../../../../../node_modules/react-popper/lib/esm/usePopper.js","../../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../../../node_modules/prop-types/index.js","../../../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../../../node_modules/focus-lock/dist/es2015/constants.js","../../../../../node_modules/react-focus-lock/dist/es2015/FocusGuard.js","../../../../../node_modules/use-sidecar/node_modules/tslib/tslib.es6.js","../../../../../node_modules/react-focus-lock/dist/es2015/medium.js","../../../../../node_modules/react-focus-lock/dist/es2015/Lock.js","../../../../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../../../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../../../node_modules/focus-lock/dist/es2015/utils/array.js","../../../../../node_modules/focus-lock/dist/es2015/utils/all-affected.js","../../../../../node_modules/focus-lock/dist/es2015/utils/getActiveElement.js","../../../../../node_modules/focus-lock/dist/es2015/focusInside.js","../../../../../node_modules/focus-lock/dist/es2015/focusIsHidden.js","../../../../../node_modules/focus-lock/dist/es2015/utils/is.js","../../../../../node_modules/focus-lock/dist/es2015/utils/correctFocus.js","../../../../../node_modules/focus-lock/dist/es2015/utils/firstFocus.js","../../../../../node_modules/focus-lock/dist/es2015/solver.js","../../../../../node_modules/focus-lock/dist/es2015/utils/tabOrder.js","../../../../../node_modules/focus-lock/dist/es2015/utils/tabUtils.js","../../../../../node_modules/focus-lock/dist/es2015/utils/DOMutils.js","../../../../../node_modules/focus-lock/dist/es2015/utils/parenting.js","../../../../../node_modules/focus-lock/dist/es2015/focusMerge.js","../../../../../node_modules/focus-lock/dist/es2015/focusables.js","../../../../../node_modules/focus-lock/dist/es2015/setFocus.js","../../../../../node_modules/react-focus-lock/dist/es2015/util.js","../../../../../node_modules/react-focus-lock/dist/es2015/Trap.js","../../../../../node_modules/react-focus-lock/dist/es2015/Combination.js","../../../../../node_modules/react-use/esm/useUpdateEffect.js","../../../../../node_modules/react-use/esm/useFirstMountState.js","../../../../../node_modules/react-use/esm/useMountedState.js","../../../../../node_modules/react-use/esm/useSetState.js","../../../../../node_modules/react-use/esm/misc/util.js","../../../../../node_modules/copy-to-clipboard/index.js","../../../../../node_modules/toggle-selection/index.js","../../../../../node_modules/react-use/esm/useCopyToClipboard.js","../../../../../node_modules/react-use/esm/useTimeoutFn.js","../../../../../node_modules/react-use/esm/useEffectOnce.js","../../../../../node_modules/react-use/esm/useEvent.js","../../../../../node_modules/react-use/esm/useUnmount.js","../../../../../node_modules/react-use/esm/usePrevious.js","../../../../../node_modules/react-use/esm/useSearchParam.js","../../../../../node_modules/resolve-pathname/esm/resolve-pathname.js","../../../../../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../../../../../node_modules/history/esm/history.js","../../../../../node_modules/react-router/node_modules/isarray/index.js","../../../../../node_modules/react-router/node_modules/path-to-regexp/index.js","../../../../../node_modules/react-router/node_modules/react-is/cjs/react-is.production.min.js","../../../../../node_modules/react-router/esm/react-router.js","../../../../../node_modules/react-router-dom/esm/react-router-dom.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/regex.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/validate.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/stringify.js","../../../../../packages/kyoko/node_modules/uuid/dist/esm-browser/v4.js","../../../../../node_modules/rifm/dist/rifm.esm.js","../../../../../node_modules/react-window/node_modules/memoize-one/dist/memoize-one.esm.js","../../../../../node_modules/react-window/dist/index.esm.js","../../../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../node_modules/compute-scroll-into-view/dist/index.js","../../../../../node_modules/downshift/dist/downshift.esm.js","../../../../../node_modules/fuse.js/dist/fuse.esm.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/dom/WebSocketSubject.js","../../../../../node_modules/rxjs/dist/esm5/internal/observable/dom/webSocket.js","../../../../../node_modules/react-intersection-observer/index.mjs","../../../../../node_modules/redux/dist/redux.mjs","../../../../../node_modules/use-memo-one/dist/use-memo-one.esm.js","../../../../../node_modules/css-box-model/dist/css-box-model.esm.js","../../../../../node_modules/memoize-one/dist/memoize-one.esm.js","../../../../../node_modules/raf-schd/dist/raf-schd.esm.js","../../../../../node_modules/@hello-pangea/dnd/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","../../../../../node_modules/@ag-grid-community/locale/dist/package/main.esm.mjs","../../../../../node_modules/react-day-picker/lib/react-day-picker.min.js","../../../../../node_modules/react-virtualized-auto-sizer/dist/index.esm.js","../../../../../node_modules/ag-grid-react/dist/package/index.esm.mjs","../../../../../node_modules/lodash-es/_freeGlobal.js","../../../../../node_modules/lodash-es/_root.js","../../../../../node_modules/lodash-es/_Symbol.js","../../../../../node_modules/lodash-es/_getRawTag.js","../../../../../node_modules/lodash-es/_objectToString.js","../../../../../node_modules/lodash-es/_baseGetTag.js","../../../../../node_modules/lodash-es/isSymbol.js","../../../../../node_modules/lodash-es/isObjectLike.js","../../../../../node_modules/lodash-es/isArray.js","../../../../../node_modules/lodash-es/_baseToString.js","../../../../../node_modules/lodash-es/isObject.js","../../../../../node_modules/lodash-es/_coreJsData.js","../../../../../node_modules/lodash-es/_toSource.js","../../../../../node_modules/lodash-es/_baseIsNative.js","../../../../../node_modules/lodash-es/_getNative.js","../../../../../node_modules/lodash-es/_getValue.js","../../../../../node_modules/lodash-es/isFunction.js","../../../../../node_modules/lodash-es/_isKey.js","../../../../../node_modules/lodash-es/_nativeCreate.js","../../../../../node_modules/lodash-es/_hashGet.js","../../../../../node_modules/lodash-es/_hashHas.js","../../../../../node_modules/lodash-es/_Hash.js","../../../../../node_modules/lodash-es/_assocIndexOf.js","../../../../../node_modules/lodash-es/eq.js","../../../../../node_modules/lodash-es/_hashClear.js","../../../../../node_modules/lodash-es/_hashDelete.js","../../../../../node_modules/lodash-es/_hashSet.js","../../../../../node_modules/lodash-es/_listCacheDelete.js","../../../../../node_modules/lodash-es/_ListCache.js","../../../../../node_modules/lodash-es/_listCacheClear.js","../../../../../node_modules/lodash-es/_listCacheGet.js","../../../../../node_modules/lodash-es/_listCacheHas.js","../../../../../node_modules/lodash-es/_listCacheSet.js","../../../../../node_modules/lodash-es/_Map.js","../../../../../node_modules/lodash-es/_getMapData.js","../../../../../node_modules/lodash-es/_isKeyable.js","../../../../../node_modules/lodash-es/_MapCache.js","../../../../../node_modules/lodash-es/memoize.js","../../../../../node_modules/lodash-es/_mapCacheClear.js","../../../../../node_modules/lodash-es/_mapCacheDelete.js","../../../../../node_modules/lodash-es/_mapCacheGet.js","../../../../../node_modules/lodash-es/_mapCacheHas.js","../../../../../node_modules/lodash-es/_mapCacheSet.js","../../../../../node_modules/lodash-es/_stringToPath.js","../../../../../node_modules/lodash-es/_toKey.js","../../../../../node_modules/lodash-es/get.js","../../../../../node_modules/lodash-es/_baseGet.js","../../../../../node_modules/lodash-es/_castPath.js","../../../../../node_modules/lodash-es/toString.js","../../../../../node_modules/lodash-es/_arrayMap.js","../../../../../node_modules/reselect/dist/reselect.mjs","../../../../../node_modules/redux-thunk/dist/redux-thunk.mjs","../../../../../node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs","../../../../../node_modules/react-sparklines/build/index.js","../../../../../node_modules/chroma-js/chroma.js","../../../../../node_modules/fancy-canvas/size.mjs","../../../../../node_modules/fancy-canvas/device-pixel-ratio.mjs","../../../../../node_modules/fancy-canvas/canvas-element-bitmap-size.mjs","../../../../../node_modules/fancy-canvas/canvas-rendering-target.mjs","../../../../../node_modules/highcharts-react-official/dist/highcharts-react.min.js","../../../../../node_modules/deepmerge/dist/cjs.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../../node_modules/classnames/index.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../../node_modules/rc-util/es/hooks/useEvent.js","../../../../../node_modules/rc-util/es/hooks/useLayoutEffect.js","../../../../../node_modules/rc-util/es/Dom/canUseDom.js","../../../../../node_modules/rc-util/es/hooks/useState.js","../../../../../node_modules/rc-util/es/hooks/useMergedState.js","../../../../../node_modules/rc-util/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../../node_modules/rc-util/es/warning.js","../../../../../node_modules/rc-slider/es/context.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../../node_modules/rc-slider/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../node_modules/rc-util/es/KeyCode.js","../../../../../node_modules/rc-slider/es/util.js","../../../../../node_modules/rc-slider/es/Handles/Handle.js","../../../../../node_modules/rc-slider/es/Handles/index.js","../../../../../node_modules/rc-slider/es/hooks/useDrag.js","../../../../../node_modules/rc-slider/es/Marks/Mark.js","../../../../../node_modules/rc-slider/es/Marks/index.js","../../../../../node_modules/rc-slider/es/Steps/Dot.js","../../../../../node_modules/rc-slider/es/Steps/index.js","../../../../../node_modules/rc-slider/es/Tracks/Track.js","../../../../../node_modules/rc-slider/es/Tracks/index.js","../../../../../node_modules/rc-slider/es/Slider.js","../../../../../node_modules/rc-slider/es/hooks/useOffset.js","../../../../../node_modules/rc-util/es/isEqual.js","../../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../../node_modules/uuid/dist/esm-browser/native.js","../../../../../node_modules/uuid/dist/esm-browser/v4.js","../../../../../node_modules/@dnd-kit/utilities/dist/utilities.esm.js","../../../../../node_modules/@dnd-kit/core/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js","../../../../../node_modules/@dnd-kit/sortable/dist/sortable.esm.js","../../../../../node_modules/react-page-visibility/dist/es5/utils.js","../../../../../node_modules/react-page-visibility/dist/es5/usePageVisibility.js"],"sourcesContent":["import { raf } from '@react-spring/rafz';\nexport { raf } from '@react-spring/rafz';\nimport * as React from 'react';\nimport { useRef, useState, useEffect } from 'react';\n\nfunction noop() {}\nconst defineHidden = (obj, key, value) => Object.defineProperty(obj, key, {\n value,\n writable: true,\n configurable: true\n});\nconst is = {\n arr: Array.isArray,\n obj: a => !!a && a.constructor.name === 'Object',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n und: a => a === undefined\n};\nfunction isEqual(a, b) {\n if (is.arr(a)) {\n if (!is.arr(b) || a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n return a === b;\n}\nconst each = (obj, fn) => obj.forEach(fn);\nfunction eachProp(obj, fn, ctx) {\n if (is.arr(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn.call(ctx, obj[i], `${i}`);\n }\n\n return;\n }\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(ctx, obj[key], key);\n }\n }\n}\nconst toArray = a => is.und(a) ? [] : is.arr(a) ? a : [a];\nfunction flush(queue, iterator) {\n if (queue.size) {\n const items = Array.from(queue);\n queue.clear();\n each(items, iterator);\n }\n}\nconst flushCalls = (queue, ...args) => flush(queue, fn => fn(...args));\nconst isSSR = () => typeof window === 'undefined' || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\n\nlet createStringInterpolator$1;\nlet to;\nlet colors$1 = null;\nlet skipAnimation = false;\nlet willAdvance = noop;\nconst assign = globals => {\n if (globals.to) to = globals.to;\n if (globals.now) raf.now = globals.now;\n if (globals.colors !== undefined) colors$1 = globals.colors;\n if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation;\n if (globals.createStringInterpolator) createStringInterpolator$1 = globals.createStringInterpolator;\n if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame);\n if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates;\n if (globals.willAdvance) willAdvance = globals.willAdvance;\n if (globals.frameLoop) raf.frameLoop = globals.frameLoop;\n};\n\nvar globals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get createStringInterpolator () { return createStringInterpolator$1; },\n get to () { return to; },\n get colors () { return colors$1; },\n get skipAnimation () { return skipAnimation; },\n get willAdvance () { return willAdvance; },\n assign: assign\n});\n\nconst startQueue = new Set();\nlet currentFrame = [];\nlet prevFrame = [];\nlet priority = 0;\nconst frameLoop = {\n get idle() {\n return !startQueue.size && !currentFrame.length;\n },\n\n start(animation) {\n if (priority > animation.priority) {\n startQueue.add(animation);\n raf.onStart(flushStartQueue);\n } else {\n startSafely(animation);\n raf(advance);\n }\n },\n\n advance,\n\n sort(animation) {\n if (priority) {\n raf.onFrame(() => frameLoop.sort(animation));\n } else {\n const prevIndex = currentFrame.indexOf(animation);\n\n if (~prevIndex) {\n currentFrame.splice(prevIndex, 1);\n startUnsafely(animation);\n }\n }\n },\n\n clear() {\n currentFrame = [];\n startQueue.clear();\n }\n\n};\n\nfunction flushStartQueue() {\n startQueue.forEach(startSafely);\n startQueue.clear();\n raf(advance);\n}\n\nfunction startSafely(animation) {\n if (!currentFrame.includes(animation)) startUnsafely(animation);\n}\n\nfunction startUnsafely(animation) {\n currentFrame.splice(findIndex(currentFrame, other => other.priority > animation.priority), 0, animation);\n}\n\nfunction advance(dt) {\n const nextFrame = prevFrame;\n\n for (let i = 0; i < currentFrame.length; i++) {\n const animation = currentFrame[i];\n priority = animation.priority;\n\n if (!animation.idle) {\n willAdvance(animation);\n animation.advance(dt);\n\n if (!animation.idle) {\n nextFrame.push(animation);\n }\n }\n }\n\n priority = 0;\n prevFrame = currentFrame;\n prevFrame.length = 0;\n currentFrame = nextFrame;\n return currentFrame.length > 0;\n}\n\nfunction findIndex(arr, test) {\n const index = arr.findIndex(test);\n return index < 0 ? arr.length : index;\n}\n\nconst colors = {\n transparent: 0x00000000,\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff\n};\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...parts) {\n return '\\\\(\\\\s*(' + parts.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\nconst rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));\nconst hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));\nconst hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));\nconst hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex6 = /^#([0-9a-fA-F]{6})$/;\nconst hex8 = /^#([0-9a-fA-F]{8})$/;\n\nfunction normalizeColor(color) {\n let match;\n\n if (typeof color === 'number') {\n return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;\n }\n\n if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;\n\n if (colors$1 && colors$1[color] !== undefined) {\n return colors$1[color];\n }\n\n if (match = rgb.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | 0x000000ff) >>> 0;\n }\n\n if (match = rgba.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | parse1(match[4])) >>> 0;\n }\n\n if (match = hex3.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + 'ff', 16) >>> 0;\n }\n\n if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n\n if (match = hex4.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + match[4] + match[4], 16) >>> 0;\n }\n\n if (match = hsl.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | 0x000000ff) >>> 0;\n }\n\n if (match = hsla.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | parse1(match[4])) >>> 0;\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) return 0;\n if (int > 255) return 255;\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (int % 360 + 360) % 360 / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) return 0;\n if (num > 1) return 255;\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n const int = parseFloat(str);\n if (int < 0) return 0;\n if (int > 100) return 1;\n return int / 100;\n}\n\nfunction colorToRgba(input) {\n let int32Color = normalizeColor(input);\n if (int32Color === null) return input;\n int32Color = int32Color || 0;\n let r = (int32Color & 0xff000000) >>> 24;\n let g = (int32Color & 0x00ff0000) >>> 16;\n let b = (int32Color & 0x0000ff00) >>> 8;\n let a = (int32Color & 0x000000ff) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\nconst createInterpolator = (range, output, extrapolate) => {\n if (is.fun(range)) {\n return range;\n }\n\n if (is.arr(range)) {\n return createInterpolator({\n range,\n output: output,\n extrapolate\n });\n }\n\n if (is.str(range.output[0])) {\n return createStringInterpolator$1(range);\n }\n\n const config = range;\n const outputRange = config.output;\n const inputRange = config.range || [0, 1];\n const extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';\n const extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';\n\n const easing = config.easing || (t => t);\n\n return input => {\n const range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);\n };\n};\n\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n let result = map ? map(input) : input;\n\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;\n }\n\n if (outputMin === outputMax) return outputMin;\n if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax;\n if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin);\n result = easing(result);\n if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;\n return result;\n}\n\nfunction findRange(input, inputRange) {\n for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break;\n\n return i - 1;\n}\n\nfunction _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}\n\nconst $get = Symbol.for('FluidValue.get');\nconst $observers = Symbol.for('FluidValue.observers');\n\nconst hasFluidValue = arg => Boolean(arg && arg[$get]);\n\nconst getFluidValue = arg => arg && arg[$get] ? arg[$get]() : arg;\n\nconst getFluidObservers = target => target[$observers] || null;\n\nfunction callFluidObserver(observer, event) {\n if (observer.eventObserved) {\n observer.eventObserved(event);\n } else {\n observer(event);\n }\n}\n\nfunction callFluidObservers(target, event) {\n let observers = target[$observers];\n\n if (observers) {\n observers.forEach(observer => {\n callFluidObserver(observer, event);\n });\n }\n}\n\nclass FluidValue {\n constructor(get) {\n this[$get] = void 0;\n this[$observers] = void 0;\n\n if (!get && !(get = this.get)) {\n throw Error('Unknown getter');\n }\n\n setFluidGetter(this, get);\n }\n\n}\n\nconst setFluidGetter = (target, get) => setHidden(target, $get, get);\n\nfunction addFluidObserver(target, observer) {\n if (target[$get]) {\n let observers = target[$observers];\n\n if (!observers) {\n setHidden(target, $observers, observers = new Set());\n }\n\n if (!observers.has(observer)) {\n observers.add(observer);\n\n if (target.observerAdded) {\n target.observerAdded(observers.size, observer);\n }\n }\n }\n\n return observer;\n}\n\nfunction removeFluidObserver(target, observer) {\n let observers = target[$observers];\n\n if (observers && observers.has(observer)) {\n const count = observers.size - 1;\n\n if (count) {\n observers.delete(observer);\n } else {\n target[$observers] = null;\n }\n\n if (target.observerRemoved) {\n target.observerRemoved(count, observer);\n }\n }\n}\n\nconst setHidden = (target, key, value) => Object.defineProperty(target, key, {\n value,\n writable: true,\n configurable: true\n});\n\nconst numberRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nconst colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi;\nconst unitRegex = new RegExp(`(${numberRegex.source})(%|[a-z]+)`, 'i');\nconst rgbaRegex = /rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi;\nconst cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nconst variableToRgba = input => {\n const [token, fallback] = parseCSSVariable(input);\n\n if (!token || isSSR()) {\n return input;\n }\n\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(token);\n\n if (value) {\n return value.trim();\n } else if (fallback && fallback.startsWith('--')) {\n const _value = window.getComputedStyle(document.documentElement).getPropertyValue(fallback);\n\n if (_value) {\n return _value;\n } else {\n return input;\n }\n } else if (fallback && cssVariableRegex.test(fallback)) {\n return variableToRgba(fallback);\n } else if (fallback) {\n return fallback;\n }\n\n return input;\n};\n\nconst parseCSSVariable = current => {\n const match = cssVariableRegex.exec(current);\n if (!match) return [,];\n const [, token, fallback] = match;\n return [token, fallback];\n};\n\nlet namedColorRegex;\n\nconst rgbaRound = (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`;\n\nconst createStringInterpolator = config => {\n if (!namedColorRegex) namedColorRegex = colors$1 ? new RegExp(`(${Object.keys(colors$1).join('|')})(?!\\\\w)`, 'g') : /^\\b$/;\n const output = config.output.map(value => {\n return getFluidValue(value).replace(cssVariableRegex, variableToRgba).replace(colorRegex, colorToRgba).replace(namedColorRegex, colorToRgba);\n });\n const keyframes = output.map(value => value.match(numberRegex).map(Number));\n const outputRanges = keyframes[0].map((_, i) => keyframes.map(values => {\n if (!(i in values)) {\n throw Error('The arity of each \"output\" value must be equal');\n }\n\n return values[i];\n }));\n const interpolators = outputRanges.map(output => createInterpolator(_extends({}, config, {\n output\n })));\n return input => {\n var _output$find;\n\n const missingUnit = !unitRegex.test(output[0]) && ((_output$find = output.find(value => unitRegex.test(value))) == null ? void 0 : _output$find.replace(numberRegex, ''));\n let i = 0;\n return output[0].replace(numberRegex, () => `${interpolators[i++](input)}${missingUnit || ''}`).replace(rgbaRegex, rgbaRound);\n };\n};\n\nconst prefix = 'react-spring: ';\n\nconst once = fn => {\n const func = fn;\n let called = false;\n\n if (typeof func != 'function') {\n throw new TypeError(`${prefix}once requires a function parameter`);\n }\n\n return (...args) => {\n if (!called) {\n func(...args);\n called = true;\n }\n };\n};\n\nconst warnInterpolate = once(console.warn);\nfunction deprecateInterpolate() {\n warnInterpolate(`${prefix}The \"interpolate\" function is deprecated in v9 (use \"to\" instead)`);\n}\nconst warnDirectCall = once(console.warn);\nfunction deprecateDirectCall() {\n warnDirectCall(`${prefix}Directly calling start instead of using the api object is deprecated in v9 (use \".start\" instead), this will be removed in later 0.X.0 versions`);\n}\n\nfunction isAnimatedString(value) {\n return is.str(value) && (value[0] == '#' || /\\d/.test(value) || !isSSR() && cssVariableRegex.test(value) || value in (colors$1 || {}));\n}\n\nconst useLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;\n\nconst useIsMounted = () => {\n const isMounted = useRef(false);\n useLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return isMounted;\n};\n\nfunction useForceUpdate() {\n const update = useState()[1];\n const isMounted = useIsMounted();\n return () => {\n if (isMounted.current) {\n update(Math.random());\n }\n };\n}\n\nfunction useMemoOne(getResult, inputs) {\n const [initial] = useState(() => ({\n inputs,\n result: getResult()\n }));\n const committed = useRef();\n const prevCache = committed.current;\n let cache = prevCache;\n\n if (cache) {\n const useCache = Boolean(inputs && cache.inputs && areInputsEqual(inputs, cache.inputs));\n\n if (!useCache) {\n cache = {\n inputs,\n result: getResult()\n };\n }\n } else {\n cache = initial;\n }\n\n useEffect(() => {\n committed.current = cache;\n\n if (prevCache == initial) {\n initial.inputs = initial.result = undefined;\n }\n }, [cache]);\n return cache.result;\n}\n\nfunction areInputsEqual(next, prev) {\n if (next.length !== prev.length) {\n return false;\n }\n\n for (let i = 0; i < next.length; i++) {\n if (next[i] !== prev[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nconst useOnce = effect => useEffect(effect, emptyDeps);\nconst emptyDeps = [];\n\nfunction usePrev(value) {\n const prevRef = useRef();\n useEffect(() => {\n prevRef.current = value;\n });\n return prevRef.current;\n}\n\nexport { FluidValue, globals as Globals, addFluidObserver, callFluidObserver, callFluidObservers, colorToRgba, colors, createInterpolator, createStringInterpolator, defineHidden, deprecateDirectCall, deprecateInterpolate, each, eachProp, flush, flushCalls, frameLoop, getFluidObservers, getFluidValue, hasFluidValue, hex3, hex4, hex6, hex8, hsl, hsla, is, isAnimatedString, isEqual, isSSR, noop, removeFluidObserver, rgb, rgba, setFluidGetter, toArray, useForceUpdate, useLayoutEffect, useMemoOne, useOnce, usePrev };\n","import { eachProp, is, toArray, isAnimatedString, Globals, getFluidValue, useLayoutEffect, each, raf, flush, FluidValue, deprecateInterpolate, callFluidObservers, frameLoop, hasFluidValue, flushCalls, isEqual, getFluidObservers, addFluidObserver, removeFluidObserver, noop, useMemoOne, deprecateDirectCall, useForceUpdate, usePrev, useOnce, createInterpolator, createStringInterpolator } from '@react-spring/shared';\nexport { Globals, createInterpolator } from '@react-spring/shared';\nimport * as React from 'react';\nimport { useContext, useMemo, useRef, useState } from 'react';\nimport { getAnimated, AnimatedValue, getPayload, AnimatedString, getAnimatedType, setAnimated } from '@react-spring/animated';\nexport * from '@react-spring/types/animated';\nexport * from '@react-spring/types/interpolation';\n\nfunction _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}\n\nfunction callProp(value, ...args) {\n return is.fun(value) ? value(...args) : value;\n}\nconst matchProp = (value, key) => value === true || !!(key && value && (is.fun(value) ? value(key) : toArray(value).includes(key)));\nconst resolveProp = (prop, key) => is.obj(prop) ? key && prop[key] : prop;\nconst getDefaultProp = (props, key) => props.default === true ? props[key] : props.default ? props.default[key] : undefined;\n\nconst noopTransform = value => value;\n\nconst getDefaultProps = (props, transform = noopTransform) => {\n let keys = DEFAULT_PROPS;\n\n if (props.default && props.default !== true) {\n props = props.default;\n keys = Object.keys(props);\n }\n\n const defaults = {};\n\n for (const key of keys) {\n const value = transform(props[key], key);\n\n if (!is.und(value)) {\n defaults[key] = value;\n }\n }\n\n return defaults;\n};\nconst DEFAULT_PROPS = ['config', 'onProps', 'onStart', 'onChange', 'onPause', 'onResume', 'onRest'];\nconst RESERVED_PROPS = {\n config: 1,\n from: 1,\n to: 1,\n ref: 1,\n loop: 1,\n reset: 1,\n pause: 1,\n cancel: 1,\n reverse: 1,\n immediate: 1,\n default: 1,\n delay: 1,\n onProps: 1,\n onStart: 1,\n onChange: 1,\n onPause: 1,\n onResume: 1,\n onRest: 1,\n onResolve: 1,\n items: 1,\n trail: 1,\n sort: 1,\n expires: 1,\n initial: 1,\n enter: 1,\n update: 1,\n leave: 1,\n children: 1,\n onDestroyed: 1,\n keys: 1,\n callId: 1,\n parentId: 1\n};\n\nfunction getForwardProps(props) {\n const forward = {};\n let count = 0;\n eachProp(props, (value, prop) => {\n if (!RESERVED_PROPS[prop]) {\n forward[prop] = value;\n count++;\n }\n });\n\n if (count) {\n return forward;\n }\n}\n\nfunction inferTo(props) {\n const to = getForwardProps(props);\n\n if (to) {\n const out = {\n to\n };\n eachProp(props, (val, key) => key in to || (out[key] = val));\n return out;\n }\n\n return _extends({}, props);\n}\nfunction computeGoal(value) {\n value = getFluidValue(value);\n return is.arr(value) ? value.map(computeGoal) : isAnimatedString(value) ? Globals.createStringInterpolator({\n range: [0, 1],\n output: [value, value]\n })(1) : value;\n}\nfunction hasProps(props) {\n for (const _ in props) return true;\n\n return false;\n}\nfunction isAsyncTo(to) {\n return is.fun(to) || is.arr(to) && is.obj(to[0]);\n}\nfunction detachRefs(ctrl, ref) {\n var _ctrl$ref;\n\n (_ctrl$ref = ctrl.ref) == null ? void 0 : _ctrl$ref.delete(ctrl);\n ref == null ? void 0 : ref.delete(ctrl);\n}\nfunction replaceRef(ctrl, ref) {\n if (ref && ctrl.ref !== ref) {\n var _ctrl$ref2;\n\n (_ctrl$ref2 = ctrl.ref) == null ? void 0 : _ctrl$ref2.delete(ctrl);\n ref.add(ctrl);\n ctrl.ref = ref;\n }\n}\n\nfunction useChain(refs, timeSteps, timeFrame = 1000) {\n useLayoutEffect(() => {\n if (timeSteps) {\n let prevDelay = 0;\n each(refs, (ref, i) => {\n const controllers = ref.current;\n\n if (controllers.length) {\n let delay = timeFrame * timeSteps[i];\n if (isNaN(delay)) delay = prevDelay;else prevDelay = delay;\n each(controllers, ctrl => {\n each(ctrl.queue, props => {\n const memoizedDelayProp = props.delay;\n\n props.delay = key => delay + callProp(memoizedDelayProp || 0, key);\n });\n });\n ref.start();\n }\n });\n } else {\n let p = Promise.resolve();\n each(refs, ref => {\n const controllers = ref.current;\n\n if (controllers.length) {\n const queues = controllers.map(ctrl => {\n const q = ctrl.queue;\n ctrl.queue = [];\n return q;\n });\n p = p.then(() => {\n each(controllers, (ctrl, i) => each(queues[i] || [], update => ctrl.queue.push(update)));\n return Promise.all(ref.start());\n });\n }\n });\n }\n });\n}\n\nconst config = {\n default: {\n tension: 170,\n friction: 26\n },\n gentle: {\n tension: 120,\n friction: 14\n },\n wobbly: {\n tension: 180,\n friction: 12\n },\n stiff: {\n tension: 210,\n friction: 20\n },\n slow: {\n tension: 280,\n friction: 60\n },\n molasses: {\n tension: 280,\n friction: 120\n }\n};\nconst c1 = 1.70158;\nconst c2 = c1 * 1.525;\nconst c3 = c1 + 1;\nconst c4 = 2 * Math.PI / 3;\nconst c5 = 2 * Math.PI / 4.5;\n\nconst bounceOut = x => {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1) {\n return n1 * x * x;\n } else if (x < 2 / d1) {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n } else if (x < 2.5 / d1) {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n } else {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n};\n\nconst easings = {\n linear: x => x,\n easeInQuad: x => x * x,\n easeOutQuad: x => 1 - (1 - x) * (1 - x),\n easeInOutQuad: x => x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n easeInCubic: x => x * x * x,\n easeOutCubic: x => 1 - Math.pow(1 - x, 3),\n easeInOutCubic: x => x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2,\n easeInQuart: x => x * x * x * x,\n easeOutQuart: x => 1 - Math.pow(1 - x, 4),\n easeInOutQuart: x => x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2,\n easeInQuint: x => x * x * x * x * x,\n easeOutQuint: x => 1 - Math.pow(1 - x, 5),\n easeInOutQuint: x => x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2,\n easeInSine: x => 1 - Math.cos(x * Math.PI / 2),\n easeOutSine: x => Math.sin(x * Math.PI / 2),\n easeInOutSine: x => -(Math.cos(Math.PI * x) - 1) / 2,\n easeInExpo: x => x === 0 ? 0 : Math.pow(2, 10 * x - 10),\n easeOutExpo: x => x === 1 ? 1 : 1 - Math.pow(2, -10 * x),\n easeInOutExpo: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2,\n easeInCirc: x => 1 - Math.sqrt(1 - Math.pow(x, 2)),\n easeOutCirc: x => Math.sqrt(1 - Math.pow(x - 1, 2)),\n easeInOutCirc: x => x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2,\n easeInBack: x => c3 * x * x * x - c1 * x * x,\n easeOutBack: x => 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2),\n easeInOutBack: x => x < 0.5 ? Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2,\n easeInElastic: x => x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4),\n easeOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1,\n easeInOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5) / 2 + 1,\n easeInBounce: x => 1 - bounceOut(1 - x),\n easeOutBounce: bounceOut,\n easeInOutBounce: x => x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2\n};\n\nconst defaults = _extends({}, config.default, {\n mass: 1,\n damping: 1,\n easing: easings.linear,\n clamp: false\n});\n\nclass AnimationConfig {\n constructor() {\n this.tension = void 0;\n this.friction = void 0;\n this.frequency = void 0;\n this.damping = void 0;\n this.mass = void 0;\n this.velocity = 0;\n this.restVelocity = void 0;\n this.precision = void 0;\n this.progress = void 0;\n this.duration = void 0;\n this.easing = void 0;\n this.clamp = void 0;\n this.bounce = void 0;\n this.decay = void 0;\n this.round = void 0;\n Object.assign(this, defaults);\n }\n\n}\nfunction mergeConfig(config, newConfig, defaultConfig) {\n if (defaultConfig) {\n defaultConfig = _extends({}, defaultConfig);\n sanitizeConfig(defaultConfig, newConfig);\n newConfig = _extends({}, defaultConfig, newConfig);\n }\n\n sanitizeConfig(config, newConfig);\n Object.assign(config, newConfig);\n\n for (const key in defaults) {\n if (config[key] == null) {\n config[key] = defaults[key];\n }\n }\n\n let {\n mass,\n frequency,\n damping\n } = config;\n\n if (!is.und(frequency)) {\n if (frequency < 0.01) frequency = 0.01;\n if (damping < 0) damping = 0;\n config.tension = Math.pow(2 * Math.PI / frequency, 2) * mass;\n config.friction = 4 * Math.PI * damping * mass / frequency;\n }\n\n return config;\n}\n\nfunction sanitizeConfig(config, props) {\n if (!is.und(props.decay)) {\n config.duration = undefined;\n } else {\n const isTensionConfig = !is.und(props.tension) || !is.und(props.friction);\n\n if (isTensionConfig || !is.und(props.frequency) || !is.und(props.damping) || !is.und(props.mass)) {\n config.duration = undefined;\n config.decay = undefined;\n }\n\n if (isTensionConfig) {\n config.frequency = undefined;\n }\n }\n}\n\nconst emptyArray = [];\nclass Animation {\n constructor() {\n this.changed = false;\n this.values = emptyArray;\n this.toValues = null;\n this.fromValues = emptyArray;\n this.to = void 0;\n this.from = void 0;\n this.config = new AnimationConfig();\n this.immediate = false;\n }\n\n}\n\nfunction scheduleProps(callId, {\n key,\n props,\n defaultProps,\n state,\n actions\n}) {\n return new Promise((resolve, reject) => {\n var _props$cancel;\n\n let delay;\n let timeout;\n let cancel = matchProp((_props$cancel = props.cancel) != null ? _props$cancel : defaultProps == null ? void 0 : defaultProps.cancel, key);\n\n if (cancel) {\n onStart();\n } else {\n if (!is.und(props.pause)) {\n state.paused = matchProp(props.pause, key);\n }\n\n let pause = defaultProps == null ? void 0 : defaultProps.pause;\n\n if (pause !== true) {\n pause = state.paused || matchProp(pause, key);\n }\n\n delay = callProp(props.delay || 0, key);\n\n if (pause) {\n state.resumeQueue.add(onResume);\n actions.pause();\n } else {\n actions.resume();\n onResume();\n }\n }\n\n function onPause() {\n state.resumeQueue.add(onResume);\n state.timeouts.delete(timeout);\n timeout.cancel();\n delay = timeout.time - raf.now();\n }\n\n function onResume() {\n if (delay > 0 && !Globals.skipAnimation) {\n state.delayed = true;\n timeout = raf.setTimeout(onStart, delay);\n state.pauseQueue.add(onPause);\n state.timeouts.add(timeout);\n } else {\n onStart();\n }\n }\n\n function onStart() {\n if (state.delayed) {\n state.delayed = false;\n }\n\n state.pauseQueue.delete(onPause);\n state.timeouts.delete(timeout);\n\n if (callId <= (state.cancelId || 0)) {\n cancel = true;\n }\n\n try {\n actions.start(_extends({}, props, {\n callId,\n cancel\n }), resolve);\n } catch (err) {\n reject(err);\n }\n }\n });\n}\n\nconst getCombinedResult = (target, results) => results.length == 1 ? results[0] : results.some(result => result.cancelled) ? getCancelledResult(target.get()) : results.every(result => result.noop) ? getNoopResult(target.get()) : getFinishedResult(target.get(), results.every(result => result.finished));\nconst getNoopResult = value => ({\n value,\n noop: true,\n finished: true,\n cancelled: false\n});\nconst getFinishedResult = (value, finished, cancelled = false) => ({\n value,\n finished,\n cancelled\n});\nconst getCancelledResult = value => ({\n value,\n cancelled: true,\n finished: false\n});\n\nfunction runAsync(to, props, state, target) {\n const {\n callId,\n parentId,\n onRest\n } = props;\n const {\n asyncTo: prevTo,\n promise: prevPromise\n } = state;\n\n if (!parentId && to === prevTo && !props.reset) {\n return prevPromise;\n }\n\n return state.promise = (async () => {\n state.asyncId = callId;\n state.asyncTo = to;\n const defaultProps = getDefaultProps(props, (value, key) => key === 'onRest' ? undefined : value);\n let preventBail;\n let bail;\n const bailPromise = new Promise((resolve, reject) => (preventBail = resolve, bail = reject));\n\n const bailIfEnded = bailSignal => {\n const bailResult = callId <= (state.cancelId || 0) && getCancelledResult(target) || callId !== state.asyncId && getFinishedResult(target, false);\n\n if (bailResult) {\n bailSignal.result = bailResult;\n bail(bailSignal);\n throw bailSignal;\n }\n };\n\n const animate = (arg1, arg2) => {\n const bailSignal = new BailSignal();\n const skipAnimationSignal = new SkipAniamtionSignal();\n return (async () => {\n if (Globals.skipAnimation) {\n stopAsync(state);\n skipAnimationSignal.result = getFinishedResult(target, false);\n bail(skipAnimationSignal);\n throw skipAnimationSignal;\n }\n\n bailIfEnded(bailSignal);\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n to: arg1\n });\n props.parentId = callId;\n eachProp(defaultProps, (value, key) => {\n if (is.und(props[key])) {\n props[key] = value;\n }\n });\n const result = await target.start(props);\n bailIfEnded(bailSignal);\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n return result;\n })();\n };\n\n let result;\n\n if (Globals.skipAnimation) {\n stopAsync(state);\n return getFinishedResult(target, false);\n }\n\n try {\n let animating;\n\n if (is.arr(to)) {\n animating = (async queue => {\n for (const props of queue) {\n await animate(props);\n }\n })(to);\n } else {\n animating = Promise.resolve(to(animate, target.stop.bind(target)));\n }\n\n await Promise.all([animating.then(preventBail), bailPromise]);\n result = getFinishedResult(target.get(), true, false);\n } catch (err) {\n if (err instanceof BailSignal) {\n result = err.result;\n } else if (err instanceof SkipAniamtionSignal) {\n result = err.result;\n } else {\n throw err;\n }\n } finally {\n if (callId == state.asyncId) {\n state.asyncId = parentId;\n state.asyncTo = parentId ? prevTo : undefined;\n state.promise = parentId ? prevPromise : undefined;\n }\n }\n\n if (is.fun(onRest)) {\n raf.batchedUpdates(() => {\n onRest(result, target, target.item);\n });\n }\n\n return result;\n })();\n}\nfunction stopAsync(state, cancelId) {\n flush(state.timeouts, t => t.cancel());\n state.pauseQueue.clear();\n state.resumeQueue.clear();\n state.asyncId = state.asyncTo = state.promise = undefined;\n if (cancelId) state.cancelId = cancelId;\n}\nclass BailSignal extends Error {\n constructor() {\n super('An async animation has been interrupted. You see this error because you ' + 'forgot to use `await` or `.catch(...)` on its returned promise.');\n this.result = void 0;\n }\n\n}\nclass SkipAniamtionSignal extends Error {\n constructor() {\n super('SkipAnimationSignal');\n this.result = void 0;\n }\n\n}\n\nconst isFrameValue = value => value instanceof FrameValue;\nlet nextId$1 = 1;\nclass FrameValue extends FluidValue {\n constructor(...args) {\n super(...args);\n this.id = nextId$1++;\n this.key = void 0;\n this._priority = 0;\n }\n\n get priority() {\n return this._priority;\n }\n\n set priority(priority) {\n if (this._priority != priority) {\n this._priority = priority;\n\n this._onPriorityChange(priority);\n }\n }\n\n get() {\n const node = getAnimated(this);\n return node && node.getValue();\n }\n\n to(...args) {\n return Globals.to(this, args);\n }\n\n interpolate(...args) {\n deprecateInterpolate();\n return Globals.to(this, args);\n }\n\n toJSON() {\n return this.get();\n }\n\n observerAdded(count) {\n if (count == 1) this._attach();\n }\n\n observerRemoved(count) {\n if (count == 0) this._detach();\n }\n\n _attach() {}\n\n _detach() {}\n\n _onChange(value, idle = false) {\n callFluidObservers(this, {\n type: 'change',\n parent: this,\n value,\n idle\n });\n }\n\n _onPriorityChange(priority) {\n if (!this.idle) {\n frameLoop.sort(this);\n }\n\n callFluidObservers(this, {\n type: 'priority',\n parent: this,\n priority\n });\n }\n\n}\n\nconst $P = Symbol.for('SpringPhase');\nconst HAS_ANIMATED = 1;\nconst IS_ANIMATING = 2;\nconst IS_PAUSED = 4;\nconst hasAnimated = target => (target[$P] & HAS_ANIMATED) > 0;\nconst isAnimating = target => (target[$P] & IS_ANIMATING) > 0;\nconst isPaused = target => (target[$P] & IS_PAUSED) > 0;\nconst setActiveBit = (target, active) => active ? target[$P] |= IS_ANIMATING | HAS_ANIMATED : target[$P] &= ~IS_ANIMATING;\nconst setPausedBit = (target, paused) => paused ? target[$P] |= IS_PAUSED : target[$P] &= ~IS_PAUSED;\n\nclass SpringValue extends FrameValue {\n constructor(arg1, arg2) {\n super();\n this.key = void 0;\n this.animation = new Animation();\n this.queue = void 0;\n this.defaultProps = {};\n this._state = {\n paused: false,\n delayed: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._pendingCalls = new Set();\n this._lastCallId = 0;\n this._lastToId = 0;\n this._memoizedDuration = 0;\n\n if (!is.und(arg1) || !is.und(arg2)) {\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n from: arg1\n });\n\n if (is.und(props.default)) {\n props.default = true;\n }\n\n this.start(props);\n }\n }\n\n get idle() {\n return !(isAnimating(this) || this._state.asyncTo) || isPaused(this);\n }\n\n get goal() {\n return getFluidValue(this.animation.to);\n }\n\n get velocity() {\n const node = getAnimated(this);\n return node instanceof AnimatedValue ? node.lastVelocity || 0 : node.getPayload().map(node => node.lastVelocity || 0);\n }\n\n get hasAnimated() {\n return hasAnimated(this);\n }\n\n get isAnimating() {\n return isAnimating(this);\n }\n\n get isPaused() {\n return isPaused(this);\n }\n\n get isDelayed() {\n return this._state.delayed;\n }\n\n advance(dt) {\n let idle = true;\n let changed = false;\n const anim = this.animation;\n let {\n config,\n toValues\n } = anim;\n const payload = getPayload(anim.to);\n\n if (!payload && hasFluidValue(anim.to)) {\n toValues = toArray(getFluidValue(anim.to));\n }\n\n anim.values.forEach((node, i) => {\n if (node.done) return;\n const to = node.constructor == AnimatedString ? 1 : payload ? payload[i].lastPosition : toValues[i];\n let finished = anim.immediate;\n let position = to;\n\n if (!finished) {\n position = node.lastPosition;\n\n if (config.tension <= 0) {\n node.done = true;\n return;\n }\n\n let elapsed = node.elapsedTime += dt;\n const from = anim.fromValues[i];\n const v0 = node.v0 != null ? node.v0 : node.v0 = is.arr(config.velocity) ? config.velocity[i] : config.velocity;\n let velocity;\n\n if (!is.und(config.duration)) {\n let p = 1;\n\n if (config.duration > 0) {\n if (this._memoizedDuration !== config.duration) {\n this._memoizedDuration = config.duration;\n\n if (node.durationProgress > 0) {\n node.elapsedTime = config.duration * node.durationProgress;\n elapsed = node.elapsedTime += dt;\n }\n }\n\n p = (config.progress || 0) + elapsed / this._memoizedDuration;\n p = p > 1 ? 1 : p < 0 ? 0 : p;\n node.durationProgress = p;\n }\n\n position = from + config.easing(p) * (to - from);\n velocity = (position - node.lastPosition) / dt;\n finished = p == 1;\n } else if (config.decay) {\n const decay = config.decay === true ? 0.998 : config.decay;\n const e = Math.exp(-(1 - decay) * elapsed);\n position = from + v0 / (1 - decay) * (1 - e);\n finished = Math.abs(node.lastPosition - position) < 0.1;\n velocity = v0 * e;\n } else {\n velocity = node.lastVelocity == null ? v0 : node.lastVelocity;\n const precision = config.precision || (from == to ? 0.005 : Math.min(1, Math.abs(to - from) * 0.001));\n const restVelocity = config.restVelocity || precision / 10;\n const bounceFactor = config.clamp ? 0 : config.bounce;\n const canBounce = !is.und(bounceFactor);\n const isGrowing = from == to ? node.v0 > 0 : from < to;\n let isMoving;\n let isBouncing = false;\n const step = 1;\n const numSteps = Math.ceil(dt / step);\n\n for (let n = 0; n < numSteps; ++n) {\n isMoving = Math.abs(velocity) > restVelocity;\n\n if (!isMoving) {\n finished = Math.abs(to - position) <= precision;\n\n if (finished) {\n break;\n }\n }\n\n if (canBounce) {\n isBouncing = position == to || position > to == isGrowing;\n\n if (isBouncing) {\n velocity = -velocity * bounceFactor;\n position = to;\n }\n }\n\n const springForce = -config.tension * 0.000001 * (position - to);\n const dampingForce = -config.friction * 0.001 * velocity;\n const acceleration = (springForce + dampingForce) / config.mass;\n velocity = velocity + acceleration * step;\n position = position + velocity * step;\n }\n }\n\n node.lastVelocity = velocity;\n\n if (Number.isNaN(position)) {\n console.warn(`Got NaN while animating:`, this);\n finished = true;\n }\n }\n\n if (payload && !payload[i].done) {\n finished = false;\n }\n\n if (finished) {\n node.done = true;\n } else {\n idle = false;\n }\n\n if (node.setValue(position, config.round)) {\n changed = true;\n }\n });\n const node = getAnimated(this);\n const currVal = node.getValue();\n\n if (idle) {\n const finalVal = getFluidValue(anim.to);\n\n if ((currVal !== finalVal || changed) && !config.decay) {\n node.setValue(finalVal);\n\n this._onChange(finalVal);\n } else if (changed && config.decay) {\n this._onChange(currVal);\n }\n\n this._stop();\n } else if (changed) {\n this._onChange(currVal);\n }\n }\n\n set(value) {\n raf.batchedUpdates(() => {\n this._stop();\n\n this._focus(value);\n\n this._set(value);\n });\n return this;\n }\n\n pause() {\n this._update({\n pause: true\n });\n }\n\n resume() {\n this._update({\n pause: false\n });\n }\n\n finish() {\n if (isAnimating(this)) {\n const {\n to,\n config\n } = this.animation;\n raf.batchedUpdates(() => {\n this._onStart();\n\n if (!config.decay) {\n this._set(to, false);\n }\n\n this._stop();\n });\n }\n\n return this;\n }\n\n update(props) {\n const queue = this.queue || (this.queue = []);\n queue.push(props);\n return this;\n }\n\n start(to, arg2) {\n let queue;\n\n if (!is.und(to)) {\n queue = [is.obj(to) ? to : _extends({}, arg2, {\n to\n })];\n } else {\n queue = this.queue || [];\n this.queue = [];\n }\n\n return Promise.all(queue.map(props => {\n const up = this._update(props);\n\n return up;\n })).then(results => getCombinedResult(this, results));\n }\n\n stop(cancel) {\n const {\n to\n } = this.animation;\n\n this._focus(this.get());\n\n stopAsync(this._state, cancel && this._lastCallId);\n raf.batchedUpdates(() => this._stop(to, cancel));\n return this;\n }\n\n reset() {\n this._update({\n reset: true\n });\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._start();\n } else if (event.type == 'priority') {\n this.priority = event.priority + 1;\n }\n }\n\n _prepareNode(props) {\n const key = this.key || '';\n let {\n to,\n from\n } = props;\n to = is.obj(to) ? to[key] : to;\n\n if (to == null || isAsyncTo(to)) {\n to = undefined;\n }\n\n from = is.obj(from) ? from[key] : from;\n\n if (from == null) {\n from = undefined;\n }\n\n const range = {\n to,\n from\n };\n\n if (!hasAnimated(this)) {\n if (props.reverse) [to, from] = [from, to];\n from = getFluidValue(from);\n\n if (!is.und(from)) {\n this._set(from);\n } else if (!getAnimated(this)) {\n this._set(to);\n }\n }\n\n return range;\n }\n\n _update(_ref, isLoop) {\n let props = _extends({}, _ref);\n\n const {\n key,\n defaultProps\n } = this;\n if (props.default) Object.assign(defaultProps, getDefaultProps(props, (value, prop) => /^on/.test(prop) ? resolveProp(value, key) : value));\n mergeActiveFn(this, props, 'onProps');\n sendEvent(this, 'onProps', props, this);\n\n const range = this._prepareNode(props);\n\n if (Object.isFrozen(this)) {\n throw Error('Cannot animate a `SpringValue` object that is frozen. ' + 'Did you forget to pass your component to `animated(...)` before animating its props?');\n }\n\n const state = this._state;\n return scheduleProps(++this._lastCallId, {\n key,\n props,\n defaultProps,\n state,\n actions: {\n pause: () => {\n if (!isPaused(this)) {\n setPausedBit(this, true);\n flushCalls(state.pauseQueue);\n sendEvent(this, 'onPause', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n resume: () => {\n if (isPaused(this)) {\n setPausedBit(this, false);\n\n if (isAnimating(this)) {\n this._resume();\n }\n\n flushCalls(state.resumeQueue);\n sendEvent(this, 'onResume', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n start: this._merge.bind(this, range)\n }\n }).then(result => {\n if (props.loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props);\n\n if (nextProps) {\n return this._update(nextProps, true);\n }\n }\n\n return result;\n });\n }\n\n _merge(range, props, resolve) {\n if (props.cancel) {\n this.stop(true);\n return resolve(getCancelledResult(this));\n }\n\n const hasToProp = !is.und(range.to);\n const hasFromProp = !is.und(range.from);\n\n if (hasToProp || hasFromProp) {\n if (props.callId > this._lastToId) {\n this._lastToId = props.callId;\n } else {\n return resolve(getCancelledResult(this));\n }\n }\n\n const {\n key,\n defaultProps,\n animation: anim\n } = this;\n const {\n to: prevTo,\n from: prevFrom\n } = anim;\n let {\n to = prevTo,\n from = prevFrom\n } = range;\n\n if (hasFromProp && !hasToProp && (!props.default || is.und(to))) {\n to = from;\n }\n\n if (props.reverse) [to, from] = [from, to];\n const hasFromChanged = !isEqual(from, prevFrom);\n\n if (hasFromChanged) {\n anim.from = from;\n }\n\n from = getFluidValue(from);\n const hasToChanged = !isEqual(to, prevTo);\n\n if (hasToChanged) {\n this._focus(to);\n }\n\n const hasAsyncTo = isAsyncTo(props.to);\n const {\n config\n } = anim;\n const {\n decay,\n velocity\n } = config;\n\n if (hasToProp || hasFromProp) {\n config.velocity = 0;\n }\n\n if (props.config && !hasAsyncTo) {\n mergeConfig(config, callProp(props.config, key), props.config !== defaultProps.config ? callProp(defaultProps.config, key) : void 0);\n }\n\n let node = getAnimated(this);\n\n if (!node || is.und(to)) {\n return resolve(getFinishedResult(this, true));\n }\n\n const reset = is.und(props.reset) ? hasFromProp && !props.default : !is.und(from) && matchProp(props.reset, key);\n const value = reset ? from : this.get();\n const goal = computeGoal(to);\n const isAnimatable = is.num(goal) || is.arr(goal) || isAnimatedString(goal);\n const immediate = !hasAsyncTo && (!isAnimatable || matchProp(defaultProps.immediate || props.immediate, key));\n\n if (hasToChanged) {\n const nodeType = getAnimatedType(to);\n\n if (nodeType !== node.constructor) {\n if (immediate) {\n node = this._set(goal);\n } else throw Error(`Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the \"to\" prop suggests`);\n }\n }\n\n const goalType = node.constructor;\n let started = hasFluidValue(to);\n let finished = false;\n\n if (!started) {\n const hasValueChanged = reset || !hasAnimated(this) && hasFromChanged;\n\n if (hasToChanged || hasValueChanged) {\n finished = isEqual(computeGoal(value), goal);\n started = !finished;\n }\n\n if (!isEqual(anim.immediate, immediate) && !immediate || !isEqual(config.decay, decay) || !isEqual(config.velocity, velocity)) {\n started = true;\n }\n }\n\n if (finished && isAnimating(this)) {\n if (anim.changed && !reset) {\n started = true;\n } else if (!started) {\n this._stop(prevTo);\n }\n }\n\n if (!hasAsyncTo) {\n if (started || hasFluidValue(prevTo)) {\n anim.values = node.getPayload();\n anim.toValues = hasFluidValue(to) ? null : goalType == AnimatedString ? [1] : toArray(goal);\n }\n\n if (anim.immediate != immediate) {\n anim.immediate = immediate;\n\n if (!immediate && !reset) {\n this._set(prevTo);\n }\n }\n\n if (started) {\n const {\n onRest\n } = anim;\n each(ACTIVE_EVENTS, type => mergeActiveFn(this, props, type));\n const result = getFinishedResult(this, checkFinished(this, prevTo));\n flushCalls(this._pendingCalls, result);\n\n this._pendingCalls.add(resolve);\n\n if (anim.changed) raf.batchedUpdates(() => {\n anim.changed = !reset;\n onRest == null ? void 0 : onRest(result, this);\n\n if (reset) {\n callProp(defaultProps.onRest, result);\n } else {\n anim.onStart == null ? void 0 : anim.onStart(result, this);\n }\n });\n }\n }\n\n if (reset) {\n this._set(value);\n }\n\n if (hasAsyncTo) {\n resolve(runAsync(props.to, props, this._state, this));\n } else if (started) {\n this._start();\n } else if (isAnimating(this) && !hasToChanged) {\n this._pendingCalls.add(resolve);\n } else {\n resolve(getNoopResult(value));\n }\n }\n\n _focus(value) {\n const anim = this.animation;\n\n if (value !== anim.to) {\n if (getFluidObservers(this)) {\n this._detach();\n }\n\n anim.to = value;\n\n if (getFluidObservers(this)) {\n this._attach();\n }\n }\n }\n\n _attach() {\n let priority = 0;\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n addFluidObserver(to, this);\n\n if (isFrameValue(to)) {\n priority = to.priority + 1;\n }\n }\n\n this.priority = priority;\n }\n\n _detach() {\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n removeFluidObserver(to, this);\n }\n }\n\n _set(arg, idle = true) {\n const value = getFluidValue(arg);\n\n if (!is.und(value)) {\n const oldNode = getAnimated(this);\n\n if (!oldNode || !isEqual(value, oldNode.getValue())) {\n const nodeType = getAnimatedType(value);\n\n if (!oldNode || oldNode.constructor != nodeType) {\n setAnimated(this, nodeType.create(value));\n } else {\n oldNode.setValue(value);\n }\n\n if (oldNode) {\n raf.batchedUpdates(() => {\n this._onChange(value, idle);\n });\n }\n }\n }\n\n return getAnimated(this);\n }\n\n _onStart() {\n const anim = this.animation;\n\n if (!anim.changed) {\n anim.changed = true;\n sendEvent(this, 'onStart', getFinishedResult(this, checkFinished(this, anim.to)), this);\n }\n }\n\n _onChange(value, idle) {\n if (!idle) {\n this._onStart();\n\n callProp(this.animation.onChange, value, this);\n }\n\n callProp(this.defaultProps.onChange, value, this);\n\n super._onChange(value, idle);\n }\n\n _start() {\n const anim = this.animation;\n getAnimated(this).reset(getFluidValue(anim.to));\n\n if (!anim.immediate) {\n anim.fromValues = anim.values.map(node => node.lastPosition);\n }\n\n if (!isAnimating(this)) {\n setActiveBit(this, true);\n\n if (!isPaused(this)) {\n this._resume();\n }\n }\n }\n\n _resume() {\n if (Globals.skipAnimation) {\n this.finish();\n } else {\n frameLoop.start(this);\n }\n }\n\n _stop(goal, cancel) {\n if (isAnimating(this)) {\n setActiveBit(this, false);\n const anim = this.animation;\n each(anim.values, node => {\n node.done = true;\n });\n\n if (anim.toValues) {\n anim.onChange = anim.onPause = anim.onResume = undefined;\n }\n\n callFluidObservers(this, {\n type: 'idle',\n parent: this\n });\n const result = cancel ? getCancelledResult(this.get()) : getFinishedResult(this.get(), checkFinished(this, goal != null ? goal : anim.to));\n flushCalls(this._pendingCalls, result);\n\n if (anim.changed) {\n anim.changed = false;\n sendEvent(this, 'onRest', result, this);\n }\n }\n }\n\n}\n\nfunction checkFinished(target, to) {\n const goal = computeGoal(to);\n const value = computeGoal(target.get());\n return isEqual(value, goal);\n}\n\nfunction createLoopUpdate(props, loop = props.loop, to = props.to) {\n let loopRet = callProp(loop);\n\n if (loopRet) {\n const overrides = loopRet !== true && inferTo(loopRet);\n const reverse = (overrides || props).reverse;\n const reset = !overrides || overrides.reset;\n return createUpdate(_extends({}, props, {\n loop,\n default: false,\n pause: undefined,\n to: !reverse || isAsyncTo(to) ? to : undefined,\n from: reset ? props.from : undefined,\n reset\n }, overrides));\n }\n}\nfunction createUpdate(props) {\n const {\n to,\n from\n } = props = inferTo(props);\n const keys = new Set();\n if (is.obj(to)) findDefined(to, keys);\n if (is.obj(from)) findDefined(from, keys);\n props.keys = keys.size ? Array.from(keys) : null;\n return props;\n}\nfunction declareUpdate(props) {\n const update = createUpdate(props);\n\n if (is.und(update.default)) {\n update.default = getDefaultProps(update);\n }\n\n return update;\n}\n\nfunction findDefined(values, keys) {\n eachProp(values, (value, key) => value != null && keys.add(key));\n}\n\nconst ACTIVE_EVENTS = ['onStart', 'onRest', 'onChange', 'onPause', 'onResume'];\n\nfunction mergeActiveFn(target, props, type) {\n target.animation[type] = props[type] !== getDefaultProp(props, type) ? resolveProp(props[type], target.key) : undefined;\n}\n\nfunction sendEvent(target, type, ...args) {\n var _target$animation$typ, _target$animation, _target$defaultProps$, _target$defaultProps;\n\n (_target$animation$typ = (_target$animation = target.animation)[type]) == null ? void 0 : _target$animation$typ.call(_target$animation, ...args);\n (_target$defaultProps$ = (_target$defaultProps = target.defaultProps)[type]) == null ? void 0 : _target$defaultProps$.call(_target$defaultProps, ...args);\n}\n\nconst BATCHED_EVENTS = ['onStart', 'onChange', 'onRest'];\nlet nextId = 1;\nclass Controller {\n constructor(props, flush) {\n this.id = nextId++;\n this.springs = {};\n this.queue = [];\n this.ref = void 0;\n this._flush = void 0;\n this._initialProps = void 0;\n this._lastAsyncId = 0;\n this._active = new Set();\n this._changed = new Set();\n this._started = false;\n this._item = void 0;\n this._state = {\n paused: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._events = {\n onStart: new Map(),\n onChange: new Map(),\n onRest: new Map()\n };\n this._onFrame = this._onFrame.bind(this);\n\n if (flush) {\n this._flush = flush;\n }\n\n if (props) {\n this.start(_extends({\n default: true\n }, props));\n }\n }\n\n get idle() {\n return !this._state.asyncTo && Object.values(this.springs).every(spring => {\n return spring.idle && !spring.isDelayed && !spring.isPaused;\n });\n }\n\n get item() {\n return this._item;\n }\n\n set item(item) {\n this._item = item;\n }\n\n get() {\n const values = {};\n this.each((spring, key) => values[key] = spring.get());\n return values;\n }\n\n set(values) {\n for (const key in values) {\n const value = values[key];\n\n if (!is.und(value)) {\n this.springs[key].set(value);\n }\n }\n }\n\n update(props) {\n if (props) {\n this.queue.push(createUpdate(props));\n }\n\n return this;\n }\n\n start(props) {\n let {\n queue\n } = this;\n\n if (props) {\n queue = toArray(props).map(createUpdate);\n } else {\n this.queue = [];\n }\n\n if (this._flush) {\n return this._flush(this, queue);\n }\n\n prepareKeys(this, queue);\n return flushUpdateQueue(this, queue);\n }\n\n stop(arg, keys) {\n if (arg !== !!arg) {\n keys = arg;\n }\n\n if (keys) {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].stop(!!arg));\n } else {\n stopAsync(this._state, this._lastAsyncId);\n this.each(spring => spring.stop(!!arg));\n }\n\n return this;\n }\n\n pause(keys) {\n if (is.und(keys)) {\n this.start({\n pause: true\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].pause());\n }\n\n return this;\n }\n\n resume(keys) {\n if (is.und(keys)) {\n this.start({\n pause: false\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].resume());\n }\n\n return this;\n }\n\n each(iterator) {\n eachProp(this.springs, iterator);\n }\n\n _onFrame() {\n const {\n onStart,\n onChange,\n onRest\n } = this._events;\n const active = this._active.size > 0;\n const changed = this._changed.size > 0;\n\n if (active && !this._started || changed && !this._started) {\n this._started = true;\n flush(onStart, ([onStart, result]) => {\n result.value = this.get();\n onStart(result, this, this._item);\n });\n }\n\n const idle = !active && this._started;\n const values = changed || idle && onRest.size ? this.get() : null;\n\n if (changed && onChange.size) {\n flush(onChange, ([onChange, result]) => {\n result.value = values;\n onChange(result, this, this._item);\n });\n }\n\n if (idle) {\n this._started = false;\n flush(onRest, ([onRest, result]) => {\n result.value = values;\n onRest(result, this, this._item);\n });\n }\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._changed.add(event.parent);\n\n if (!event.idle) {\n this._active.add(event.parent);\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else return;\n\n raf.onFrame(this._onFrame);\n }\n\n}\nfunction flushUpdateQueue(ctrl, queue) {\n return Promise.all(queue.map(props => flushUpdate(ctrl, props))).then(results => getCombinedResult(ctrl, results));\n}\nasync function flushUpdate(ctrl, props, isLoop) {\n const {\n keys,\n to,\n from,\n loop,\n onRest,\n onResolve\n } = props;\n const defaults = is.obj(props.default) && props.default;\n\n if (loop) {\n props.loop = false;\n }\n\n if (to === false) props.to = null;\n if (from === false) props.from = null;\n const asyncTo = is.arr(to) || is.fun(to) ? to : undefined;\n\n if (asyncTo) {\n props.to = undefined;\n props.onRest = undefined;\n\n if (defaults) {\n defaults.onRest = undefined;\n }\n } else {\n each(BATCHED_EVENTS, key => {\n const handler = props[key];\n\n if (is.fun(handler)) {\n const queue = ctrl['_events'][key];\n\n props[key] = ({\n finished,\n cancelled\n }) => {\n const result = queue.get(handler);\n\n if (result) {\n if (!finished) result.finished = false;\n if (cancelled) result.cancelled = true;\n } else {\n queue.set(handler, {\n value: null,\n finished: finished || false,\n cancelled: cancelled || false\n });\n }\n };\n\n if (defaults) {\n defaults[key] = props[key];\n }\n }\n });\n }\n\n const state = ctrl['_state'];\n\n if (props.pause === !state.paused) {\n state.paused = props.pause;\n flushCalls(props.pause ? state.pauseQueue : state.resumeQueue);\n } else if (state.paused) {\n props.pause = true;\n }\n\n const promises = (keys || Object.keys(ctrl.springs)).map(key => ctrl.springs[key].start(props));\n const cancel = props.cancel === true || getDefaultProp(props, 'cancel') === true;\n\n if (asyncTo || cancel && state.asyncId) {\n promises.push(scheduleProps(++ctrl['_lastAsyncId'], {\n props,\n state,\n actions: {\n pause: noop,\n resume: noop,\n\n start(props, resolve) {\n if (cancel) {\n stopAsync(state, ctrl['_lastAsyncId']);\n resolve(getCancelledResult(ctrl));\n } else {\n props.onRest = onRest;\n resolve(runAsync(asyncTo, props, state, ctrl));\n }\n }\n\n }\n }));\n }\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n const result = getCombinedResult(ctrl, await Promise.all(promises));\n\n if (loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props, loop, to);\n\n if (nextProps) {\n prepareKeys(ctrl, [nextProps]);\n return flushUpdate(ctrl, nextProps, true);\n }\n }\n\n if (onResolve) {\n raf.batchedUpdates(() => onResolve(result, ctrl, ctrl.item));\n }\n\n return result;\n}\nfunction getSprings(ctrl, props) {\n const springs = _extends({}, ctrl.springs);\n\n if (props) {\n each(toArray(props), props => {\n if (is.und(props.keys)) {\n props = createUpdate(props);\n }\n\n if (!is.obj(props.to)) {\n props = _extends({}, props, {\n to: undefined\n });\n }\n\n prepareSprings(springs, props, key => {\n return createSpring(key);\n });\n });\n }\n\n setSprings(ctrl, springs);\n return springs;\n}\nfunction setSprings(ctrl, springs) {\n eachProp(springs, (spring, key) => {\n if (!ctrl.springs[key]) {\n ctrl.springs[key] = spring;\n addFluidObserver(spring, ctrl);\n }\n });\n}\n\nfunction createSpring(key, observer) {\n const spring = new SpringValue();\n spring.key = key;\n\n if (observer) {\n addFluidObserver(spring, observer);\n }\n\n return spring;\n}\n\nfunction prepareSprings(springs, props, create) {\n if (props.keys) {\n each(props.keys, key => {\n const spring = springs[key] || (springs[key] = create(key));\n spring['_prepareNode'](props);\n });\n }\n}\n\nfunction prepareKeys(ctrl, queue) {\n each(queue, props => {\n prepareSprings(ctrl.springs, props, key => {\n return createSpring(key, ctrl);\n });\n });\n}\n\nfunction _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\nconst _excluded$3 = [\"children\"];\nconst SpringContext = _ref => {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$3);\n\n const inherited = useContext(ctx);\n const pause = props.pause || !!inherited.pause,\n immediate = props.immediate || !!inherited.immediate;\n props = useMemoOne(() => ({\n pause,\n immediate\n }), [pause, immediate]);\n const {\n Provider\n } = ctx;\n return React.createElement(Provider, {\n value: props\n }, children);\n};\nconst ctx = makeContext(SpringContext, {});\nSpringContext.Provider = ctx.Provider;\nSpringContext.Consumer = ctx.Consumer;\n\nfunction makeContext(target, init) {\n Object.assign(target, React.createContext(init));\n target.Provider._context = target;\n target.Consumer._context = target;\n return target;\n}\n\nconst SpringRef = () => {\n const current = [];\n\n const SpringRef = function SpringRef(props) {\n deprecateDirectCall();\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = _getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.current = current;\n\n SpringRef.add = function (ctrl) {\n if (!current.includes(ctrl)) {\n current.push(ctrl);\n }\n };\n\n SpringRef.delete = function (ctrl) {\n const i = current.indexOf(ctrl);\n if (~i) current.splice(i, 1);\n };\n\n SpringRef.pause = function () {\n each(current, ctrl => ctrl.pause(...arguments));\n return this;\n };\n\n SpringRef.resume = function () {\n each(current, ctrl => ctrl.resume(...arguments));\n return this;\n };\n\n SpringRef.set = function (values) {\n each(current, ctrl => ctrl.set(values));\n };\n\n SpringRef.start = function (props) {\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = this._getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.stop = function () {\n each(current, ctrl => ctrl.stop(...arguments));\n return this;\n };\n\n SpringRef.update = function (props) {\n each(current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i)));\n return this;\n };\n\n const _getProps = function _getProps(arg, ctrl, index) {\n return is.fun(arg) ? arg(index, ctrl) : arg;\n };\n\n SpringRef._getProps = _getProps;\n return SpringRef;\n};\n\nfunction useSprings(length, props, deps) {\n const propsFn = is.fun(props) && props;\n if (propsFn && !deps) deps = [];\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const layoutId = useRef(0);\n const forceUpdate = useForceUpdate();\n const state = useMemo(() => ({\n ctrls: [],\n queue: [],\n\n flush(ctrl, updates) {\n const springs = getSprings(ctrl, updates);\n const canFlushSync = layoutId.current > 0 && !state.queue.length && !Object.keys(springs).some(key => !ctrl.springs[key]);\n return canFlushSync ? flushUpdateQueue(ctrl, updates) : new Promise(resolve => {\n setSprings(ctrl, springs);\n state.queue.push(() => {\n resolve(flushUpdateQueue(ctrl, updates));\n });\n forceUpdate();\n });\n }\n\n }), []);\n const ctrls = useRef([...state.ctrls]);\n const updates = [];\n const prevLength = usePrev(length) || 0;\n useMemo(() => {\n each(ctrls.current.slice(length, prevLength), ctrl => {\n detachRefs(ctrl, ref);\n ctrl.stop(true);\n });\n ctrls.current.length = length;\n declareUpdates(prevLength, length);\n }, [length]);\n useMemo(() => {\n declareUpdates(0, Math.min(prevLength, length));\n }, deps);\n\n function declareUpdates(startIndex, endIndex) {\n for (let i = startIndex; i < endIndex; i++) {\n const ctrl = ctrls.current[i] || (ctrls.current[i] = new Controller(null, state.flush));\n const update = propsFn ? propsFn(i, ctrl) : props[i];\n\n if (update) {\n updates[i] = declareUpdate(update);\n }\n }\n }\n\n const springs = ctrls.current.map((ctrl, i) => getSprings(ctrl, updates[i]));\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useLayoutEffect(() => {\n layoutId.current++;\n state.ctrls = ctrls.current;\n const {\n queue\n } = state;\n\n if (queue.length) {\n state.queue = [];\n each(queue, cb => cb());\n }\n\n each(ctrls.current, (ctrl, i) => {\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext) {\n ctrl.start({\n default: context\n });\n }\n\n const update = updates[i];\n\n if (update) {\n replaceRef(ctrl, update.ref);\n\n if (ctrl.ref) {\n ctrl.queue.push(update);\n } else {\n ctrl.start(update);\n }\n }\n });\n });\n useOnce(() => () => {\n each(state.ctrls, ctrl => ctrl.stop(true));\n });\n const values = springs.map(x => _extends({}, x));\n return ref ? [values, ref] : values;\n}\n\nfunction useSpring(props, deps) {\n const isFn = is.fun(props);\n const [[values], ref] = useSprings(1, isFn ? props : [props], isFn ? deps || [] : deps);\n return isFn || arguments.length == 2 ? [values, ref] : values;\n}\n\nconst initSpringRef = () => SpringRef();\n\nconst useSpringRef = () => useState(initSpringRef)[0];\n\nfunction useTrail(length, propsArg, deps) {\n var _passedRef;\n\n const propsFn = is.fun(propsArg) && propsArg;\n if (propsFn && !deps) deps = [];\n let reverse = true;\n let passedRef = undefined;\n const result = useSprings(length, (i, ctrl) => {\n const props = propsFn ? propsFn(i, ctrl) : propsArg;\n passedRef = props.ref;\n reverse = reverse && props.reverse;\n return props;\n }, deps || [{}]);\n const ref = (_passedRef = passedRef) != null ? _passedRef : result[1];\n useLayoutEffect(() => {\n each(ref.current, (ctrl, i) => {\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n ctrl.start({\n to: parent.springs\n });\n } else {\n ctrl.start();\n }\n });\n }, deps);\n\n if (propsFn || arguments.length == 3) {\n ref['_getProps'] = (propsArg, ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n\n if (props) {\n const parent = ref.current[i + (props.reverse ? 1 : -1)];\n if (parent) props.to = parent.springs;\n return props;\n }\n };\n\n return result;\n }\n\n ref['start'] = propsArg => {\n const results = [];\n each(ref.current, (ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n results.push(ctrl.start(_extends({}, props, {\n to: parent.springs\n })));\n } else {\n results.push(ctrl.start(_extends({}, props)));\n }\n });\n return results;\n };\n\n return result[0];\n}\n\nlet TransitionPhase;\n\n(function (TransitionPhase) {\n TransitionPhase[\"MOUNT\"] = \"mount\";\n TransitionPhase[\"ENTER\"] = \"enter\";\n TransitionPhase[\"UPDATE\"] = \"update\";\n TransitionPhase[\"LEAVE\"] = \"leave\";\n})(TransitionPhase || (TransitionPhase = {}));\n\nfunction useTransition(data, props, deps) {\n const propsFn = is.fun(props) && props;\n const {\n reset,\n sort,\n trail = 0,\n expires = true,\n exitBeforeEnter = false,\n onDestroyed,\n ref: propsRef,\n config: propsConfig\n } = propsFn ? propsFn() : props;\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const items = toArray(data);\n const transitions = [];\n const usedTransitions = useRef(null);\n const prevTransitions = reset ? null : usedTransitions.current;\n useLayoutEffect(() => {\n usedTransitions.current = transitions;\n });\n useOnce(() => {\n each(usedTransitions.current, t => {\n var _t$ctrl$ref;\n\n (_t$ctrl$ref = t.ctrl.ref) == null ? void 0 : _t$ctrl$ref.add(t.ctrl);\n const change = changes.get(t);\n\n if (change) {\n t.ctrl.start(change.payload);\n }\n });\n return () => {\n each(usedTransitions.current, t => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n }\n\n detachRefs(t.ctrl, ref);\n t.ctrl.stop(true);\n });\n };\n });\n const keys = getKeys(items, propsFn ? propsFn() : props, prevTransitions);\n const expired = reset && usedTransitions.current || [];\n useLayoutEffect(() => each(expired, ({\n ctrl,\n item,\n key\n }) => {\n detachRefs(ctrl, ref);\n callProp(onDestroyed, item, key);\n }));\n const reused = [];\n if (prevTransitions) each(prevTransitions, (t, i) => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n expired.push(t);\n } else {\n i = reused[i] = keys.indexOf(t.key);\n if (~i) transitions[i] = t;\n }\n });\n each(items, (item, i) => {\n if (!transitions[i]) {\n transitions[i] = {\n key: keys[i],\n item,\n phase: TransitionPhase.MOUNT,\n ctrl: new Controller()\n };\n transitions[i].ctrl.item = item;\n }\n });\n\n if (reused.length) {\n let i = -1;\n const {\n leave\n } = propsFn ? propsFn() : props;\n each(reused, (keyIndex, prevIndex) => {\n const t = prevTransitions[prevIndex];\n\n if (~keyIndex) {\n i = transitions.indexOf(t);\n transitions[i] = _extends({}, t, {\n item: items[keyIndex]\n });\n } else if (leave) {\n transitions.splice(++i, 0, t);\n }\n });\n }\n\n if (is.fun(sort)) {\n transitions.sort((a, b) => sort(a.item, b.item));\n }\n\n let delay = -trail;\n const forceUpdate = useForceUpdate();\n const defaultProps = getDefaultProps(props);\n const changes = new Map();\n const exitingTransitions = useRef(new Map());\n const forceChange = useRef(false);\n each(transitions, (t, i) => {\n const key = t.key;\n const prevPhase = t.phase;\n const p = propsFn ? propsFn() : props;\n let to;\n let phase;\n let propsDelay = callProp(p.delay || 0, key);\n\n if (prevPhase == TransitionPhase.MOUNT) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else {\n const isLeave = keys.indexOf(key) < 0;\n\n if (prevPhase != TransitionPhase.LEAVE) {\n if (isLeave) {\n to = p.leave;\n phase = TransitionPhase.LEAVE;\n } else if (to = p.update) {\n phase = TransitionPhase.UPDATE;\n } else return;\n } else if (!isLeave) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else return;\n }\n\n to = callProp(to, t.item, i);\n to = is.obj(to) ? inferTo(to) : {\n to\n };\n\n if (!to.config) {\n const config = propsConfig || defaultProps.config;\n to.config = callProp(config, t.item, i, phase);\n }\n\n delay += trail;\n\n const payload = _extends({}, defaultProps, {\n delay: propsDelay + delay,\n ref: propsRef,\n immediate: p.immediate,\n reset: false\n }, to);\n\n if (phase == TransitionPhase.ENTER && is.und(payload.from)) {\n const _p = propsFn ? propsFn() : props;\n\n const from = is.und(_p.initial) || prevTransitions ? _p.from : _p.initial;\n payload.from = callProp(from, t.item, i);\n }\n\n const {\n onResolve\n } = payload;\n\n payload.onResolve = result => {\n callProp(onResolve, result);\n const transitions = usedTransitions.current;\n const t = transitions.find(t => t.key === key);\n if (!t) return;\n\n if (result.cancelled && t.phase != TransitionPhase.UPDATE) {\n return;\n }\n\n if (t.ctrl.idle) {\n const idle = transitions.every(t => t.ctrl.idle);\n\n if (t.phase == TransitionPhase.LEAVE) {\n const expiry = callProp(expires, t.item);\n\n if (expiry !== false) {\n const expiryMs = expiry === true ? 0 : expiry;\n t.expired = true;\n\n if (!idle && expiryMs > 0) {\n if (expiryMs <= 0x7fffffff) t.expirationId = setTimeout(forceUpdate, expiryMs);\n return;\n }\n }\n }\n\n if (idle && transitions.some(t => t.expired)) {\n exitingTransitions.current.delete(t);\n\n if (exitBeforeEnter) {\n forceChange.current = true;\n }\n\n forceUpdate();\n }\n }\n };\n\n const springs = getSprings(t.ctrl, payload);\n\n if (phase === TransitionPhase.LEAVE && exitBeforeEnter) {\n exitingTransitions.current.set(t, {\n phase,\n springs,\n payload\n });\n } else {\n changes.set(t, {\n phase,\n springs,\n payload\n });\n }\n });\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useLayoutEffect(() => {\n if (hasContext) {\n each(transitions, t => {\n t.ctrl.start({\n default: context\n });\n });\n }\n }, [context]);\n each(changes, (_, t) => {\n if (exitingTransitions.current.size) {\n const ind = transitions.findIndex(state => state.key === t.key);\n transitions.splice(ind, 1);\n }\n });\n useLayoutEffect(() => {\n each(exitingTransitions.current.size ? exitingTransitions.current : changes, ({\n phase,\n payload\n }, t) => {\n const {\n ctrl\n } = t;\n t.phase = phase;\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext && phase == TransitionPhase.ENTER) {\n ctrl.start({\n default: context\n });\n }\n\n if (payload) {\n replaceRef(ctrl, payload.ref);\n\n if (ctrl.ref && !forceChange.current) {\n ctrl.update(payload);\n } else {\n ctrl.start(payload);\n\n if (forceChange.current) {\n forceChange.current = false;\n }\n }\n }\n });\n }, reset ? void 0 : deps);\n\n const renderTransitions = render => React.createElement(React.Fragment, null, transitions.map((t, i) => {\n const {\n springs\n } = changes.get(t) || t.ctrl;\n const elem = render(_extends({}, springs), t.item, t, i);\n return elem && elem.type ? React.createElement(elem.type, _extends({}, elem.props, {\n key: is.str(t.key) || is.num(t.key) ? t.key : t.ctrl.id,\n ref: elem.ref\n })) : elem;\n }));\n\n return ref ? [renderTransitions, ref] : renderTransitions;\n}\nlet nextKey = 1;\n\nfunction getKeys(items, {\n key,\n keys = key\n}, prevTransitions) {\n if (keys === null) {\n const reused = new Set();\n return items.map(item => {\n const t = prevTransitions && prevTransitions.find(t => t.item === item && t.phase !== TransitionPhase.LEAVE && !reused.has(t));\n\n if (t) {\n reused.add(t);\n return t.key;\n }\n\n return nextKey++;\n });\n }\n\n return is.und(keys) ? items : is.fun(keys) ? items.map(keys) : toArray(keys);\n}\n\nconst _excluded$2 = [\"children\"];\nfunction Spring(_ref) {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n return children(useSpring(props));\n}\n\nconst _excluded$1 = [\"items\", \"children\"];\nfunction Trail(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const trails = useTrail(items.length, props);\n return items.map((item, index) => {\n const result = children(item, index);\n return is.fun(result) ? result(trails[index]) : result;\n });\n}\n\nconst _excluded = [\"items\", \"children\"];\nfunction Transition(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return useTransition(items, props)(children);\n}\n\nclass Interpolation extends FrameValue {\n constructor(source, args) {\n super();\n this.key = void 0;\n this.idle = true;\n this.calc = void 0;\n this._active = new Set();\n this.source = source;\n this.calc = createInterpolator(...args);\n\n const value = this._get();\n\n const nodeType = getAnimatedType(value);\n setAnimated(this, nodeType.create(value));\n }\n\n advance(_dt) {\n const value = this._get();\n\n const oldValue = this.get();\n\n if (!isEqual(value, oldValue)) {\n getAnimated(this).setValue(value);\n\n this._onChange(value, this.idle);\n }\n\n if (!this.idle && checkIdle(this._active)) {\n becomeIdle(this);\n }\n }\n\n _get() {\n const inputs = is.arr(this.source) ? this.source.map(getFluidValue) : toArray(getFluidValue(this.source));\n return this.calc(...inputs);\n }\n\n _start() {\n if (this.idle && !checkIdle(this._active)) {\n this.idle = false;\n each(getPayload(this), node => {\n node.done = false;\n });\n\n if (Globals.skipAnimation) {\n raf.batchedUpdates(() => this.advance());\n becomeIdle(this);\n } else {\n frameLoop.start(this);\n }\n }\n }\n\n _attach() {\n let priority = 1;\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n addFluidObserver(source, this);\n }\n\n if (isFrameValue(source)) {\n if (!source.idle) {\n this._active.add(source);\n }\n\n priority = Math.max(priority, source.priority + 1);\n }\n });\n this.priority = priority;\n\n this._start();\n }\n\n _detach() {\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n removeFluidObserver(source, this);\n }\n });\n\n this._active.clear();\n\n becomeIdle(this);\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n if (event.idle) {\n this.advance();\n } else {\n this._active.add(event.parent);\n\n this._start();\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else if (event.type == 'priority') {\n this.priority = toArray(this.source).reduce((highest, parent) => Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1), 0);\n }\n }\n\n}\n\nfunction isIdle(source) {\n return source.idle !== false;\n}\n\nfunction checkIdle(active) {\n return !active.size || Array.from(active).every(isIdle);\n}\n\nfunction becomeIdle(self) {\n if (!self.idle) {\n self.idle = true;\n each(getPayload(self), node => {\n node.done = true;\n });\n callFluidObservers(self, {\n type: 'idle',\n parent: self\n });\n }\n}\n\nconst to = (source, ...args) => new Interpolation(source, args);\nconst interpolate = (source, ...args) => (deprecateInterpolate(), new Interpolation(source, args));\n\nGlobals.assign({\n createStringInterpolator,\n to: (source, args) => new Interpolation(source, args)\n});\nconst update = frameLoop.advance;\n\nexport { BailSignal, Controller, FrameValue, Interpolation, Spring, SpringContext, SpringRef, SpringValue, Trail, Transition, config, easings, inferTo, interpolate, to, update, useChain, useSpring, useSpringRef, useSprings, useTrail, useTransition };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || unsafeStringify(b);\n}\n\nexport default v1;","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\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 */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\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 */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import * as tslib_1 from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = tslib_1.__assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { PureComponent } from 'react';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n handleStateChangeOnClient(state);\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n SideEffect.peek = function peek() {\n return state;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n return SideEffect;\n };\n}\n\nexport default withSideEffect;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\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 */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","/*!\n * @license\n * TradingView Lightweight Charts™ v4.0.1\n * Copyright (c) 2023 TradingView, Inc.\n * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0\n */\nimport{size as t,bindCanvasElementBitmapSizeTo as i,equalSizes as n,tryCreateCanvasRenderingTarget2D as s}from\"fancy-canvas\";var e,r;function h(t,i){const n={0:[],1:[t.lineWidth,t.lineWidth],2:[2*t.lineWidth,2*t.lineWidth],3:[6*t.lineWidth,6*t.lineWidth],4:[t.lineWidth,4*t.lineWidth]}[i];t.setLineDash(n)}function l(t,i,n,s){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(n,i+e),t.lineTo(s,i+e),t.stroke()}function a(t,i){if(!t)throw new Error(\"Assertion failed\"+(i?\": \"+i:\"\"))}function o(t){if(void 0===t)throw new Error(\"Value is undefined\");return t}function _(t){if(null===t)throw new Error(\"Value is null\");return t}function u(t){return _(o(t))}!function(t){t[t.Simple=0]=\"Simple\",t[t.WithSteps=1]=\"WithSteps\",t[t.Curved=2]=\"Curved\"}(e||(e={})),function(t){t[t.Solid=0]=\"Solid\",t[t.Dotted=1]=\"Dotted\",t[t.Dashed=2]=\"Dashed\",t[t.LargeDashed=3]=\"LargeDashed\",t[t.SparseDotted=4]=\"SparseDotted\"}(r||(r={}));const c={khaki:\"#f0e68c\",azure:\"#f0ffff\",aliceblue:\"#f0f8ff\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",gray:\"#808080\",green:\"#008000\",honeydew:\"#f0fff0\",floralwhite:\"#fffaf0\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lemonchiffon:\"#fffacd\",hotpink:\"#ff69b4\",lightyellow:\"#ffffe0\",greenyellow:\"#adff2f\",lightgoldenrodyellow:\"#fafad2\",limegreen:\"#32cd32\",linen:\"#faf0e6\",lightcyan:\"#e0ffff\",magenta:\"#f0f\",maroon:\"#800000\",olive:\"#808000\",orange:\"#ffa500\",oldlace:\"#fdf5e6\",mediumblue:\"#0000cd\",transparent:\"#0000\",lime:\"#0f0\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",midnightblue:\"#191970\",orchid:\"#da70d6\",mediumorchid:\"#ba55d3\",mediumturquoise:\"#48d1cc\",orangered:\"#ff4500\",royalblue:\"#4169e1\",powderblue:\"#b0e0e6\",red:\"#f00\",coral:\"#ff7f50\",turquoise:\"#40e0d0\",white:\"#fff\",whitesmoke:\"#f5f5f5\",wheat:\"#f5deb3\",teal:\"#008080\",steelblue:\"#4682b4\",bisque:\"#ffe4c4\",aquamarine:\"#7fffd4\",aqua:\"#0ff\",sienna:\"#a0522d\",silver:\"#c0c0c0\",springgreen:\"#00ff7f\",antiquewhite:\"#faebd7\",burlywood:\"#deb887\",brown:\"#a52a2a\",beige:\"#f5f5dc\",chocolate:\"#d2691e\",chartreuse:\"#7fff00\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cadetblue:\"#5f9ea0\",tomato:\"#ff6347\",fuchsia:\"#f0f\",blue:\"#00f\",salmon:\"#fa8072\",blanchedalmond:\"#ffebcd\",slateblue:\"#6a5acd\",slategray:\"#708090\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",cyan:\"#0ff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",blueviolet:\"#8a2be2\",black:\"#000\",darkmagenta:\"#8b008b\",darkslateblue:\"#483d8b\",darkkhaki:\"#bdb76b\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkgreen:\"#006400\",darkred:\"#8b0000\",dodgerblue:\"#1e90ff\",darkslategray:\"#2f4f4f\",dimgray:\"#696969\",deepskyblue:\"#00bfff\",firebrick:\"#b22222\",forestgreen:\"#228b22\",indigo:\"#4b0082\",ivory:\"#fffff0\",lavenderblush:\"#fff0f5\",feldspar:\"#d19275\",indianred:\"#cd5c5c\",lightgreen:\"#90ee90\",lightgrey:\"#d3d3d3\",lightskyblue:\"#87cefa\",lightslategray:\"#789\",lightslateblue:\"#8470ff\",snow:\"#fffafa\",lightseagreen:\"#20b2aa\",lightsalmon:\"#ffa07a\",darksalmon:\"#e9967a\",darkviolet:\"#9400d3\",mediumpurple:\"#9370d8\",mediumaquamarine:\"#66cdaa\",skyblue:\"#87ceeb\",lavender:\"#e6e6fa\",lightsteelblue:\"#b0c4de\",mediumvioletred:\"#c71585\",mintcream:\"#f5fffa\",navajowhite:\"#ffdead\",navy:\"#000080\",olivedrab:\"#6b8e23\",palevioletred:\"#d87093\",violetred:\"#d02090\",yellow:\"#ff0\",yellowgreen:\"#9acd32\",lawngreen:\"#7cfc00\",pink:\"#ffc0cb\",paleturquoise:\"#afeeee\",palegoldenrod:\"#eee8aa\",darkolivegreen:\"#556b2f\",darkseagreen:\"#8fbc8f\",darkturquoise:\"#00ced1\",peachpuff:\"#ffdab9\",deeppink:\"#ff1493\",violet:\"#ee82ee\",palegreen:\"#98fb98\",mediumseagreen:\"#3cb371\",peru:\"#cd853f\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",purple:\"#800080\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",papayawhip:\"#ffefd5\",mediumslateblue:\"#7b68ee\",plum:\"#dda0dd\",mediumspringgreen:\"#00fa9a\"};function d(t){return t<0?0:t>255?255:Math.round(t)||0}function f(t){return t<=0||t>0?t<0?0:t>1?1:Math.round(1e4*t)/1e4:0}const p=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,v=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,m=/^rgb\\(\\s*(-?\\d{1,10})\\s*,\\s*(-?\\d{1,10})\\s*,\\s*(-?\\d{1,10})\\s*\\)$/,b=/^rgba\\(\\s*(-?\\d{1,10})\\s*,\\s*(-?\\d{1,10})\\s*,\\s*(-?\\d{1,10})\\s*,\\s*(-?[\\d]{0,10}(?:\\.\\d+)?)\\s*\\)$/;function g(t){(t=t.toLowerCase())in c&&(t=c[t]);{const i=b.exec(t)||m.exec(t);if(i)return[d(parseInt(i[1],10)),d(parseInt(i[2],10)),d(parseInt(i[3],10)),f(i.length<5?1:parseFloat(i[4]))]}{const i=v.exec(t);if(i)return[d(parseInt(i[1],16)),d(parseInt(i[2],16)),d(parseInt(i[3],16)),1]}{const i=p.exec(t);if(i)return[d(17*parseInt(i[1],16)),d(17*parseInt(i[2],16)),d(17*parseInt(i[3],16)),1]}throw new Error(`Cannot parse color: ${t}`)}function w(t){const i=g(t);return{t:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,i:(n=i,.199*n[0]+.687*n[1]+.114*n[2]>160?\"black\":\"white\")};var n}class M{constructor(){this.h=[]}l(t,i,n){const s={o:t,_:i,u:!0===n};this.h.push(s)}p(t){const i=this.h.findIndex((i=>t===i.o));i>-1&&this.h.splice(i,1)}v(t){this.h=this.h.filter((i=>i._!==t))}m(t,i,n){const s=[...this.h];this.h=this.h.filter((t=>!t.u)),s.forEach((s=>s.o(t,i,n)))}g(){return this.h.length>0}M(){this.h=[]}}function S(t,...i){for(const n of i)for(const i in n)void 0!==n[i]&&(\"object\"!=typeof n[i]||void 0===t[i]?t[i]=n[i]:S(t[i],n[i]));return t}function x(t){return\"number\"==typeof t&&isFinite(t)}function y(t){return\"number\"==typeof t&&t%1==0}function k(t){return\"string\"==typeof t}function C(t){return\"boolean\"==typeof t}function T(t){const i=t;if(!i||\"object\"!=typeof i)return i;let n,s,e;for(s in n=Array.isArray(i)?[]:{},i)i.hasOwnProperty(s)&&(e=i[s],n[s]=e&&\"object\"==typeof e?T(e):e);return n}function P(t){return null!==t}function R(t){return null===t?void 0:t}const D=\"-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif\";function B(t,i,n){return void 0===i&&(i=D),`${n=void 0!==n?`${n} `:\"\"}${t}px ${i}`}class A{constructor(t){this.S={k:1,C:5,T:NaN,P:\"\",R:\"\",D:\"\",B:\"\",A:0,O:0,L:0,I:0,V:0},this.N=t}F(){const t=this.S,i=this.W(),n=this.j();return t.T===i&&t.R===n||(t.T=i,t.R=n,t.P=B(i,n),t.I=2.5/12*i,t.A=t.I,t.O=i/12*t.C,t.L=i/12*t.C,t.V=0),t.D=this.$(),t.B=this.H(),this.S}$(){return this.N.F().layout.textColor}H(){return this.N.U()}W(){return this.N.F().layout.fontSize}j(){return this.N.F().layout.fontFamily}}class O{constructor(){this.q=[]}Y(t){this.q=t}X(t,i,n){this.q.forEach((s=>{s.X(t,i,n)}))}}class L{X(t,i,n){t.useMediaCoordinateSpace((t=>this.Z(t,i,n)))}K(t,i,n){t.useMediaCoordinateSpace((t=>this.G(t,i,n)))}G(t,i,n){}}class I extends L{constructor(){super(...arguments),this.J=null}tt(t){this.J=t}Z({context:t}){if(null===this.J||null===this.J.it)return;const i=this.J.it,n=this.J,s=s=>{t.beginPath();for(let e=i.to-1;e>=i.from;--e){const i=n.nt[e];t.moveTo(i.st,i.et),t.arc(i.st,i.et,s,0,2*Math.PI)}t.fill()};n.rt>0&&(t.fillStyle=n.ht,s(n.lt+n.rt)),t.fillStyle=n.ot,s(n.lt)}}function E(){return{nt:[{st:0,et:0,_t:0,ut:0}],ot:\"\",ht:\"\",lt:0,rt:0,it:null}}const z={from:0,to:1};class V{constructor(t,i){this.ct=new O,this.dt=[],this.ft=[],this.vt=!0,this.N=t,this.bt=i,this.ct.Y(this.dt)}gt(t){const i=this.N.wt();i.length!==this.dt.length&&(this.ft=i.map(E),this.dt=this.ft.map((t=>{const i=new I;return i.tt(t),i})),this.ct.Y(this.dt)),this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.ct}St(){const t=this.N.wt(),i=this.bt.xt(),n=this.N.yt();t.forEach(((t,s)=>{var e;const r=this.ft[s],h=t.kt(i);if(null===h||!t.Ct())return void(r.it=null);const l=_(t.Tt());r.ot=h.Pt,r.lt=h.lt,r.rt=h.Rt,r.nt[0].ut=h.ut,r.nt[0].et=t.Bt().Dt(h.ut,l.At),r.ht=null!==(e=h.Ot)&&void 0!==e?e:this.N.Lt(r.nt[0].et/t.Bt().It()),r.nt[0]._t=i,r.nt[0].st=n.Et(i),r.it=z}))}}class N{X(t,i,n){t.useBitmapCoordinateSpace((t=>this.Z(t,i,n)))}}class F extends N{constructor(t){super(),this.zt=t}Z({context:t,bitmapSize:i,horizontalPixelRatio:n,verticalPixelRatio:s}){if(null===this.zt)return;const e=this.zt.Vt.Ct,r=this.zt.Nt.Ct;if(!e&&!r)return;const a=Math.round(this.zt.st*n),o=Math.round(this.zt.et*s);t.lineCap=\"butt\",e&&a>=0&&(t.lineWidth=Math.floor(this.zt.Vt.rt*n),t.strokeStyle=this.zt.Vt.D,t.fillStyle=this.zt.Vt.D,h(t,this.zt.Vt.Ft),function(t,i,n,s){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(i+e,n),t.lineTo(i+e,s),t.stroke()}(t,a,0,i.height)),r&&o>=0&&(t.lineWidth=Math.floor(this.zt.Nt.rt*s),t.strokeStyle=this.zt.Nt.D,t.fillStyle=this.zt.Nt.D,h(t,this.zt.Nt.Ft),l(t,o,0,i.width))}}class W{constructor(t){this.vt=!0,this.Wt={Vt:{rt:1,Ft:0,D:\"\",Ct:!1},Nt:{rt:1,Ft:0,D:\"\",Ct:!1},st:0,et:0},this.jt=new F(this.Wt),this.$t=t}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt}St(){const t=this.$t.Ct(),i=_(this.$t.Ht()),n=i.Ut().F().crosshair,s=this.Wt;s.Nt.Ct=t&&this.$t.qt(i),s.Vt.Ct=t&&this.$t.Yt(),s.Nt.rt=n.horzLine.width,s.Nt.Ft=n.horzLine.style,s.Nt.D=n.horzLine.color,s.Vt.rt=n.vertLine.width,s.Vt.Ft=n.vertLine.style,s.Vt.D=n.vertLine.color,s.st=this.$t.Xt(),s.et=this.$t.Zt()}}function j(t,i,n,s,e,r){t.fillRect(i+r,n,s-2*r,r),t.fillRect(i+r,n+e-r,s-2*r,r),t.fillRect(i,n,r,e),t.fillRect(i+s-r,n,r,e)}function $(t,i,n,s,e,r){t.save(),t.globalCompositeOperation=\"copy\",t.fillStyle=r,t.fillRect(i,n,s,e),t.restore()}function H(t,i){return Array.isArray(t)?t.map((t=>0===t?t:t+i)):t+i}function U(t,i,n,s,e,r){let h,l,a,o;if(Array.isArray(r))if(2===r.length){const t=Math.max(0,r[0]),i=Math.max(0,r[1]);h=t,l=t,a=i,o=i}else{if(4!==r.length)throw new Error(\"Wrong border radius - it should be like css border radius\");h=Math.max(0,r[0]),l=Math.max(0,r[1]),a=Math.max(0,r[2]),o=Math.max(0,r[3])}else{const t=Math.max(0,r);h=t,l=t,a=t,o=t}t.beginPath(),t.moveTo(i+h,n),t.lineTo(i+s-l,n),0!==l&&t.arcTo(i+s,n,i+s,n+l,l),t.lineTo(i+s,n+e-a),0!==a&&t.arcTo(i+s,n+e,i+s-a,n+e,a),t.lineTo(i+o,n+e),0!==o&&t.arcTo(i,n+e,i,n+e-o,o),t.lineTo(i,n+h),0!==h&&t.arcTo(i,n,i+h,n,h)}function q(t,i,n,s,e,r,h=0,l=0,a=\"\"){if(t.save(),!h||!a||a===r)return U(t,i,n,s,e,l),t.fillStyle=r,t.fill(),void t.restore();const o=h/2;if(\"transparent\"!==r){U(t,i+h,n+h,s-2*h,e-2*h,H(l,-h)),t.fillStyle=r,t.fill()}if(\"transparent\"!==a){U(t,i+o,n+o,s-h,e-h,H(l,-o)),t.lineWidth=h,t.strokeStyle=a,t.closePath(),t.stroke()}t.restore()}function Y(t,i,n,s,e,r,h){t.save(),t.globalCompositeOperation=\"copy\";const l=t.createLinearGradient(0,0,0,e);l.addColorStop(0,r),l.addColorStop(1,h),t.fillStyle=l,t.fillRect(i,n,s,e),t.restore()}class X{constructor(t,i){this.tt(t,i)}tt(t,i){this.zt=t,this.Kt=i}It(t,i){return this.zt.Ct?t.T+t.I+t.A:0}X(t,i,n,s){if(!this.zt.Ct||0===this.zt.Gt.length)return;const e=this.zt.D,r=this.Kt.t,h=t.useBitmapCoordinateSpace((t=>{const h=t.context;h.font=i.P;const l=this.Jt(t,i,n,s),a=l.Qt,o=(t,i)=>{l.ti?q(h,a.ii,a.ni,a.si,a.ei,t,a.ri,[a.lt,0,0,a.lt],i):q(h,a.hi,a.ni,a.si,a.ei,t,a.ri,[0,a.lt,a.lt,0],i)};return o(r,\"transparent\"),this.zt.li&&(h.fillStyle=e,h.fillRect(a.hi,a.ai,a.oi-a.hi,a._i)),o(\"transparent\",r),this.zt.ui&&(h.fillStyle=i.B,h.fillRect(l.ti?a.ci-a.ri:0,a.ni,a.ri,a.di-a.ni)),l}));t.useMediaCoordinateSpace((({context:t})=>{const n=h.fi;t.font=i.P,t.textAlign=h.ti?\"right\":\"left\",t.textBaseline=\"middle\",t.fillStyle=e,t.fillText(this.zt.Gt,n.pi,(n.ni+n.di)/2+n.vi)}))}Jt(t,i,n,s){var e;const{context:r,bitmapSize:h,mediaSize:l,horizontalPixelRatio:a,verticalPixelRatio:o}=t,_=this.zt.li||!this.zt.mi?i.C:0,u=this.zt.bi?i.k:0,c=i.I+this.Kt.gi,d=i.A+this.Kt.wi,f=i.O,p=i.L,v=this.zt.Gt,m=i.T,b=n.Mi(r,v),g=Math.ceil(n.Si(r,v)),w=m+c+d,M=i.k+f+p+g+_,S=Math.max(1,Math.floor(o));let x=Math.round(w*o);x%2!=S%2&&(x+=1);const y=u>0?Math.max(1,Math.floor(u*a)):0,k=Math.round(M*a),C=Math.round(_*a),T=null!==(e=this.Kt.xi)&&void 0!==e?e:this.Kt.yi,P=Math.round(T*o)-Math.floor(.5*o),R=Math.floor(P+S/2-x/2),D=R+x,B=\"right\"===s,A=B?l.width-u:u,O=B?h.width-y:y;let L,I,E;return B?(L=O-k,I=O-C,E=A-_-f-u):(L=O+k,I=O+C,E=A+_+f),{ti:B,Qt:{ni:R,ai:P,di:D,si:k,ei:x,lt:2*a,ri:y,ii:L,hi:O,oi:I,_i:S,ci:h.width},fi:{ni:R/o,di:D/o,pi:E,vi:b}}}}class Z{constructor(t){this.ki={yi:0,t:\"#000\",wi:0,gi:0},this.Ci={Gt:\"\",Ct:!1,li:!0,mi:!1,Ot:\"\",D:\"#FFF\",ui:!1,bi:!1},this.Ti={Gt:\"\",Ct:!1,li:!1,mi:!0,Ot:\"\",D:\"#FFF\",ui:!0,bi:!0},this.vt=!0,this.Pi=new(t||X)(this.Ci,this.ki),this.Ri=new(t||X)(this.Ti,this.ki)}Gt(){return this.Di(),this.Ci.Gt}yi(){return this.Di(),this.ki.yi}gt(){this.vt=!0}It(t,i=!1){return Math.max(this.Pi.It(t,i),this.Ri.It(t,i))}Bi(){return this.ki.xi||0}Ai(t){this.ki.xi=t}Oi(){return this.Di(),this.Ci.Ct||this.Ti.Ct}Li(){return this.Di(),this.Ci.Ct}Mt(t){return this.Di(),this.Ci.li=this.Ci.li&&t.F().ticksVisible,this.Ti.li=this.Ti.li&&t.F().ticksVisible,this.Pi.tt(this.Ci,this.ki),this.Ri.tt(this.Ti,this.ki),this.Pi}Ii(){return this.Di(),this.Pi.tt(this.Ci,this.ki),this.Ri.tt(this.Ti,this.ki),this.Ri}Di(){this.vt&&(this.Ci.li=!0,this.Ti.li=!1,this.Ei(this.Ci,this.Ti,this.ki))}}class K extends Z{constructor(t,i,n){super(),this.$t=t,this.zi=i,this.Vi=n}Ei(t,i,n){t.Ct=!1;const s=this.$t.F().horzLine;if(!s.labelVisible)return;const e=this.zi.Tt();if(!this.$t.Ct()||this.zi.Ni()||null===e)return;const r=w(s.labelBackgroundColor);n.t=r.t,t.D=r.i;const h=2/12*this.zi.T();n.gi=h,n.wi=h;const l=this.Vi(this.zi);n.yi=l.yi,t.Gt=this.zi.Fi(l.ut,e),t.Ct=!0}}const G=/[1-9]/g;class J{constructor(){this.zt=null}tt(t){this.zt=t}X(t,i){if(null===this.zt||!1===this.zt.Ct||0===this.zt.Gt.length)return;const n=t.useMediaCoordinateSpace((({context:t})=>(t.font=i.P,Math.round(i.Wi.Si(t,_(this.zt).Gt,G)))));if(n<=0)return;const s=i.ji,e=n+2*s,r=e/2,h=this.zt.$i;let l=this.zt.yi,a=Math.floor(l-r)+.5;a<0?(l+=Math.abs(0-a),a=Math.floor(l-r)+.5):a+e>h&&(l-=Math.abs(h-(a+e)),a=Math.floor(l-r)+.5);const o=a+e,u=Math.ceil(0+i.k+i.C+i.I+i.T+i.A);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:n,verticalPixelRatio:s})=>{const e=_(this.zt);t.fillStyle=e.t;const r=Math.round(a*n),h=Math.round(0*s),l=Math.round(o*n),c=Math.round(u*s),d=Math.round(2*n);if(t.beginPath(),t.moveTo(r,h),t.lineTo(r,c-d),t.arcTo(r,c,r+d,c,d),t.lineTo(l-d,c),t.arcTo(l,c,l,c-d,d),t.lineTo(l,h),t.fill(),e.li){const r=Math.round(e.yi*n),l=h,a=Math.round((l+i.C)*s);t.fillStyle=e.D;const o=Math.max(1,Math.floor(n)),_=Math.floor(.5*n);t.fillRect(r-_,l,o,a-l)}})),t.useMediaCoordinateSpace((({context:t})=>{const n=_(this.zt),e=0+i.k+i.C+i.I+i.T/2;t.font=i.P,t.textAlign=\"left\",t.textBaseline=\"middle\",t.fillStyle=n.D;const r=i.Wi.Mi(t,\"Apr0\");t.translate(a+s,e+r),t.fillText(n.Gt,0,0)}))}}class Q{constructor(t,i,n){this.vt=!0,this.jt=new J,this.Wt={Ct:!1,t:\"#4c525e\",D:\"white\",Gt:\"\",$i:0,yi:NaN,li:!0},this.bt=t,this.Hi=i,this.Vi=n}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt.tt(this.Wt),this.jt}St(){const t=this.Wt;t.Ct=!1;const i=this.bt.F().vertLine;if(!i.labelVisible)return;const n=this.Hi.yt();if(n.Ni())return;t.$i=n.$i();const s=this.Vi();if(null===s)return;t.yi=s.yi;const e=n.Ui(this.bt.xt());t.Gt=n.qi(_(e)),t.Ct=!0;const r=w(i.labelBackgroundColor);t.t=r.t,t.D=r.i,t.li=n.F().ticksVisible}}class tt{constructor(){this.Yi=null,this.Xi=0}Zi(){return this.Xi}Ki(t){this.Xi=t}Bt(){return this.Yi}Gi(t){this.Yi=t}Ji(t){return[]}Qi(){return[]}Ct(){return!0}}var it;!function(t){t[t.Normal=0]=\"Normal\",t[t.Magnet=1]=\"Magnet\"}(it||(it={}));class nt extends tt{constructor(t,i){super(),this.tn=null,this.nn=NaN,this.sn=0,this.en=!0,this.rn=new Map,this.hn=!1,this.ln=NaN,this.an=NaN,this.on=NaN,this._n=NaN,this.Hi=t,this.un=i,this.cn=new V(t,this);this.dn=((t,i)=>n=>{const s=i(),e=t();if(n===_(this.tn).fn())return{ut:e,yi:s};{const t=_(n.Tt());return{ut:n.pn(s,t),yi:s}}})((()=>this.nn),(()=>this.an));const n=((t,i)=>()=>{const n=this.Hi.yt().vn(t()),s=i();return n&&Number.isFinite(s)?{_t:n,yi:s}:null})((()=>this.sn),(()=>this.Xt()));this.mn=new Q(this,t,n),this.bn=new W(this)}F(){return this.un}gn(t,i){this.on=t,this._n=i}wn(){this.on=NaN,this._n=NaN}Mn(){return this.on}Sn(){return this._n}xn(t,i,n){this.hn||(this.hn=!0),this.en=!0,this.yn(t,i,n)}xt(){return this.sn}Xt(){return this.ln}Zt(){return this.an}Ct(){return this.en}kn(){this.en=!1,this.Cn(),this.nn=NaN,this.ln=NaN,this.an=NaN,this.tn=null,this.wn()}Tn(t){return null!==this.tn?[this.bn,this.cn]:[]}qt(t){return t===this.tn&&this.un.horzLine.visible}Yt(){return this.un.vertLine.visible}Pn(t,i){this.en&&this.tn===t||this.rn.clear();const n=[];return this.tn===t&&n.push(this.Rn(this.rn,i,this.dn)),n}Qi(){return this.en?[this.mn]:[]}Ht(){return this.tn}Dn(){this.bn.gt(),this.rn.forEach((t=>t.gt())),this.mn.gt(),this.cn.gt()}Bn(t){return t&&!t.fn().Ni()?t.fn():null}yn(t,i,n){this.An(t,i,n)&&this.Dn()}An(t,i,n){const s=this.ln,e=this.an,r=this.nn,h=this.sn,l=this.tn,a=this.Bn(n);this.sn=t,this.ln=isNaN(t)?NaN:this.Hi.yt().Et(t),this.tn=n;const o=null!==a?a.Tt():null;return null!==a&&null!==o?(this.nn=i,this.an=a.Dt(i,o)):(this.nn=NaN,this.an=NaN),s!==this.ln||e!==this.an||h!==this.sn||r!==this.nn||l!==this.tn}Cn(){const t=this.Hi.wt().map((t=>t.Ln().On())).filter(P),i=0===t.length?null:Math.max(...t);this.sn=null!==i?i:NaN}Rn(t,i,n){let s=t.get(i);return void 0===s&&(s=new K(this,i,n),t.set(i,s)),s}}function st(t){return\"left\"===t||\"right\"===t}class et{constructor(t){this.In=new Map,this.En=[],this.zn=t}Vn(t,i){const n=function(t,i){return void 0===t?i:{Nn:Math.max(t.Nn,i.Nn),Fn:t.Fn||i.Fn}}(this.In.get(t),i);this.In.set(t,n)}Wn(){return this.zn}jn(t){const i=this.In.get(t);return void 0===i?{Nn:this.zn}:{Nn:Math.max(this.zn,i.Nn),Fn:i.Fn}}$n(){this.Hn(),this.En=[{Un:0}]}qn(t){this.Hn(),this.En=[{Un:1,At:t}]}Yn(t){this.Xn(),this.En.push({Un:5,At:t})}Hn(){this.Xn(),this.En.push({Un:6})}Zn(){this.Hn(),this.En=[{Un:4}]}Kn(t){this.Hn(),this.En.push({Un:2,At:t})}Gn(t){this.Hn(),this.En.push({Un:3,At:t})}Jn(){return this.En}Qn(t){for(const i of t.En)this.ts(i);this.zn=Math.max(this.zn,t.zn),t.In.forEach(((t,i)=>{this.Vn(i,t)}))}static ns(){return new et(2)}static ss(){return new et(3)}ts(t){switch(t.Un){case 0:this.$n();break;case 1:this.qn(t.At);break;case 2:this.Kn(t.At);break;case 3:this.Gn(t.At);break;case 4:this.Zn();break;case 5:this.Yn(t.At);break;case 6:this.Xn()}}Xn(){const t=this.En.findIndex((t=>5===t.Un));-1!==t&&this.En.splice(t,1)}}const rt=\".\";function ht(t,i){if(!x(t))return\"n/a\";if(!y(i))throw new TypeError(\"invalid length\");if(i<0||i>16)throw new TypeError(\"invalid length\");if(0===i)return t.toString();return(\"0000000000000000\"+t.toString()).slice(-i)}class lt{constructor(t,i){if(i||(i=1),x(t)&&y(t)||(t=100),t<0)throw new TypeError(\"invalid base\");this.zi=t,this.es=i,this.rs()}format(t){const i=t<0?\"−\":\"\";return t=Math.abs(t),i+this.hs(t)}rs(){if(this.ls=0,this.zi>0&&this.es>0){let t=this.zi;for(;t>1;)t/=10,this.ls++}}hs(t){const i=this.zi/this.es;let n=Math.floor(t),s=\"\";const e=void 0!==this.ls?this.ls:NaN;if(i>1){let r=+(Math.round(t*i)-n*i).toFixed(this.ls);r>=i&&(r-=i,n+=1),s=rt+ht(+r.toFixed(this.ls)*this.es,e)}else n=Math.round(n*i)/i,e>0&&(s=rt+ht(0,e));return n.toFixed(0)+s}}class at extends lt{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class ot{constructor(t){this.os=t}format(t){let i=\"\";return t<0&&(i=\"-\",t=-t),t<995?i+this._s(t):t<999995?i+this._s(t/1e3)+\"K\":t<999999995?(t=1e3*Math.round(t/1e3),i+this._s(t/1e6)+\"M\"):(t=1e6*Math.round(t/1e6),i+this._s(t/1e9)+\"B\")}_s(t){let i;const n=Math.pow(10,this.os);return i=(t=Math.round(t*n)/n)>=1e-15&&t<1?t.toFixed(this.os).replace(/\\.?0+$/,\"\"):String(t),i.replace(/(\\.[1-9]*)0+$/,((t,i)=>i))}}function _t(t,i,n,s,e,r,h){if(0===i.length||s.from>=i.length||s.to<=0)return;const l=t.context,a=i[s.from];let o=r(t,a),_=a;if(s.to-s.from<2){const t=e/2;l.beginPath();const i={st:a.st-t,et:a.et},n={st:a.st+t,et:a.et};return l.moveTo(i.st,i.et),l.lineTo(n.st,n.et),void h(l,o,i,n)}const u=(t,i)=>{h(l,o,_,i),l.beginPath(),o=t,_=i};let c=_;l.beginPath(),l.moveTo(a.st,a.et);for(let e=s.from+1;e>1,h=s+e;n(t[h],i)?(s=h+1,r-=e+1):r=e}return s}function St(t,i,n,s=0,e=t.length){let r=e-s;for(;0>1,h=s+e;n(i,t[h])?r=e:(s=h+1,r-=e+1)}return s}function xt(t,i){return t._t0&&r=s&&(l=r-1),h>0&&hObject.assign(Object.assign({},t),this.Ts.Ls().Os(t._t))))}Is(){this.Cs=null}Ds(){this.xs&&(this.Es(),this.xs=!1),this.ys&&(this.As(),this.ys=!1),this.Ss&&(this.zs(),this.Ss=!1)}zs(){const t=this.Ts.Bt(),i=this.Ps.yt();if(this.Is(),i.Ni()||t.Ni())return;const n=i.Vs();if(null===n)return;if(0===this.Ts.Ln().Ns())return;const s=this.Ts.Tt();null!==s&&(this.Cs=kt(this.ks,n,this.Rs),this.Fs(t,i,s.At),this.Ws())}}class Tt extends Ct{constructor(t,i){super(t,i,!0)}Fs(t,i,n){i.js(this.ks,R(this.Cs)),t.$s(this.ks,n,R(this.Cs))}Hs(t,i){return{_t:t,ut:i,st:NaN,et:NaN}}Es(){const t=this.Ts.Ls();this.ks=this.Ts.Ln().Us().map((i=>{const n=i.At[3];return this.qs(i.Ys,n,t)}))}}class Pt extends Tt{constructor(t,i){super(t,i),this.Bs=new O,this.Xs=new mt,this.Zs=new wt,this.Bs.Y([this.Xs,this.Zs])}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Os(t))}Ws(){const t=this.Ts.F();this.Xs.tt({cs:t.lineType,nt:this.ks,Ft:t.lineStyle,rt:t.lineWidth,ds:null,fs:t.invertFilledArea,it:this.Cs,us:this.Ps.yt().Ks()}),this.Zs.tt({cs:t.lineType,nt:this.ks,Ft:t.lineStyle,rt:t.lineWidth,it:this.Cs,us:this.Ps.yt().Ks()})}}class Rt extends N{constructor(){super(...arguments),this.zt=null,this.Gs=0,this.Js=0}tt(t){this.zt=t}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){if(null===this.zt||0===this.zt.Ln.length||null===this.zt.it)return;if(this.Gs=this.Qs(i),this.Gs>=2){Math.max(1,Math.floor(i))%2!=this.Gs%2&&this.Gs--}this.Js=this.zt.te?Math.min(this.Gs,Math.floor(i)):this.Gs;let s=null;const e=this.Js<=this.Gs&&this.zt.Ks>=Math.floor(1.5*i);for(let r=this.zt.it.from;rf+v-1&&(e=f+v-1,s=e-_+1),t.fillRect(i,s,o-i,e-s+1)}const i=a+m;let s=Math.max(f,Math.round(h.he*n)-l),e=s+_-1;e>f+v-1&&(e=f+v-1,s=e-_+1),t.fillRect(u+1,s,i-u,e-s+1)}}}Qs(t){const i=Math.floor(t);return Math.max(i,Math.floor(function(t,i){return Math.floor(.3*t*i)}(_(this.zt).Ks,t)))}}class Dt extends Ct{constructor(t,i){super(t,i,!1)}Fs(t,i,n){i.js(this.ks,R(this.Cs)),t.le(this.ks,n,R(this.Cs))}ae(t,i,n){return{_t:t,oe:i.At[0],_e:i.At[1],ue:i.At[2],ce:i.At[3],st:NaN,re:NaN,ne:NaN,se:NaN,he:NaN}}Es(){const t=this.Ts.Ls();this.ks=this.Ts.Ln().Us().map((i=>this.qs(i.Ys,i,t)))}}class Bt extends Dt{constructor(){super(...arguments),this.Bs=new Rt}qs(t,i,n){return Object.assign(Object.assign({},this.ae(t,i,n)),n.Os(t))}Ws(){const t=this.Ts.F();this.Bs.tt({Ln:this.ks,Ks:this.Ps.yt().Ks(),ee:t.openVisible,te:t.thinBars,it:this.Cs})}}function At(t,i,n){return Math.min(Math.max(t,i),n)}function Ot(t,i,n){return i-t<=n}function Lt(t){return t<=0?NaN:Math.log(t)/Math.log(10)}function It(t){const i=Math.ceil(t);return i%2==0?i-1:i}class Et extends vt{constructor(){super(...arguments),this.vs=null}ps(t,i){var n;const{context:s,mediaSize:e}=t,r=this.J,{de:h,fe:l,pe:a,ve:o}=i,_=null!==(n=r.ds)&&void 0!==n?n:e.height,u=e.height;if(null!==this.vs&&this.vs.topFillColor1===h&&this.vs.topFillColor2===l&&this.vs.bottomFillColor1===a&&this.vs.bottomFillColor2===o&&this.vs.baseLevelCoordinate===_&&this.vs.bottom===u)return this.vs.fillStyle;const c=s.createLinearGradient(0,0,0,u),d=At(_/u,0,1);return c.addColorStop(0,h),c.addColorStop(d,l),c.addColorStop(d,a),c.addColorStop(1,o),this.vs={topFillColor1:h,topFillColor2:l,bottomFillColor1:a,bottomFillColor2:o,fillStyle:c,baseLevelCoordinate:_,bottom:u},c}}class zt extends gt{constructor(){super(...arguments),this.me=null}ws(t,i){const{context:n,mediaSize:s}=t,e=this.J,{be:r,ge:h}=i,{ds:l}=e,a=s.height;if(null!==this.me&&this.me.topLineColor===r&&this.me.bottomLineColor===h&&this.me.baseLevelCoordinate===l&&this.me.bottom===a)return this.me.strokeStyle;const o=n.createLinearGradient(0,0,0,a),_=At(l/a,0,1);return o.addColorStop(0,r),o.addColorStop(_,r),o.addColorStop(_,h),o.addColorStop(1,h),this.me={topLineColor:r,bottomLineColor:h,strokeStyle:o,baseLevelCoordinate:l,bottom:a},o}}class Vt extends Tt{constructor(t,i){super(t,i),this.Bs=new O,this.we=new Et,this.Me=new zt,this.Bs.Y([this.we,this.Me])}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Os(t))}Ws(){const t=this.Ts.Tt();if(null===t)return;const i=this.Ts.F(),n=this.Ts.Bt().Dt(i.baseValue.price,t.At),s=this.Ps.yt().Ks();this.we.tt({nt:this.ks,rt:i.lineWidth,Ft:i.lineStyle,cs:i.lineType,ds:n,fs:!1,it:this.Cs,us:s}),this.Me.tt({nt:this.ks,rt:i.lineWidth,Ft:i.lineStyle,cs:i.lineType,ds:n,it:this.Cs,us:s})}}class Nt extends N{constructor(){super(...arguments),this.zt=null,this.Gs=0}tt(t){this.zt=t}Z(t){if(null===this.zt||0===this.zt.Ln.length||null===this.zt.it)return;const{horizontalPixelRatio:i}=t;if(this.Gs=function(t,i){if(t>=2.5&&t<=4)return Math.floor(3*i);const n=1-.2*Math.atan(Math.max(4,t)-4)/(.5*Math.PI),s=Math.floor(t*n*i),e=Math.floor(t*i),r=Math.min(s,e);return Math.max(Math.floor(i),r)}(this.zt.Ks,i),this.Gs>=2){Math.floor(i)%2!=this.Gs%2&&this.Gs--}const n=this.zt.Ln;this.zt.Se&&this.xe(t,n,this.zt.it),this.zt.ui&&this.ye(t,n,this.zt.it);const s=this.ke(i);(!this.zt.ui||this.Gs>2*s)&&this.Ce(t,n,this.zt.it)}xe(t,i,n){if(null===this.zt)return;const{context:s,horizontalPixelRatio:e,verticalPixelRatio:r}=t;let h=\"\",l=Math.min(Math.floor(e),Math.floor(this.zt.Ks*e));l=Math.max(Math.floor(e),Math.min(l,this.Gs));const a=Math.floor(.5*l);let o=null;for(let t=n.from;t2*l)j(s,o,u,_-o+1,c-u+1,l);else{const t=_-o+1;s.fillRect(o,u,t,c-u+1)}a=_}}Ce(t,i,n){if(null===this.zt)return;const{context:s,horizontalPixelRatio:e,verticalPixelRatio:r}=t;let h=\"\";const l=this.ke(e);for(let t=n.from;to||s.fillRect(_,a,u-_+1,o-a+1)}}}class Ft extends Dt{constructor(){super(...arguments),this.Bs=new Nt}qs(t,i,n){return Object.assign(Object.assign({},this.ae(t,i,n)),n.Os(t))}Ws(){const t=this.Ts.F();this.Bs.tt({Ln:this.ks,Ks:this.Ps.yt().Ks(),Se:t.wickVisible,ui:t.borderVisible,it:this.Cs})}}class Wt extends N{constructor(){super(...arguments),this.zt=null,this.Re=[]}tt(t){this.zt=t,this.Re=[]}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){if(null===this.zt||0===this.zt.nt.length||null===this.zt.it)return;this.Re.length||this.De(i);const s=Math.max(1,Math.floor(n)),e=Math.round(this.zt.Be*n)-Math.floor(s/2),r=e+s;for(let i=this.zt.it.from;is.Oe?s.ci=n.Ms-i-1:n.Ms=s.ci+i+1))}let s=Math.ceil(this.zt.Ks*t);for(let t=this.zt.it.from;t0&&s<4)for(let t=this.zt.it.from;ts&&(i.Ae>i.Oe?i.ci-=1:i.Ms+=1)}}}class jt extends Tt{constructor(){super(...arguments),this.Bs=new Wt}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Os(t))}Ws(){const t={nt:this.ks,Ks:this.Ps.yt().Ks(),it:this.Cs,Be:this.Ts.Bt().Dt(this.Ts.F().base,_(this.Ts.Tt()).At)};this.Bs.tt(t)}}class $t extends Tt{constructor(){super(...arguments),this.Bs=new wt}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Os(t))}Ws(){const t=this.Ts.F(),i={nt:this.ks,Ft:t.lineStyle,cs:t.lineType,rt:t.lineWidth,it:this.Cs,us:this.Ps.yt().Ks()};this.Bs.tt(i)}}const Ht=/[2-9]/g;class Ut{constructor(t=50){this.Le=0,this.Ie=1,this.Ee=1,this.ze={},this.Ve=new Map,this.Ne=t}Fe(){this.Le=0,this.Ve.clear(),this.Ie=1,this.Ee=1,this.ze={}}Si(t,i,n){return this.We(t,i,n).width}Mi(t,i,n){const s=this.We(t,i,n);return((s.actualBoundingBoxAscent||0)-(s.actualBoundingBoxDescent||0))/2}We(t,i,n){const s=n||Ht,e=String(i).replace(s,\"0\");if(this.Ve.has(e))return o(this.Ve.get(e)).je;if(this.Le===this.Ne){const t=this.ze[this.Ee];delete this.ze[this.Ee],this.Ve.delete(t),this.Ee++,this.Le--}t.save(),t.textBaseline=\"middle\";const r=t.measureText(e);return t.restore(),0===r.width&&i.length||(this.Ve.set(e,{je:r,$e:this.Ie}),this.ze[this.Ie]=e,this.Le++,this.Ie++),r}}class qt{constructor(t){this.He=null,this.S=null,this.Ue=\"right\",this.qe=t}Ye(t,i,n){this.He=t,this.S=i,this.Ue=n}X(t){null!==this.S&&null!==this.He&&this.He.X(t,this.S,this.qe,this.Ue)}}class Yt{constructor(t,i,n){this.Xe=t,this.qe=new Ut(50),this.Ze=i,this.N=n,this.W=-1,this.jt=new qt(this.qe)}Mt(){const t=this.N.Ke(this.Ze);if(null===t)return null;const i=t.Ge(this.Ze)?t.Je():this.Ze.Bt();if(null===i)return null;const n=t.Qe(i);if(\"overlay\"===n)return null;const s=this.N.tr();return s.T!==this.W&&(this.W=s.T,this.qe.Fe()),this.jt.Ye(this.Xe.Ii(),s,n),this.jt}}class Xt extends N{constructor(){super(...arguments),this.zt=null}tt(t){this.zt=t}ir(t,i){var n;if(!(null===(n=this.zt)||void 0===n?void 0:n.Ct))return null;const{et:s,rt:e,nr:r}=this.zt;return i>=s-e-7&&i<=s+e+7?{sr:this.zt,nr:r}:null}Z({context:t,bitmapSize:i,horizontalPixelRatio:n,verticalPixelRatio:s}){if(null===this.zt)return;if(!1===this.zt.Ct)return;const e=Math.round(this.zt.et*s);e<0||e>i.height||(t.lineCap=\"butt\",t.strokeStyle=this.zt.D,t.lineWidth=Math.floor(this.zt.rt*n),h(t,this.zt.Ft),l(t,e,0,i.width))}}class Zt{constructor(t){this.er={et:0,D:\"rgba(0, 0, 0, 0)\",rt:1,Ft:0,Ct:!1},this.rr=new Xt,this.vt=!0,this.Ts=t,this.Ps=t.Ut(),this.rr.tt(this.er)}gt(){this.vt=!0}Mt(){return this.Ts.Ct()?(this.vt&&(this.hr(),this.vt=!1),this.rr):null}}class Kt extends Zt{constructor(t){super(t)}hr(){this.er.Ct=!1;const t=this.Ts.Bt(),i=t.lr().lr;if(2!==i&&3!==i)return;const n=this.Ts.F();if(!n.baseLineVisible||!this.Ts.Ct())return;const s=this.Ts.Tt();null!==s&&(this.er.Ct=!0,this.er.et=t.Dt(s.At,s.At),this.er.D=n.baseLineColor,this.er.rt=n.baseLineWidth,this.er.Ft=n.baseLineStyle)}}class Gt extends N{constructor(){super(...arguments),this.zt=null}tt(t){this.zt=t}ar(){return this.zt}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){const s=this.zt;if(null===s)return;const e=Math.max(1,Math.floor(i)),r=e%2/2,h=Math.round(s.Oe.x*i)+r,l=s.Oe.y*n;t.fillStyle=s._r,t.beginPath();const a=Math.max(2,1.5*s.ur)*i;t.arc(h,l,a,0,2*Math.PI,!1),t.fill(),t.fillStyle=s.cr,t.beginPath(),t.arc(h,l,s.lt*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=e,t.strokeStyle=s.dr,t.beginPath(),t.arc(h,l,s.lt*i+e/2,0,2*Math.PI,!1),t.stroke()}}const Jt=[{pr:0,vr:.25,mr:4,br:10,gr:.25,wr:0,Mr:.4,Sr:.8},{pr:.25,vr:.525,mr:10,br:14,gr:0,wr:0,Mr:.8,Sr:0},{pr:.525,vr:1,mr:14,br:14,gr:0,wr:0,Mr:0,Sr:0}];function Qt(t,i,n,s){return function(t,i){if(\"transparent\"===t)return t;const n=g(t),s=n[3];return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${i*s})`}(t,n+(s-n)*i)}function ti(t,i){const n=t%2600/2600;let s;for(const t of Jt)if(n>=t.pr&&n<=t.vr){s=t;break}a(void 0!==s,\"Last price animation internal logic error\");const e=(n-s.pr)/(s.vr-s.pr);return{cr:Qt(i,e,s.gr,s.wr),dr:Qt(i,e,s.Mr,s.Sr),lt:(r=e,h=s.mr,l=s.br,h+(l-h)*r)};var r,h,l}class ii{constructor(t){this.jt=new Gt,this.vt=!0,this.yr=!0,this.kr=performance.now(),this.Cr=this.kr-1,this.Tr=t}Pr(){this.Cr=this.kr-1,this.gt()}Rr(){if(this.gt(),2===this.Tr.F().lastPriceAnimation){const t=performance.now(),i=this.Cr-t;if(i>0)return void(i<650&&(this.Cr+=2600));this.kr=t,this.Cr=t+2600}}gt(){this.vt=!0}Dr(){this.yr=!0}Ct(){return 0!==this.Tr.F().lastPriceAnimation}Br(){switch(this.Tr.F().lastPriceAnimation){case 0:return!1;case 1:return!0;case 2:return performance.now()<=this.Cr}}Mt(){return this.vt?(this.St(),this.vt=!1,this.yr=!1):this.yr&&(this.Ar(),this.yr=!1),this.jt}St(){this.jt.tt(null);const t=this.Tr.Ut().yt(),i=t.Vs(),n=this.Tr.Tt();if(null===i||null===n)return;const s=this.Tr.Or(!0);if(s.Lr||!i.Ir(s.Ys))return;const e={x:t.Et(s.Ys),y:this.Tr.Bt().Dt(s.ut,n.At)},r=s.D,h=this.Tr.F().lineWidth,l=ti(this.Er(),r);this.jt.tt({_r:r,ur:h,cr:l.cr,dr:l.dr,lt:l.lt,Oe:e})}Ar(){const t=this.jt.ar();if(null!==t){const i=ti(this.Er(),t._r);t.cr=i.cr,t.dr=i.dr,t.lt=i.lt}}Er(){return this.Br()?performance.now()-this.kr:2599}}function ni(t,i){return It(Math.min(Math.max(t,12),30)*i)}function si(t,i){switch(t){case\"arrowDown\":case\"arrowUp\":return ni(i,1);case\"circle\":return ni(i,.8);case\"square\":return ni(i,.7)}}function ei(t){return function(t){const i=Math.ceil(t);return i%2!=0?i-1:i}(ni(t,1))}function ri(t){return Math.max(ni(t,.1),3)}function hi(t,i,n,s,e){const r=si(\"square\",n),h=(r-1)/2,l=t-h,a=i-h;return s>=l&&s<=l+r&&e>=a&&e<=a+r}function li(t,i,n,s,e){const r=(si(\"arrowUp\",e)-1)/2,h=(It(e/2)-1)/2;i.beginPath(),t?(i.moveTo(n-r,s),i.lineTo(n,s-r),i.lineTo(n+r,s),i.lineTo(n+h,s),i.lineTo(n+h,s+r),i.lineTo(n-h,s+r),i.lineTo(n-h,s)):(i.moveTo(n-r,s),i.lineTo(n,s+r),i.lineTo(n+r,s),i.lineTo(n+h,s),i.lineTo(n+h,s-r),i.lineTo(n-h,s-r),i.lineTo(n-h,s)),i.fill()}function ai(t,i,n,s,e,r){return hi(i,n,s,e,r)}class oi extends L{constructor(){super(...arguments),this.zt=null,this.qe=new Ut,this.W=-1,this.j=\"\",this.zr=\"\"}tt(t){this.zt=t}Ye(t,i){this.W===t&&this.j===i||(this.W=t,this.j=i,this.zr=B(t,i),this.qe.Fe())}ir(t,i){if(null===this.zt||null===this.zt.it)return null;for(let n=this.zt.it.from;n=t&&e<=t+n&&r>=i-h&&r<=i+h}(t.Gt.st,t.Gt.et,t.Gt.$i,t.Gt.It,i,n))||function(t,i,n){if(0===t.Ns)return!1;switch(t.Fr){case\"arrowDown\":case\"arrowUp\":return ai(0,t.st,t.et,t.Ns,i,n);case\"circle\":return function(t,i,n,s,e){const r=2+si(\"circle\",n)/2,h=t-s,l=i-e;return Math.sqrt(h*h+l*l)<=r}(t.st,t.et,t.Ns,i,n);case\"square\":return hi(t.st,t.et,t.Ns,i,n)}}(t,i,n)}function ci(t,i,n,s,e,r,h,l,a){const o=x(n)?n:n.ce,_=x(n)?n:n._e,u=x(n)?n:n.ue,c=x(i.size)?Math.max(i.size,0):1,d=ei(l.Ks())*c,f=d/2;switch(t.Ns=d,i.position){case\"inBar\":return t.et=h.Dt(o,a),void(void 0!==t.Gt&&(t.Gt.et=t.et+f+r+.6*e));case\"aboveBar\":return t.et=h.Dt(_,a)-f-s.Wr,void 0!==t.Gt&&(t.Gt.et=t.et-f-.6*e,s.Wr+=1.2*e),void(s.Wr+=d+r);case\"belowBar\":return t.et=h.Dt(u,a)+f+s.jr,void 0!==t.Gt&&(t.Gt.et=t.et+f+r+.6*e,s.jr+=1.2*e),void(s.jr+=d+r)}i.position}class di{constructor(t,i){this.vt=!0,this.$r=!0,this.Hr=!0,this.Ur=null,this.jt=new oi,this.Tr=t,this.Hi=i,this.zt={nt:[],it:null}}gt(t){this.vt=!0,this.Hr=!0,\"data\"===t&&(this.$r=!0)}Mt(t){if(!this.Tr.Ct())return null;this.vt&&this.qr();const i=this.Hi.F().layout;return this.jt.Ye(i.fontSize,i.fontFamily),this.jt.tt(this.zt),this.jt}Yr(){if(this.Hr){if(this.Tr.Xr().length>0){const t=this.Hi.yt().Ks(),i=ri(t),n=1.5*ei(t)+2*i;this.Ur={above:n,below:n}}else this.Ur=null;this.Hr=!1}return this.Ur}qr(){const t=this.Tr.Bt(),i=this.Hi.yt(),n=this.Tr.Xr();this.$r&&(this.zt.nt=n.map((t=>({_t:t.time,st:0,et:0,Ns:0,Fr:t.shape,D:t.color,Vr:t.internalId,nr:t.id,Gt:void 0}))),this.$r=!1);const s=this.Hi.F().layout;this.zt.it=null;const e=i.Vs();if(null===e)return;const r=this.Tr.Tt();if(null===r)return;if(0===this.zt.nt.length)return;let h=NaN;const l=ri(i.Ks()),a={Wr:l,jr:l};this.zt.it=kt(this.zt.nt,e,!0);for(let e=this.zt.it.from;e0&&(_.Gt={Nr:o.text,st:0,et:0,$i:0,It:0});const u=this.Tr.Zr(o.time);null!==u&&ci(_,o,u,a,s.fontSize,l,t,i,r.At)}this.vt=!1}}class fi extends Zt{constructor(t){super(t)}hr(){const t=this.er;t.Ct=!1;const i=this.Ts.F();if(!i.priceLineVisible||!this.Ts.Ct())return;const n=this.Ts.Or(0===i.priceLineSource);n.Lr||(t.Ct=!0,t.et=n.yi,t.D=this.Ts.Kr(n.D),t.rt=i.priceLineWidth,t.Ft=i.priceLineStyle)}}class pi extends Z{constructor(t){super(),this.$t=t}Ei(t,i,n){t.Ct=!1,i.Ct=!1;const s=this.$t;if(!s.Ct())return;const e=s.F(),r=e.lastValueVisible,h=\"\"!==s.Gr(),l=0===e.seriesLastValueMode,a=s.Or(!1);if(a.Lr)return;r&&(t.Gt=this.Jr(a,r,l),t.Ct=0!==t.Gt.length),(h||l)&&(i.Gt=this.Qr(a,r,h,l),i.Ct=i.Gt.length>0);const o=s.Kr(a.D),_=w(o);n.t=_.t,n.yi=a.yi,i.Ot=s.Ut().Lt(a.yi/s.Bt().It()),t.Ot=o,t.D=_.i,i.D=_.i}Qr(t,i,n,s){let e=\"\";const r=this.$t.Gr();return n&&0!==r.length&&(e+=`${r} `),i&&s&&(e+=this.$t.Bt().th()?t.ih:t.nh),e.trim()}Jr(t,i,n){return i?n?this.$t.Bt().th()?t.nh:t.ih:t.Gt:\"\"}}class vi{constructor(t,i){this.sh=t,this.eh=i}rh(t){return null!==t&&(this.sh===t.sh&&this.eh===t.eh)}hh(){return new vi(this.sh,this.eh)}lh(){return this.sh}ah(){return this.eh}oh(){return this.eh-this.sh}Ni(){return this.eh===this.sh||Number.isNaN(this.eh)||Number.isNaN(this.sh)}Qn(t){return null===t?this:new vi(Math.min(this.lh(),t.lh()),Math.max(this.ah(),t.ah()))}_h(t){if(!x(t))return;if(0===this.eh-this.sh)return;const i=.5*(this.eh+this.sh);let n=this.eh-i,s=this.sh-i;n*=t,s*=t,this.eh=i+n,this.sh=i+s}uh(t){x(t)&&(this.eh+=t,this.sh+=t)}dh(){return{minValue:this.sh,maxValue:this.eh}}static fh(t){return null===t?null:new vi(t.minValue,t.maxValue)}}class mi{constructor(t,i){this.ph=t,this.mh=i||null}bh(){return this.ph}gh(){return this.mh}dh(){return null===this.ph?null:{priceRange:this.ph.dh(),margins:this.mh||void 0}}static fh(t){return null===t?null:new mi(vi.fh(t.priceRange),t.margins)}}class bi extends Zt{constructor(t,i){super(t),this.wh=i}hr(){const t=this.er;t.Ct=!1;const i=this.wh.F();if(!this.Ts.Ct()||!i.lineVisible)return;const n=this.wh.Mh();null!==n&&(t.Ct=!0,t.et=n,t.D=i.color,t.rt=i.lineWidth,t.Ft=i.lineStyle,t.nr=this.wh.F().id)}}class gi extends Z{constructor(t,i){super(),this.Tr=t,this.wh=i}Ei(t,i,n){t.Ct=!1,i.Ct=!1;const s=this.wh.F(),e=s.axisLabelVisible,r=\"\"!==s.title,h=this.Tr;if(!e||!h.Ct())return;const l=this.wh.Mh();if(null===l)return;r&&(i.Gt=s.title,i.Ct=!0),i.Ot=h.Ut().Lt(l/h.Bt().It()),t.Gt=this.Sh(s.price),t.Ct=!0;const a=w(s.axisLabelColor||s.color);n.t=a.t;const o=s.axisLabelTextColor||a.i;t.D=o,i.D=o,n.yi=l}Sh(t){const i=this.Tr.Tt();return null===i?\"\":this.Tr.Bt().Fi(t,i.At)}}class wi{constructor(t,i){this.Tr=t,this.un=i,this.xh=new bi(t,this),this.Xe=new gi(t,this),this.yh=new Yt(this.Xe,t,t.Ut())}kh(t){S(this.un,t),this.gt(),this.Tr.Ut().Ch()}F(){return this.un}Th(){return this.xh}Ph(){return this.yh}Rh(){return this.Xe}gt(){this.xh.gt(),this.Xe.gt()}Mh(){const t=this.Tr,i=t.Bt();if(t.Ut().yt().Ni()||i.Ni())return null;const n=t.Tt();return null===n?null:i.Dt(this.un.price,n.At)}}class Mi extends tt{constructor(t){super(),this.Hi=t}Ut(){return this.Hi}}const Si={Bar:(t,i,n,s)=>{var e;const r=i.upColor,h=i.downColor,l=_(t(n,s)),a=u(l.At[0])<=u(l.At[3]);return{ie:null!==(e=l.D)&&void 0!==e?e:a?r:h}},Candlestick:(t,i,n,s)=>{var e,r,h;const l=i.upColor,a=i.downColor,o=i.borderUpColor,c=i.borderDownColor,d=i.wickUpColor,f=i.wickDownColor,p=_(t(n,s)),v=u(p.At[0])<=u(p.At[3]);return{ie:null!==(e=p.D)&&void 0!==e?e:v?l:a,Pe:null!==(r=p.Ot)&&void 0!==r?r:v?o:c,Te:null!==(h=p.Dh)&&void 0!==h?h:v?d:f}},Area:(t,i,n,s)=>{var e,r,h,l;const a=_(t(n,s));return{ie:null!==(e=a.ot)&&void 0!==e?e:i.lineColor,ot:null!==(r=a.ot)&&void 0!==r?r:i.lineColor,bs:null!==(h=a.bs)&&void 0!==h?h:i.topColor,gs:null!==(l=a.gs)&&void 0!==l?l:i.bottomColor}},Baseline:(t,i,n,s)=>{var e,r,h,l,a,o;const u=_(t(n,s));return{ie:u.At[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,be:null!==(e=u.be)&&void 0!==e?e:i.topLineColor,ge:null!==(r=u.ge)&&void 0!==r?r:i.bottomLineColor,de:null!==(h=u.de)&&void 0!==h?h:i.topFillColor1,fe:null!==(l=u.fe)&&void 0!==l?l:i.topFillColor2,pe:null!==(a=u.pe)&&void 0!==a?a:i.bottomFillColor1,ve:null!==(o=u.ve)&&void 0!==o?o:i.bottomFillColor2}},Line:(t,i,n,s)=>{var e,r;const h=_(t(n,s));return{ie:null!==(e=h.D)&&void 0!==e?e:i.color,ot:null!==(r=h.D)&&void 0!==r?r:i.color}},Histogram:(t,i,n,s)=>{var e;return{ie:null!==(e=_(t(n,s)).D)&&void 0!==e?e:i.color}}};class xi{constructor(t){this.Bh=(t,i)=>void 0!==i?i.At:this.Tr.Ln().Ah(t),this.Tr=t,this.Oh=Si[t.Lh()]}Os(t,i){return this.Oh(this.Bh,this.Tr.F(),t,i)}}var yi;!function(t){t[t.NearestLeft=-1]=\"NearestLeft\",t[t.None=0]=\"None\",t[t.NearestRight=1]=\"NearestRight\"}(yi||(yi={}));const ki=30;class Ci{constructor(){this.Ih=[],this.Eh=new Map,this.zh=new Map}Vh(){return this.Ns()>0?this.Ih[this.Ih.length-1]:null}Nh(){return this.Ns()>0?this.Fh(0):null}On(){return this.Ns()>0?this.Fh(this.Ih.length-1):null}Ns(){return this.Ih.length}Ni(){return 0===this.Ns()}Ir(t){return null!==this.Wh(t,0)}Ah(t){return this.jh(t)}jh(t,i=0){const n=this.Wh(t,i);return null===n?null:Object.assign(Object.assign({},this.$h(n)),{Ys:this.Fh(n)})}Us(){return this.Ih}Hh(t,i,n){if(this.Ni())return null;let s=null;for(const e of n){s=Ti(s,this.Uh(t,i,e))}return s}tt(t){this.zh.clear(),this.Eh.clear(),this.Ih=t}Fh(t){return this.Ih[t].Ys}$h(t){return this.Ih[t]}Wh(t,i){const n=this.qh(t);if(null===n&&0!==i)switch(i){case-1:return this.Yh(t);case 1:return this.Xh(t);default:throw new TypeError(\"Unknown search mode\")}return n}Yh(t){let i=this.Zh(t);return i>0&&(i-=1),i!==this.Ih.length&&this.Fh(i)t.Ysi.Ys>t))}Gh(t,i,n){let s=null;for(let e=t;es.Qh&&(s.Qh=t)))}return s}Uh(t,i,n){if(this.Ni())return null;let s=null;const e=_(this.Nh()),r=_(this.On()),h=Math.max(t,e),l=Math.min(i,r),a=Math.ceil(h/ki)*ki,o=Math.max(a,Math.floor(l/ki)*ki);{const t=this.Zh(h),e=this.Kh(Math.min(l,a,i));s=Ti(s,this.Gh(t,e,n))}let u=this.Eh.get(n);void 0===u&&(u=new Map,this.Eh.set(n,u));for(let t=Math.max(a+1,h);t{this.hl=null,this.Ut().Cl()}),0)),i.Dr(),[i]):[]}Tn(){const t=[];this.Tl()||t.push(this.il),t.push(this.bn,this.xh,this.cn);const i=this.tl.map((t=>t.Th()));return t.push(...i),t}Ji(t){return[this.yh,...this.tl.map((t=>t.Ph()))]}Pn(t,i){if(i!==this.Yi&&!this.Tl())return[];const n=[...this.rn];for(const t of this.tl)n.push(t.Rh());return n}Pl(t,i){if(void 0!==this.un.autoscaleInfoProvider){const n=this.un.autoscaleInfoProvider((()=>{const n=this.Rl(t,i);return null===n?null:n.dh()}));return mi.fh(n)}return this.Rl(t,i)}Dl(){return this.un.priceFormat.minMove}Bl(){return this.Al}Dn(){var t;this.bn.gt(),this.cn.gt();for(const t of this.rn)t.gt();for(const t of this.tl)t.gt();this.xh.gt(),this.il.gt(),null===(t=this.nl)||void 0===t||t.gt()}Bt(){return _(super.Bt())}kt(t){if(!((\"Line\"===this.ll||\"Area\"===this.ll||\"Baseline\"===this.ll)&&this.un.crosshairMarkerVisible))return null;const i=this.zt.Ah(t);if(null===i)return null;return{ut:i.At[3],lt:this.Ol(),Ot:this.Ll(),Rt:this.Il(),Pt:this.El(t)}}Gr(){return this.un.title}Ct(){return this.un.visible}Tl(){return!st(this.Bt().zl())}Rl(t,i){if(!y(t)||!y(i)||this.zt.Ni())return null;const n=\"Line\"===this.ll||\"Area\"===this.ll||\"Baseline\"===this.ll||\"Histogram\"===this.ll?[3]:[2,1],s=this.zt.Hh(t,i,n);let e=null!==s?new vi(s.Jh,s.Qh):null;if(\"Histogram\"===this.Lh()){const t=this.un.base,i=new vi(t,t);e=null!==e?e.Qn(i):i}return new mi(e,this.cn.Yr())}Ol(){switch(this.ll){case\"Line\":case\"Area\":case\"Baseline\":return this.un.crosshairMarkerRadius}return 0}Ll(){switch(this.ll){case\"Line\":case\"Area\":case\"Baseline\":{const t=this.un.crosshairMarkerBorderColor;if(0!==t.length)return t}}return null}Il(){switch(this.ll){case\"Line\":case\"Area\":case\"Baseline\":return this.un.crosshairMarkerBorderWidth}return 0}El(t){switch(this.ll){case\"Line\":case\"Area\":case\"Baseline\":{const t=this.un.crosshairMarkerBackgroundColor;if(0!==t.length)return t}}return this.Ls().Os(t).ie}al(){switch(this.un.priceFormat.type){case\"custom\":this.Al={format:this.un.priceFormat.formatter};break;case\"volume\":this.Al=new ot(this.un.priceFormat.precision);break;case\"percent\":this.Al=new at(this.un.priceFormat.precision);break;default:{const t=Math.pow(10,this.un.priceFormat.precision);this.Al=new lt(t,this.un.priceFormat.minMove*t)}}null!==this.Yi&&this.Yi.Vl()}vl(){const t=this.Ut().yt();if(!t.Nl()||this.zt.Ni())return void(this.rl=[]);const i=_(this.zt.Nh());this.rl=this.el.map(((n,s)=>{const e=_(t.Fl(n.time,!0)),r=et instanceof Pi)).reduce(((t,s)=>{if(n.Ge(s)||!s.Ct())return t;const e=s.Bt(),r=s.Ln();if(e.Ni()||!r.Ir(i))return t;const h=r.Ah(i);if(null===h)return t;const l=u(s.Tt());return t.concat([e.Dt(h.At[3],l.At)])}),[]);if(0===l.length)return s;l.sort(((t,i)=>Math.abs(t-h)-Math.abs(i-h)));const a=l[0];return s=e.pn(a,r),s}}class Di extends N{constructor(){super(...arguments),this.zt=null}tt(t){this.zt=t}Z({context:t,bitmapSize:i,horizontalPixelRatio:n,verticalPixelRatio:s}){if(null===this.zt)return;const e=Math.max(1,Math.floor(n));t.lineWidth=e,function(t,i){t.save(),t.lineWidth%2&&t.translate(.5,.5),i(),t.restore()}(t,(()=>{const r=_(this.zt);if(r.$l){t.strokeStyle=r.Hl,h(t,r.Ul),t.beginPath();for(const s of r.ql){const r=Math.round(s.Yl*n);t.moveTo(r,-e),t.lineTo(r,i.height+e)}t.stroke()}if(r.Xl){t.strokeStyle=r.Zl,h(t,r.Kl),t.beginPath();for(const n of r.Gl){const r=Math.round(n.Yl*s);t.moveTo(-e,r),t.lineTo(i.width+e,r)}t.stroke()}}))}}class Bi{constructor(t){this.jt=new Di,this.vt=!0,this.tn=t}gt(){this.vt=!0}Mt(){if(this.vt){const t=this.tn.Ut().F().grid,i={Xl:t.horzLines.visible,$l:t.vertLines.visible,Zl:t.horzLines.color,Hl:t.vertLines.color,Kl:t.horzLines.style,Ul:t.vertLines.style,Gl:this.tn.fn().Jl(),ql:this.tn.Ut().yt().Jl()||[]};this.jt.tt(i),this.vt=!1}return this.jt}}class Ai{constructor(t){this.bn=new Bi(t)}Th(){return this.bn}}const Oi={Ql:4,ta:1e-4};function Li(t,i){const n=100*(t-i)/i;return i<0?-n:n}function Ii(t,i){const n=Li(t.lh(),i),s=Li(t.ah(),i);return new vi(n,s)}function Ei(t,i){const n=100*(t-i)/i+100;return i<0?-n:n}function zi(t,i){const n=Ei(t.lh(),i),s=Ei(t.ah(),i);return new vi(n,s)}function Vi(t,i){const n=Math.abs(t);if(n<1e-15)return 0;const s=Lt(n+i.ta)+i.Ql;return t<0?-s:s}function Ni(t,i){const n=Math.abs(t);if(n<1e-15)return 0;const s=Math.pow(10,n-i.Ql)-i.ta;return t<0?-s:s}function Fi(t,i){if(null===t)return null;const n=Vi(t.lh(),i),s=Vi(t.ah(),i);return new vi(n,s)}function Wi(t,i){if(null===t)return null;const n=Ni(t.lh(),i),s=Ni(t.ah(),i);return new vi(n,s)}function ji(t){if(null===t)return Oi;const i=Math.abs(t.ah()-t.lh());if(i>=1||i<1e-15)return Oi;const n=Math.ceil(Math.abs(Math.log10(i))),s=Oi.Ql+n;return{Ql:s,ta:1/Math.pow(10,s)}}class $i{constructor(t,i){if(this.ia=t,this.na=i,function(t){if(t<0)return!1;for(let i=t;i>1;i/=10)if(i%10!=0)return!1;return!0}(this.ia))this.sa=[2,2.5,2];else{this.sa=[];for(let t=this.ia;1!==t;){if(t%2==0)this.sa.push(2),t/=2;else{if(t%5!=0)throw new Error(\"unexpected base\");this.sa.push(2,2.5),t/=5}if(this.sa.length>100)throw new Error(\"something wrong with base\")}}}ea(t,i,n){const s=0===this.ia?0:1/this.ia;let e=Math.pow(10,Math.max(0,Math.ceil(Lt(t-i)))),r=0,h=this.na[0];for(;;){const t=Ot(e,s,1e-14)&&e>s+1e-14,i=Ot(e,n*h,1e-14),l=Ot(e,1,1e-14);if(!(t&&i&&l))break;e/=h,h=this.na[++r%this.na.length]}if(e<=s+1e-14&&(e=s),e=Math.max(1,e),this.sa.length>0&&(l=e,a=1,o=1e-14,Math.abs(l-a)s+1e-14;)e/=h,h=this.sa[++r%this.sa.length];var l,a,o;return e}}class Hi{constructor(t,i,n,s){this.ra=[],this.zi=t,this.ia=i,this.ha=n,this.la=s}ea(t,i){if(t=o?1:-1;let d=null,f=0;for(let n=a-u;n>o;n-=_){const s=this.la(n,i,!0);null!==d&&Math.abs(s-d)l||(f_(t.Zi())-_(i.Zi())))}var qi;!function(t){t[t.Normal=0]=\"Normal\",t[t.Logarithmic=1]=\"Logarithmic\",t[t.Percentage=2]=\"Percentage\",t[t.IndexedTo100=3]=\"IndexedTo100\"}(qi||(qi={}));const Yi=new at,Xi=new lt(100,1);class Zi{constructor(t,i,n,s){this.fa=0,this.pa=null,this.ph=null,this.va=null,this.ma={ba:!1,ga:null},this.wa=0,this.Ma=0,this.Sa=new M,this.xa=new M,this.ya=[],this.ka=null,this.Ca=null,this.Ta=null,this.Pa=null,this.Al=Xi,this.Ra=ji(null),this.Da=t,this.un=i,this.Ba=n,this.Aa=s,this.Oa=new Hi(this,100,this.La.bind(this),this.Ia.bind(this))}zl(){return this.Da}F(){return this.un}kh(t){if(S(this.un,t),this.Vl(),void 0!==t.mode&&this.Ea({lr:t.mode}),void 0!==t.scaleMargins){const i=o(t.scaleMargins.top),n=o(t.scaleMargins.bottom);if(i<0||i>1)throw new Error(`Invalid top margin - expect value between 0 and 1, given=${i}`);if(n<0||n>1||i+n>1)throw new Error(`Invalid bottom margin - expect value between 0 and 1, given=${n}`);if(i+n>1)throw new Error(`Invalid margins - sum of margins must be less than 1, given=${i+n}`);this.za(),this.Ca=null}}Va(){return this.un.autoScale}da(){return 1===this.un.mode}th(){return 2===this.un.mode}Na(){return 3===this.un.mode}lr(){return{Fn:this.un.autoScale,Fa:this.un.invertScale,lr:this.un.mode}}Ea(t){const i=this.lr();let n=null;void 0!==t.Fn&&(this.un.autoScale=t.Fn),void 0!==t.lr&&(this.un.mode=t.lr,2!==t.lr&&3!==t.lr||(this.un.autoScale=!0),this.ma.ba=!1),1===i.lr&&t.lr!==i.lr&&(!function(t,i){if(null===t)return!1;const n=Ni(t.lh(),i),s=Ni(t.ah(),i);return isFinite(n)&&isFinite(s)}(this.ph,this.Ra)?this.un.autoScale=!0:(n=Wi(this.ph,this.Ra),null!==n&&this.Wa(n))),1===t.lr&&t.lr!==i.lr&&(n=Fi(this.ph,this.Ra),null!==n&&this.Wa(n));const s=i.lr!==this.un.mode;s&&(2===i.lr||this.th())&&this.Vl(),s&&(3===i.lr||this.Na())&&this.Vl(),void 0!==t.Fa&&i.Fa!==t.Fa&&(this.un.invertScale=t.Fa,this.ja()),this.xa.m(i,this.lr())}$a(){return this.xa}T(){return this.Ba.fontSize}It(){return this.fa}Ha(t){this.fa!==t&&(this.fa=t,this.za(),this.Ca=null)}Ua(){if(this.pa)return this.pa;const t=this.It()-this.qa()-this.Ya();return this.pa=t,t}bh(){return this.Xa(),this.ph}Wa(t,i){const n=this.ph;(i||null===n&&null!==t||null!==n&&!n.rh(t))&&(this.Ca=null,this.ph=t)}Ni(){return this.Xa(),0===this.fa||!this.ph||this.ph.Ni()}Za(t){return this.Fa()?t:this.It()-1-t}Dt(t,i){return this.th()?t=Li(t,i):this.Na()&&(t=Ei(t,i)),this.Ia(t,i)}$s(t,i,n){this.Xa();const s=this.Ya(),e=_(this.bh()),r=e.lh(),h=e.ah(),l=this.Ua()-1,a=this.Fa(),o=l/(h-r),u=void 0===n?0:n.from,c=void 0===n?t.length:n.to,d=this.Ka();for(let n=u;nt.Dn()))}Vl(){this.Ca=null;const t=this.uo();let i=100;null!==t&&(i=Math.round(1/t.Dl())),this.Al=Xi,this.th()?(this.Al=Yi,i=100):this.Na()?(this.Al=new lt(100,1),i=100):null!==t&&(this.Al=t.Bl()),this.Oa=new Hi(this,i,this.La.bind(this),this.Ia.bind(this)),this.Oa.oa()}io(){this.ka=null}uo(){return this.ya[0]||null}qa(){return this.Fa()?this.un.scaleMargins.bottom*this.It()+this.Ma:this.un.scaleMargins.top*this.It()+this.wa}Ya(){return this.Fa()?this.un.scaleMargins.top*this.It()+this.wa:this.un.scaleMargins.bottom*this.It()+this.Ma}Xa(){this.ma.ba||(this.ma.ba=!0,this.fo())}za(){this.pa=null}Ia(t,i){if(this.Xa(),this.Ni())return 0;t=this.da()&&t?Vi(t,this.Ra):t;const n=_(this.bh()),s=this.Ya()+(this.Ua()-1)*(t-n.lh())/n.oh();return this.Za(s)}La(t,i){if(this.Xa(),this.Ni())return 0;const n=this.Za(t),s=_(this.bh()),e=s.lh()+s.oh()*((n-this.Ya())/(this.Ua()-1));return this.da()?Ni(e,this.Ra):e}ja(){this.Ca=null,this.Oa.oa()}fo(){const t=this.ma.ga;if(null===t)return;let i=null;const n=this.co();let s=0,e=0;for(const r of n){if(!r.Ct())continue;const n=r.Tt();if(null===n)continue;const h=r.Pl(t.Ms(),t.ci());let l=h&&h.bh();if(null!==l){switch(this.un.mode){case 1:l=Fi(l,this.Ra);break;case 2:l=Ii(l,n.At);break;case 3:l=zi(l,n.At)}if(i=null===i?l:i.Qn(_(l)),null!==h){const t=h.gh();null!==t&&(s=Math.max(s,t.above),e=Math.max(s,t.below))}}}if(s===this.wa&&e===this.Ma||(this.wa=s,this.Ma=e,this.Ca=null,this.za()),null!==i){if(i.lh()===i.ah()){const t=this.uo(),n=5*(null===t||this.th()||this.Na()?1:t.Dl());this.da()&&(i=Wi(i,this.Ra)),i=new vi(i.lh()-n,i.ah()+n),this.da()&&(i=Fi(i,this.Ra))}if(this.da()){const t=Wi(i,this.Ra),n=ji(t);if(r=n,h=this.Ra,r.Ql!==h.Ql||r.ta!==h.ta){const s=null!==this.va?Wi(this.va,this.Ra):null;this.Ra=n,i=Fi(t,n),null!==s&&(this.va=Fi(s,n))}}this.Wa(i)}else null===this.ph&&(this.Wa(new vi(-.5,.5)),this.Ra=ji(null));var r,h;this.ma.ba=!0}Ka(){return this.th()?Li:this.Na()?Ei:this.da()?t=>Vi(t,this.Ra):null}Sh(t,i){return void 0===this.Aa.priceFormatter?(void 0===i&&(i=this.Bl()),i.format(t)):this.Aa.priceFormatter(t)}}class Ki{constructor(t,i){this.ya=[],this.po=new Map,this.fa=0,this.vo=0,this.mo=1e3,this.ka=null,this.bo=new M,this.wo=t,this.Hi=i,this.Mo=new Ai(this);const n=i.F();this.So=this.xo(\"left\",n.leftPriceScale),this.yo=this.xo(\"right\",n.rightPriceScale),this.So.$a().l(this.ko.bind(this,this.So),this),this.yo.$a().l(this.ko.bind(this,this.yo),this),this.Co(n)}Co(t){if(t.leftPriceScale&&this.So.kh(t.leftPriceScale),t.rightPriceScale&&this.yo.kh(t.rightPriceScale),t.localization&&(this.So.Vl(),this.yo.Vl()),t.overlayPriceScales){const i=Array.from(this.po.values());for(const n of i){const i=_(n[0].Bt());i.kh(t.overlayPriceScales),t.localization&&i.Vl()}}}To(t){switch(t){case\"left\":return this.So;case\"right\":return this.yo}return this.po.has(t)?o(this.po.get(t))[0].Bt():null}M(){this.Ut().Po().v(this),this.So.$a().v(this),this.yo.$a().v(this),this.ya.forEach((t=>{t.M&&t.M()})),this.bo.m()}Ro(){return this.mo}Do(t){this.mo=t}Ut(){return this.Hi}$i(){return this.vo}It(){return this.fa}Bo(t){this.vo=t,this.Ao()}Ha(t){this.fa=t,this.So.Ha(t),this.yo.Ha(t),this.ya.forEach((i=>{if(this.Ge(i)){const n=i.Bt();null!==n&&n.Ha(t)}})),this.Ao()}jl(){return this.ya}Ge(t){const i=t.Bt();return null===i||this.So!==i&&this.yo!==i}Qa(t,i,n){const s=void 0!==n?n:this.Lo().Oo+1;this.Io(t,i,s)}no(t){const i=this.ya.indexOf(t);a(-1!==i,\"removeDataSource: invalid data source\"),this.ya.splice(i,1);const n=_(t.Bt()).zl();if(this.po.has(n)){const i=o(this.po.get(n)),s=i.indexOf(t);-1!==s&&(i.splice(s,1),0===i.length&&this.po.delete(n))}const s=t.Bt();s&&s.jl().indexOf(t)>=0&&s.no(t),null!==s&&(s.io(),this.Eo(s)),this.ka=null}Qe(t){return t===this.So?\"left\":t===this.yo?\"right\":\"overlay\"}zo(){return this.So}Vo(){return this.yo}No(t,i){t.ro(i)}Fo(t,i){t.ho(i),this.Ao()}Wo(t){t.lo()}jo(t,i){t.ao(i)}$o(t,i){t.oo(i),this.Ao()}Ho(t){t._o()}Ao(){this.ya.forEach((t=>{t.Dn()}))}fn(){let t=null;return this.Hi.F().rightPriceScale.visible&&0!==this.yo.jl().length?t=this.yo:this.Hi.F().leftPriceScale.visible&&0!==this.So.jl().length?t=this.So:0!==this.ya.length&&(t=this.ya[0].Bt()),null===t&&(t=this.yo),t}Je(){let t=null;return this.Hi.F().rightPriceScale.visible?t=this.yo:this.Hi.F().leftPriceScale.visible&&(t=this.So),t}Eo(t){null!==t&&t.Va()&&this.Uo(t)}qo(t){const i=this.wo.Vs();t.Ea({Fn:!0}),null!==i&&t.do(i),this.Ao()}Yo(){this.Uo(this.So),this.Uo(this.yo)}Xo(){this.Eo(this.So),this.Eo(this.yo),this.ya.forEach((t=>{this.Ge(t)&&this.Eo(t.Bt())})),this.Ao(),this.Hi.Ch()}Ja(){return null===this.ka&&(this.ka=Ui(this.ya)),this.ka}Zo(){return this.bo}Ko(){return this.Mo}Uo(t){const i=t.co();if(i&&i.length>0&&!this.wo.Ni()){const i=this.wo.Vs();null!==i&&t.do(i)}t.Dn()}Lo(){const t=this.Ja();if(0===t.length)return{Go:0,Oo:0};let i=0,n=0;for(let s=0;sn&&(n=e))}return{Go:i,Oo:n}}Io(t,i,n){let s=this.To(i);if(null===s&&(s=this.xo(i,this.Hi.F().overlayPriceScales)),this.ya.push(t),!st(i)){const n=this.po.get(i)||[];n.push(t),this.po.set(i,n)}s.Qa(t),t.Gi(s),t.Ki(n),this.Eo(s),this.ka=null}ko(t,i,n){i.lr!==n.lr&&this.Uo(t)}xo(t,i){const n=Object.assign({visible:!0,autoScale:!0},T(i)),s=new Zi(t,n,this.Hi.F().layout,this.Hi.F().localization);return s.Ha(this.It()),s}}const Gi=t=>t.getUTCFullYear(),Ji=t=>ht((t=>t.getUTCDate())(t),2),Qi=(t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:\"long\"}),tn=(t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:\"short\"}),nn=t=>ht((t=>t.getUTCMonth()+1)(t),2),sn=t=>ht(Gi(t)%100,2),en=t=>ht(Gi(t),4);class rn{constructor(t=\"yyyy-MM-dd\",i=\"default\"){this.Jo=t,this.Qo=i}t_(t){return function(t,i,n){return i.replace(/yyyy/g,en(t)).replace(/yy/g,sn(t)).replace(/MMMM/g,Qi(t,n)).replace(/MMM/g,tn(t,n)).replace(/MM/g,nn(t)).replace(/dd/g,Ji(t))}(t,this.Jo,this.Qo)}}class hn{constructor(t){this.i_=t||\"%h:%m:%s\"}t_(t){return this.i_.replace(\"%h\",ht(t.getUTCHours(),2)).replace(\"%m\",ht(t.getUTCMinutes(),2)).replace(\"%s\",ht(t.getUTCSeconds(),2))}}const ln={n_:\"yyyy-MM-dd\",s_:\"%h:%m:%s\",e_:\" \",r_:\"default\"};class an{constructor(t={}){const i=Object.assign(Object.assign({},ln),t);this.h_=new rn(i.n_,i.r_),this.l_=new hn(i.s_),this.a_=i.e_}t_(t){return`${this.h_.t_(t)}${this.a_}${this.l_.t_(t)}`}}class on{constructor(t,i=50){this.Le=0,this.Ie=1,this.Ee=1,this.Ve=new Map,this.ze=new Map,this.o_=t,this.Ne=i}t_(t){const i=t._t,n=void 0===i.__?new Date(1e3*i.u_).getTime():new Date(Date.UTC(i.__.year,i.__.month-1,i.__.day)).getTime(),s=this.Ve.get(n);if(void 0!==s)return s.c_;if(this.Le===this.Ne){const t=this.ze.get(this.Ee);this.ze.delete(this.Ee),this.Ve.delete(o(t)),this.Ee++,this.Le--}const e=this.o_(t);return this.Ve.set(n,{c_:e,$e:this.Ie}),this.ze.set(this.Ie,n),this.Le++,this.Ie++,e}}class _n{constructor(t,i){a(t<=i,\"right should be >= left\"),this.d_=t,this.f_=i}Ms(){return this.d_}ci(){return this.f_}p_(){return this.f_-this.d_+1}Ir(t){return this.d_<=t&&t<=this.f_}rh(t){return this.d_===t.Ms()&&this.f_===t.ci()}}function un(t,i){return null===t||null===i?t===i:t.rh(i)}class cn{constructor(){this.v_=new Map,this.Ve=null}m_(t,i){this.b_(i),this.Ve=null;for(let n=i;n{t<=n[0].Ys?i.push(s):n.splice(Mt(n,t,(i=>i.Ysi-t))){if(!this.v_.get(n))continue;const s=i;i=[];const e=s.length;let r=0;const h=o(this.v_.get(n)),l=h.length;let a=1/0,_=-1/0;for(let n=0;n=t&&o-_>=t&&(i.push(l),_=o)}for(;rthis.D_[this.D_.length-1]._t.u_)return i?this.D_.length-1:null;const n=Mt(this.D_,t.u_,((t,i)=>t._t.u_0}Vs(){return this.Z_(),this.O_.C_()}K_(){return this.Z_(),this.O_.T_()}G_(){const t=this.Vs();if(null===t)return null;const i={from:t.Ms(),to:t.ci()};return this.J_(i)}J_(t){const i=Math.round(t.from),n=Math.round(t.to),s=_(this.Q_()),e=_(this.tu());return{from:_(this.vn(Math.max(s,i))),to:_(this.vn(Math.min(e,n)))}}iu(t){return{from:_(this.Fl(t.from,!0)),to:_(this.Fl(t.to,!0))}}$i(){return this.vo}Bo(t){if(!isFinite(t)||t<=0)return;if(this.vo===t)return;const i=this.K_(),n=this.vo;if(this.vo=t,this.L_=!0,this.un.lockVisibleTimeRangeOnResize&&0!==n){const i=this.j_*t/n;this.j_=i}if(this.un.fixLeftEdge&&null!==i&&i.Ms()<=0){const i=n-t;this.W_-=Math.round(i/this.j_)+1,this.L_=!0}this.nu(),this.su()}Et(t){if(this.Ni()||!y(t))return 0;const i=this.eu()+this.W_-t;return this.vo-(i+.5)*this.j_-1}js(t,i){const n=this.eu(),s=void 0===i?0:i.from,e=void 0===i?t.length:i.to;for(let i=s;ii/2&&!o?n.cu=!1:n.cu=u&&t.Ys<=l||c&&t.Ys>=a,d++}return this.F_.length=d,this.N_=this.F_,this.F_}du(){this.L_=!0,this.Kn(this.un.barSpacing),this.Gn(this.un.rightOffset)}fu(t){this.L_=!0,this.R_=t,this.su(),this.Y_()}pu(t,i){const n=this.hu(t),s=this.Ks(),e=s+i*(s/10);this.Kn(e),this.un.rightBarStaysOnScroll||this.Gn(this.ou()+(n-this.hu(t)))}ro(t){this.Pa&&this._o(),null===this.Ta&&null===this.V_&&(this.Ni()||(this.Ta=t,this.vu()))}ho(t){if(null===this.V_)return;const i=At(this.vo-t,0,this.vo),n=At(this.vo-_(this.Ta),0,this.vo);0!==i&&0!==n&&this.Kn(this.V_.Ks*i/n)}lo(){null!==this.Ta&&(this.Ta=null,this.mu())}ao(t){null===this.Pa&&null===this.V_&&(this.Ni()||(this.Pa=t,this.vu()))}oo(t){if(null===this.Pa)return;const i=(this.Pa-t)/this.Ks();this.W_=_(this.V_).ou+i,this.L_=!0,this.su()}_o(){null!==this.Pa&&(this.Pa=null,this.mu())}bu(){this.gu(this.un.rightOffset)}gu(t,i=400){if(!isFinite(t))throw new RangeError(\"offset is required and must be finite number\");if(!isFinite(i)||i<=0)throw new RangeError(\"animationDuration (optional) must be finite positive number\");const n=this.W_,s=performance.now();this.Hi.Yn({wu:t=>(t-s)/i>=1,Mu:e=>{const r=(e-s)/i;return r>=1?t:n+(t-n)*r}})}gt(t,i){this.L_=!0,this.D_=t,this.B_.m_(t,i),this.su()}Su(){return this.I_}xu(){return this.E_}yu(){return this.z_}eu(){return this.R_||0}ku(t){const i=t.p_();this.au(this.vo/i),this.W_=t.ci()-this.eu(),this.su(),this.L_=!0,this.Hi.lu(),this.Hi.Ch()}Cu(){const t=this.Q_(),i=this.tu();null!==t&&null!==i&&this.ku(new _n(t,i+this.un.rightOffset))}Tu(t){const i=new _n(t.from,t.to);this.ku(i)}qi(t){return void 0!==this.Aa.timeFormatter?this.Aa.timeFormatter(t.M_):this.Pu.t_(new Date(1e3*t._t.u_))}_u(){const{handleScroll:t,handleScale:i}=this.Hi.F();return!(t.horzTouchDrag||t.mouseWheel||t.pressedMouseMove||t.vertTouchDrag||i.axisDoubleClickReset.time||i.axisPressedMouseMove.time||i.mouseWheel||i.pinch)}Q_(){return 0===this.D_.length?null:0}tu(){return 0===this.D_.length?null:this.D_.length-1}Ru(t){return(this.vo-1-t)/this.j_}hu(t){const i=this.Ru(t),n=this.eu()+this.W_-i;return Math.round(1e6*n)/1e6}au(t){const i=this.j_;this.j_=t,this.nu(),i!==this.j_&&(this.L_=!0,this.Du())}Z_(){if(!this.L_)return;if(this.L_=!1,this.Ni())return void this.Bu(dn.P_());const t=this.eu(),i=this.vo/this.j_,n=this.W_+t,s=new _n(n-i+1,n);this.Bu(new dn(s))}nu(){const t=this.Au();if(this.j_t&&(this.j_=t,this.L_=!0)}}Au(){return this.un.fixLeftEdge&&this.un.fixRightEdge&&0!==this.D_.length?this.vo/this.D_.length:this.un.minBarSpacing}su(){const t=this.Ou();this.W_>t&&(this.W_=t,this.L_=!0);const i=this.Lu();null!==i&&this.W_this.Iu(t))),this.A_.set(t.w_,i)),i.t_(t)}Iu(t){const i=function(t,i,n){switch(t){case 0:case 10:return i?n?4:3:2;case 20:case 21:case 22:case 30:case 31:case 32:case 33:return i?3:2;case 50:return 2;case 60:return 1;case 70:return 0}}(t.w_,this.un.timeVisible,this.un.secondsVisible);if(void 0!==this.un.tickMarkFormatter){const n=this.un.tickMarkFormatter(t.M_,i,this.Aa.locale);if(null!==n)return n}return function(t,i,n){const s={};switch(i){case 0:s.year=\"numeric\";break;case 1:s.month=\"short\";break;case 2:s.day=\"numeric\";break;case 3:s.hour12=!1,s.hour=\"2-digit\",s.minute=\"2-digit\";break;case 4:s.hour12=!1,s.hour=\"2-digit\",s.minute=\"2-digit\",s.second=\"2-digit\"}const e=void 0===t.__?new Date(1e3*t.u_):new Date(Date.UTC(t.__.year,t.__.month-1,t.__.day));return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()).toLocaleString(n,s)}(t._t,i,this.Aa.locale)}Bu(t){const i=this.O_;this.O_=t,un(i.C_(),this.O_.C_())||this.I_.m(),un(i.T_(),this.O_.T_())||this.E_.m(),this.Du()}Du(){this.N_=null}q_(){this.Du(),this.A_.clear()}H_(){const t=this.Aa.dateFormat;this.un.timeVisible?this.Pu=new an({n_:t,s_:this.un.secondsVisible?\"%h:%m:%s\":\"%h:%m\",e_:\" \",r_:this.Aa.locale}):this.Pu=new rn(t,this.Aa.locale)}Y_(){if(!this.un.fixLeftEdge)return;const t=this.Q_();if(null===t)return;const i=this.Vs();if(null===i)return;const n=i.Ms()-t;if(n<0){const t=this.W_-n-1;this.Gn(t)}this.nu()}X_(){this.su(),this.nu()}}class wn extends L{constructor(t){super(),this.Eu=new Map,this.zt=t}Z(t){}G(t){if(!this.zt.Ct)return;const{context:i,mediaSize:n}=t;let s=0;for(const t of this.zt.zu){if(0===t.Gt.length)continue;i.font=t.P;const e=this.Vu(i,t.Gt);e>n.width?t.pu=n.width/e:t.pu=1,s+=t.Nu*t.pu}let e=0;switch(this.zt.Fu){case\"top\":e=0;break;case\"center\":e=Math.max((n.height-s)/2,0);break;case\"bottom\":e=Math.max(n.height-s,0)}i.fillStyle=this.zt.D;for(const t of this.zt.zu){i.save();let s=0;switch(this.zt.Wu){case\"left\":i.textAlign=\"left\",s=t.Nu/2;break;case\"center\":i.textAlign=\"center\",s=n.width/2;break;case\"right\":i.textAlign=\"right\",s=n.width-1-t.Nu/2}i.translate(s,e),i.textBaseline=\"top\",i.font=t.P,i.scale(t.pu,t.pu),i.fillText(t.Gt,0,t.ju),i.restore(),e+=t.Nu*t.pu}}Vu(t,i){const n=this.$u(t.font);let s=n.get(i);return void 0===s&&(s=t.measureText(i).width,n.set(i,s)),s}$u(t){let i=this.Eu.get(t);return void 0===i&&(i=new Map,this.Eu.set(t,i)),i}}class Mn{constructor(t){this.vt=!0,this.Wt={Ct:!1,D:\"\",zu:[],Fu:\"center\",Wu:\"center\"},this.jt=new wn(this.Wt),this.$t=t}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt}St(){const t=this.$t.F(),i=this.Wt;i.Ct=t.visible,i.Ct&&(i.D=t.color,i.Wu=t.horzAlign,i.Fu=t.vertAlign,i.zu=[{Gt:t.text,P:B(t.fontSize,t.fontFamily,t.fontStyle),Nu:1.2*t.fontSize,ju:0,pu:0}])}}class Sn extends tt{constructor(t,i){super(),this.un=i,this.bn=new Mn(this)}Pn(){return[]}Tn(){return[this.bn]}F(){return this.un}Dn(){this.bn.gt()}}!function(t){t[t.OnTouchEnd=0]=\"OnTouchEnd\",t[t.OnNextTap=1]=\"OnNextTap\"}(pn||(pn={}));class xn{constructor(t,i){this.Hu=[],this.Uu=[],this.vo=0,this.qu=null,this.Yu=new M,this.Xu=new M,this.Zu=null,this.Ku=t,this.un=i,this.Gu=new A(this),this.wo=new gn(this,i.timeScale,this.un.localization),this.bt=new nt(this,i.crosshair),this.Ju=new Ri(i.crosshair),this.Qu=new Sn(this,i.watermark),this.tc(),this.Hu[0].Do(2e3),this.ic=this.nc(0),this.sc=this.nc(1)}dl(){this.ec(et.ss())}Ch(){this.ec(et.ns())}Cl(){this.ec(new et(1))}fl(t){const i=this.rc(t);this.ec(i)}hc(){return this.qu}lc(t){const i=this.qu;this.qu=t,null!==i&&this.fl(i.ac),null!==t&&this.fl(t.ac)}F(){return this.un}kh(t){S(this.un,t),this.Hu.forEach((i=>i.Co(t))),void 0!==t.timeScale&&this.wo.kh(t.timeScale),void 0!==t.localization&&this.wo.U_(t.localization),(t.leftPriceScale||t.rightPriceScale)&&this.Yu.m(),this.ic=this.nc(0),this.sc=this.nc(1),this.dl()}oc(t,i){if(\"left\"===t)return void this.kh({leftPriceScale:i});if(\"right\"===t)return void this.kh({rightPriceScale:i});const n=this._c(t);null!==n&&(n.Bt.kh(i),this.Yu.m())}_c(t){for(const i of this.Hu){const n=i.To(t);if(null!==n)return{Ht:i,Bt:n}}return null}yt(){return this.wo}uc(){return this.Hu}cc(){return this.Qu}dc(){return this.bt}fc(){return this.Xu}vc(t,i){t.Ha(i),this.lu()}Bo(t){this.vo=t,this.wo.Bo(this.vo),this.Hu.forEach((i=>i.Bo(t))),this.lu()}tc(t){const i=new Ki(this.wo,this);void 0!==t?this.Hu.splice(t,0,i):this.Hu.push(i);const n=void 0===t?this.Hu.length-1:t,s=et.ss();return s.Vn(n,{Nn:0,Fn:!0}),this.ec(s),i}No(t,i,n){t.No(i,n)}Fo(t,i,n){t.Fo(i,n),this.pl(),this.ec(this.mc(t,2))}Wo(t,i){t.Wo(i),this.ec(this.mc(t,2))}jo(t,i,n){i.Va()||t.jo(i,n)}$o(t,i,n){i.Va()||(t.$o(i,n),this.pl(),this.ec(this.mc(t,2)))}Ho(t,i){i.Va()||(t.Ho(i),this.ec(this.mc(t,2)))}qo(t,i){t.qo(i),this.ec(this.mc(t,2))}bc(t){this.wo.ro(t)}gc(t,i){const n=this.yt();if(n.Ni()||0===i)return;const s=n.$i();t=Math.max(1,Math.min(t,s)),n.pu(t,i),this.lu()}wc(t){this.Mc(0),this.Sc(t),this.xc()}yc(t){this.wo.ho(t),this.lu()}kc(){this.wo.lo(),this.Ch()}Mc(t){this.wo.ao(t)}Sc(t){this.wo.oo(t),this.lu()}xc(){this.wo._o(),this.Ch()}wt(){return this.Uu}Cc(t,i,n,s){this.bt.gn(t,i);let e=NaN,r=this.wo.ru(t);const h=this.wo.Vs();null!==h&&(r=Math.min(Math.max(h.Ms(),r),h.ci()));const l=s.fn(),a=l.Tt();null!==a&&(e=l.pn(i,a)),e=this.Ju.Wl(e,r,s),this.bt.xn(r,e,s),this.Cl(),this.Xu.m(this.bt.xt(),{x:t,y:i},n)}Tc(){this.dc().kn(),this.Cl(),this.Xu.m(null,null,null)}pl(){const t=this.bt.Ht();if(null!==t){const i=this.bt.Mn(),n=this.bt.Sn();this.Cc(i,n,null,t)}this.bt.Dn()}Pc(t,i,n){const s=this.wo.vn(0);void 0!==i&&void 0!==n&&this.wo.gt(i,n);const e=this.wo.vn(0),r=this.wo.eu(),h=this.wo.Vs();if(null!==h&&null!==s&&null!==e){const i=h.Ir(r),n=s.u_>e.u_,l=null!==t&&t>r&&!n,a=i&&this.wo.F().shiftVisibleRangeOnNewBar;if(l&&!a){const i=t-r;this.wo.Gn(this.wo.ou()-i)}}this.wo.fu(t)}bl(t){null!==t&&t.Xo()}Ke(t){const i=this.Hu.find((i=>i.Ja().includes(t)));return void 0===i?null:i}lu(){this.Qu.Dn(),this.Hu.forEach((t=>t.Xo())),this.pl()}M(){this.Hu.forEach((t=>t.M())),this.Hu.length=0,this.un.localization.priceFormatter=void 0,this.un.localization.timeFormatter=void 0}Rc(){return this.Gu}tr(){return this.Gu.F()}Po(){return this.Yu}Dc(t,i){const n=this.Hu[0],s=this.Bc(i,t,n);return this.Uu.push(s),1===this.Uu.length?this.dl():this.Ch(),s}Ac(t){const i=this.Ke(t),n=this.Uu.indexOf(t);a(-1!==n,\"Series not found\"),this.Uu.splice(n,1),_(i).no(t),t.M&&t.M()}cl(t,i){const n=_(this.Ke(t));n.no(t);const s=this._c(i);if(null===s){const s=t.Zi();n.Qa(t,i,s)}else{const e=s.Ht===n?t.Zi():void 0;s.Ht.Qa(t,i,e)}}Cu(){const t=et.ns();t.$n(),this.ec(t)}Oc(t){const i=et.ns();i.qn(t),this.ec(i)}Zn(){const t=et.ns();t.Zn(),this.ec(t)}Kn(t){const i=et.ns();i.Kn(t),this.ec(i)}Gn(t){const i=et.ns();i.Gn(t),this.ec(i)}Yn(t){const i=et.ns();i.Yn(t),this.ec(i)}Hn(){const t=et.ns();t.Hn(),this.ec(t)}Lc(){return this.un.rightPriceScale.visible?\"right\":\"left\"}Ic(){return this.sc}U(){return this.ic}Lt(t){const i=this.sc,n=this.ic;if(i===n)return i;if(t=Math.max(0,Math.min(100,Math.round(100*t))),null===this.Zu||this.Zu.bs!==n||this.Zu.gs!==i)this.Zu={bs:n,gs:i,Ec:new Map};else{const i=this.Zu.Ec.get(t);if(void 0!==i)return i}const s=function(t,i,n){const[s,e,r,h]=g(t),[l,a,o,_]=g(i),u=[d(s+n*(l-s)),d(e+n*(a-e)),d(r+n*(o-r)),f(h+n*(_-h))];return`rgba(${u[0]}, ${u[1]}, ${u[2]}, ${u[3]})`}(n,i,t/100);return this.Zu.Ec.set(t,s),s}mc(t,i){const n=new et(i);if(null!==t){const s=this.Hu.indexOf(t);n.Vn(s,{Nn:i})}return n}rc(t,i){return void 0===i&&(i=2),this.mc(this.Ke(t),i)}ec(t){this.Ku&&this.Ku(t),this.Hu.forEach((t=>t.Ko().Th().gt()))}Bc(t,i,n){const s=new Pi(this,t,i),e=void 0!==t.priceScaleId?t.priceScaleId:this.Lc();return n.Qa(s,e),st(e)||s.kh(t),s}nc(t){const i=this.un.layout;return\"gradient\"===i.background.type?0===t?i.background.topColor:i.background.bottomColor:i.background.color}}function yn(t){return!x(t)&&!k(t)}function kn(t){return x(t)}!function(t){t[t.Disabled=0]=\"Disabled\",t[t.Continuous=1]=\"Continuous\",t[t.OnDataUpdate=2]=\"OnDataUpdate\"}(vn||(vn={})),function(t){t[t.LastBar=0]=\"LastBar\",t[t.LastVisible=1]=\"LastVisible\"}(mn||(mn={})),function(t){t.Solid=\"solid\",t.VerticalGradient=\"gradient\"}(bn||(bn={}));const Cn=\"undefined\"!=typeof window;function Tn(){return!!Cn&&window.navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1}function Pn(){return!!Cn&&/iPhone|iPad|iPod/.test(window.navigator.platform)}function Rn(t){return t+t%2}function Dn(t,i){return t.zc-i.zc}function Bn(t,i,n){const s=(t.zc-i.zc)/(t._t-i._t);return Math.sign(s)*Math.min(Math.abs(s),n)}class An{constructor(t,i,n,s){this.Vc=null,this.Nc=null,this.Fc=null,this.Wc=null,this.jc=null,this.$c=0,this.Hc=0,this.Uc=t,this.qc=i,this.Yc=n,this.es=s}Xc(t,i){if(null!==this.Vc){if(this.Vc._t===i)return void(this.Vc.zc=t);if(Math.abs(this.Vc.zc-t)50)return;let n=0;const s=Bn(this.Vc,this.Nc,this.qc),e=Dn(this.Vc,this.Nc),r=[s],h=[e];if(n+=e,null!==this.Fc){const t=Bn(this.Nc,this.Fc,this.qc);if(Math.sign(t)===Math.sign(s)){const i=Dn(this.Nc,this.Fc);if(r.push(t),h.push(i),n+=i,null!==this.Wc){const t=Bn(this.Fc,this.Wc,this.qc);if(Math.sign(t)===Math.sign(s)){const i=Dn(this.Fc,this.Wc);r.push(t),h.push(i),n+=i}}}}let l=0;for(let t=0;t({width:Math.max(t.width,i.width),height:Math.max(t.height,i.height)})});return e.resizeCanvasElement(n),e}function Ln(t){Cn&&void 0!==window.chrome&&t.addEventListener(\"mousedown\",(t=>{if(1===t.button)return t.preventDefault(),!1}))}class In{constructor(t,i,n){this.Kc=0,this.Gc=null,this.Jc={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY},this.Qc=0,this.td=null,this.nd={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY},this.sd=null,this.ed=!1,this.rd=null,this.hd=null,this.ld=!1,this.ad=!1,this.od=!1,this._d=null,this.ud=null,this.dd=null,this.fd=null,this.pd=null,this.vd=null,this.md=null,this.bd=0,this.gd=!1,this.wd=!1,this.Md=!1,this.Sd=0,this.xd=null,this.yd=!Pn(),this.kd=t=>{this.Cd(t)},this.Td=t=>{if(this.Pd(t)){const i=this.Rd(t);if(++this.Qc,this.td&&this.Qc>1){const{Dd:n}=this.Bd(Vn(t),this.nd);n<30&&!this.od&&this.Ad(i,this.Ld.Od),this.Id()}}else{const i=this.Rd(t);if(++this.Kc,this.Gc&&this.Kc>1){const{Dd:n}=this.Bd(Vn(t),this.Jc);n<5&&!this.ad&&this.Ed(i,this.Ld.zd),this.Vd()}}},this.Nd=t,this.Ld=i,this.un=n,this.Fd()}M(){null!==this._d&&(this._d(),this._d=null),null!==this.ud&&(this.ud(),this.ud=null),null!==this.fd&&(this.fd(),this.fd=null),null!==this.pd&&(this.pd(),this.pd=null),null!==this.vd&&(this.vd(),this.vd=null),null!==this.dd&&(this.dd(),this.dd=null),this.Wd(),this.Vd()}jd(t){this.fd&&this.fd();const i=this.$d.bind(this);if(this.fd=()=>{this.Nd.removeEventListener(\"mousemove\",i)},this.Nd.addEventListener(\"mousemove\",i),this.Pd(t))return;const n=this.Rd(t);this.Ed(n,this.Ld.Hd),this.yd=!0}Vd(){null!==this.Gc&&clearTimeout(this.Gc),this.Kc=0,this.Gc=null,this.Jc={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY}}Id(){null!==this.td&&clearTimeout(this.td),this.Qc=0,this.td=null,this.nd={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY}}$d(t){if(this.Md||null!==this.hd)return;if(this.Pd(t))return;const i=this.Rd(t);this.Ed(i,this.Ld.Ud),this.yd=!0}qd(t){const i=Fn(t.changedTouches,_(this.xd));if(null===i)return;if(this.Sd=Nn(t),null!==this.md)return;if(this.wd)return;this.gd=!0;const n=this.Bd(Vn(i),_(this.hd)),{Yd:s,Xd:e,Dd:r}=n;if(this.ld||!(r<5)){if(!this.ld){const t=.5*s,i=e>=t&&!this.un.Zd(),n=t>e&&!this.un.Kd();i||n||(this.wd=!0),this.ld=!0,this.od=!0,this.Wd(),this.Id()}if(!this.wd){const n=this.Rd(t,i);this.Ad(n,this.Ld.Gd),zn(t)}}}Jd(t){if(0!==t.button)return;const i=this.Bd(Vn(t),_(this.rd)),{Dd:n}=i;if(n>=5&&(this.ad=!0,this.Vd()),this.ad){const i=this.Rd(t);this.Ed(i,this.Ld.Qd)}}Bd(t,i){const n=Math.abs(i.st-t.st),s=Math.abs(i.et-t.et);return{Yd:n,Xd:s,Dd:n+s}}tf(t){let i=Fn(t.changedTouches,_(this.xd));if(null===i&&0===t.touches.length&&(i=t.changedTouches[0]),null===i)return;this.xd=null,this.Sd=Nn(t),this.Wd(),this.hd=null,this.vd&&(this.vd(),this.vd=null);const n=this.Rd(t,i);if(this.Ad(n,this.Ld.if),++this.Qc,this.td&&this.Qc>1){const{Dd:t}=this.Bd(Vn(i),this.nd);t<30&&!this.od&&this.Ad(n,this.Ld.Od),this.Id()}else this.od||(this.Ad(n,this.Ld.nf),this.Ld.nf&&zn(t));0===this.Qc&&zn(t),0===t.touches.length&&this.ed&&(this.ed=!1,zn(t))}Cd(t){if(0!==t.button)return;const i=this.Rd(t);if(this.rd=null,this.Md=!1,this.pd&&(this.pd(),this.pd=null),Tn()){this.Nd.ownerDocument.documentElement.removeEventListener(\"mouseleave\",this.kd)}if(!this.Pd(t))if(this.Ed(i,this.Ld.sf),++this.Kc,this.Gc&&this.Kc>1){const{Dd:n}=this.Bd(Vn(t),this.Jc);n<5&&!this.ad&&this.Ed(i,this.Ld.zd),this.Vd()}else this.ad||this.Ed(i,this.Ld.ef)}Wd(){null!==this.sd&&(clearTimeout(this.sd),this.sd=null)}rf(t){if(null!==this.xd)return;const i=t.changedTouches[0];this.xd=i.identifier,this.Sd=Nn(t);const n=this.Nd.ownerDocument.documentElement;this.od=!1,this.ld=!1,this.wd=!1,this.hd=Vn(i),this.vd&&(this.vd(),this.vd=null);{const i=this.qd.bind(this),s=this.tf.bind(this);this.vd=()=>{n.removeEventListener(\"touchmove\",i),n.removeEventListener(\"touchend\",s)},n.addEventListener(\"touchmove\",i,{passive:!1}),n.addEventListener(\"touchend\",s,{passive:!1}),this.Wd(),this.sd=setTimeout(this.hf.bind(this,t),240)}const s=this.Rd(t,i);this.Ad(s,this.Ld.lf),this.td||(this.Qc=0,this.td=setTimeout(this.Id.bind(this),500),this.nd=Vn(i))}af(t){if(0!==t.button)return;const i=this.Nd.ownerDocument.documentElement;Tn()&&i.addEventListener(\"mouseleave\",this.kd),this.ad=!1,this.rd=Vn(t),this.pd&&(this.pd(),this.pd=null);{const t=this.Jd.bind(this),n=this.Cd.bind(this);this.pd=()=>{i.removeEventListener(\"mousemove\",t),i.removeEventListener(\"mouseup\",n)},i.addEventListener(\"mousemove\",t),i.addEventListener(\"mouseup\",n)}if(this.Md=!0,this.Pd(t))return;const n=this.Rd(t);this.Ed(n,this.Ld._f),this.Gc||(this.Kc=0,this.Gc=setTimeout(this.Vd.bind(this),500),this.Jc=Vn(t))}Fd(){this.Nd.addEventListener(\"mouseenter\",this.jd.bind(this)),this.Nd.addEventListener(\"touchcancel\",this.Wd.bind(this));{const t=this.Nd.ownerDocument,i=t=>{this.Ld.uf&&(t.composed&&this.Nd.contains(t.composedPath()[0])||t.target&&this.Nd.contains(t.target)||this.Ld.uf())};this.ud=()=>{t.removeEventListener(\"touchstart\",i)},this._d=()=>{t.removeEventListener(\"mousedown\",i)},t.addEventListener(\"mousedown\",i),t.addEventListener(\"touchstart\",i,{passive:!0})}Pn()&&(this.dd=()=>{this.Nd.removeEventListener(\"dblclick\",this.Td)},this.Nd.addEventListener(\"dblclick\",this.Td)),this.Nd.addEventListener(\"mouseleave\",this.cf.bind(this)),this.Nd.addEventListener(\"touchstart\",this.rf.bind(this),{passive:!0}),Ln(this.Nd),this.Nd.addEventListener(\"mousedown\",this.af.bind(this)),this.df(),this.Nd.addEventListener(\"touchmove\",(()=>{}),{passive:!1})}df(){void 0===this.Ld.ff&&void 0===this.Ld.pf&&void 0===this.Ld.vf||(this.Nd.addEventListener(\"touchstart\",(t=>this.mf(t.touches)),{passive:!0}),this.Nd.addEventListener(\"touchmove\",(t=>{if(2===t.touches.length&&null!==this.md&&void 0!==this.Ld.pf){const i=En(t.touches[0],t.touches[1])/this.bd;this.Ld.pf(this.md,i),zn(t)}}),{passive:!1}),this.Nd.addEventListener(\"touchend\",(t=>{this.mf(t.touches)})))}mf(t){1===t.length&&(this.gd=!1),2!==t.length||this.gd||this.ed?this.bf():this.gf(t)}gf(t){const i=this.Nd.getBoundingClientRect()||{left:0,top:0};this.md={st:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,et:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this.bd=En(t[0],t[1]),void 0!==this.Ld.ff&&this.Ld.ff(),this.Wd()}bf(){null!==this.md&&(this.md=null,void 0!==this.Ld.vf&&this.Ld.vf())}cf(t){if(this.fd&&this.fd(),this.Pd(t))return;if(!this.yd)return;const i=this.Rd(t);this.Ed(i,this.Ld.wf),this.yd=!Pn()}hf(t){const i=Fn(t.touches,_(this.xd));if(null===i)return;const n=this.Rd(t,i);this.Ad(n,this.Ld.Mf),this.od=!0,this.ed=!0}Pd(t){return t.sourceCapabilities&&void 0!==t.sourceCapabilities.firesTouchEvents?t.sourceCapabilities.firesTouchEvents:Nn(t){\"touchstart\"!==t.type&&zn(t)}}}}function En(t,i){const n=t.clientX-i.clientX,s=t.clientY-i.clientY;return Math.sqrt(n*n+s*s)}function zn(t){t.cancelable&&t.preventDefault()}function Vn(t){return{st:t.pageX,et:t.pageY}}function Nn(t){return t.timeStamp||performance.now()}function Fn(t,i){for(let n=0;n{this.Bf||this.tn.Of().Ut().Ch()},this.Lf=()=>{this.Bf||this.tn.Of().Ut().Ch()},this.tn=i,this.un=n,this.Ba=n.layout,this.Gu=s,this.If=\"left\"===e,this.Ef=document.createElement(\"div\"),this.Ef.style.height=\"100%\",this.Ef.style.overflow=\"hidden\",this.Ef.style.width=\"25px\",this.Ef.style.left=\"0\",this.Ef.style.position=\"relative\",this.zf=On(this.Ef,t({width:16,height:16})),this.zf.subscribeSuggestedBitmapSizeChanged(this.Af);const r=this.zf.canvasElement;r.style.position=\"absolute\",r.style.zIndex=\"1\",r.style.left=\"0\",r.style.top=\"0\",this.Vf=On(this.Ef,t({width:16,height:16})),this.Vf.subscribeSuggestedBitmapSizeChanged(this.Lf);const h=this.Vf.canvasElement;h.style.position=\"absolute\",h.style.zIndex=\"2\",h.style.left=\"0\",h.style.top=\"0\";const l={_f:this.Nf.bind(this),lf:this.Nf.bind(this),Qd:this.Ff.bind(this),Gd:this.Ff.bind(this),uf:this.Wf.bind(this),sf:this.jf.bind(this),if:this.jf.bind(this),zd:this.$f.bind(this),Od:this.$f.bind(this),Hd:this.Hf.bind(this),wf:this.Uf.bind(this)};this.qf=new In(this.Vf.canvasElement,l,{Zd:()=>!1,Kd:()=>!0})}M(){this.qf.M(),this.Vf.unsubscribeSuggestedBitmapSizeChanged(this.Lf),this.Vf.dispose(),this.zf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.zf.dispose(),null!==this.zi&&this.zi.eo().v(this),this.zi=null}Yf(){return this.Ef}T(){return this.Ba.fontSize}Xf(){const t=this.Gu.F();return this.zr!==t.P&&(this.Rf.Fe(),this.zr=t.P),t}Zf(){if(null===this.zi)return 0;let t=0;const i=this.Xf(),n=_(this.zf.canvasElement.getContext(\"2d\"));n.save();const s=this.zi.Jl();n.font=this.Kf(),s.length>0&&(t=Math.max(this.Rf.Si(n,s[0].ua),this.Rf.Si(n,s[s.length-1].ua)));const e=this.Gf();for(let i=e.length;i--;){const s=this.Rf.Si(n,e[i].Gt());s>t&&(t=s)}const r=this.zi.Tt();if(null!==r&&null!==this.Tf){const i=this.zi.pn(1,r),s=this.zi.pn(this.Tf.height-2,r);t=Math.max(t,this.Rf.Si(n,this.zi.Fi(Math.floor(Math.min(i,s))+.11111111111111,r)),this.Rf.Si(n,this.zi.Fi(Math.ceil(Math.max(i,s))-.11111111111111,r)))}n.restore();const h=t||34;return Rn(Math.ceil(i.k+i.C+i.O+i.L+5+h))}Jf(t){null!==this.Tf&&n(this.Tf,t)||(this.Tf=t,this.Bf=!0,this.zf.resizeCanvasElement(t),this.Vf.resizeCanvasElement(t),this.Bf=!1,this.Ef.style.width=`${t.width}px`,this.Ef.style.height=`${t.height}px`)}Qf(){return _(this.Tf).width}Gi(t){this.zi!==t&&(null!==this.zi&&this.zi.eo().v(this),this.zi=t,t.eo().l(this.Sa.bind(this),this))}Bt(){return this.zi}Fe(){const t=this.tn.tp();this.tn.Of().Ut().qo(t,_(this.Bt()))}ip(t){if(null===this.Tf)return;if(1!==t){this.np(),this.zf.applySuggestedBitmapSize();const t=s(this.zf);null!==t&&(t.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)})),this.ep(t),this.rp(t))}this.Vf.applySuggestedBitmapSize();const i=s(this.Vf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.hp(i))}lp(){return this.zf.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.zf.canvasElement,i,n)}gt(){var t;null===(t=this.zi)||void 0===t||t.Jl()}Nf(t){if(null===this.zi||this.zi.Ni()||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Of().Ut(),n=this.tn.tp();this.Pf=!0,i.No(n,this.zi,t.localY)}Ff(t){if(null===this.zi||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Of().Ut(),n=this.tn.tp(),s=this.zi;i.Fo(n,s,t.localY)}Wf(){if(null===this.zi||!this.un.handleScale.axisPressedMouseMove.price)return;const t=this.tn.Of().Ut(),i=this.tn.tp(),n=this.zi;this.Pf&&(this.Pf=!1,t.Wo(i,n))}jf(t){if(null===this.zi||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Of().Ut(),n=this.tn.tp();this.Pf=!1,i.Wo(n,this.zi)}$f(t){this.un.handleScale.axisDoubleClickReset.price&&this.Fe()}Hf(t){if(null===this.zi)return;!this.tn.Of().Ut().F().handleScale.axisPressedMouseMove.price||this.zi.th()||this.zi.Na()||this.op(1)}Uf(t){this.op(0)}Gf(){const t=[],i=null===this.zi?void 0:this.zi;return(n=>{for(let s=0;s{t.fillStyle=n.borderColor;const l=Math.max(1,Math.floor(h)),a=Math.floor(.5*h),o=Math.round(s.C*r);t.beginPath();for(const n of i)t.rect(Math.floor(e*r),Math.round(n.Yl*h)-a,o,l);t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{var r;t.font=this.Kf(),t.fillStyle=null!==(r=n.textColor)&&void 0!==r?r:this.Ba.textColor,t.textAlign=this.If?\"right\":\"left\",t.textBaseline=\"middle\";const h=this.If?Math.round(e-s.O):Math.round(e+s.C+s.O),l=i.map((i=>this.Rf.Mi(t,i.ua)));for(let n=i.length;n--;){const s=i[n];t.fillText(s.ua,h,s.Yl+l[n])}}))}np(){if(null===this.Tf||null===this.zi)return;let t=this.Tf.height/2;const i=[],n=this.zi.Ja().slice(),s=this.tn.tp(),e=this.Xf();this.zi===s.Je()&&this.tn.tp().Ja().forEach((t=>{s.Ge(t)&&n.push(t)}));const r=this.zi.jl()[0],h=this.zi;n.forEach((n=>{const e=n.Pn(s,h);e.forEach((t=>{t.Ai(null),t.Oi()&&i.push(t)})),r===n&&e.length>0&&(t=e[0].yi())})),i.forEach((t=>t.Ai(t.yi())));this.zi.F().alignLabels&&this._p(i,e,t)}_p(t,i,n){if(null===this.Tf)return;const s=t.filter((t=>t.yi()<=n)),e=t.filter((t=>t.yi()>n));s.sort(((t,i)=>i.yi()-t.yi())),s.length&&e.length&&e.push(s[0]),e.sort(((t,i)=>t.yi()-i.yi()));for(const n of t){const t=Math.floor(n.It(i)/2),s=n.yi();s>-t&&sthis.Tf.height-t&&sl-r&&n.Ai(l-r)}for(let t=1;t{if(i.Li()){i.Mt(_(this.zi)).X(t,n,this.Rf,s)}}))}hp(t){if(null===this.Tf||null===this.zi)return;const i=this.tn.Of().Ut(),n=[],s=this.tn.tp(),e=i.dc().Pn(s,this.zi);e.length&&n.push(e);const r=this.Xf(),h=this.If?\"right\":\"left\";n.forEach((i=>{i.forEach((i=>{i.Mt(_(this.zi)).X(t,r,this.Rf,h)}))}))}op(t){this.Ef.style.cursor=1===t?\"ns-resize\":\"default\"}Sa(){const t=this.Zf();this.Df{this.Bf||null===this.Sp||this.Hi().Ch()},this.Lf=()=>{this.Bf||null===this.Sp||this.Hi().Ch()},this.xp=i,this.Sp=n,this.Sp.Zo().l(this.yp.bind(this),this,!0),this.kp=document.createElement(\"td\"),this.kp.style.padding=\"0\",this.kp.style.position=\"relative\";const s=document.createElement(\"div\");s.style.width=\"100%\",s.style.height=\"100%\",s.style.position=\"relative\",s.style.overflow=\"hidden\",this.Cp=document.createElement(\"td\"),this.Cp.style.padding=\"0\",this.Tp=document.createElement(\"td\"),this.Tp.style.padding=\"0\",this.kp.appendChild(s),this.zf=On(s,t({width:16,height:16})),this.zf.subscribeSuggestedBitmapSizeChanged(this.Af);const e=this.zf.canvasElement;e.style.position=\"absolute\",e.style.zIndex=\"1\",e.style.left=\"0\",e.style.top=\"0\",this.Vf=On(s,t({width:16,height:16})),this.Vf.subscribeSuggestedBitmapSizeChanged(this.Lf);const r=this.Vf.canvasElement;r.style.position=\"absolute\",r.style.zIndex=\"2\",r.style.left=\"0\",r.style.top=\"0\",this.Pp=document.createElement(\"tr\"),this.Pp.appendChild(this.Cp),this.Pp.appendChild(this.kp),this.Pp.appendChild(this.Tp),this.Rp(),this.qf=new In(this.Vf.canvasElement,this,{Zd:()=>null===this.bp&&!this.xp.F().handleScroll.vertTouchDrag,Kd:()=>null===this.bp&&!this.xp.F().handleScroll.horzTouchDrag})}M(){null!==this.up&&this.up.M(),null!==this.cp&&this.cp.M(),this.Vf.unsubscribeSuggestedBitmapSizeChanged(this.Lf),this.Vf.dispose(),this.zf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.zf.dispose(),null!==this.Sp&&this.Sp.Zo().v(this),this.qf.M()}tp(){return _(this.Sp)}Dp(t){null!==this.Sp&&this.Sp.Zo().v(this),this.Sp=t,null!==this.Sp&&this.Sp.Zo().l(Yn.prototype.yp.bind(this),this,!0),this.Rp()}Of(){return this.xp}Yf(){return this.Pp}Rp(){if(null!==this.Sp&&(this.Bp(),0!==this.Hi().wt().length)){if(null!==this.up){const t=this.Sp.zo();this.up.Gi(_(t))}if(null!==this.cp){const t=this.Sp.Vo();this.cp.Gi(_(t))}}}Ap(){null!==this.up&&this.up.gt(),null!==this.cp&&this.cp.gt()}Ro(){return null!==this.Sp?this.Sp.Ro():0}Do(t){this.Sp&&this.Sp.Do(t)}Hd(t){if(!this.Sp)return;this.Op();const i=t.localX,n=t.localY;this.Lp(i,n,t)}_f(t){this.Op(),this.Ip(),this.Lp(t.localX,t.localY,t)}Ud(t){if(!this.Sp)return;this.Op();const i=t.localX,n=t.localY;this.Lp(i,n,t);const s=this.ir(i,n);this.Hi().lc(s&&{ac:s.ac,Ep:s.Ep})}ef(t){null!==this.Sp&&(this.Op(),this.zp(t))}Qd(t){this.Op(),this.Vp(t),this.Lp(t.localX,t.localY,t)}sf(t){null!==this.Sp&&(this.Op(),this.mp=!1,this.Np(t))}nf(t){null!==this.Sp&&this.zp(t)}Mf(t){if(this.mp=!0,null===this.bp){const i={x:t.localX,y:t.localY};this.Fp(i,i,t)}}wf(t){null!==this.Sp&&(this.Op(),this.Sp.Ut().lc(null),this.Wp())}jp(){return this.pp}ff(){this.vp=1,this.Hi().Hn()}pf(t,i){if(!this.xp.F().handleScale.pinch)return;const n=5*(i-this.vp);this.vp=i,this.Hi().gc(t.st,n)}lf(t){if(this.mp=!1,this.gp=null!==this.bp,this.Ip(),null!==this.bp){const i=this.Hi().dc();this.wp={x:i.Xt(),y:i.Zt()},this.bp={x:t.localX,y:t.localY}}}Gd(t){if(null===this.Sp)return;const i=t.localX,n=t.localY;if(null===this.bp)this.Vp(t);else{this.gp=!1;const s=_(this.wp),e=s.x+(i-this.bp.x),r=s.y+(n-this.bp.y);this.Lp(e,r,t)}}if(t){0===this.Of().F().trackingMode.exitMode&&(this.gp=!0),this.$p(),this.Np(t)}ir(t,i){const n=this.Sp;if(null===n)return null;const s=n.Ja();for(const e of s){const s=this.Hp(e.Tn(n),t,i);if(null!==s)return{ac:e,kf:s.kf,Ep:s.Ep}}return null}Up(i,n){_(\"left\"===n?this.up:this.cp).Jf(t({width:i,height:this.Tf.height}))}qp(){return this.Tf}Jf(t){n(this.Tf,t)||(this.Tf=t,this.Bf=!0,this.zf.resizeCanvasElement(t),this.Vf.resizeCanvasElement(t),this.Bf=!1,this.kp.style.width=t.width+\"px\",this.kp.style.height=t.height+\"px\")}Yp(){const t=_(this.Sp);t.Eo(t.zo()),t.Eo(t.Vo());for(const i of t.jl())if(t.Ge(i)){const n=i.Bt();null!==n&&t.Eo(n),i.Dn()}}lp(){return this.zf.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.zf.canvasElement,i,n)}ip(t){if(0===t)return;if(null===this.Sp)return;if(t>1&&this.Yp(),null!==this.up&&this.up.ip(t),null!==this.cp&&this.cp.ip(t),1!==t){this.zf.applySuggestedBitmapSize();const t=s(this.zf);null!==t&&(t.useBitmapCoordinateSpace((t=>{this.sp(t)})),this.Sp&&(this.Xp(t),this.Zp(t),this.Kp(t,Hn),this.Kp(t,Un)))}this.Vf.applySuggestedBitmapSize();const i=s(this.Vf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.Kp(i,qn),this.Gp(i))}Jp(){return this.up}Qp(){return this.cp}yp(){null!==this.Sp&&this.Sp.Zo().v(this),this.Sp=null}zp(t){const i=t.localX,n=t.localY;this.pp.g()&&this.pp.m(this.Hi().yt().ru(i),{x:i,y:n},t)}sp({context:t,bitmapSize:i}){const{width:n,height:s}=i,e=this.Hi(),r=e.U(),h=e.Ic();r===h?$(t,0,0,n,s,h):Y(t,0,0,n,s,r,h)}Xp(t){const i=_(this.Sp).Ko().Th().Mt();null!==i&&i.X(t,!1)}Zp(t){const i=this.Hi().cc();this.tv(t,Hn,jn,i),this.tv(t,Hn,$n,i)}Gp(t){this.tv(t,Hn,$n,this.Hi().dc())}Kp(t,i){const n=_(this.Sp).Ja();for(const s of n)this.tv(t,i,jn,s);for(const s of n)this.tv(t,i,$n,s)}tv(t,i,n,s){const e=_(this.Sp),r=i(s,e),h=e.Ut().hc(),l=null!==h&&h.ac===s,a=null!==h&&l&&void 0!==h.Ep?h.Ep.sr:void 0;for(const i of r){const s=i.Mt();null!==s&&n(s,t,l,a)}}Hp(t,i,n){for(const s of t){const t=s.Mt();if(null!==t&&t.ir){const e=t.ir(i,n);if(null!==e)return{kf:s,Ep:e}}}return null}Bp(){if(null===this.Sp)return;const t=this.xp,i=this.Sp.zo().F().visible,n=this.Sp.Vo().F().visible;i||null===this.up||(this.Cp.removeChild(this.up.Yf()),this.up.M(),this.up=null),n||null===this.cp||(this.Tp.removeChild(this.cp.Yf()),this.cp.M(),this.cp=null);const s=t.Ut().Rc();i&&null===this.up&&(this.up=new Wn(this,t.F(),s,\"left\"),this.Cp.appendChild(this.up.Yf())),n&&null===this.cp&&(this.cp=new Wn(this,t.F(),s,\"right\"),this.Tp.appendChild(this.cp.Yf()))}iv(t){return t.Sf&&this.mp||null!==this.bp}nv(t){return Math.max(0,Math.min(t,this.Tf.width-1))}sv(t){return Math.max(0,Math.min(t,this.Tf.height-1))}Lp(t,i,n){this.Hi().Cc(this.nv(t),this.sv(i),n,_(this.Sp))}Wp(){this.Hi().Tc()}$p(){this.gp&&(this.bp=null,this.Wp())}Fp(t,i,n){this.bp=t,this.gp=!1,this.Lp(i.x,i.y,n);const s=this.Hi().dc();this.wp={x:s.Xt(),y:s.Zt()}}Hi(){return this.xp.Ut()}Np(t){if(!this.fp)return;const i=this.Hi(),n=this.tp();if(i.Ho(n,n.fn()),this.dp=null,this.fp=!1,i.xc(),null!==this.Mp){const t=performance.now(),n=i.yt();this.Mp.pr(n.ou(),t),this.Mp.wu(t)||i.Yn(this.Mp)}}Op(){this.bp=null}Ip(){if(!this.Sp)return;if(this.Hi().Hn(),document.activeElement!==document.body&&document.activeElement!==document.documentElement)_(document.activeElement).blur();else{const t=document.getSelection();null!==t&&t.removeAllRanges()}!this.Sp.fn().Ni()&&this.Hi().yt().Ni()}Vp(t){if(null===this.Sp)return;const i=this.Hi(),n=i.yt();if(n.Ni())return;const s=this.xp.F(),e=s.handleScroll,r=s.kineticScroll;if((!e.pressedMouseMove||t.Sf)&&(!e.horzTouchDrag&&!e.vertTouchDrag||!t.Sf))return;const h=this.Sp.fn(),l=performance.now();if(null!==this.dp||this.iv(t)||(this.dp={x:t.clientX,y:t.clientY,u_:l,ev:t.localX,rv:t.localY}),null!==this.dp&&!this.fp&&(this.dp.x!==t.clientX||this.dp.y!==t.clientY)){if(t.Sf&&r.touch||!t.Sf&&r.mouse){const t=n.Ks();this.Mp=new An(.2/t,7/t,.997,15/t),this.Mp.Xc(n.ou(),this.dp.u_)}else this.Mp=null;h.Ni()||i.jo(this.Sp,h,t.localY),i.Mc(t.localX),this.fp=!0}this.fp&&(h.Ni()||i.$o(this.Sp,h,t.localY),i.Sc(t.localX),null!==this.Mp&&this.Mp.Xc(n.ou(),l))}}class Xn{constructor(i,n,s,e,r){this.vt=!0,this.Tf=t({width:0,height:0}),this.Af=()=>this.ip(3),this.If=\"left\"===i,this.Gu=s.Rc,this.un=n,this.hv=e,this.lv=r,this.Ef=document.createElement(\"div\"),this.Ef.style.width=\"25px\",this.Ef.style.height=\"100%\",this.Ef.style.overflow=\"hidden\",this.zf=On(this.Ef,t({width:16,height:16})),this.zf.subscribeSuggestedBitmapSizeChanged(this.Af)}M(){this.zf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.zf.dispose()}Yf(){return this.Ef}qp(){return this.Tf}Jf(t){n(this.Tf,t)||(this.Tf=t,this.zf.resizeCanvasElement(t),this.Ef.style.width=`${t.width}px`,this.Ef.style.height=`${t.height}px`,this.vt=!0)}ip(t){if(t<3&&!this.vt)return;if(0===this.Tf.width||0===this.Tf.height)return;this.vt=!1,this.zf.applySuggestedBitmapSize();const i=s(this.zf);null!==i&&i.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)}))}lp(){return this.zf.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.zf.canvasElement,i,n)}ye({context:t,bitmapSize:i,horizontalPixelRatio:n,verticalPixelRatio:s}){if(!this.hv())return;t.fillStyle=this.un.timeScale.borderColor;const e=Math.floor(this.Gu.F().k*n),r=Math.floor(this.Gu.F().k*s),h=this.If?i.width-e:0;t.fillRect(h,0,e,r)}sp({context:t,bitmapSize:i}){$(t,0,0,i.width,i.height,this.lv())}}function Zn(t,i){return t.w_>i.w_?t:i}class Kn{constructor(i){this.av=null,this.ov=null,this.S=null,this._v=!1,this.Tf=t({width:0,height:0}),this.uv=new M,this.Rf=new Ut(5),this.Bf=!1,this.Af=()=>{this.Bf||this.xp.Ut().Ch()},this.Lf=()=>{this.Bf||this.xp.Ut().Ch()},this.xp=i,this.un=i.F().layout,this.cv=document.createElement(\"tr\"),this.dv=document.createElement(\"td\"),this.dv.style.padding=\"0\",this.fv=document.createElement(\"td\"),this.fv.style.padding=\"0\",this.Ef=document.createElement(\"td\"),this.Ef.style.height=\"25px\",this.Ef.style.padding=\"0\",this.pv=document.createElement(\"div\"),this.pv.style.width=\"100%\",this.pv.style.height=\"100%\",this.pv.style.position=\"relative\",this.pv.style.overflow=\"hidden\",this.Ef.appendChild(this.pv),this.zf=On(this.pv,t({width:16,height:16})),this.zf.subscribeSuggestedBitmapSizeChanged(this.Af);const n=this.zf.canvasElement;n.style.position=\"absolute\",n.style.zIndex=\"1\",n.style.left=\"0\",n.style.top=\"0\",this.Vf=On(this.pv,t({width:16,height:16})),this.Vf.subscribeSuggestedBitmapSizeChanged(this.Lf);const s=this.Vf.canvasElement;s.style.position=\"absolute\",s.style.zIndex=\"2\",s.style.left=\"0\",s.style.top=\"0\",this.cv.appendChild(this.dv),this.cv.appendChild(this.Ef),this.cv.appendChild(this.fv),this.vv(),this.xp.Ut().Po().l(this.vv.bind(this),this),this.qf=new In(this.Vf.canvasElement,this,{Zd:()=>!0,Kd:()=>!1})}M(){this.qf.M(),null!==this.av&&this.av.M(),null!==this.ov&&this.ov.M(),this.Vf.unsubscribeSuggestedBitmapSizeChanged(this.Lf),this.Vf.dispose(),this.zf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.zf.dispose()}Yf(){return this.cv}mv(){return this.av}bv(){return this.ov}_f(t){if(this._v)return;this._v=!0;const i=this.xp.Ut();!i.yt().Ni()&&this.xp.F().handleScale.axisPressedMouseMove.time&&i.bc(t.localX)}lf(t){this._f(t)}uf(){const t=this.xp.Ut();!t.yt().Ni()&&this._v&&(this._v=!1,this.xp.F().handleScale.axisPressedMouseMove.time&&t.kc())}Qd(t){const i=this.xp.Ut();!i.yt().Ni()&&this.xp.F().handleScale.axisPressedMouseMove.time&&i.yc(t.localX)}Gd(t){this.Qd(t)}sf(){this._v=!1;const t=this.xp.Ut();t.yt().Ni()&&!this.xp.F().handleScale.axisPressedMouseMove.time||t.kc()}if(){this.sf()}zd(){this.xp.F().handleScale.axisDoubleClickReset.time&&this.xp.Ut().Zn()}Od(){this.zd()}Hd(){this.xp.Ut().F().handleScale.axisPressedMouseMove.time&&this.op(1)}wf(){this.op(0)}qp(){return this.Tf}gv(){return this.uv}wv(i,s,e){n(this.Tf,i)||(this.Tf=i,this.Bf=!0,this.zf.resizeCanvasElement(i),this.Vf.resizeCanvasElement(i),this.Bf=!1,this.Ef.style.width=`${i.width}px`,this.Ef.style.height=`${i.height}px`,this.uv.m(i)),null!==this.av&&this.av.Jf(t({width:s,height:i.height})),null!==this.ov&&this.ov.Jf(t({width:e,height:i.height}))}Mv(){const t=this.Sv();return Math.ceil(t.k+t.C+t.T+t.I+t.A+t.xv)}gt(){this.xp.Ut().yt().Jl()}lp(){return this.zf.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.zf.canvasElement,i,n)}ip(t){if(0===t)return;if(1!==t){this.zf.applySuggestedBitmapSize();const i=s(this.zf);null!==i&&(i.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)})),this.ep(i)),null!==this.av&&this.av.ip(t),null!==this.ov&&this.ov.ip(t)}this.Vf.applySuggestedBitmapSize();const i=s(this.Vf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.yv([this.xp.Ut().dc()],i))}sp({context:t,bitmapSize:i}){$(t,0,0,i.width,i.height,this.xp.Ut().Ic())}ye({context:t,bitmapSize:i,verticalPixelRatio:n}){if(this.xp.F().timeScale.borderVisible){t.fillStyle=this.kv();const s=Math.max(1,Math.floor(this.Sv().k*n));t.fillRect(0,0,i.width,s)}}ep(t){const i=this.xp.Ut().yt(),n=i.Jl();if(!n||0===n.length)return;let s=n.reduce(Zn,n[0]).w_;s>30&&s<50&&(s=30);const e=this.Sv(),r=i.F();r.borderVisible&&r.ticksVisible&&t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:i,verticalPixelRatio:s})=>{t.strokeStyle=this.kv(),t.fillStyle=this.kv();const r=Math.max(1,Math.floor(i)),h=Math.floor(.5*i);t.beginPath();const l=Math.round(e.C*s);for(let s=n.length;s--;){const e=Math.round(n[s].Yl*i);t.rect(e-h,0,r,l)}t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{const i=e.k+e.C+e.I+e.T/2;t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillStyle=this.$(),t.font=this.Kf();for(const e of n)if(e.w_=s){const n=e.cu?this.Cv(t,e.Yl,e.ua):e.Yl;t.fillText(e.ua,n,i)}}))}Cv(t,i,n){const s=this.Rf.Si(t,n),e=s/2,r=Math.floor(i-e)+.5;return r<0?i+=Math.abs(0-r):r+s>this.Tf.width&&(i-=Math.abs(this.Tf.width-(r+s))),i}yv(t,i){const n=this.Sv();for(const s of t)for(const t of s.Qi())t.Mt().X(i,n)}kv(){return this.xp.F().timeScale.borderColor}$(){return this.un.textColor}W(){return this.un.fontSize}Kf(){return B(this.W(),this.un.fontFamily)}Tv(){return B(this.W(),this.un.fontFamily,\"bold\")}Sv(){null===this.S&&(this.S={k:1,V:NaN,I:NaN,A:NaN,ji:NaN,C:5,T:NaN,P:\"\",Wi:new Ut,xv:0});const t=this.S,i=this.Kf();if(t.P!==i){const n=this.W();t.T=n,t.P=i,t.I=3*n/12,t.A=3*n/12,t.ji=9*n/12,t.V=0,t.xv=4*n/12,t.Wi.Fe()}return this.S}op(t){this.Ef.style.cursor=1===t?\"ew-resize\":\"default\"}vv(){const t=this.xp.Ut(),i=t.F();i.leftPriceScale.visible||null===this.av||(this.dv.removeChild(this.av.Yf()),this.av.M(),this.av=null),i.rightPriceScale.visible||null===this.ov||(this.fv.removeChild(this.ov.Yf()),this.ov.M(),this.ov=null);const n={Rc:this.xp.Ut().Rc()},s=()=>i.leftPriceScale.borderVisible&&t.yt().F().borderVisible,e=()=>t.Ic();i.leftPriceScale.visible&&null===this.av&&(this.av=new Xn(\"left\",i,n,s,e),this.dv.appendChild(this.av.Yf())),i.rightPriceScale.visible&&null===this.ov&&(this.ov=new Xn(\"right\",i,n,s,e),this.fv.appendChild(this.ov.Yf()))}}const Gn=!!Cn&&!!navigator.userAgentData&&navigator.userAgentData.brands.some((t=>t.brand.includes(\"Chromium\")))&&!!Cn&&((null===(Jn=null===navigator||void 0===navigator?void 0:navigator.userAgentData)||void 0===Jn?void 0:Jn.platform)?\"Windows\"===navigator.userAgentData.platform:navigator.userAgent.toLowerCase().indexOf(\"win\")>=0);var Jn;class Qn{constructor(t,i){var n;this.Pv=[],this.Rv=0,this.fa=0,this.vo=0,this.Dv=0,this.Bv=0,this.Av=null,this.Ov=!1,this.pp=new M,this.Xu=new M,this.Lv=null,this.Iv=t,this.un=i,this.cv=document.createElement(\"div\"),this.cv.classList.add(\"tv-lightweight-charts\"),this.cv.style.overflow=\"hidden\",this.cv.style.width=\"100%\",this.cv.style.height=\"100%\",(n=this.cv).style.userSelect=\"none\",n.style.webkitUserSelect=\"none\",n.style.msUserSelect=\"none\",n.style.MozUserSelect=\"none\",n.style.webkitTapHighlightColor=\"transparent\",this.Ev=document.createElement(\"table\"),this.Ev.setAttribute(\"cellspacing\",\"0\"),this.cv.appendChild(this.Ev),this.zv=this.Vv.bind(this),ts(this.un)&&this.Nv(!0),this.Hi=new xn(this.Ku.bind(this),this.un),this.Ut().fc().l(this.Fv.bind(this),this),this.Wv=new Kn(this),this.Ev.appendChild(this.Wv.Yf());const s=i.autoSize&&this.jv();let e=this.un.width,r=this.un.height;if(s||0===e||0===r){const i=t.getBoundingClientRect();e=e||i.width,r=r||i.height}this.$v(e,r),this.Hv(),t.appendChild(this.cv),this.Uv(),this.Hi.yt().yu().l(this.Hi.dl.bind(this.Hi),this),this.Hi.Po().l(this.Hi.dl.bind(this.Hi),this)}Ut(){return this.Hi}F(){return this.un}qv(){return this.Pv}Yv(){return this.Wv}M(){this.Nv(!1),0!==this.Rv&&window.cancelAnimationFrame(this.Rv),this.Hi.fc().v(this),this.Hi.yt().yu().v(this),this.Hi.Po().v(this),this.Hi.M();for(const t of this.Pv)this.Ev.removeChild(t.Yf()),t.jp().v(this),t.M();this.Pv=[],_(this.Wv).M(),null!==this.cv.parentElement&&this.cv.parentElement.removeChild(this.cv),this.Xu.M(),this.pp.M(),this.Xv()}$v(i,n,s=!1){if(this.fa===n&&this.vo===i)return;const e=function(i){const n=Math.floor(i.width),s=Math.floor(i.height);return t({width:n-n%2,height:s-s%2})}(t({width:i,height:n}));this.fa=e.height,this.vo=e.width;const r=this.fa+\"px\",h=this.vo+\"px\";_(this.cv).style.height=r,_(this.cv).style.width=h,this.Ev.style.height=r,this.Ev.style.width=h,s?this.Zv(et.ss(),performance.now()):this.Hi.dl()}ip(t){void 0===t&&(t=et.ss());for(let i=0;i{let s=0;for(let e=0;e{_(\"left\"===t?this.Wv.mv():this.Wv.bv()).ap(_(i),n,s)};if(this.un.timeScale.visible){const t=this.Wv.lp();if(null!==i){let n=0;this.tm()&&(h(\"left\",n,s),n=_(e.Jp()).lp().width),this.Wv.ap(i,n,s),n+=t.width,this.im()&&h(\"right\",n,s)}s+=t.height}return t({width:n,height:s})}sm(){let i=0,n=0,s=0;for(const t of this.Pv)this.tm()&&(n=Math.max(n,_(t.Jp()).Zf())),this.im()&&(s=Math.max(s,_(t.Qp()).Zf())),i+=t.Ro();n=Rn(n),s=Rn(s);const e=this.vo,r=this.fa,h=Math.max(e-n-s,0),l=this.un.timeScale.visible;let a=l?this.Wv.Mv():0;var o;a=(o=a)+o%2;const u=0+a,c=r{t.Ap()})),3===(null===(n=this.Av)||void 0===n?void 0:n.Wn())&&(this.Av.Qn(t),this.hm(),this.lm(this.Av),this.am(this.Av,i),t=this.Av,this.Av=null)),this.ip(t)}am(t,i){for(const n of t.Jn())this.ts(n,i)}lm(t){const i=this.Hi.uc();for(let n=0;n{if(this.Ov=!1,this.Rv=0,null!==this.Av){const i=this.Av;this.Av=null,this.Zv(i,t);for(const n of i.Jn())if(5===n.Un&&!n.At.wu(t)){this.Ut().Yn(n.At);break}}})))}hm(){this.Hv()}Hv(){const t=this.Hi.uc(),i=t.length,n=this.Pv.length;for(let t=i;t{const n=i.Ln().jh(t);null!==n&&e.set(i,n)}))}let r;if(null!==t){const i=null===(s=this.Hi.yt().Ui(t))||void 0===s?void 0:s.M_;void 0!==i&&(r=i)}const h=this.Ut().hc(),l=null!==h&&h.ac instanceof Pi?h.ac:void 0,a=null!==h&&void 0!==h.Ep?h.Ep.nr:void 0;return{_t:r,Ys:null!=t?t:void 0,um:null!=i?i:void 0,dm:l,fm:e,pm:a,vm:null!=n?n:void 0}}om(t,i,n){this.pp.m((()=>this._m(t,i,n)))}Fv(t,i,n){this.Xu.m((()=>this._m(t,i,n)))}Uv(){const t=this.un.timeScale.visible?\"\":\"none\";this.Wv.Yf().style.display=t}tm(){return this.Pv[0].tp().zo().F().visible}im(){return this.Pv[0].tp().Vo().F().visible}jv(){return\"ResizeObserver\"in window&&(this.Lv=new ResizeObserver((t=>{const i=t.find((t=>t.target===this.Iv));i&&this.$v(i.contentRect.width,i.contentRect.height)})),this.Lv.observe(this.Iv,{box:\"border-box\"}),!0)}Xv(){null!==this.Lv&&this.Lv.disconnect()}}function ts(t){return Boolean(t.handleScroll.mouseWheel||t.handleScale.mouseWheel)}function is(t,i,n,s){const e=n.value,r={Ys:i,_t:t,At:[e,e,e,e],M_:s};return void 0!==n.color&&(r.D=n.color),r}function ns(t){return void 0!==t.At}function ss(t){return(i,n,s,e)=>{return void 0===(r=s).open&&void 0===r.value?{_t:i,Ys:n,M_:e}:t(i,n,s,e);var r}}const es={Candlestick:ss((function(t,i,n,s){const e={Ys:i,_t:t,At:[n.open,n.high,n.low,n.close],M_:s};return void 0!==n.color&&(e.D=n.color),void 0!==n.borderColor&&(e.Ot=n.borderColor),void 0!==n.wickColor&&(e.Dh=n.wickColor),e})),Bar:ss((function(t,i,n,s){const e={Ys:i,_t:t,At:[n.open,n.high,n.low,n.close],M_:s};return void 0!==n.color&&(e.D=n.color),e})),Area:ss((function(t,i,n,s){const e=n.value,r={Ys:i,_t:t,At:[e,e,e,e],M_:s};return void 0!==n.lineColor&&(r.ot=n.lineColor),void 0!==n.topColor&&(r.bs=n.topColor),void 0!==n.bottomColor&&(r.gs=n.bottomColor),r})),Baseline:ss((function(t,i,n,s){const e=n.value,r={Ys:i,_t:t,At:[e,e,e,e],M_:s};return void 0!==n.topLineColor&&(r.be=n.topLineColor),void 0!==n.bottomLineColor&&(r.ge=n.bottomLineColor),void 0!==n.topFillColor1&&(r.de=n.topFillColor1),void 0!==n.topFillColor2&&(r.fe=n.topFillColor2),void 0!==n.bottomFillColor1&&(r.pe=n.bottomFillColor1),void 0!==n.bottomFillColor2&&(r.ve=n.bottomFillColor2),r})),Histogram:ss(is),Line:ss(is)};function rs(t){return es[t]}function hs(t){return 60*t*60*1e3}function ls(t){return 60*t*1e3}const as=[{bm:(os=1,1e3*os),w_:10},{bm:ls(1),w_:20},{bm:ls(5),w_:21},{bm:ls(30),w_:22},{bm:hs(1),w_:30},{bm:hs(3),w_:31},{bm:hs(6),w_:32},{bm:hs(12),w_:33}];var os;function _s(t,i){if(t.getUTCFullYear()!==i.getUTCFullYear())return 70;if(t.getUTCMonth()!==i.getUTCMonth())return 60;if(t.getUTCDate()!==i.getUTCDate())return 50;for(let n=as.length-1;n>=0;--n)if(Math.floor(i.getTime()/as[n].bm)!==Math.floor(t.getTime()/as[n].bm))return as[n].w_;return 0}function us(t,i=0){if(0===t.length)return;let n=0===i?null:t[i-1]._t.u_,s=null!==n?new Date(1e3*n):null,e=0;for(let r=i;r1){const i=Math.ceil(e/(t.length-1)),n=new Date(1e3*(t[0]._t.u_-i));t[0].g_=_s(new Date(1e3*t[0]._t.u_),n)}}function cs(t){if(!yn(t))throw new Error(\"time must be of type BusinessDay\");const i=new Date(Date.UTC(t.year,t.month-1,t.day,0,0,0,0));return{u_:Math.round(i.getTime()/1e3),__:t}}function ds(t){if(!kn(t))throw new Error(\"time must be of type isUTCTimestamp\");return{u_:t}}function fs(t){return 0===t.length?null:yn(t[0].time)?cs:ds}function ps(t){return kn(t)?ds(t):yn(t)?cs(t):cs(vs(t))}function vs(t){const i=new Date(t);if(isNaN(i.getTime()))throw new Error(`Invalid date string=${t}, expected format=yyyy-mm-dd`);return{day:i.getUTCDate(),month:i.getUTCMonth()+1,year:i.getUTCFullYear()}}function ms(t){k(t.time)&&(t.time=vs(t.time))}function bs(t){return{Ys:0,gm:new Map,yl:t}}function gs(t){if(void 0!==t&&0!==t.length)return{wm:t[0]._t.u_,Mm:t[t.length-1]._t.u_}}function ws(t){let i;return t.forEach((t=>{void 0===i&&(i=t.M_)})),o(i)}function Ms(t){void 0===t.M_&&(t.M_=t.time)}class Ss{constructor(){this.Sm=new Map,this.xm=new Map,this.ym=new Map,this.km=[]}M(){this.Sm.clear(),this.xm.clear(),this.ym.clear(),this.km=[]}Cm(t,i){let n=0!==this.Sm.size,s=!1;const e=this.xm.get(t);if(void 0!==e)if(1===this.xm.size)n=!1,s=!0,this.Sm.clear();else for(const i of this.km)i.pointData.gm.delete(t)&&(s=!0);let r=[];if(0!==i.length){const n=i;n.forEach((t=>Ms(t))),function(t){t.forEach(ms)}(i);const e=_(fs(i)),h=rs(t.Lh());r=n.map((i=>{const n=e(i.time);let r=this.Sm.get(n.u_);void 0===r&&(r=bs(n),this.Sm.set(n.u_,r),s=!0);const l=h(n,r.Ys,i,i.M_);return r.gm.set(t,l),l}))}n&&this.Tm(),this.Pm(t,r);let h=-1;if(s){const t=[];this.Sm.forEach((i=>{t.push({g_:0,_t:i.yl,pointData:i,M_:ws(i.gm)})})),t.sort(((t,i)=>t._t.u_-i._t.u_)),h=this.Rm(t)}return this.Dm(t,h,function(t,i){const n=gs(t),s=gs(i);if(void 0!==n&&void 0!==s)return{ml:n.Mm>=s.Mm&&n.wm>=s.wm}}(this.xm.get(t),e))}Ac(t){return this.Cm(t,[])}Bm(t,i){const n=i;Ms(n),ms(i);const s=_(fs([i]))(i.time),e=this.ym.get(t);if(void 0!==e&&s.u_t._t.u_s._t.u_?ns(i)&&n.push(i):ns(i)?n[n.length-1]=i:n.splice(-1,1),this.ym.set(t,i._t)}Pm(t,i){0!==i.length?(this.xm.set(t,i.filter(ns)),this.ym.set(t,i[i.length-1]._t)):(this.xm.delete(t),this.ym.delete(t))}Tm(){for(const t of this.km)0===t.pointData.gm.size&&this.Sm.delete(t._t.u_)}Rm(t){let i=-1;for(let n=0;n{0!==i.length&&(t=Math.max(t,i[i.length-1].Ys))})),t}Dm(t,i,n){const s={Lm:new Map,yt:{eu:this.Om()}};if(-1!==i)this.xm.forEach(((i,e)=>{s.Lm.set(e,{ar:i,Im:e===t?n:void 0})})),this.xm.has(t)||s.Lm.set(t,{ar:[],Im:n}),s.yt.Em=this.km,s.yt.zm=i;else{const i=this.xm.get(t);s.Lm.set(t,{ar:i||[],Im:n})}return s}}function xs(t,i){t.Ys=i,t.gm.forEach((t=>{t.Ys=i}))}function ys(t){return{value:t.At[3],time:t.M_}}function ks(t){const i=ys(t);return void 0!==t.D&&(i.color=t.D),i}function Cs(t){return{open:t.At[0],high:t.At[1],low:t.At[2],close:t.At[3],time:t.M_}}const Ts={Area:function(t){const i=ys(t);return void 0!==t.ot&&(i.lineColor=t.ot),void 0!==t.bs&&(i.topColor=t.bs),void 0!==t.gs&&(i.bottomColor=t.gs),i},Line:ks,Baseline:function(t){const i=ys(t);return void 0!==t.be&&(i.topLineColor=t.be),void 0!==t.ge&&(i.bottomLineColor=t.ge),void 0!==t.de&&(i.topFillColor1=t.de),void 0!==t.fe&&(i.topFillColor2=t.fe),void 0!==t.pe&&(i.bottomFillColor1=t.pe),void 0!==t.ve&&(i.bottomFillColor2=t.ve),i},Histogram:ks,Bar:function(t){const i=Cs(t);return void 0!==t.D&&(i.color=t.D),i},Candlestick:function(t){const i=Cs(t),{D:n,Ot:s,Dh:e}=t;return void 0!==n&&(i.color=n),void 0!==s&&(i.borderColor=s),void 0!==e&&(i.wickColor=e),i}};function Ps(t){return Ts[t]}const Rs={autoScale:!0,mode:0,invertScale:!1,alignLabels:!0,borderVisible:!0,borderColor:\"#2B2B43\",entireTextOnly:!1,visible:!1,ticksVisible:!1,scaleMargins:{bottom:.1,top:.2}},Ds={color:\"rgba(0, 0, 0, 0)\",visible:!1,fontSize:48,fontFamily:D,fontStyle:\"\",text:\"\",horzAlign:\"center\",vertAlign:\"center\"},Bs={width:0,height:0,autoSize:!1,layout:{background:{type:\"solid\",color:\"#FFFFFF\"},textColor:\"#191919\",fontSize:12,fontFamily:D},crosshair:{vertLine:{color:\"#9598A1\",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:\"#131722\"},horzLine:{color:\"#9598A1\",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:\"#131722\"},mode:1},grid:{vertLines:{color:\"#D6DCDE\",style:0,visible:!0},horzLines:{color:\"#D6DCDE\",style:0,visible:!0}},overlayPriceScales:Object.assign({},Rs),leftPriceScale:Object.assign(Object.assign({},Rs),{visible:!1}),rightPriceScale:Object.assign(Object.assign({},Rs),{visible:!0}),timeScale:{rightOffset:0,barSpacing:6,minBarSpacing:.5,fixLeftEdge:!1,fixRightEdge:!1,lockVisibleTimeRangeOnResize:!1,rightBarStaysOnScroll:!1,borderVisible:!0,borderColor:\"#2B2B43\",visible:!0,timeVisible:!1,secondsVisible:!0,shiftVisibleRangeOnNewBar:!0,ticksVisible:!1},watermark:Ds,localization:{locale:Cn?navigator.language:\"\",dateFormat:\"dd MMM 'yy\"},handleScroll:{mouseWheel:!0,pressedMouseMove:!0,horzTouchDrag:!0,vertTouchDrag:!0},handleScale:{axisPressedMouseMove:{time:!0,price:!0},axisDoubleClickReset:{time:!0,price:!0},mouseWheel:!0,pinch:!0},kineticScroll:{mouse:!1,touch:!0},trackingMode:{exitMode:1}},As={upColor:\"#26a69a\",downColor:\"#ef5350\",wickVisible:!0,borderVisible:!0,borderColor:\"#378658\",borderUpColor:\"#26a69a\",borderDownColor:\"#ef5350\",wickColor:\"#737375\",wickUpColor:\"#26a69a\",wickDownColor:\"#ef5350\"},Os={upColor:\"#26a69a\",downColor:\"#ef5350\",openVisible:!0,thinBars:!0},Ls={color:\"#2196f3\",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:\"\",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:\"\",lastPriceAnimation:0},Is={topColor:\"rgba( 46, 220, 135, 0.4)\",bottomColor:\"rgba( 40, 221, 100, 0)\",invertFilledArea:!1,lineColor:\"#33D778\",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:\"\",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:\"\",lastPriceAnimation:0},Es={baseValue:{type:\"price\",price:0},topFillColor1:\"rgba(38, 166, 154, 0.28)\",topFillColor2:\"rgba(38, 166, 154, 0.05)\",topLineColor:\"rgba(38, 166, 154, 1)\",bottomFillColor1:\"rgba(239, 83, 80, 0.05)\",bottomFillColor2:\"rgba(239, 83, 80, 0.28)\",bottomLineColor:\"rgba(239, 83, 80, 1)\",lineWidth:3,lineStyle:0,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:\"\",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:\"\",lastPriceAnimation:0},zs={color:\"#26a69a\",base:0},Vs={title:\"\",visible:!0,lastValueVisible:!0,priceLineVisible:!0,priceLineSource:0,priceLineWidth:1,priceLineColor:\"\",priceLineStyle:2,baseLineVisible:!0,baseLineWidth:1,baseLineColor:\"#B2B5BE\",baseLineStyle:0,priceFormat:{type:\"price\",precision:2,minMove:.01}};class Ns{constructor(t,i){this.Vm=t,this.Nm=i}applyOptions(t){this.Vm.Ut().oc(this.Nm,t)}options(){return this.zi().F()}width(){return st(this.Nm)?this.Vm.Qv(this.Nm):0}zi(){return _(this.Vm.Ut()._c(this.Nm)).Bt}}const Fs={color:\"#FF0000\",price:0,lineStyle:2,lineWidth:1,lineVisible:!0,axisLabelVisible:!0,title:\"\",axisLabelColor:\"\",axisLabelTextColor:\"\"};class Ws{constructor(t){this.wh=t}applyOptions(t){this.wh.kh(t)}options(){return this.wh.F()}Fm(){return this.wh}}class js{constructor(t,i,n){this.Ts=t,this.Wm=i,this.jm=n}priceFormatter(){return this.Ts.Bl()}priceToCoordinate(t){const i=this.Ts.Tt();return null===i?null:this.Ts.Bt().Dt(t,i.At)}coordinateToPrice(t){const i=this.Ts.Tt();return null===i?null:this.Ts.Bt().pn(t,i.At)}barsInLogicalRange(t){if(null===t)return null;const i=new dn(new _n(t.from,t.to)).C_(),n=this.Ts.Ln();if(n.Ni())return null;const s=n.jh(i.Ms(),1),e=n.jh(i.ci(),-1),r=_(n.Nh()),h=_(n.On());if(null!==s&&null!==e&&s.Ys>e.Ys)return{barsBefore:t.from-r,barsAfter:h-t.to};const l={barsBefore:null===s||s.Ys===r?t.from-r:s.Ys-r,barsAfter:null===e||e.Ys===h?h-t.to:h-e.Ys};return null!==s&&null!==e&&(l.from=s._t.__||s._t.u_,l.to=e._t.__||e._t.u_),l}setData(t){this.Ts.Lh(),this.Wm.$m(this.Ts,t)}update(t){this.Ts.Lh(),this.Wm.Hm(this.Ts,t)}dataByIndex(t,i){const n=this.Ts.Ln().jh(t,i);return null===n?null:Ps(this.seriesType())(n)}setMarkers(t){const i=t.map((t=>Object.assign(Object.assign({},t),{originalTime:t.time,time:ps(t.time)})));this.Ts.gl(i)}markers(){return this.Ts.wl().map((t=>{const{originalTime:i,time:n}=t,s=function(t,i){var n={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&i.indexOf(s)<0&&(n[s]=t[s]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var e=0;for(s=Object.getOwnPropertySymbols(t);e=1)return 0;let i=0;for(;i<8;i++){const n=Math.round(t);if(Math.abs(n-t)<1e-8)return i;t*=10}return i}(i.minMove))}function Us(t){return function(t){if(C(t.handleScale)){const i=t.handleScale;t.handleScale={axisDoubleClickReset:{time:i,price:i},axisPressedMouseMove:{time:i,price:i},mouseWheel:i,pinch:i}}else if(void 0!==t.handleScale){const{axisPressedMouseMove:i,axisDoubleClickReset:n}=t.handleScale;C(i)&&(t.handleScale.axisPressedMouseMove={time:i,price:i}),C(n)&&(t.handleScale.axisDoubleClickReset={time:n,price:n})}const i=t.handleScroll;C(i)&&(t.handleScroll={horzTouchDrag:i,vertTouchDrag:i,mouseWheel:i,pressedMouseMove:i})}(t),t}class qs{constructor(t,i){this.Zm=new Ss,this.Km=new Map,this.Gm=new Map,this.Jm=new M,this.Qm=new M;const n=void 0===i?T(Bs):S(T(Bs),Us(i));this.Vm=new Qn(t,n),this.Vm.jp().l((t=>{this.Jm.g()&&this.Jm.m(this.tb(t()))}),this),this.Vm.fc().l((t=>{this.Qm.g()&&this.Qm.m(this.tb(t()))}),this);const s=this.Vm.Ut();this.ib=new $s(s,this.Vm.Yv())}remove(){this.Vm.jp().v(this),this.Vm.fc().v(this),this.ib.M(),this.Vm.M(),this.Km.clear(),this.Gm.clear(),this.Jm.M(),this.Qm.M(),this.Zm.M()}resize(t,i,n){this.autoSizeActive()||this.Vm.$v(t,i,n)}addAreaSeries(t){return this.nb(\"Area\",Is,t)}addBaselineSeries(t){return this.nb(\"Baseline\",Es,t)}addBarSeries(t){return this.nb(\"Bar\",Os,t)}addCandlestickSeries(t={}){return function(t){void 0!==t.borderColor&&(t.borderUpColor=t.borderColor,t.borderDownColor=t.borderColor),void 0!==t.wickColor&&(t.wickUpColor=t.wickColor,t.wickDownColor=t.wickColor)}(t),this.nb(\"Candlestick\",As,t)}addHistogramSeries(t){return this.nb(\"Histogram\",zs,t)}addLineSeries(t){return this.nb(\"Line\",Ls,t)}removeSeries(t){const i=o(this.Km.get(t)),n=this.Zm.Ac(i);this.Vm.Ut().Ac(i),this.sb(n),this.Km.delete(t),this.Gm.delete(i)}$m(t,i){this.sb(this.Zm.Cm(t,i))}Hm(t,i){this.sb(this.Zm.Bm(t,i))}subscribeClick(t){this.Jm.l(t)}unsubscribeClick(t){this.Jm.p(t)}subscribeCrosshairMove(t){this.Qm.l(t)}unsubscribeCrosshairMove(t){this.Qm.p(t)}priceScale(t){return new Ns(this.Vm,t)}timeScale(){return this.ib}applyOptions(t){this.Vm.kh(Us(t))}options(){return this.Vm.F()}takeScreenshot(){return this.Vm.Gv()}autoSizeActive(){return this.Vm.nm()}nb(t,i,n={}){Hs(n.priceFormat);const s=S(T(Vs),T(i),n),e=this.Vm.Ut().Dc(t,s),r=new js(e,this,this);return this.Km.set(r,e),this.Gm.set(e,r),r}sb(t){const i=this.Vm.Ut();i.Pc(t.yt.eu,t.yt.Em,t.yt.zm),t.Lm.forEach(((t,i)=>i.tt(t.ar,t.Im))),i.lu()}eb(t){return o(this.Gm.get(t))}tb(t){const i=new Map;t.fm.forEach(((t,n)=>{const s=Ps(n.Lh())(t);a(function(t){return void 0!==t.open||void 0!==t.value}(s)),i.set(this.eb(n),s)}));const n=void 0===t.dm?void 0:this.eb(t.dm);return{time:t._t,logical:t.Ys,point:t.um,hoveredSeries:n,hoveredObjectId:t.pm,seriesData:i,sourceEvent:t.vm}}}function Ys(t,i){let n;if(k(t)){const i=document.getElementById(t);a(null!==i,`Cannot find element in DOM with id=${t}`),n=i}else n=t;return new qs(n,i)}function Xs(){return\"4.0.1\"}export{bn as ColorType,it as CrosshairMode,vn as LastPriceAnimationMode,r as LineStyle,e as LineType,yi as MismatchDirection,mn as PriceLineSource,qi as PriceScaleMode,fn as TickMarkType,pn as TrackingModeExitMode,Ys as createChart,yn as isBusinessDay,kn as isUTCTimestamp,Xs as version};\n","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */function(t){\"object\"==typeof module&&module.exports?(t.default=t,module.exports=t):\"function\"==typeof define&&define.amd?define(\"highcharts/highcharts-more\",[\"highcharts\"],function(e){return t(e),t.Highcharts=e,t}):t(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(t){\"use strict\";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:e,module:t[e]}})))}i(e,\"Extensions/Pane/PaneComposition.js\",[e[\"Core/Utilities.js\"]],function(t){let{addEvent:e,correctFloat:i,defined:s,pick:o}=t;function a(t){let e;let i=this;return t&&i.pane.forEach(s=>{r(t.chartX-i.plotLeft,t.chartY-i.plotTop,s.center)&&(e=s)}),e}function r(t,e,o,a,r){let n=!0,l=o[0],h=o[1];if(s(a)&&s(r)){let s=Math.atan2(i(e-h,8),i(t-l,8));r!==a&&(n=a>r?s>=a&&s<=Math.PI||s<=r&&s>=-Math.PI:s>=a&&s<=i(r,8))}return Math.sqrt(Math.pow(t-l,2)+Math.pow(e-h,2))<=Math.ceil(o[2]/2)&&n}function n(t){this.polar&&(t.options.inverted&&([t.x,t.y]=[t.y,t.x]),t.isInsidePlot=this.pane.some(e=>r(t.x,t.y,e.center,e.axis&&e.axis.normalizedStartAngleRad,e.axis&&e.axis.normalizedEndAngleRad)))}function l(t){let e=this.chart;t.hoverPoint&&t.hoverPoint.plotX&&t.hoverPoint.plotY&&e.hoverPane&&!r(t.hoverPoint.plotX,t.hoverPoint.plotY,e.hoverPane.center)&&(t.hoverPoint=void 0)}function h(t){let e=this.chart;e.polar?(e.hoverPane=e.getHoverPane(t),t.filter=function(i){return i.visible&&!(!t.shared&&i.directTouch)&&o(i.options.enableMouseTracking,!0)&&(!e.hoverPane||i.xAxis.pane===e.hoverPane)}):e.hoverPane=void 0}return{compose:function(t,i){let s=t.prototype;s.getHoverPane||(s.collectionsWithUpdate.push(\"pane\"),s.getHoverPane=a,e(t,\"afterIsInsidePlot\",n),e(i,\"afterGetHoverData\",l),e(i,\"beforeGetHoverData\",h))}}}),i(e,\"Extensions/Pane/PaneDefaults.js\",[],function(){return{pane:{center:[\"50%\",\"50%\"],size:\"85%\",innerSize:\"0%\",startAngle:0},background:{shape:\"circle\",borderWidth:1,borderColor:\"#cccccc\",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,\"#ffffff\"],[1,\"#e6e6e6\"]]},from:-Number.MAX_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:\"105%\"}}}),i(e,\"Extensions/Pane/Pane.js\",[e[\"Series/CenteredUtilities.js\"],e[\"Extensions/Pane/PaneComposition.js\"],e[\"Extensions/Pane/PaneDefaults.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{extend:o,merge:a,splat:r}=s;class n{constructor(t,e){this.coll=\"pane\",this.init(t,e)}init(t,e){this.chart=e,this.background=[],e.pane.push(this),this.setOptions(t)}setOptions(t){this.options=t=a(i.pane,this.chart.angular?{background:{}}:void 0,t)}render(){let t=this.options,e=this.chart.renderer;this.group||(this.group=e.g(\"pane-group\").attr({zIndex:t.zIndex||0}).add()),this.updateCenter();let s=this.options.background;if(s){let t=Math.max((s=r(s)).length,this.background.length||0);for(let e=0;ea,e.y=e.high,e._plotY=e.plotY,e.plotY=o,l[t]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=i,c?s.align||(s.align=i?\"right\":\"left\"):s.verticalAlign||(s.verticalAlign=i?\"top\":\"bottom\")}for(this.options.dataLabels=s,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments),t=n;t--;)(e=a[t])&&(e.dataLabelUpper=e.dataLabel,e.dataLabel=l[t],delete e.dataLabels,e.y=e.low,e.plotY=e._plotY)}if(o.enabled||this.hasDataLabels?.()){for(t=n;t--;)if(e=a[t]){let{plotHigh:t=0,plotLow:s=0}=e;i=o.inside?ts,e.below=!i,c?o.align||(o.align=i?\"left\":\"right\"):o.verticalAlign||(o.verticalAlign=i?\"bottom\":\"top\")}this.options.dataLabels=o,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments)}if(s.enabled)for(t=n;t--;)(e=a[t])&&(e.dataLabels=[e.dataLabelUpper,e.dataLabel].filter(function(t){return!!t}));this.options.dataLabels=h}}alignDataLabel(){n.alignDataLabel.apply(this,arguments)}modifyMarkerSettings(){let t={marker:this.options.marker,symbol:this.symbol};if(this.options.lowMarker){let{options:{marker:t,lowMarker:e}}=this;this.options.marker=g(t,e),e.symbol&&(this.symbol=e.symbol)}return t}restoreMarkerSettings(t){this.options.marker=t.marker,this.symbol=t.symbol}drawPoints(){let t,e;let i=this.points.length,s=this.modifyMarkerSettings();for(r.drawPoints.apply(this,arguments),this.restoreMarkerSettings(s),t=0;t=0&&e.plotY<=this.yAxis.len&&e.plotX>=0&&e.plotX<=this.xAxis.len),t++;for(r.drawPoints.apply(this,arguments),t=0;t● {series.name}: {point.low} - {point.high}
'},trackByArea:!0,dataLabels:{align:void 0,verticalAlign:void 0,xLow:0,xHigh:0,yLow:0,yHigh:0}}),l(f,\"afterTranslate\",function(){\"low,high\"===this.pointArrayMap.join(\",\")&&this.points.forEach(t=>{let e=t.high,i=t.plotY;t.isNull?t.plotY=void 0:(t.plotLow=i,t.plotHigh=c(e)?this.yAxis.translate(this.dataModify?this.dataModify.modifyValue(e):e,!1,!0,void 0,!0):void 0,this.dataModify&&(t.yBottom=t.plotHigh))})},{order:0}),l(f,\"afterTranslate\",function(){this.points.forEach(t=>{if(this.chart.polar)this.highToXY(t),t.plotLow=t.plotY,t.tooltipPos=[((t.plotHighX||0)+(t.plotLowX||0))/2,((t.plotHigh||0)+(t.plotLow||0))/2];else{let e=t.pos(!1,t.plotLow),i=t.pos(!1,t.plotHigh);e&&i&&(e[0]=(e[0]+i[0])/2,e[1]=(e[1]+i[1])/2),t.tooltipPos=e}})},{order:3}),p(f.prototype,{deferTranslatePolar:!0,pointArrayMap:[\"low\",\"high\"],pointClass:t,pointValKey:\"low\",setStackedPoints:o}),i.registerSeriesType(\"arearange\",f),f}),i(e,\"Series/AreaSplineRange/AreaSplineRangeSeries.js\",[e[\"Series/AreaRange/AreaRangeSeries.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{spline:{prototype:s}}=e.seriesTypes,{merge:o,extend:a}=i;class r extends t{}return r.defaultOptions=o(t.defaultOptions),a(r.prototype,{getPointSpline:s.getPointSpline}),e.registerSeriesType(\"areasplinerange\",r),r}),i(e,\"Series/BoxPlot/BoxPlotSeriesDefaults.js\",[],function(){return{threshold:null,tooltip:{pointFormat:' {series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
'},whiskerLength:\"50%\",fillColor:\"#ffffff\",lineWidth:1,medianWidth:2,whiskerWidth:2}}),i(e,\"Series/BoxPlot/BoxPlotSeries.js\",[e[\"Series/BoxPlot/BoxPlotSeriesDefaults.js\"],e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{noop:a}=i,{extend:r,merge:n,pick:l}=o;class h extends e{pointAttribs(){return{}}translate(){let t=this.yAxis,e=this.pointArrayMap;super.translate.apply(this),this.points.forEach(function(i){e.forEach(function(e){null!==i[e]&&(i[e+\"Plot\"]=t.translate(i[e],0,1,0,1))}),i.plotHigh=i.highPlot})}drawPoints(){let t=this.points,e=this.options,i=this.chart,s=i.renderer,o=!1!==this.doQuartiles,a=this.options.whiskerLength,r,n,h,p,d,c,u,g=0,f,b,m,y,x,P,S;for(let M of t){let t=(b=M.graphic)?\"animate\":\"attr\",L=M.shapeArgs,k={},v={},C={},w={},A=M.color||this.color;if(void 0!==M.plotY){let N;m=Math.round(L.width),x=(y=Math.floor(L.x))+m,P=Math.round(m/2),r=Math.floor(o?M.q1Plot:M.lowPlot),n=Math.floor(o?M.q3Plot:M.lowPlot),h=Math.floor(M.highPlot),p=Math.floor(M.lowPlot),b||(M.graphic=b=s.g(\"point\").add(this.group),M.stem=s.path().addClass(\"highcharts-boxplot-stem\").add(b),a&&(M.whiskers=s.path().addClass(\"highcharts-boxplot-whisker\").add(b)),o&&(M.box=s.path(f).addClass(\"highcharts-boxplot-box\").add(b)),M.medianShape=s.path(c).addClass(\"highcharts-boxplot-median\").add(b)),i.styledMode||(v.stroke=M.stemColor||e.stemColor||A,v[\"stroke-width\"]=l(M.stemWidth,e.stemWidth,e.lineWidth),v.dashstyle=M.stemDashStyle||e.stemDashStyle||e.dashStyle,M.stem.attr(v),a&&(C.stroke=M.whiskerColor||e.whiskerColor||A,C[\"stroke-width\"]=l(M.whiskerWidth,e.whiskerWidth,e.lineWidth),C.dashstyle=M.whiskerDashStyle||e.whiskerDashStyle||e.dashStyle,M.whiskers.attr(C)),o&&(k.fill=M.fillColor||e.fillColor||A,k.stroke=e.lineColor||A,k[\"stroke-width\"]=e.lineWidth||0,k.dashstyle=M.boxDashStyle||e.boxDashStyle||e.dashStyle,M.box.attr(k)),w.stroke=M.medianColor||e.medianColor||A,w[\"stroke-width\"]=l(M.medianWidth,e.medianWidth,e.lineWidth),w.dashstyle=M.medianDashStyle||e.medianDashStyle||e.dashStyle,M.medianShape.attr(w)),N=[[\"M\",g=y+P+(u=M.stem.strokeWidth()%2/2),n],[\"L\",g,h],[\"M\",g,r],[\"L\",g,p]],M.stem[t]({d:N}),o&&(r=Math.floor(r)+(u=M.box.strokeWidth()%2/2),n=Math.floor(n)+u,y+=u,x+=u,N=[[\"M\",y,n],[\"L\",y,r],[\"L\",x,r],[\"L\",x,n],[\"L\",y,n],[\"Z\"]],M.box[t]({d:N})),a&&(h+=u=M.whiskers.strokeWidth()%2/2,p+=u,N=[[\"M\",g-(S=/%$/.test(a)?P*parseFloat(a)/100:a/2),h],[\"L\",g+S,h],[\"M\",g-S,p],[\"L\",g+S,p]],M.whiskers[t]({d:N})),N=[[\"M\",y,d=Math.round(M.medianPlot)+(u=M.medianShape.strokeWidth()%2/2)],[\"L\",x,d]],M.medianShape[t]({d:N})}}}toYData(t){return[t.low,t.q1,t.median,t.q3,t.high]}}return h.defaultOptions=n(e.defaultOptions,t),r(h.prototype,{pointArrayMap:[\"low\",\"q1\",\"median\",\"q3\",\"high\"],pointValKey:\"high\",drawDataLabels:a,setStackedPoints:a}),s.registerSeriesType(\"boxplot\",h),h}),i(e,\"Series/Bubble/BubbleLegendDefaults.js\",[],function(){return{borderColor:void 0,borderWidth:2,className:void 0,color:void 0,connectorClassName:void 0,connectorColor:void 0,connectorDistance:60,connectorWidth:1,enabled:!1,labels:{className:void 0,allowOverlap:!1,format:\"\",formatter:void 0,align:\"right\",style:{fontSize:\"0.9em\",color:\"#000000\"},x:0,y:0},maxSize:60,minSize:10,legendIndex:0,ranges:{value:void 0,borderColor:void 0,color:void 0,connectorColor:void 0},sizeBy:\"area\",sizeByAbsoluteValue:!1,zIndex:1,zThreshold:0}}),i(e,\"Series/Bubble/BubbleLegendItem.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{parse:o}=t,{noop:a}=i,{arrayMax:r,arrayMin:n,isNumber:l,merge:h,pick:p,stableSort:d}=s;return class{constructor(t,e){this.setState=a,this.init(t,e)}init(t,e){this.options=t,this.visible=!0,this.chart=e.chart,this.legend=e}addToLegend(t){t.splice(this.options.legendIndex,0,this)}drawLegendSymbol(t){let e;let i=p(t.options.itemDistance,20),s=this.legendItem||{},o=this.options,a=o.ranges,r=o.connectorDistance;if(!a||!a.length||!l(a[0].value)){t.options.bubbleLegend.autoRanges=!0;return}d(a,function(t,e){return e.value-t.value}),this.ranges=a,this.setOptions(),this.render();let n=this.getMaxLabelSize(),h=this.ranges[0].radius,c=2*h;e=(e=r-h+n.width)>0?e:0,this.maxLabel=n,this.movementX=\"left\"===o.labels.align?e:0,s.labelWidth=c+e+i,s.labelHeight=c+n.height/2}setOptions(){let t=this.ranges,e=this.options,i=this.chart.series[e.seriesIndex],s=this.legend.baseline,a={zIndex:e.zIndex,\"stroke-width\":e.borderWidth},r={zIndex:e.zIndex,\"stroke-width\":e.connectorWidth},n={align:this.legend.options.rtl||\"left\"===e.labels.align?\"right\":\"left\",zIndex:e.zIndex},l=i.options.marker.fillOpacity,d=this.chart.styledMode;t.forEach(function(c,u){d||(a.stroke=p(c.borderColor,e.borderColor,i.color),a.fill=p(c.color,e.color,1!==l?o(i.color).setOpacity(l).get(\"rgba\"):i.color),r.stroke=p(c.connectorColor,e.connectorColor,i.color)),t[u].radius=this.getRangeRadius(c.value),t[u]=h(t[u],{center:t[0].radius-t[u].radius+s}),d||h(!0,t[u],{bubbleAttribs:h(a),connectorAttribs:h(r),labelAttribs:n})},this)}getRangeRadius(t){let e=this.options,i=this.options.seriesIndex,s=this.chart.series[i],o=e.ranges[0].value,a=e.ranges[e.ranges.length-1].value,r=e.minSize,n=e.maxSize;return s.getRadius.call(this,a,o,r,n,t)}render(){let t=this.legendItem||{},e=this.chart.renderer,i=this.options.zThreshold;for(let s of(this.symbols||(this.symbols={connectors:[],bubbleItems:[],labels:[]}),t.symbol=e.g(\"bubble-legend\"),t.label=e.g(\"bubble-legend-item\").css(this.legend.itemStyle||{}),t.symbol.translateX=0,t.symbol.translateY=0,t.symbol.add(t.label),t.label.add(t.group),this.ranges))s.value>=i&&this.renderRange(s);this.hideOverlappingLabels()}renderRange(t){let e=this.ranges[0],i=this.legend,s=this.options,o=s.labels,a=this.chart,r=a.series[s.seriesIndex],n=a.renderer,l=this.symbols,h=l.labels,p=t.center,d=Math.abs(t.radius),c=s.connectorDistance||0,u=o.align,g=i.options.rtl,f=s.borderWidth,b=s.connectorWidth,m=e.radius||0,y=p-d-f/2+b/2,x=(y%1?1:.5)-(b%2?0:.5),P=n.styledMode,S=g||\"left\"===u?-c:c;\"center\"===u&&(S=0,s.connectorDistance=0,t.labelAttribs.align=\"center\"),l.bubbleItems.push(n.circle(m,p+x,d).attr(P?{}:t.bubbleAttribs).addClass((P?\"highcharts-color-\"+r.colorIndex+\" \":\"\")+\"highcharts-bubble-legend-symbol \"+(s.className||\"\")).add(this.legendItem.symbol)),l.connectors.push(n.path(n.crispLine([[\"M\",m,y],[\"L\",m+S,y]],s.connectorWidth)).attr(P?{}:t.connectorAttribs).addClass((P?\"highcharts-color-\"+this.options.seriesIndex+\" \":\"\")+\"highcharts-bubble-legend-connectors \"+(s.connectorClassName||\"\")).add(this.legendItem.symbol));let M=n.text(this.formatLabel(t)).attr(P?{}:t.labelAttribs).css(P?{}:o.style).addClass(\"highcharts-bubble-legend-labels \"+(s.labels.className||\"\")).add(this.legendItem.symbol),L={x:m+S+s.labels.x,y:y+s.labels.y+.4*M.getBBox().height};M.attr(L),h.push(M),M.placed=!0,M.alignAttr=L}getMaxLabelSize(){let t,e;return this.symbols.labels.forEach(function(i){e=i.getBBox(!0),t=t?e.width>t.width?e:t:e}),t||{}}formatLabel(t){let i=this.options,s=i.labels.formatter,o=i.labels.format,{numberFormatter:a}=this.chart;return o?e.format(o,t):s?s.call(t):a(t.value,1)}hideOverlappingLabels(){let t=this.chart,e=this.options.labels.allowOverlap,i=this.symbols;!e&&i&&(t.hideOverlappingLabels(i.labels),i.labels.forEach(function(t,e){t.newOpacity?t.newOpacity!==t.oldOpacity&&i.connectors[e].show():i.connectors[e].hide()}))}getRanges(){let t=this.legend.bubbleLegend,e=t.chart.series,i=t.options.ranges,s,o,a=Number.MAX_VALUE,d=-Number.MAX_VALUE;return e.forEach(function(t){t.isBubble&&!t.ignoreSeries&&(o=t.zData.filter(l)).length&&(a=p(t.options.zMin,Math.min(a,Math.max(n(o),!1===t.options.displayNegative?t.options.zThreshold:-Number.MAX_VALUE))),d=p(t.options.zMax,Math.max(d,r(o))))}),s=a===d?[{value:d}]:[{value:a},{value:(a+d)/2},{value:d,autoRanges:!0}],i.length&&i[0].radius&&s.reverse(),s.forEach(function(t,e){i&&i[e]&&(s[e]=h(i[e],t))}),s}predictBubbleSizes(){let t=this.chart,e=t.legend.options,i=e.floating,s=\"horizontal\"===e.layout,o=s?t.legend.lastLineHeight:0,a=t.plotSizeX,r=t.plotSizeY,n=t.series[this.options.seriesIndex],l=n.getPxExtremes(),h=Math.ceil(l.minPxSize),p=Math.ceil(l.maxPxSize),d,c=n.options.maxSize;return i||!/%$/.test(c)?d=p:(d=(Math.min(r,a)+o)*(c=parseFloat(c))/100/(c/100+1),(s&&r-d>=a||!s&&a-d>=r)&&(d=p)),[h,Math.ceil(d)]}updateRanges(t,e){let i=this.legend.options.bubbleLegend;i.minSize=t,i.maxSize=e,i.ranges=this.getRanges()}correctSizes(){let t=this.legend,e=this.chart.series[this.options.seriesIndex].getPxExtremes();Math.abs(Math.ceil(e.maxPxSize)-this.options.maxSize)>1&&(this.updateRanges(this.options.minSize,e.maxPxSize),t.render())}}}),i(e,\"Series/Bubble/BubbleLegendComposition.js\",[e[\"Series/Bubble/BubbleLegendDefaults.js\"],e[\"Series/Bubble/BubbleLegendItem.js\"],e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{setOptions:a}=i,{composed:r}=s,{addEvent:n,objectEach:l,pushUnique:h,wrap:p}=o;function d(t,e,i){let s,o,a;let r=this.legend,n=c(this)>=0;r&&r.options.enabled&&r.bubbleLegend&&r.options.bubbleLegend.autoRanges&&n?(s=r.bubbleLegend.options,o=r.bubbleLegend.predictBubbleSizes(),r.bubbleLegend.updateRanges(o[0],o[1]),s.placed||(r.group.placed=!1,r.allItems.forEach(t=>{(a=t.legendItem||{}).group&&(a.group.translateY=void 0)})),r.render(),this.getMargins(),this.axes.forEach(function(t){t.visible&&t.render(),s.placed||(t.setScale(),t.updateNames(),l(t.ticks,function(t){t.isNew=!0,t.isNewLabel=!0}))}),s.placed=!0,this.getMargins(),t.call(this,e,i),r.bubbleLegend.correctSizes(),b(r,u(r))):(t.call(this,e,i),r&&r.options.enabled&&r.bubbleLegend&&(r.render(),b(r,u(r))))}function c(t){let e=t.series,i=0;for(;io.height&&(o.height=e[l].itemHeight);o.step=n}return i}function g(t){let i=this.bubbleLegend,s=this.options,o=s.bubbleLegend,a=c(this.chart);i&&i.ranges&&i.ranges.length&&(o.ranges.length&&(o.autoRanges=!!o.ranges[0].autoRanges),this.destroyItem(i)),a>=0&&s.enabled&&o.enabled&&(o.seriesIndex=a,this.bubbleLegend=new e(o,this),this.bubbleLegend.addToLegend(t.allItems))}function f(t){let e;if(t.defaultPrevented)return!1;let i=this.chart,s=this.visible,o=this.chart.legend;o&&o.bubbleLegend&&(this.visible=!s,this.ignoreSeries=s,e=c(i)>=0,o.bubbleLegend.visible!==e&&(o.update({bubbleLegend:{enabled:e}}),o.bubbleLegend.visible=e),this.visible=s)}function b(t,e){let i=t.allItems,s=t.options.rtl,o,a,r,n,l=0;i.forEach((t,i)=>{(n=t.legendItem||{}).group&&(o=n.group.translateX||0,a=n.y||0,((r=t.movementX)||s&&t.ranges)&&(r=s?o-t.options.maxSize/2:o+r,n.group.attr({translateX:r})),i>e[l].step&&l++,n.group.attr({translateY:Math.round(a+e[l].height/2)}),n.y=a+e[l].height/2)})}return{compose:function(e,i,s){h(r,\"Series.BubbleLegend\")&&(a({legend:{bubbleLegend:t}}),p(e.prototype,\"drawChartBox\",d),n(i,\"afterGetAllItems\",g),n(s,\"legendItemClick\",f))}}}),i(e,\"Series/Bubble/BubblePoint.js\",[e[\"Core/Series/Point.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{seriesTypes:{scatter:{prototype:{pointClass:s}}}}=e,{extend:o}=i;class a extends s{haloPath(e){return t.prototype.haloPath.call(this,0===e?0:(this.marker&&this.marker.radius||0)+e)}}return o(a.prototype,{ttBelow:!1}),a}),i(e,\"Series/Bubble/BubbleSeries.js\",[e[\"Series/Bubble/BubbleLegendComposition.js\"],e[\"Series/Bubble/BubblePoint.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,a){let{parse:r}=i,{composed:n,noop:l}=s,{series:h,seriesTypes:{column:{prototype:p},scatter:d}}=o,{addEvent:c,arrayMax:u,arrayMin:g,clamp:f,extend:b,isNumber:m,merge:y,pick:x,pushUnique:P}=a;function S(){let t=this.len,{coll:e,isXAxis:i,min:s}=this,o=i?\"xData\":\"yData\",a=(this.max||0)-(s||0),r=0,n=t,l=t/a,h;(\"xAxis\"===e||\"yAxis\"===e)&&(this.series.forEach(t=>{if(t.bubblePadding&&t.reserveSpace()){this.allowZoomOutside=!0,h=!0;let e=t[o];if(i&&((t.onPoint||t).getRadii(0,0,t),t.onPoint&&(t.radii=t.onPoint.radii)),a>0){let i=e.length;for(;i--;)if(m(e[i])&&this.dataMin<=e[i]&&e[i]<=this.max){let o=t.radii&&t.radii[i]||0;r=Math.min((e[i]-s)*l-o,r),n=Math.max((e[i]-s)*l+o,n)}}}}),h&&a>0&&!this.logarithmic&&(n-=t,l*=(t+Math.max(0,r)-Math.min(n,t))/t,[[\"min\",\"userMin\",r],[\"max\",\"userMax\",n]].forEach(t=>{void 0===x(this.options[t[0]],this[t[1]])&&(this[t[0]]+=t[2]/l)})))}class M extends d{static compose(e,i,s,o){t.compose(i,s,o),P(n,\"Series.Bubble\")&&c(e,\"foundExtremes\",S)}animate(t){!t&&this.points.length{if(s.bubblePadding&&s.reserveSpace()){let o=(s.onPoint||s).getZExtremes();o&&(e=Math.min(x(e,o.zMin),o.zMin),i=Math.max(x(i,o.zMax),o.zMax),t=!0)}}),t?(r={zMin:e,zMax:i},this.chart.bubbleZExtremes=r):r={zMin:0,zMax:0}}for(o=0,s=t.length;o0&&(p=(o-t)/h)}return n&&p>=0&&(p=Math.sqrt(p)),Math.ceil(i+p*(s-i))/2}hasData(){return!!this.processedXData.length}pointAttribs(t,e){let i=this.options.marker.fillOpacity,s=h.prototype.pointAttribs.call(this,t,e);return 1!==i&&(s.fill=r(s.fill).setOpacity(i).get(\"rgba\")),s}translate(){super.translate.call(this),this.getRadii(),this.translateBubble()}translateBubble(){let{data:t,options:e,radii:i}=this,{minPxSize:s}=this.getPxExtremes(),o=t.length;for(;o--;){let a=t[o],r=i?i[o]:0;\"z\"===this.zoneAxis&&(a.negative=(a.z||0)<(e.zThreshold||0)),m(r)&&r>=s/2?(a.marker=b(a.marker,{radius:r,width:2*r,height:2*r}),a.dlBox={x:a.plotX-r,y:a.plotY-r,width:2*r,height:2*r}):(a.shapeArgs=a.plotY=a.dlBox=void 0,a.isInside=!1)}}getPxExtremes(){let t=Math.min(this.chart.plotWidth,this.chart.plotHeight),e=e=>{let i;return\"string\"==typeof e&&(i=/%$/.test(e),e=parseInt(e,10)),i?t*e/100:e},i=e(x(this.options.minSize,8)),s=Math.max(e(x(this.options.maxSize,\"20%\")),i);return{minPxSize:i,maxPxSize:s}}getZExtremes(){let t=this.options,e=(this.zData||[]).filter(m);if(e.length){let i=x(t.zMin,f(g(e),!1===t.displayNegative?t.zThreshold||0:-Number.MAX_VALUE,Number.MAX_VALUE)),s=x(t.zMax,u(e));if(m(i)&&m(s))return{zMin:i,zMax:s}}}}return M.defaultOptions=y(d.defaultOptions,{dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{z:e}=this.point;return m(e)?t(e,-1):\"\"},inside:!0,verticalAlign:\"middle\"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,states:{hover:{radiusPlus:0}},symbol:\"circle\"},minSize:8,maxSize:\"20%\",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:\"({point.x}, {point.y}), Size: {point.z}\"},turboThreshold:0,zThreshold:0,zoneAxis:\"z\"}),b(M.prototype,{alignDataLabel:p.alignDataLabel,applyZones:l,bubblePadding:!0,isBubble:!0,pointArrayMap:[\"y\",\"z\"],pointClass:e,parallelArrays:[\"x\",\"y\",\"z\"],trackerGroups:[\"group\",\"dataLabelsGroup\"],specialGroup:\"group\",zoneAxis:\"z\"}),c(M,\"updatedData\",t=>{delete t.target.chart.bubbleZExtremes}),c(M,\"remove\",t=>{delete t.target.chart.bubbleZExtremes}),o.registerSeriesType(\"bubble\",M),M}),i(e,\"Series/ColumnRange/ColumnRangePoint.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{seriesTypes:{column:{prototype:{pointClass:{prototype:i}}},arearange:{prototype:{pointClass:s}}}}=t,{extend:o,isNumber:a}=e;class r extends s{isValid(){return a(this.low)}}return o(r.prototype,{setState:i.setState}),r}),i(e,\"Series/ColumnRange/ColumnRangeSeries.js\",[e[\"Series/ColumnRange/ColumnRangePoint.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{noop:o}=e,{seriesTypes:{arearange:a,column:r,column:{prototype:n}}}=i,{addEvent:l,clamp:h,extend:p,isNumber:d,merge:c,pick:u}=s;class g extends a{setOptions(){return c(!0,arguments[0],{stacking:void 0}),a.prototype.setOptions.apply(this,arguments)}translate(){return n.translate.apply(this)}pointAttribs(){return n.pointAttribs.apply(this,arguments)}translate3dPoints(){return n.translate3dPoints.apply(this,arguments)}translate3dShapes(){return n.translate3dShapes.apply(this,arguments)}afterColumnTranslate(){let t,e,i,s;let o=this.yAxis,a=this.xAxis,r=a.startAngleRad,n=this.chart,l=this.xAxis.isRadial,p=Math.max(n.chartWidth,n.chartHeight)+999;this.points.forEach(g=>{let f=g.shapeArgs||{},b=this.options.minPointLength,m=g.plotY,y=o.translate(g.high,0,1,0,1);if(d(y)&&d(m)){if(g.plotHigh=h(y,-p,p),g.plotLow=h(m,-p,p),s=g.plotHigh,Math.abs(t=u(g.rectPlotY,g.plotY)-g.plotHigh)● {series.name}: {point.low} - {point.high}
'},whiskerWidth:null}}),i(e,\"Series/ErrorBar/ErrorBarSeries.js\",[e[\"Series/BoxPlot/BoxPlotSeries.js\"],e[\"Series/Column/ColumnSeries.js\"],e[\"Series/ErrorBar/ErrorBarSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{arearange:a}=s.seriesTypes,{addEvent:r,merge:n,extend:l}=o;class h extends t{getColumnMetrics(){return this.linkedParent&&this.linkedParent.columnMetrics||e.prototype.getColumnMetrics.call(this)}drawDataLabels(){let t=this.pointValKey;if(a)for(let e of(a.prototype.drawDataLabels.call(this),this.points))e.y=e[t]}toYData(t){return[t.low,t.high]}}return h.defaultOptions=n(t.defaultOptions,i),r(h,\"afterTranslate\",function(){for(let t of this.points)t.plotLow=t.plotY},{order:0}),l(h.prototype,{pointArrayMap:[\"low\",\"high\"],pointValKey:\"high\",doQuartiles:!1}),s.registerSeriesType(\"errorbar\",h),h}),i(e,\"Series/Gauge/GaugePoint.js\",[e[\"Core/Series/SeriesRegistry.js\"]],function(t){let{series:{prototype:{pointClass:e}}}=t;return class extends e{setState(t){this.state=t}}}),i(e,\"Series/Gauge/GaugeSeries.js\",[e[\"Series/Gauge/GaugePoint.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{noop:o}=e,{series:a,seriesTypes:{column:r}}=i,{clamp:n,isNumber:l,extend:h,merge:p,pick:d,pInt:c,defined:u}=s;class g extends a{translate(){let t=this.yAxis,e=this.options,i=t.center;this.generatePoints(),this.points.forEach(s=>{let o=p(e.dial,s.dial),a=c(o.radius)*i[2]/200,r=c(o.baseLength)*a/100,h=c(o.rearLength)*a/100,d=o.baseWidth,g=o.topWidth,f=e.overshoot,b=t.startAngleRad+t.translate(s.y,void 0,void 0,void 0,!0);(l(f)||!1===e.wrap)&&(f=l(f)?f/180*Math.PI:0,b=n(b,t.startAngleRad-f,t.endAngleRad+f)),b=180*b/Math.PI,s.shapeType=\"path\";let m=o.path||[[\"M\",-h,-d/2],[\"L\",r,-d/2],[\"L\",a,-g/2],[\"L\",a,g/2],[\"L\",r,d/2],[\"L\",-h,d/2],[\"Z\"]];s.shapeArgs={d:m,translateX:i[0],translateY:i[1],rotation:b},s.plotX=i[0],s.plotY=i[1],u(s.y)&&t.max-t.min&&(s.percentage=(s.y-t.min)/(t.max-t.min)*100)})}drawPoints(){let t=this,e=t.chart,i=t.yAxis.center,s=t.pivot,o=t.options,a=o.pivot,r=e.renderer;t.points.forEach(i=>{let s=i.graphic,a=i.shapeArgs,n=a.d,l=p(o.dial,i.dial);s?(s.animate(a),a.d=n):i.graphic=r[i.shapeType](a).addClass(\"highcharts-dial\").add(t.group),e.styledMode||i.graphic[s?\"animate\":\"attr\"]({stroke:l.borderColor,\"stroke-width\":l.borderWidth,fill:l.backgroundColor})}),s?s.animate({translateX:i[0],translateY:i[1]}):a&&(t.pivot=r.circle(0,0,a.radius).attr({zIndex:2}).addClass(\"highcharts-pivot\").translate(i[0],i[1]).add(t.group),e.styledMode||t.pivot.attr({fill:a.backgroundColor,stroke:a.borderColor,\"stroke-width\":a.borderWidth}))}animate(t){let e=this;t||e.points.forEach(t=>{let i=t.graphic;i&&(i.attr({rotation:180*e.yAxis.startAngleRad/Math.PI}),i.animate({rotation:t.shapeArgs.rotation},e.options.animation))})}render(){this.group=this.plotGroup(\"group\",\"series\",this.visible?\"inherit\":\"hidden\",this.options.zIndex,this.chart.seriesGroup),a.prototype.render.call(this),this.group.clip(this.chart.clipRect)}setData(t,e){a.prototype.setData.call(this,t,!1),this.processData(),this.generatePoints(),d(e,!0)&&this.chart.redraw()}hasData(){return!!this.points.length}}return g.defaultOptions=p(a.defaultOptions,{dataLabels:{borderColor:\"#cccccc\",borderRadius:3,borderWidth:1,crop:!1,defer:!1,enabled:!0,verticalAlign:\"top\",y:15,zIndex:2},dial:{backgroundColor:\"#000000\",baseLength:\"70%\",baseWidth:3,borderColor:\"#cccccc\",borderWidth:0,radius:\"80%\",rearLength:\"10%\",topWidth:1},pivot:{radius:5,borderWidth:0,borderColor:\"#cccccc\",backgroundColor:\"#000000\"},tooltip:{headerFormat:\"\"},showInLegend:!1}),h(g.prototype,{angular:!0,directTouch:!0,drawGraph:o,drawTracker:r.prototype.drawTracker,fixedBox:!0,forceDL:!0,noSharedTooltip:!0,pointClass:t,trackerGroups:[\"group\",\"dataLabelsGroup\"]}),i.registerSeriesType(\"gauge\",g),g}),i(e,\"Series/DragNodesComposition.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{composed:i}=t,{addEvent:s,pushUnique:o}=e;function a(){let t,e,i;let o=this;o.container&&(t=s(o.container,\"mousedown\",t=>{let a=o.hoverPoint;a&&a.series&&a.series.hasDraggableNodes&&a.series.options.draggable&&(a.series.onMouseDown(a,t),e=s(o.container,\"mousemove\",t=>a&&a.series&&a.series.onMouseMove(a,t)),i=s(o.container.ownerDocument,\"mouseup\",t=>(e(),i(),a&&a.series&&a.series.onMouseUp(a,t))))})),s(o,\"destroy\",function(){t()})}return{compose:function(t){o(i,\"DragNodes\")&&s(t,\"load\",a)},onMouseDown:function(t,e){let i=this.chart.pointer?.normalize(e)||e;t.fixedPosition={chartX:i.chartX,chartY:i.chartY,plotX:t.plotX,plotY:t.plotY},t.inDragMode=!0},onMouseMove:function(t,e){if(t.fixedPosition&&t.inDragMode){let i,s;let o=this.chart,a=o.pointer?.normalize(e)||e,r=t.fixedPosition.chartX-a.chartX,n=t.fixedPosition.chartY-a.chartY,l=o.graphLayoutsLookup;(Math.abs(r)>5||Math.abs(n)>5)&&(i=t.fixedPosition.plotX-r,s=t.fixedPosition.plotY-n,o.isInsidePlot(i,s)&&(t.plotX=i,t.plotY=s,t.hasDragged=!0,this.redrawHalo(t),l.forEach(t=>{t.restartSimulation()})))}},onMouseUp:function(t){t.fixedPosition&&(t.hasDragged&&(this.layout.enableSimulation?this.layout.start():this.chart.redraw()),t.inDragMode=t.hasDragged=!1,this.options.fixedDraggable||delete t.fixedPosition)},redrawHalo:function(t){t&&this.halo&&this.halo.attr({d:t.haloPath(this.options.states.hover.halo.size)})}}}),i(e,\"Series/GraphLayoutComposition.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{setAnimation:s}=t,{composed:o}=e,{addEvent:a,pushUnique:r}=i;function n(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation()}),this.redraw())}function l(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation(!1)}),this.redraw())}function h(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(t=>{t.stop()})}function p(){let t,e=!1,i=i=>{i.maxIterations--&&isFinite(i.temperature)&&!i.isStable()&&!i.enableSimulation&&(i.beforeStep&&i.beforeStep(),i.step(),t=!1,e=!0)};if(this.graphLayoutsLookup){for(s(!1,this),this.graphLayoutsLookup.forEach(t=>t.start());!t;)t=!0,this.graphLayoutsLookup.forEach(i);e&&this.series.forEach(t=>{t&&t.layout&&t.render()})}}return{compose:function(t){r(o,\"GraphLayout\")&&(a(t,\"afterPrint\",n),a(t,\"beforePrint\",l),a(t,\"predraw\",h),a(t,\"render\",p))},integrations:{},layouts:{}}}),i(e,\"Series/PackedBubble/PackedBubblePoint.js\",[e[\"Core/Chart/Chart.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Series/SeriesRegistry.js\"]],function(t,e,i){let{seriesTypes:{bubble:{prototype:{pointClass:s}}}}=i;return class extends s{destroy(){return this.series.layout&&this.series.layout.removeElementFromCollection(this,this.series.layout.nodes),e.prototype.destroy.apply(this,arguments)}firePointEvent(){let t=this.series.options;if(this.isParentNode&&t.parentNode){let i=t.allowPointSelect;t.allowPointSelect=t.parentNode.allowPointSelect,e.prototype.firePointEvent.apply(this,arguments),t.allowPointSelect=i}else e.prototype.firePointEvent.apply(this,arguments)}select(){let i=this.series.chart;this.isParentNode?(i.getSelectedPoints=i.getSelectedParentNodes,e.prototype.select.apply(this,arguments),i.getSelectedPoints=t.prototype.getSelectedPoints):e.prototype.select.apply(this,arguments)}}}),i(e,\"Series/PackedBubble/PackedBubbleSeriesDefaults.js\",[e[\"Core/Utilities.js\"]],function(t){let{isNumber:e}=t;return{minSize:\"10%\",maxSize:\"50%\",sizeBy:\"area\",zoneAxis:\"y\",crisp:!1,tooltip:{pointFormat:\"Value: {point.value}\"},draggable:!0,useSimulation:!0,parentNode:{allowPointSelect:!1},dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):\"\"},parentNodeFormatter:function(){return this.name},parentNodeTextPath:{enabled:!0},padding:0,style:{transition:\"opacity 2000ms\"}},layoutAlgorithm:{initialPositions:\"circle\",initialPositionRadius:20,bubblePadding:5,parentNodeLimit:!1,seriesInteraction:!0,dragBetweenSeries:!1,parentNodeOptions:{maxIterations:400,gravitationalConstant:.03,maxSpeed:50,initialPositionRadius:100,seriesInteraction:!0,marker:{fillColor:null,fillOpacity:1,lineWidth:null,lineColor:null,symbol:\"circle\"}},enableSimulation:!0,type:\"packedbubble\",integration:\"packedbubble\",maxIterations:1e3,splitSeries:!1,maxSpeed:5,gravitationalConstant:.01,friction:-.981}}}),i(e,\"Series/Networkgraph/VerletIntegration.js\",[],function(){return{attractive:function(t,e,i){let s=t.getMass(),o=-i.x*e*this.diffTemperature,a=-i.y*e*this.diffTemperature;t.fromNode.fixedPosition||(t.fromNode.plotX-=o*s.fromNode/t.fromNode.degree,t.fromNode.plotY-=a*s.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.plotX+=o*s.toNode/t.toNode.degree,t.toNode.plotY+=a*s.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return(e-t)/t},barycenter:function(){let t=this.options.gravitationalConstant,e=this.barycenter.xFactor,i=this.barycenter.yFactor;e=(e-(this.box.left+this.box.width)/2)*t,i=(i-(this.box.top+this.box.height)/2)*t,this.nodes.forEach(function(t){t.fixedPosition||(t.plotX-=e/t.mass/t.degree,t.plotY-=i/t.mass/t.degree)})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.5)},integrate:function(t,e){let i=-t.options.friction,s=t.options.maxSpeed,o=e.prevX,a=e.prevY,r=(e.plotX+e.dispX-o)*i,n=(e.plotY+e.dispY-a)*i,l=Math.abs,h=l(r)/(r||1),p=l(n)/(n||1);r=h*Math.min(s,Math.abs(r)),n=p*Math.min(s,Math.abs(n)),e.prevX=e.plotX+e.dispX,e.prevY=e.plotY+e.dispY,e.plotX+=r,e.plotY+=n,e.temperature=t.vectorLength({x:r,y:n})},repulsive:function(t,e,i){let s=e*this.diffTemperature/t.mass/t.degree;t.fixedPosition||(t.plotX+=i.x*s,t.plotY+=i.y*s)},repulsiveForceFunction:function(t,e){return(e-t)/t*(e>t?1:0)}}}),i(e,\"Series/PackedBubble/PackedBubbleIntegration.js\",[e[\"Core/Globals.js\"],e[\"Series/Networkgraph/VerletIntegration.js\"]],function(t,e){let{noop:i}=t;return{barycenter:function(){let t,e;let i=this.options.gravitationalConstant,s=this.box,o=this.nodes;for(let a of o)this.options.splitSeries&&!a.isParentNode?(t=a.series.parentNode.plotX,e=a.series.parentNode.plotY):(t=s.width/2,e=s.height/2),a.fixedPosition||(a.plotX-=(a.plotX-t)*i/(a.mass*Math.sqrt(o.length)),a.plotY-=(a.plotY-e)*i/(a.mass*Math.sqrt(o.length)))},getK:i,integrate:e.integrate,repulsive:function(t,e,i,s){let o=e*this.diffTemperature/t.mass/t.degree,a=i.x*o,r=i.y*o;t.fixedPosition||(t.plotX+=a,t.plotY+=r),s.fixedPosition||(s.plotX-=a,s.plotY-=r)},repulsiveForceFunction:function(t,e,i,s){return Math.min(t,(i.marker.radius+s.marker.radius)/2)}}}),i(e,\"Series/Networkgraph/EulerIntegration.js\",[],function(){return{attractive:function(t,e,i,s){let o=t.getMass(),a=i.x/s*e,r=i.y/s*e;t.fromNode.fixedPosition||(t.fromNode.dispX-=a*o.fromNode/t.fromNode.degree,t.fromNode.dispY-=r*o.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.dispX+=a*o.toNode/t.toNode.degree,t.toNode.dispY+=r*o.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return t*t/e},barycenter:function(){let t=this.options.gravitationalConstant,e=this.barycenter.xFactor,i=this.barycenter.yFactor;this.nodes.forEach(function(s){if(!s.fixedPosition){let o=s.getDegree(),a=o*(1+o/2);s.dispX+=(e-s.plotX)*t*a/s.degree,s.dispY+=(i-s.plotY)*t*a/s.degree}})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.3)},integrate:function(t,e){let i;e.dispX+=e.dispX*t.options.friction,e.dispY+=e.dispY*t.options.friction,0!==(i=e.temperature=t.vectorLength({x:e.dispX,y:e.dispY}))&&(e.plotX+=e.dispX/i*Math.min(Math.abs(e.dispX),t.temperature),e.plotY+=e.dispY/i*Math.min(Math.abs(e.dispY),t.temperature))},repulsive:function(t,e,i,s){t.dispX+=i.x/s*e/t.degree,t.dispY+=i.y/s*e/t.degree},repulsiveForceFunction:function(t,e){return e*e/t}}}),i(e,\"Series/Networkgraph/QuadTreeNode.js\",[],function(){class t{constructor(t){this.body=!1,this.isEmpty=!1,this.isInternal=!1,this.nodes=[],this.box=t,this.boxSize=Math.min(t.width,t.height)}divideBox(){let e=this.box.width/2,i=this.box.height/2;this.nodes[0]=new t({left:this.box.left,top:this.box.top,width:e,height:i}),this.nodes[1]=new t({left:this.box.left+e,top:this.box.top,width:e,height:i}),this.nodes[2]=new t({left:this.box.left+e,top:this.box.top+i,width:e,height:i}),this.nodes[3]=new t({left:this.box.left,top:this.box.top+i,width:e,height:i})}getBoxPosition(t){let e=t.plotXthis.step())):(this.simulation=!1,this.series.forEach(t=>{p(t,\"afterSimulation\")}))}}stop(){this.simulation&&r.cancelAnimationFrame(this.simulation)}setArea(t,e,i,s){this.box={left:t,top:e,width:i,height:s}}setK(){this.k=this.options.linkLength||this.integration.getK(this)}addElementsToCollection(t,e){for(let i of t)-1===e.indexOf(i)&&e.push(i)}removeElementFromCollection(t,e){let i=e.indexOf(t);-1!==i&&e.splice(i,1)}clear(){this.nodes.length=0,this.links.length=0,this.series.length=0,this.resetSimulation()}resetSimulation(){this.forcedStop=!1,this.systemTemperature=0,this.setMaxIterations(),this.setTemperature(),this.setDiffTemperature()}restartSimulation(){this.simulation?this.resetSimulation():(this.setInitialRendering(!1),this.enableSimulation?this.start():this.setMaxIterations(1),this.chart&&this.chart.redraw(),this.setInitialRendering(!0))}setMaxIterations(t){this.maxIterations=d(t,this.options.maxIterations)}setTemperature(){this.temperature=this.startTemperature=Math.sqrt(this.nodes.length)}setDiffTemperature(){this.diffTemperature=this.startTemperature/(this.options.maxIterations+1)}setInitialRendering(t){this.initialRendering=t}createQuadTree(){this.quadTree=new s(this.box.left,this.box.top,this.box.width,this.box.height),this.quadTree.insertNodes(this.nodes)}initPositions(){let t=this.options.initialPositions;if(h(t))for(let e of(t.call(this),this.nodes))l(e.prevX)||(e.prevX=e.plotX),l(e.prevY)||(e.prevY=e.plotY),e.dispX=0,e.dispY=0;else\"circle\"===t?this.setCircularPositions():this.setRandomPositions()}setCircularPositions(){let t;let e=this.box,i=this.nodes,s=2*Math.PI/(i.length+1),o=i.filter(function(t){return 0===t.linksTo.length}),a={},r=this.options.initialPositionRadius,n=t=>{for(let e of t.linksFrom||[])a[e.toNode.id]||(a[e.toNode.id]=!0,l.push(e.toNode),n(e.toNode))},l=[];for(let t of o)l.push(t),n(t);if(l.length)for(let t of i)-1===l.indexOf(t)&&l.push(t);else l=i;for(let i=0,o=l.length;i{let e=t*t/Math.PI;return e-Math.floor(e)};for(let a=0,r=i.length;athis.barnesHutApproximation(t,e));else{let t,e,i;for(let s of this.nodes)for(let o of this.nodes)s===o||s.fixedPosition||(i=this.getDistXY(s,o),0!==(e=this.vectorLength(i))&&(t=this.repulsiveForce(e,this.k),this.force(\"repulsive\",s,t*o.mass,i,e)))}}attractiveForces(){let t,e,i;for(let s of this.links)s.fromNode&&s.toNode&&(t=this.getDistXY(s.fromNode,s.toNode),0!==(e=this.vectorLength(t))&&(i=this.attractiveForce(e,this.k),this.force(\"attractive\",s,i,t,e)))}applyLimits(){for(let t of this.nodes){if(t.fixedPosition)return;this.integration.integrate(this,t),this.applyLimitBox(t,this.box),t.dispX=0,t.dispY=0}}applyLimitBox(t,e){let i=t.radius;t.plotX=n(t.plotX,e.left+i,e.width-i),t.plotY=n(t.plotY,e.top+i,e.height-i)}coolDown(t,e,i){return t-e*i}isStable(){return 1e-5>Math.abs(this.systemTemperature-this.prevSystemTemperature)||this.temperature<=0}getSystemTemperature(){let t=0;for(let e of this.nodes)t+=e.temperature;return t}vectorLength(t){return Math.sqrt(t.x*t.x+t.y*t.y)}getDistR(t,e){let i=this.getDistXY(t,e);return this.vectorLength(i)}getDistXY(t,e){let i=t.plotX-e.plotX,s=t.plotY-e.plotY;return{x:i,y:s,absX:Math.abs(i),absY:Math.abs(s)}}}return c}),i(e,\"Series/PackedBubble/PackedBubbleLayout.js\",[e[\"Series/GraphLayoutComposition.js\"],e[\"Series/PackedBubble/PackedBubbleIntegration.js\"],e[\"Series/Networkgraph/ReingoldFruchtermanLayout.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{addEvent:o,pick:a}=s;function r(){let t=this.series,e=[];return t.forEach(t=>{t.parentNode&&t.parentNode.selected&&e.push(t.parentNode)}),e}function n(){this.allDataPoints&&delete this.allDataPoints}class l extends i{constructor(){super(...arguments),this.index=NaN,this.nodes=[],this.series=[]}static compose(s){i.compose(s),t.integrations.packedbubble=e,t.layouts.packedbubble=l;let a=s.prototype;a.getSelectedParentNodes||(o(s,\"beforeRedraw\",n),a.getSelectedParentNodes=r)}beforeStep(){this.options.marker&&this.series.forEach(t=>{t&&t.calculateParentRadius()})}isStable(){let t=Math.abs(this.prevSystemTemperature-this.systemTemperature);return 1>Math.abs(10*this.systemTemperature/Math.sqrt(this.nodes.length))&&t<1e-5||this.temperature<=0}setCircularPositions(){let t=this.box,e=this.nodes,i=2*Math.PI/(e.length+1),s=this.options.initialPositionRadius,o,r,n=0;for(let l of e)this.options.splitSeries&&!l.isParentNode?(o=l.series.parentNode.plotX,r=l.series.parentNode.plotY):(o=t.width/2,r=t.height/2),l.plotX=l.prevX=a(l.plotX,o+s*Math.cos(l.index||n*i)),l.plotY=l.prevY=a(l.plotY,r+s*Math.sin(l.index||n*i)),l.dispX=0,l.dispY=0,n++}repulsiveForces(){let t,e,i;let s=this,o=s.options.bubblePadding;s.nodes.forEach(a=>{a.degree=a.mass,a.neighbours=0,s.nodes.forEach(r=>{t=0,a!==r&&!a.fixedPosition&&(s.options.seriesInteraction||a.series===r.series)&&(i=s.getDistXY(a,r),(e=s.vectorLength(i)-(a.marker.radius+r.marker.radius+o))<0&&(a.degree+=.01,a.neighbours++,t=s.repulsiveForce(-e/Math.sqrt(a.neighbours),s.k,a,r)),s.force(\"repulsive\",a,t*r.mass,i,r,e))})})}applyLimitBox(t,e){let i,s;this.options.splitSeries&&!t.isParentNode&&this.options.parentNodeLimit&&(i=this.getDistXY(t,t.series.parentNode),(s=t.series.parentNodeRadius-t.marker.radius-this.vectorLength(i))<0&&s>-2*t.marker.radius&&(t.plotX-=.01*i.x,t.plotY-=.01*i.y)),super.applyLimitBox(t,e)}}return t.layouts.packedbubble=l,l}),i(e,\"Series/SimulationSeriesUtilities.js\",[e[\"Core/Utilities.js\"],e[\"Core/Animation/AnimationUtilities.js\"]],function(t,e){let{merge:i,syncTimeout:s}=t,{animObject:o}=e;return{initDataLabels:function(){let t=this.options.dataLabels;if(!this.dataLabelsGroup){let e=this.initDataLabelsGroup();return!this.chart.styledMode&&t?.style&&e.css(t.style),e.attr({opacity:0}),this.visible&&e.show(),e}return this.dataLabelsGroup.attr(i({opacity:1},this.getPlotBox(\"data-labels\"))),this.dataLabelsGroup},initDataLabelsDefer:function(){let t=this.options.dataLabels;t?.defer&&this.options.layoutAlgorithm?.enableSimulation?s(()=>{this.deferDataLabels=!1},t?o(t.animation).defer:0):this.deferDataLabels=!1}}}),i(e,\"Series/PackedBubble/PackedBubbleSeries.js\",[e[\"Core/Color/Color.js\"],e[\"Series/DragNodesComposition.js\"],e[\"Series/GraphLayoutComposition.js\"],e[\"Core/Globals.js\"],e[\"Series/PackedBubble/PackedBubblePoint.js\"],e[\"Series/PackedBubble/PackedBubbleSeriesDefaults.js\"],e[\"Series/PackedBubble/PackedBubbleLayout.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/SimulationSeriesUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,a,r,n,l,h){let{parse:p}=t,{noop:d}=s,{series:{prototype:c},seriesTypes:{bubble:u}}=n,{initDataLabels:g,initDataLabelsDefer:f}=l,{addEvent:b,clamp:m,defined:y,extend:x,fireEvent:P,isArray:S,isNumber:M,merge:L,pick:k}=h;class v extends u{constructor(){super(...arguments),this.parentNodeMass=0,this.deferDataLabels=!0}static compose(t,i,s,o){u.compose(t,i,s,o),e.compose(i),r.compose(i)}accumulateAllPoints(){let t;let e=this.chart,i=[];for(let s of e.series)if(s.is(\"packedbubble\")&&s.reserveSpace()){t=s.yData||[];for(let e=0;e{t.mass=2,t.degree=1,t.collisionNmb=1}),r.setArea(0,0,this.chart.plotWidth,this.chart.plotHeight),r.addElementsToCollection([this],r.series),r.addElementsToCollection(this.points,r.nodes)}addSeriesLayout(){let t=this.options.layoutAlgorithm=this.options.layoutAlgorithm||{},e=t.type||\"packedbubble\",s=this.chart.graphLayoutsStorage,o=this.chart.graphLayoutsLookup,a=L(t,t.parentNodeOptions,{enableSimulation:this.layout.options.enableSimulation}),r=s[e+\"-series\"];r||(s[e+\"-series\"]=r=new i.layouts[e],r.init(a),o.splice(r.index,0,r)),this.parentNodeLayout=r,this.createParentNodes()}calculateParentRadius(){let t=this.seriesBox();this.parentNodeRadius=m(Math.sqrt(2*this.parentNodeMass/Math.PI)+20,20,t?Math.max(Math.sqrt(Math.pow(t.width,2)+Math.pow(t.height,2))/2+20,20):Math.sqrt(2*this.parentNodeMass/Math.PI)+20),this.parentNode&&(this.parentNode.marker.radius=this.parentNode.radius=this.parentNodeRadius)}calculateZExtremes(){let t=this.chart.series,e=this.options.zMin,i=this.options.zMax,s=1/0,o=-1/0;return e&&i?[e,i]:(t.forEach(t=>{t.yData.forEach(t=>{y(t)&&(t>o&&(o=t),t{this.parentNodeMass+=Math.PI*Math.pow(t.marker.radius,2)}),this.calculateParentRadius(),i.nodes.forEach(t=>{t.seriesIndex===this.index&&(o=!0)}),i.setArea(0,0,e.plotWidth,e.plotHeight),o||(a||(a=new t(this,{mass:this.parentNodeRadius/2,marker:r,dataLabels:{inside:!1},states:{normal:{marker:r},hover:{marker:r}},dataLabelOnNull:!0,degree:this.parentNodeRadius,isParentNode:!0,seriesIndex:this.index})),this.parentNode&&(a.plotX=this.parentNode.plotX,a.plotY=this.parentNode.plotY),this.parentNode=a,i.addElementsToCollection([this],i.series),i.addElementsToCollection([a],i.nodes))}deferLayout(){let t=this.options.layoutAlgorithm;this.visible&&(this.addLayout(),t.splitSeries&&this.addSeriesLayout())}destroy(){this.chart.graphLayoutsLookup&&this.chart.graphLayoutsLookup.forEach(t=>{t.removeElementFromCollection(this,t.series)},this),this.parentNode&&this.parentNodeLayout&&(this.parentNodeLayout.removeElementFromCollection(this.parentNode,this.parentNodeLayout.nodes),this.parentNode.dataLabel&&(this.parentNode.dataLabel=this.parentNode.dataLabel.destroy())),c.destroy.apply(this,arguments)}drawDataLabels(){!this.deferDataLabels&&(c.drawDataLabels.call(this,this.points),this.parentNode&&(this.parentNode.formatPrefix=\"parentNode\",c.drawDataLabels.call(this,[this.parentNode])))}drawGraph(){if(!this.layout||!this.layout.options.splitSeries)return;let t=this.chart,e=this.layout.options.parentNodeOptions.marker,i={fill:e.fillColor||p(this.color).brighten(.4).get(),opacity:e.fillOpacity,stroke:e.lineColor||this.color,\"stroke-width\":k(e.lineWidth,this.options.lineWidth)},s={};this.parentNodesGroup=this.plotGroup(\"parentNodesGroup\",\"parentNode\",this.visible?\"inherit\":\"hidden\",.1,t.seriesGroup),this.group?.attr({zIndex:2}),this.calculateParentRadius(),this.parentNode&&y(this.parentNode.plotX)&&y(this.parentNode.plotY)&&y(this.parentNodeRadius)&&(s=L({x:this.parentNode.plotX-this.parentNodeRadius,y:this.parentNode.plotY-this.parentNodeRadius,width:2*this.parentNodeRadius,height:2*this.parentNodeRadius},i),this.parentNode.graphic||(this.graph=this.parentNode.graphic=t.renderer.symbol(i.symbol).add(this.parentNodesGroup)),this.parentNode.graphic.attr(s))}drawTracker(){let t;let e=this.parentNode;super.drawTracker(),e&&(t=S(e.dataLabels)?e.dataLabels:e.dataLabel?[e.dataLabel]:[],e.graphic&&(e.graphic.element.point=e),t.forEach(t=>{(t.div||t.element).point=e}))}getPointRadius(){let t,e,i,s;let o=this.chart,a=o.plotWidth,r=o.plotHeight,n=this.options,l=n.useSimulation,h=Math.min(a,r),p={},d=[],c=o.allDataPoints||[],u=c.length;[\"minSize\",\"maxSize\"].forEach(t=>{let e=parseInt(n[t],10),i=/%$/.test(n[t]);p[t]=i?h*e/100:e*Math.sqrt(u)}),o.minRadius=t=p.minSize/Math.sqrt(u),o.maxRadius=e=p.maxSize/Math.sqrt(u);let g=l?this.calculateZExtremes():[t,e];c.forEach((o,a)=>{i=l?m(o[2],g[0],g[1]):o[2],0===(s=this.getRadius(g[0],g[1],t,e,i))&&(s=null),c[a][2]=s,d.push(s)}),this.radii=d}init(){return c.init.apply(this,arguments),f.call(this),this.eventsToUnbind.push(b(this,\"updatedData\",function(){this.chart.series.forEach(t=>{t.type===this.type&&(t.isDirty=!0)},this)})),this}onMouseUp(t){if(t.fixedPosition&&!t.removed){let i;let s=this.layout,o=this.parentNodeLayout;o&&s.options.dragBetweenSeries&&o.nodes.forEach(e=>{t&&t.marker&&e!==t.series.parentNode&&(i=s.getDistXY(t,e),s.vectorLength(i)-e.marker.radius-t.marker.radius<0&&(e.series.addPoint(L(t.options,{plotX:t.plotX,plotY:t.plotY}),!1),s.removeElementFromCollection(t,s.nodes),t.remove()))}),e.onMouseUp.apply(this,arguments)}}placeBubbles(t){let e=this.checkOverlap,i=this.positionBubble,s=[],o=1,a=0,r=0,n,l=[],h,p=t.sort((t,e)=>e[2]-t[2]);if(p.length){if(s.push([[0,0,p[0][2],p[0][3],p[0][4]]]),p.length>1)for(s.push([[0,0-p[1][2]-p[0][2],p[1][2],p[1][3],p[1][4]]]),h=2;h1&&s[o-1][r+1]&&e(n,s[o-1][r+1])?(r++,s[o].push(i(s[o][a],s[o-1][r],p[h])),a++):(a++,s[o].push(n));this.chart.stages=s,this.chart.rawPositions=[].concat.apply([],s),this.resizeRadius(),l=this.chart.rawPositions}return l}pointAttribs(t,e){let i=this.options,s=t&&t.isParentNode,o=i.marker;s&&i.layoutAlgorithm&&i.layoutAlgorithm.parentNodeOptions&&(o=i.layoutAlgorithm.parentNodeOptions.marker);let a=o.fillOpacity,r=c.pointAttribs.call(this,t,e);return 1!==a&&(r[\"fill-opacity\"]=a),r}positionBubble(t,e,i){let s=Math.pow,o=(0,Math.sqrt)(s(t[0]-e[0],2)+s(t[1]-e[1],2)),a=(0,Math.acos)((s(o,2)+s(i[2]+e[2],2)-s(i[2]+t[2],2))/(2*(i[2]+e[2])*o)),r=(0,Math.asin)((0,Math.abs)(t[0]-e[0])/o),n=(t[1]-e[1]<0?0:Math.PI)+a+r*((t[0]-e[0])*(t[1]-e[1])<0?1:-1);return[e[0]+(e[2]+i[2])*Math.sin(n),e[1]-(e[2]+i[2])*Math.cos(n),i[2],i[3],i[4]]}render(){let t=[];c.render.apply(this,arguments),!this.options.dataLabels.allowOverlap&&(this.data.forEach(e=>{S(e.dataLabels)&&e.dataLabels.forEach(e=>{t.push(e)})}),this.options.useSimulation&&this.chart.hideOverlappingLabels(t))}resizeRadius(){let t,e,i,s,o;let a=this.chart,r=a.rawPositions,n=Math.min,l=Math.max,h=a.plotLeft,p=a.plotTop,d=a.plotHeight,c=a.plotWidth;for(let a of(t=i=Number.POSITIVE_INFINITY,e=s=Number.NEGATIVE_INFINITY,r))o=a[2],t=n(t,a[0]-o),e=l(e,a[0]+o),i=n(i,a[1]-o),s=l(s,a[1]+o);let u=[e-t,s-i],g=[(c-h)/u[0],(d-p)/u[1]],f=n.apply([],g);if(Math.abs(f-1)>1e-10){for(let t of r)t[2]*=f;this.placeBubbles(r)}else a.diffY=d/2+p-i-(s-i)/2,a.diffX=c/2+h-t-(e-t)/2}seriesBox(){let t;let e=this.chart,i=this.data,s=Math.max,o=Math.min,a=[e.plotLeft,e.plotLeft+e.plotWidth,e.plotTop,e.plotTop+e.plotHeight];return i.forEach(e=>{y(e.plotX)&&y(e.plotY)&&e.marker.radius&&(t=e.marker.radius,a[0]=o(a[0],e.plotX-t),a[1]=s(a[1],e.plotX+t),a[2]=o(a[2],e.plotY-t),a[3]=s(a[3],e.plotY+t))}),M(a.width/a.height)?a:null}setVisible(){let t=this;c.setVisible.apply(t,arguments),t.parentNodeLayout&&t.graph?t.visible?(t.graph.show(),t.parentNode.dataLabel&&t.parentNode.dataLabel.show()):(t.graph.hide(),t.parentNodeLayout.removeElementFromCollection(t.parentNode,t.parentNodeLayout.nodes),t.parentNode.dataLabel&&t.parentNode.dataLabel.hide()):t.layout&&(t.visible?t.layout.addElementsToCollection(t.points,t.layout.nodes):t.points.forEach(e=>{t.layout.removeElementFromCollection(e,t.layout.nodes)}))}translate(){let t,e,i;let s=this.chart,o=this.data,a=this.index,r=this.options.useSimulation;for(let n of(this.processedXData=this.xData,this.generatePoints(),y(s.allDataPoints)||(s.allDataPoints=this.accumulateAllPoints(),this.getPointRadius()),r?i=s.allDataPoints:(i=this.placeBubbles(s.allDataPoints),this.options.draggable=!1),i))n[3]===a&&(t=o[n[4]],e=k(n[2],void 0),r||(t.plotX=n[0]-s.plotLeft+s.diffX,t.plotY=n[1]-s.plotTop+s.diffY),M(e)&&(t.marker=x(t.marker,{radius:e,width:2*e,height:2*e}),t.radius=e));r&&this.deferLayout(),P(this,\"afterTranslate\")}}return v.defaultOptions=L(u.defaultOptions,a),x(v.prototype,{pointClass:o,axisTypes:[],directTouch:!0,forces:[\"barycenter\",\"repulsive\"],hasDraggableNodes:!0,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointArrayMap:[\"value\"],pointValKey:\"value\",requireSorting:!1,trackerGroups:[\"group\",\"dataLabelsGroup\",\"parentNodesGroup\"],initDataLabels:g,alignDataLabel:c.alignDataLabel,indexateNodes:d,onMouseDown:e.onMouseDown,onMouseMove:e.onMouseMove,redrawHalo:e.redrawHalo,searchPoint:d}),n.registerSeriesType(\"packedbubble\",v),v}),i(e,\"Series/Polygon/PolygonSeriesDefaults.js\",[],function(){return{marker:{enabled:!1,states:{hover:{enabled:!1}}},stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:\"\"},trackByArea:!0,legendSymbol:\"rectangle\"}}),i(e,\"Series/Polygon/PolygonSeries.js\",[e[\"Core/Globals.js\"],e[\"Series/Polygon/PolygonSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{noop:o}=t,{area:a,line:r,scatter:n}=i.seriesTypes,{extend:l,merge:h}=s;class p extends n{getGraphPath(){let t=r.prototype.getGraphPath.call(this),e=t.length+1;for(;e--;)(e===t.length||\"M\"===t[e][0])&&e>0&&t.splice(e,0,[\"Z\"]);return this.areaPath=t,t}drawGraph(){this.options.fillColor=this.color,a.prototype.drawGraph.call(this)}}return p.defaultOptions=h(n.defaultOptions,e),l(p.prototype,{type:\"polygon\",drawTracker:r.prototype.drawTracker,setStackedPoints:o}),i.registerSeriesType(\"polygon\",p),p}),i(e,\"Core/Axis/RadialAxis.js\",[e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s;let{defaultOptions:o}=t,{composed:a,noop:r}=e,{addEvent:n,correctFloat:l,defined:h,extend:p,fireEvent:d,isObject:c,merge:u,pick:g,pushUnique:f,relativeLength:b,wrap:m}=i;return function(t){let e={gridLineWidth:1,labels:{align:void 0,x:0,y:void 0,style:{textOverflow:\"none\"}},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},i={endOnTick:!1,gridLineWidth:0,labels:{align:\"center\",distance:-25,x:0,y:void 0},lineWidth:1,minorGridLineWidth:0,minorTickInterval:\"auto\",minorTickLength:10,minorTickPosition:\"inside\",minorTickWidth:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickPosition:\"inside\",tickWidth:2,title:{rotation:0,text:\"\"},zIndex:2},s={gridLineInterpolation:\"circle\",gridLineWidth:1,labels:{align:\"right\",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}};function y(){this.autoConnect=this.isCircular&&void 0===g(this.userMax,this.options.max)&&l(this.endAngleRad-this.startAngleRad)===l(2*Math.PI),!this.isCircular&&this.chart.inverted&&this.max++,this.autoConnect&&(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)}function x(){return()=>{if(this.isRadial&&this.tickPositions&&this.options.labels&&!0!==this.options.labels.allowOverlap)return this.tickPositions.map(t=>this.ticks[t]&&this.ticks[t].label).filter(t=>!!t)}}function P(){return r}function S(t,e,i){let s=this.pane.center,o=t.value,a,r,n;return this.isCircular?(h(o)?t.point&&(t.point.shapeArgs||{}).start&&(o=this.chart.inverted?this.translate(t.point.rectPlotY,!0):t.point.x):(r=t.chartX||0,n=t.chartY||0,o=this.translate(Math.atan2(n-i,r-e)-this.startAngleRad,!0)),r=(a=this.getPosition(o)).x,n=a.y):(h(o)||(r=t.chartX,n=t.chartY),h(r)&&h(n)&&(i=s[1]+this.chart.plotTop,o=this.translate(Math.min(Math.sqrt(Math.pow(r-e,2)+Math.pow(n-i,2)),s[2]/2)-s[3]/2,!0))),[o,r||0,n||0]}function M(t,e,i){let s=this.pane.center,o=this.chart,a=this.left||0,r=this.top||0,n,l=g(e,s[2]/2-this.offset),h;return void 0===i&&(i=this.horiz?0:this.center&&-this.center[3]/2),i&&(l+=i),this.isCircular||void 0!==e?((h=this.chart.renderer.symbols.arc(a+s[0],r+s[1],l,l,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})).xBounds=[a+s[0]],h.yBounds=[r+s[1]-l]):(n=this.postTranslate(this.angleRad,l),h=[[\"M\",this.center[0]+o.plotLeft,this.center[1]+o.plotTop],[\"L\",n.x,n.y]]),h}function L(){this.constructor.prototype.getOffset.call(this),this.chart.axisOffset[this.side]=0}function k(t,e,i){let s=this.chart,o=t=>{if(\"string\"==typeof t){let e=parseInt(t,10);return d.test(t)&&(e=e*n/100),e}return t},a=this.center,r=this.startAngleRad,n=a[2]/2,l=Math.min(this.offset,0),h=this.left||0,p=this.top||0,d=/%$/,c=this.isCircular,u,f,b,m,y,x,P=g(o(i.outerRadius),n),S=o(i.innerRadius),M=g(o(i.thickness),10);if(\"polygon\"===this.options.gridLineInterpolation)x=this.getPlotLinePath({value:t}).concat(this.getPlotLinePath({value:e,reverse:!0}));else{t=Math.max(t,this.min),e=Math.min(e,this.max);let o=this.translate(t),n=this.translate(e);c||(P=o||0,S=n||0),\"circle\"!==i.shape&&c?(u=r+(o||0),f=r+(n||0)):(u=-Math.PI/2,f=1.5*Math.PI,y=!0),P-=l,M-=l,x=s.renderer.symbols.arc(h+a[0],p+a[1],P,P,{start:Math.min(u,f),end:Math.max(u,f),innerR:g(S,P-M),open:y}),c&&(b=(f+u)/2,m=h+a[0]+a[2]/2*Math.cos(b),x.xBounds=b>-Math.PI/2&&b-Math.PI&&b<0||b>Math.PI?-10:10)}return x}function v(t){let e=this.pane.center,i=this.chart,s=i.inverted,o=t.reverse,a=this.pane.options.background?this.pane.options.background[0]||this.pane.options.background:{},r=a.innerRadius||\"0%\",n=a.outerRadius||\"100%\",l=e[0]+i.plotLeft,h=e[1]+i.plotTop,p=this.height,d=t.isCrosshair,c=e[3]/2,u=t.value,g,f,m,y,x,P,S,M,L,k=this.getPosition(u),v=k.x,C=k.y;if(d&&(u=(M=this.getCrosshairPosition(t,l,h))[0],v=M[1],C=M[2]),this.isCircular)f=Math.sqrt(Math.pow(v-l,2)+Math.pow(C-h,2)),m=\"string\"==typeof r?b(r,1):r/f,y=\"string\"==typeof n?b(n,1):n/f,e&&c&&(m<(g=c/f)&&(m=g),yp)&&(u=0),\"circle\"===this.options.gridLineInterpolation)L=this.getLinePath(0,u,c);else if(L=[],i[s?\"yAxis\":\"xAxis\"].forEach(t=>{t.pane===this.pane&&(x=t)}),x){S=x.tickPositions,x.autoConnect&&(S=S.concat([S[0]])),o&&(S=S.slice().reverse()),u&&(u+=c);for(let t=0;tMath.PI&&(a-=t),r>Math.PI&&(r-=t),this.normalizedStartAngleRad=a,this.normalizedEndAngleRad=r}}function T(t){this.isRadial&&(t.align=void 0,t.preventDefault())}function X(){if(this.chart&&this.chart.labelCollectors){let t=this.labelCollector?this.chart.labelCollectors.indexOf(this.labelCollector):-1;t>=0&&this.chart.labelCollectors.splice(t,1)}}function Y(t){let e;let i=this.chart,s=i.angular,o=i.polar,a=this.isXAxis,n=this.coll,l=t.userOptions.pane||0,h=this.pane=i.pane&&i.pane[l];if(\"colorAxis\"===n){this.isRadial=!1;return}s?(s&&a?(this.isHidden=!0,this.createLabelCollector=P,this.getOffset=r,this.redraw=E,this.render=E,this.setScale=r,this.setCategories=r,this.setTitle=r):A(this),e=!a):o&&(A(this),e=this.horiz),s||o?(this.isRadial=!0,this.labelCollector||(this.labelCollector=this.createLabelCollector()),this.labelCollector&&i.labelCollectors.push(this.labelCollector)):this.isRadial=!1,h&&e&&(h.axis=this),this.isCircular=e}function R(){this.isRadial&&this.beforeSetTickPositions()}function I(t){let e=this.label;if(!e)return;let i=this.axis,s=e.getBBox(),o=i.options.labels,a=(i.translate(this.pos)+i.startAngleRad+Math.PI/2)/Math.PI*180%360,r=Math.round(a),n=h(o.y)?0:-(.3*s.height),l=o.y,p,d=20,c=o.align,u=\"end\",f=r<0?r+360:r,m=f,y=0,x=0;i.isRadial&&(p=i.getPosition(this.pos,i.center[2]/2+b(g(o.distance,-25),i.center[2]/2,-i.center[2]/2)),\"auto\"===o.rotation?e.attr({rotation:a}):h(l)||(l=i.chart.renderer.fontMetrics(e).b-s.height/2),h(c)||(i.isCircular?(s.width>i.len*i.tickInterval/(i.max-i.min)&&(d=0),c=a>d&&a<180-d?\"left\":a>180+d&&a<360-d?\"right\":\"center\"):c=\"center\",e.attr({align:c})),\"auto\"===c&&2===i.tickPositions.length&&i.isCircular&&(f>90&&f<180?f=180-f:f>270&&f<=360&&(f=540-f),m>180&&m<=360&&(m=360-m),(i.pane.options.startAngle===r||i.pane.options.startAngle===r+360||i.pane.options.startAngle===r-360)&&(u=\"start\"),c=r>=-90&&r<=90||r>=-360&&r<=-270||r>=270&&r<=360?\"start\"===u?\"right\":\"left\":\"start\"===u?\"left\":\"right\",m>70&&m<110&&(c=\"center\"),f<15||f>=180&&f<195?y=.3*s.height:f>=15&&f<=35?y=\"start\"===u?0:.75*s.height:f>=195&&f<=215?y=\"start\"===u?.75*s.height:0:f>35&&f<=90?y=\"start\"===u?-(.25*s.height):s.height:f>215&&f<=270&&(y=\"start\"===u?s.height:-(.25*s.height)),m<15?x=\"start\"===u?-(.15*s.height):.15*s.height:m>165&&m<=180&&(x=\"start\"===u?.15*s.height:-(.15*s.height)),e.attr({align:c}),e.translate(x,y+n)),t.pos.x=p.x+(o.x||0),t.pos.y=p.y+(l||0))}function j(t){this.axis.getPosition&&p(t.pos,this.axis.getPosition(this.pos))}function D(t,e){let i=this.chart,s=this.center;return t=this.startAngleRad+t,{x:i.plotLeft+s[0]+Math.cos(t)*e,y:i.plotTop+s[1]+Math.sin(t)*e}}function E(){this.isDirty=!1}function B(){let t,e;this.constructor.prototype.setAxisSize.call(this),this.isRadial&&(this.pane.updateCenter(this),t=this.center=this.pane.center.slice(),this.isCircular?this.sector=this.endAngleRad-this.startAngleRad:(e=this.postTranslate(this.angleRad,t[3]/2),t[0]=e.x-this.chart.plotLeft,t[1]=e.y-this.chart.plotTop),this.len=this.width=this.height=(t[2]-t[3])*g(this.sector,1)/2)}function z(){this.constructor.prototype.setAxisTranslation.call(this),this.center&&(this.isCircular?this.transA=(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.transA=(this.center[2]-this.center[3])/2/(this.max-this.min||1),this.isXAxis?this.minPixelPadding=this.transA*this.minPointOffset:this.minPixelPadding=0)}function O(t){let{coll:a}=this,{angular:r,inverted:n,polar:l}=this.chart,h={};r?this.isXAxis||(h=u(o.yAxis,i)):l&&(h=this.horiz?u(o.xAxis,e):u(\"xAxis\"===a?o.xAxis:o.yAxis,s)),n&&\"yAxis\"===a&&(h.stackLabels=c(o.yAxis,!0)?o.yAxis.stackLabels:{},h.reversedStacks=!0);let p=this.options=u(h,t);p.plotBands||(p.plotBands=[]),d(this,\"afterSetOptions\")}function W(t,e,i,s,o,a,r){let n;let l=this.axis;return l.isRadial?[\"M\",e,i,\"L\",(n=l.getPosition(this.pos,l.center[2]/2+s)).x,n.y]:t.call(this,e,i,s,o,a,r)}t.compose=function(t,e){return f(a,\"Axis.Radial\")&&(n(t,\"afterInit\",N),n(t,\"autoLabelAlign\",T),n(t,\"destroy\",X),n(t,\"init\",Y),n(t,\"initialAxisTranslation\",R),n(e,\"afterGetLabelPosition\",I),n(e,\"afterGetPosition\",j),m(e.prototype,\"getMarkPath\",W)),t}}(s||(s={})),s}),i(e,\"Series/PolarComposition.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Extensions/Pane/Pane.js\"],e[\"Core/Axis/RadialAxis.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,a){let{animObject:r}=t,{composed:n}=e,{addEvent:l,defined:h,find:p,isNumber:d,merge:c,pick:u,pushUnique:g,relativeLength:f,splat:b,uniqueKey:m,wrap:y}=a;function x(){(this.pane||[]).forEach(t=>{t.render()})}function P(t){let e=t.args[0].xAxis,i=t.args[0].yAxis,s=t.args[0].chart;e&&i&&(\"polygon\"===i.gridLineInterpolation?(e.startOnTick=!0,e.endOnTick=!0):\"polygon\"===e.gridLineInterpolation&&s.inverted&&(i.startOnTick=!0,i.endOnTick=!0))}function S(){this.pane||(this.pane=[]),this.options.pane=b(this.options.pane),this.options.pane.forEach(t=>{new s(t,this)},this)}function M(t){let e=t.args.marker,i=this.chart.xAxis[0],s=this.chart.yAxis[0],o=this.chart.inverted,a=o?s:i,r=o?i:s;if(this.chart.polar){t.preventDefault();let i=(e.attr?e.attr(\"start\"):e.start)-a.startAngleRad,s=e.attr?e.attr(\"r\"):e.r,o=(e.attr?e.attr(\"end\"):e.end)-a.startAngleRad,n=e.attr?e.attr(\"innerR\"):e.innerR;t.result.x=i+a.pos,t.result.width=o-i,t.result.y=r.len+r.pos-s,t.result.height=s-n}}function L(t){let e=this.chart;if(e.polar&&e.hoverPane&&e.hoverPane.axis){t.preventDefault();let i=e.hoverPane.center,s=e.mouseDownX||0,o=e.mouseDownY||0,a=t.args.chartY,r=t.args.chartX,n=2*Math.PI,l=e.hoverPane.axis.startAngleRad,h=e.hoverPane.axis.endAngleRad,p=e.inverted?e.xAxis[0]:e.yAxis[0],d={},c=\"arc\";if(d.x=i[0]+e.plotLeft,d.y=i[1]+e.plotTop,this.zoomHor){let t=l>0?h-l:Math.abs(l)+Math.abs(h),u=Math.atan2(o-e.plotTop-i[1],s-e.plotLeft-i[0])-l,g=Math.atan2(a-e.plotTop-i[1],r-e.plotLeft-i[0])-l;d.r=i[2]/2,d.innerR=i[3]/2,u<=0&&(u+=n),g<=0&&(g+=n),gh+(n-t)/2&&(g=u,u=l<=0?l:0);let f=d.start=Math.max(u+l,l),b=d.end=Math.min(g+l,h);if(\"polygon\"===p.options.gridLineInterpolation){let t=e.hoverPane.axis,s=f-t.startAngleRad+t.pos,o=p.getPlotLinePath({value:p.max}),a=t.toValue(s),r=t.toValue(s+(b-f));if(ai[2]/2&&(p=i[2]/2),nt.max?(o[a].isNull=!0,o[a].plotY=NaN):o[a].isNull=o[a].isValid&&!o[a].isValid());this.hasClipCircleSetter||(this.hasClipCircleSetter=!!this.eventsToUnbind.push(l(this,\"afterRender\",function(){let t;s.polar&&!1!==this.options.clip&&(t=this.yAxis.pane.center,this.clipCircle?this.clipCircle.animate({x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2}):this.clipCircle=function(t,e,i,s,o){let a=m(),r=t.createElement(\"clipPath\").attr({id:a}).add(t.defs),n=o?t.arc(e,i,s,o,0,2*Math.PI).add(r):t.circle(e,i,s).add(r);return n.id=a,n.clipPath=r,n}(s.renderer,t[0],t[1],t[2]/2,t[3]/2),this.group.clip(this.clipCircle),this.setClip=e.noop)})))}}function C(t){let e=this.chart,i=this.xAxis,s=this.yAxis,o=i.pane&&i.pane.center,a=t.chartX-(o&&o[0]||0)-e.plotLeft,r=t.chartY-(o&&o[1]||0)-e.plotTop,n=e.inverted?{clientX:t.chartX-s.pos,plotY:t.chartY-i.pos}:{clientX:180+-180/Math.PI*Math.atan2(a,r)};return this.searchKDTree(n)}function w(t,e,i,s){let o=s.tickInterval,a=s.tickPositions,r=p(a,t=>t>=i),n=p([...a].reverse(),t=>t<=e);return h(r)||(r=a[a.length-1]),h(n)||(n=a[0],r+=o,t[0][0]=\"L\",t.unshift(t[t.length-3])),(t=t.slice(a.indexOf(n),a.indexOf(r)+1))[0][0]=\"M\",t}function A(t,e){return p(this.pane||[],t=>t.options.id===e)||t.call(this,e)}function N(t,e,s,o,a,r){let n,l,h;let p=this.chart,d=u(o.inside,!!this.options.stacking);if(p.polar){if(n=e.rectPlotX/Math.PI*180,p.inverted)this.forceDL=p.isInsidePlot(e.plotX,e.plotY),d&&e.shapeArgs?(l=e.shapeArgs,a=c(a,{x:(h=this.yAxis.postTranslate(((l.start||0)+(l.end||0))/2-this.xAxis.startAngleRad,e.barX+e.pointWidth/2)).x-p.plotLeft,y:h.y-p.plotTop})):e.tooltipPos&&(a=c(a,{x:e.tooltipPos[0],y:e.tooltipPos[1]})),o.align=u(o.align,\"center\"),o.verticalAlign=u(o.verticalAlign,\"middle\");else{var g;let t,e;null===(g=o).align&&(t=n>20&&n<160?\"left\":n>200&&n<340?\"right\":\"center\",g.align=t),null===g.verticalAlign&&(e=n<45||n>315?\"bottom\":n>135&&n<225?\"top\":\"middle\",g.verticalAlign=e),o=g}i.prototype.alignDataLabel.call(this,e,s,o,a,r),this.isRadialBar&&e.shapeArgs&&e.shapeArgs.start===e.shapeArgs.end?s.hide():s.show()}else t.call(this,e,s,o,a,r)}function T(){let t=this.options,e=t.stacking,i=this.chart,s=this.xAxis,o=this.yAxis,r=o.reversed,n=o.center,l=s.startAngleRad,p=s.endAngleRad-l,c=t.threshold,u=0,g,b,m,y,x,P=0,S=0,M,L,k,v,C,w,A,N;if(s.isRadial)for(m=(g=this.points).length,y=o.translate(o.min),x=o.translate(o.max),c=t.threshold||0,i.inverted&&d(c)&&h(u=o.translate(c))&&(u<0?u=0:u>p&&(u=p),this.translatedThreshold=u+l);m--;){if(w=(b=g[m]).barX,L=b.x,k=b.y,b.shapeType=\"arc\",i.inverted){b.plotY=o.translate(k),e&&o.stacking?(C=o.stacking.stacks[(k<0?\"-\":\"\")+this.stackKey],this.visible&&C&&C[L]&&!b.isNull&&(v=C[L].points[this.getStackIndicator(void 0,L,this.index).key],P=o.translate(v[0]),S=o.translate(v[1]),h(P)&&(P=a.clamp(P,0,p)))):(P=u,S=b.plotY),P>S&&(S=[P,P=S][0]),r?S>y?S=y:Py||Sx?S=x:(Sx)&&(P=S=0),o.min>o.max&&(P=S=r?p:0),P+=l,S+=l,n&&(b.barX=w+=n[3]/2),A=Math.max(w,0),N=Math.max(w+b.pointWidth,0);let i=t.borderRadius,s=f((\"object\"==typeof i?i.radius:i)||0,N-A);b.shapeArgs={x:n[0],y:n[1],r:N,innerR:A,start:P,end:S,borderRadius:s},b.opacity=P===S?0:void 0,b.plotY=(h(this.translatedThreshold)&&(Pn[1])}}function X(t,e){let i,s;let o=this;if(this.chart.polar){e=e||this.points;for(let t=0;t{void 0===t.polarPlotY&&o.polar.toXY(t)})}let a=t.apply(this,[].slice.call(arguments,1));return s&&e.pop(),a}function Y(t,e){let i=this.chart,s={xAxis:[],yAxis:[]};return i.polar?i.axes.forEach(t=>{if(\"colorAxis\"===t.coll)return;let o=t.isXAxis,a=t.center,r=e.chartX-a[0]-i.plotLeft,n=e.chartY-a[1]-i.plotTop;s[o?\"xAxis\":\"yAxis\"].push({axis:t,value:t.translate(o?Math.PI-Math.atan2(r,n):Math.sqrt(Math.pow(r,2)+Math.pow(n,2)),!0)})}):s=t.call(this,e),s}function R(t,e){this.chart.polar||t.call(this,e)}function I(t,i){let s=this,o=this.chart,a=this.group,n=this.markerGroup,l=this.xAxis&&this.xAxis.center,h=o.plotLeft,p=o.plotTop,d=this.options.animation,c,g,f,b,m,y;o.polar?s.isRadialBar?i||(s.startAngleRad=u(s.translatedThreshold,s.xAxis.startAngleRad),e.seriesTypes.pie.prototype.animate.call(s,i)):(d=r(d),s.is(\"column\")?i||(g=l[3]/2,s.points.forEach(t=>{f=t.graphic,m=(b=t.shapeArgs)&&b.r,y=b&&b.innerR,f&&b&&(f.attr({r:g,innerR:g}),f.animate({r:m,innerR:y},s.options.animation))})):i?(c={translateX:l[0]+h,translateY:l[1]+p,scaleX:.001,scaleY:.001},a.attr(c),n&&n.attr(c)):(c={translateX:h,translateY:p,scaleX:1,scaleY:1},a.animate(c,d),n&&n.animate(c,d))):t.call(this,i)}function j(t,e,i,s){let o,a;if(this.chart.polar){if(s){let t=(a=function t(e,i,s,o){let a,r,n,l,h,p;let d=o?1:0,c=(a=i>=0&&i<=e.length-1?i:i<0?e.length-1+i:0)-1<0?e.length-(1+d):a-1,u=a+1>e.length-1?d:a+1,g=e[c],f=e[u],b=g.plotX,m=g.plotY,y=f.plotX,x=f.plotY,P=e[a].plotX,S=e[a].plotY;r=(1.5*P+b)/2.5,n=(1.5*S+m)/2.5,l=(1.5*P+y)/2.5,h=(1.5*S+x)/2.5;let M=Math.sqrt(Math.pow(r-P,2)+Math.pow(n-S,2)),L=Math.sqrt(Math.pow(l-P,2)+Math.pow(h-S,2)),k=Math.atan2(n-S,r-P);p=Math.PI/2+(k+Math.atan2(h-S,l-P))/2,Math.abs(k-p)>Math.PI/2&&(p-=Math.PI),r=P+Math.cos(p)*M,n=S+Math.sin(p)*M;let v={rightContX:l=P+Math.cos(Math.PI+p)*L,rightContY:h=S+Math.sin(Math.PI+p)*L,leftContX:r,leftContY:n,plotX:P,plotY:S};return s&&(v.prevPointCont=t(e,c,!1,o)),v}(e,s,!0,this.connectEnds)).prevPointCont&&a.prevPointCont.rightContX,i=a.prevPointCont&&a.prevPointCont.rightContY;o=[\"C\",d(t)?t:a.plotX,d(i)?i:a.plotY,d(a.leftContX)?a.leftContX:a.plotX,d(a.leftContY)?a.leftContY:a.plotY,a.plotX,a.plotY]}else o=[\"M\",i.plotX,i.plotY]}else o=t.call(this,e,i,s);return o}function D(t,e,i=this.plotY){if(!this.destroyed){let{plotX:s,series:o}=this,{chart:a}=o;return a.polar&&d(s)&&d(i)?[s+(e?a.plotLeft:0),i+(e?a.plotTop:0)]:t.call(this,e,i)}}class E{static compose(t,e,i,a,r,h,p,d,c,u){if(s.compose(e,i),o.compose(t,r),g(n,\"Polar\")){let t=e.prototype,s=h.prototype,o=i.prototype,r=a.prototype;if(l(e,\"afterDrawChartBox\",x),l(e,\"getAxes\",S),l(e,\"init\",P),y(t,\"get\",A),y(o,\"getCoordinates\",Y),y(o,\"pinch\",R),l(i,\"getSelectionMarkerAttrs\",L),l(i,\"getSelectionBox\",M),l(a,\"afterInit\",k),l(a,\"afterTranslate\",v,{order:2}),l(a,\"afterColumnTranslate\",T,{order:4}),y(r,\"animate\",I),y(s,\"pos\",D),d){let t=d.prototype;y(t,\"alignDataLabel\",N),y(t,\"animate\",I)}if(c&&y(c.prototype,\"getGraphPath\",X),u){let t=u.prototype;y(t,\"getPointSpline\",j),p&&(p.prototype.getPointSpline=t.getPointSpline)}}}constructor(t){this.series=t}arc(t,e,i,s){let o=this.series,a=o.xAxis.center,r=o.yAxis.len,n=a[3]/2,l=r-e+n,h=r-u(t,r)+n;return o.yAxis.reversed&&(l<0&&(l=n),h<0&&(h=n)),{x:a[0],y:a[1],r:l,innerR:h,start:i,end:s}}toXY(t){let e=this.series,i=e.chart,s=e.xAxis,o=e.yAxis,a=t.plotX,r=i.inverted,n=t.y,l=t.plotY,h=r?a:o.len-l,p;if(r&&e&&!e.isRadialBar&&(t.plotY=l=d(n)?o.translate(n):0),t.rectPlotX=a,t.rectPlotY=l,o.center&&(h+=o.center[3]/2),d(l)){let e=r?o.postTranslate(l,h):s.postTranslate(a,h);t.plotX=t.polarPlotX=e.x-i.plotLeft,t.plotY=t.polarPlotY=e.y-i.plotTop}e.kdByAngle?((p=(a/Math.PI*180+s.pane.options.startAngle)%360)<0&&(p+=360),t.clientX=p):t.clientX=t.plotX}}return E}),i(e,\"Core/Axis/WaterfallAxis.js\",[e[\"Core/Globals.js\"],e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s;let{composed:o}=t,{addEvent:a,objectEach:r,pushUnique:n}=i;return function(t){function i(){let t=this.waterfall.stacks;t&&(t.changed=!1,delete t.alreadyChanged)}function s(){let t=this.options.stackLabels;t&&t.enabled&&this.waterfall.stacks&&this.waterfall.renderStackTotals()}function l(){this.waterfall||(this.waterfall=new p(this))}function h(){let t=this.axes;for(let e of this.series)if(e.options.stacking){for(let e of t)e.isXAxis||(e.waterfall.stacks.changed=!0);break}}t.compose=function(t,e){n(o,\"Axis.Waterfall\")&&(a(t,\"init\",l),a(t,\"afterBuildStacks\",i),a(t,\"afterRender\",s),a(e,\"beforeRedraw\",h))};class p{constructor(t){this.axis=t,this.stacks={changed:!1}}renderStackTotals(){let t=this.axis,i=t.waterfall.stacks,s=t.stacking&&t.stacking.stackTotalGroup,o=new e(t,t.options.stackLabels||{},!1,0,void 0);this.dummyStackItem=o,s&&r(i,t=>{r(t,(t,i)=>{o.total=t.stackTotal,o.x=+i,t.label&&(o.label=t.label),e.prototype.render.call(o,s),t.label=o.label,delete o.label})}),o.total=null}}t.Composition=p}(s||(s={})),s}),i(e,\"Series/Waterfall/WaterfallPoint.js\",[e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{isNumber:s}=i;class o extends t.prototype.pointClass{getClassName(){let t=e.prototype.getClassName.call(this);return this.isSum?t+=\" highcharts-sum\":this.isIntermediateSum&&(t+=\" highcharts-intermediate-sum\"),t}isValid(){return s(this.y)||this.isSum||!!this.isIntermediateSum}}return o}),i(e,\"Series/Waterfall/WaterfallSeriesDefaults.js\",[],function(){return{dataLabels:{inside:!0},lineWidth:1,lineColor:\"#333333\",dashStyle:\"Dot\",borderColor:\"#333333\",states:{hover:{lineWidthPlus:0}}}}),i(e,\"Series/Waterfall/WaterfallSeries.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"],e[\"Core/Axis/WaterfallAxis.js\"],e[\"Series/Waterfall/WaterfallPoint.js\"],e[\"Series/Waterfall/WaterfallSeriesDefaults.js\"]],function(t,e,i,s,o){let{column:a,line:r}=t.seriesTypes,{addEvent:n,arrayMax:l,arrayMin:h,correctFloat:p,extend:d,isNumber:c,merge:u,objectEach:g,pick:f}=e;function b(t,e){return Object.hasOwnProperty.call(t,e)}class m extends a{generatePoints(){a.prototype.generatePoints.apply(this);for(let t=0,e=this.points.length;t0?i:void 0);let s=a.prototype.pointAttribs.call(this,t,e);return delete s.dashstyle,s}getGraphPath(){return[[\"M\",0,0]]}getCrispPath(){let t=this.data.filter(t=>c(t.y)),e=this.yAxis,i=t.length,s=Math.round(this.graph.strokeWidth())%2/2,o=Math.round(this.borderWidth)%2/2,a=this.xAxis.reversed,r=this.yAxis.reversed,n=this.options.stacking,l=[];for(let h=1;h0?-u.height:0;if(g&&u&&i){let t;let d=g[h-1];if(n){let i=d.connectorThreshold;t=Math.round(e.translate(i,!1,!0,!1,!0)+(r?f:0))-s}else t=u.y+p.minPointLengthOffset+o-s;l.push([\"M\",(u.x||0)+(a?0:u.width||0),t],[\"L\",(i.x||0)+(a&&i.width||0),t])}if(u&&l.length&&(!n&&d<0&&!r||d>0&&r)){let t=l[l.length-2];t&&\"number\"==typeof t[2]&&(t[2]+=u.height||0);let e=l[l.length-1];e&&\"number\"==typeof e[2]&&(e[2]+=u.height||0)}}return l}drawGraph(){r.prototype.drawGraph.call(this),this.graph&&this.graph.attr({d:this.getCrispPath()})}setStackedPoints(t){let e=this.options,i=t.waterfall?.stacks,s=e.threshold||0,o=this.stackKey,a=this.xData,r=a.length,n=s,l=n,h,p=0,d=0,c=0,u,g,f,b,m,y,x,P,S=(t,e,i,s)=>{if(h){if(u)for(;ix.indexOf(o)&&(P=!0),i[o]||(i[o]={});let t=i[o];if(t)for(let i=0;i=0?h.posTotal+=m:h.negTotal+=m,b=e.data[i],g=h.absolutePos=h.posTotal,f=h.absoluteNeg=h.negTotal,h.stackTotal=g+f,u=h.stackState.length,b&&b.isIntermediateSum?(S(c,d,0,c),c=d,d=s,n^=l,l^=n,n^=l):b&&b.isSum?(S(s,p,u,0),n=s):(S(n,m,0,p),b&&(p+=m,d+=m)),h.stateIndex++,h.threshold=n,n+=h.stackTotal;i.changed=!1,i.alreadyChanged||(i.alreadyChanged=[]),i.alreadyChanged.push(o)}}getExtremes(){let t,e,i;let s=this.options.stacking;return s?(t=this.yAxis.waterfall.stacks,e=this.stackedYNeg=[],i=this.stackedYPos=[],\"overlap\"===s?g(t[this.stackKey],function(t){e.push(h(t.stackState)),i.push(l(t.stackState))}):g(t[this.stackKey],function(t){e.push(t.negTotal+t.threshold),i.push(t.posTotal+t.threshold)}),{dataMin:h(e),dataMax:l(i)}):{dataMin:this.dataMin,dataMax:this.dataMax}}}return m.defaultOptions=u(a.defaultOptions,o),m.compose=i.compose,d(m.prototype,{pointValKey:\"y\",showLine:!0,pointClass:s}),n(m,\"afterColumnTranslate\",function(){let{options:t,points:e,yAxis:i}=this,s=f(t.minPointLength,5),o=s/2,a=t.threshold||0,r=t.stacking,n=i.waterfall.stacks[this.stackKey],l=a,h=a,p,g,m,y;for(let t=0;t=0?g:g-M,b(e,\"absolutePos\")&&delete e.absolutePos,b(e,\"absoluteNeg\")&&delete e.absoluteNeg):(M>=0?(g=e.threshold+e.posTotal,e.posTotal-=M,p=g):(g=e.threshold+e.negTotal,e.negTotal-=M,p=g-M),!e.posTotal&&c(e.absolutePos)&&b(e,\"absolutePos\")&&(e.posTotal=e.absolutePos,delete e.absolutePos),!e.negTotal&&c(e.absoluteNeg)&&b(e,\"absoluteNeg\")&&(e.negTotal=e.absoluteNeg,delete e.absoluteNeg)),f.isSum||(e.connectorThreshold=e.threshold+e.stackTotal),i.reversed?(m=M>=0?p-M:p+M,y=p):(m=p,y=p-M),f.below=m<=a,P.y=i.translate(m,!1,!0,!1,!0),P.height=Math.abs(P.y-i.translate(y,!1,!0,!1,!0));let s=i.waterfall.dummyStackItem;s&&(s.x=t,s.label=n[t].label,s.setOffset(this.pointXOffset||0,this.barW||0,this.stackedYNeg[t],this.stackedYPos[t],void 0,this.xAxis))}}else p=Math.max(h,h+M)+S[0],P.y=i.translate(p,!1,!0,!1,!0),f.isSum?(P.y=i.translate(S[1],!1,!0,!1,!0),P.height=Math.min(i.translate(S[0],!1,!0,!1,!0),i.len)-P.y,f.below=S[1]<=a):f.isIntermediateSum?(M>=0?(m=S[1]+l,y=l):(m=l,y=S[1]+l),i.reversed&&(m^=y,y^=m,m^=y),P.y=i.translate(m,!1,!0,!1,!0),P.height=Math.abs(P.y-Math.min(i.translate(y,!1,!0,!1,!0),i.len)),l+=S[1],f.below=m<=a):(P.height=x>0?i.translate(h,!1,!0,!1,!0)-P.y:i.translate(h,!1,!0,!1,!0)-i.translate(h-x,!1,!0,!1,!0),h+=x,f.below=hparseInt(i.userAgent.split(\"Firefox/\")[1],10),i.marginNames=[\"plotTop\",\"marginRight\",\"marginBottom\",\"plotLeft\"],i.noop=function(){},i.supportsPassiveEvents=function(){let t=!1;if(!i.isMS){let e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});i.win.addEventListener&&i.win.removeEventListener&&(i.win.addEventListener(\"testPassive\",i.noop,e),i.win.removeEventListener(\"testPassive\",i.noop,e))}return t}(),i.charts=[],i.composed=[],i.dateFormats={},i.seriesTypes={},i.symbolSizes={},i.chartCount=0,e}),i(e,\"Core/Utilities.js\",[e[\"Core/Globals.js\"]],function(t){let e;let{charts:i,doc:s,win:o}=t;function r(e,i,s,a){let n=i?\"Highcharts error\":\"Highcharts warning\";32===e&&(e=`${n}: Deprecated member`);let l=p(e),h=l?`${n} #${e}: www.highcharts.com/errors/${e}/`:e.toString();if(void 0!==a){let t=\"\";l&&(h+=\"?\"),M(a,function(e,i){t+=`\n - ${i}: ${e}`,l&&(h+=encodeURI(i)+\"=\"+encodeURI(e))}),h+=t}C(t,\"displayError\",{chart:s,code:e,message:h,params:a},function(){if(i)throw Error(h);o.console&&-1===r.messages.indexOf(h)&&console.warn(h)}),r.messages.push(h)}function a(t,e){return parseInt(t,e||10)}function n(t){return\"string\"==typeof t}function l(t){let e=Object.prototype.toString.call(t);return\"[object Array]\"===e||\"[object Array Iterator]\"===e}function h(t,e){return!!t&&\"object\"==typeof t&&(!e||!l(t))}function d(t){return h(t)&&\"number\"==typeof t.nodeType}function c(t){let e=t&&t.constructor;return!!(h(t,!0)&&!d(t)&&e&&e.name&&\"Object\"!==e.name)}function p(t){return\"number\"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function u(t){return null!=t}function g(t,e,i){let s;let o=n(e)&&!u(i),r=(e,i)=>{u(e)?t.setAttribute(i,e):o?(s=t.getAttribute(i))||\"class\"!==i||(s=t.getAttribute(i+\"Name\")):t.removeAttribute(i)};return n(e)?r(i,e):M(e,r),s}function f(t){return l(t)?t:[t]}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function x(){let t=arguments,e=t.length;for(let i=0;i1e14?t:parseFloat(t.toPrecision(e||14))}(r||(r={})).messages=[],Math.easeInOutSine=function(t){return -.5*(Math.cos(Math.PI*t)-1)};let S=Array.prototype.find?function(t,e){return t.find(e)}:function(t,e){let i;let s=t.length;for(i=0;it.order-e.order),t.forEach(t=>{!1===t.fn.call(e,o)&&o.preventDefault()})}r&&!o.defaultPrevented&&r.call(e,o)}M({map:\"map\",each:\"forEach\",grep:\"filter\",reduce:\"reduce\",some:\"some\"},function(e,i){t[i]=function(t){return r(32,!1,void 0,{[`Highcharts.${i}`]:`use Array.${e}`}),Array.prototype[e].apply(t,[].slice.call(arguments,1))}});let A=function(){let t=Math.random().toString(36).substring(2,9)+\"-\",i=0;return function(){return\"highcharts-\"+(e?\"\":t)+i++}}();return o.jQuery&&(o.jQuery.fn.highcharts=function(){let e=[].slice.call(arguments);if(this[0])return e[0]?(new t[n(e[0])?e.shift():\"Chart\"](this[0],e[0],e[1]),this):i[g(this[0],\"data-highcharts-chart\")]}),{addEvent:function(e,i,s,o={}){let r=\"function\"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(r,\"hcEvents\")||(r.hcEvents={});let a=r.hcEvents;t.Point&&e instanceof t.Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let n=e.addEventListener;n&&n.call(e,i,s,!!t.supportsPassiveEvents&&{passive:void 0===o.passive?-1!==i.indexOf(\"touch\"):o.passive,capture:!1}),a[i]||(a[i]=[]);let l={fn:s,order:\"number\"==typeof o.order?o.order:1/0};return a[i].push(l),a[i].sort((t,e)=>t.order-e.order),function(){k(e,i,s)}},arrayMax:function(t){let e=t.length,i=t[0];for(;e--;)t[e]>i&&(i=t[e]);return i},arrayMin:function(t){let e=t.length,i=t[0];for(;e--;)t[e]e?t-1&&o[d]){i=f(i),r[d]=[];for(let e=0;e{if(t.length>1)for(r=s=t.length-1;r>0;r--)(o=t[r]-t[r-1])<0&&!a?(e?.(),e=void 0):o&&(void 0===i||o=i-1&&(i=Math.floor(s)),Math.max(0,i-(t(e,\"padding-left\",!0)||0)-(t(e,\"padding-right\",!0)||0))}if(\"height\"===i)return Math.max(0,Math.min(e.offsetHeight,e.scrollHeight)-(t(e,\"padding-top\",!0)||0)-(t(e,\"padding-bottom\",!0)||0));let n=o.getComputedStyle(e,void 0);return n&&(r=n.getPropertyValue(i),x(s,\"opacity\"!==i)&&(r=a(r))),r},inArray:function(t,e,i){return r(32,!1,void 0,{\"Highcharts.inArray\":\"use Array.indexOf\"}),e.indexOf(t,i)},insertItem:function(t,e){let i;let s=t.options.index,o=e.length;for(i=t.options.isInternal?o:0;i=t))&&(o||!(n<=(e[r]+(e[r+1]||e[r]))/2)));r++);return v(a*i,-Math.round(Math.log(.001)/Math.LN10))},objectEach:M,offset:function(t){let e=s.documentElement,i=t.parentElement||t.parentNode?t.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:i.top+(o.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(o.pageXOffset||e.scrollLeft)-(e.clientLeft||0),width:i.width,height:i.height}},pad:function(t,e,i){return Array((e||2)+1-String(t).replace(\"-\",\"\").length).join(i||\"0\")+t},pick:x,pInt:a,pushUnique:function(t,e){return 0>t.indexOf(e)&&!!t.push(e)},relativeLength:function(t,e,i){return/%$/.test(t)?e*parseFloat(t)/100+(i||0):parseFloat(t)},removeEvent:k,replaceNested:function(t,...e){let i,s;do for(s of(i=t,e))t=t.replace(s[0],s[1]);while(t!==i);return t},splat:f,stableSort:function(t,e){let i,s;let o=t.length;for(s=0;s0?setTimeout(t,e,i):(t.call(0,i),-1)},timeUnits:{millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5,month:24192e5,year:314496e5},uniqueKey:A,useSerialIds:function(t){return e=x(t,e)},wrap:function(t,e,i){let s=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return s.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}}}),i(e,\"Core/Chart/ChartDefaults.js\",[],function(){return{alignThresholds:!1,panning:{enabled:!1,type:\"x\"},styledMode:!1,borderRadius:0,colorCount:10,allowMutatingData:!0,ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{},position:{}},reflow:!0,type:\"line\",zooming:{singleTouch:!1,resetButton:{theme:{zIndex:6},position:{align:\"right\",x:-10,y:10}}},width:null,height:null,borderColor:\"#334eff\",backgroundColor:\"#ffffff\",plotBorderColor:\"#cccccc\"}}),i(e,\"Core/Color/Palettes.js\",[],function(){return{colors:[\"#2caffe\",\"#544fc5\",\"#00e272\",\"#fe6a35\",\"#6b8abc\",\"#d568fb\",\"#2ee0ca\",\"#fa4b42\",\"#feb56a\",\"#91e8e1\"]}}),i(e,\"Core/Time.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{win:i}=t,{defined:s,error:o,extend:r,isNumber:a,isObject:n,merge:l,objectEach:h,pad:d,pick:c,splat:p,timeUnits:u}=e,g=t.isSafari&&i.Intl&&i.Intl.DateTimeFormat.prototype.formatRange,f=t.isSafari&&i.Intl&&!i.Intl.DateTimeFormat.prototype.formatRange;class m{constructor(t){this.options={},this.useUTC=!1,this.variableTimezone=!1,this.Date=i.Date,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.update(t)}get(t,e){if(this.variableTimezone||this.timezoneOffset){let i=e.getTime(),s=i-this.getTimezoneOffset(e);e.setTime(s);let o=e[\"getUTC\"+t]();return e.setTime(i),o}return this.useUTC?e[\"getUTC\"+t]():e[\"get\"+t]()}set(t,e,i){if(this.variableTimezone||this.timezoneOffset){if(\"Milliseconds\"===t||\"Seconds\"===t||\"Minutes\"===t&&this.getTimezoneOffset(e)%36e5==0)return e[\"setUTC\"+t](i);let s=this.getTimezoneOffset(e),o=e.getTime()-s;e.setTime(o),e[\"setUTC\"+t](i);let r=this.getTimezoneOffset(e);return o=e.getTime()+r,e.setTime(o)}return this.useUTC||g&&\"FullYear\"===t?e[\"setUTC\"+t](i):e[\"set\"+t](i)}update(t={}){let e=c(t.useUTC,!0);this.options=t=l(!0,this.options,t),this.Date=t.Date||i.Date||Date,this.useUTC=e,this.timezoneOffset=e&&t.timezoneOffset||void 0,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.variableTimezone=e&&!!(t.getTimezoneOffset||t.timezone)}makeTime(t,e,i,s,o,r){let a,n,l;return this.useUTC?(a=this.Date.UTC.apply(0,arguments),n=this.getTimezoneOffset(a),a+=n,n!==(l=this.getTimezoneOffset(a))?a+=l-n:n-36e5!==this.getTimezoneOffset(a-36e5)||f||(a-=36e5)):a=new this.Date(t,e,c(i,1),c(s,0),c(o,0),c(r,0)).getTime(),a}timezoneOffsetFunction(){let t=this,e=this.options,i=e.getTimezoneOffset;return this.useUTC?e.timezone?t=>{try{let i=`shortOffset,${e.timezone||\"\"}`,[s,o,r,n,l=0]=(m.formatCache[i]=m.formatCache[i]||Intl.DateTimeFormat(\"en\",{timeZone:e.timezone,timeZoneName:\"shortOffset\"})).format(t).split(/(GMT|:)/).map(Number),h=-(36e5*(r+l/60));if(a(h))return h}catch(t){o(34)}return 0}:this.useUTC&&i?t=>6e4*i(t.valueOf()):()=>6e4*(t.timezoneOffset||0):t=>6e4*new Date(t.toString()).getTimezoneOffset()}dateFormat(e,i,o){if(!s(i)||isNaN(i))return t.defaultOptions.lang&&t.defaultOptions.lang.invalidDate||\"\";e=c(e,\"%Y-%m-%d %H:%M:%S\");let a=this,n=new this.Date(i),l=this.get(\"Hours\",n),p=this.get(\"Day\",n),u=this.get(\"Date\",n),g=this.get(\"Month\",n),f=this.get(\"FullYear\",n),m=t.defaultOptions.lang,x=m&&m.weekdays,y=m&&m.shortWeekdays;return h(r({a:y?y[p]:x[p].substr(0,3),A:x[p],d:d(u),e:d(u,2,\" \"),w:p,b:m.shortMonths[g],B:m.months[g],m:d(g+1),o:g+1,y:f.toString().substr(2,2),Y:f,H:d(l),k:l,I:d(l%12||12),l:l%12||12,M:d(this.get(\"Minutes\",n)),p:l<12?\"AM\":\"PM\",P:l<12?\"am\":\"pm\",S:d(this.get(\"Seconds\",n)),L:d(Math.floor(i%1e3),3)},t.dateFormats),function(t,s){for(;-1!==e.indexOf(\"%\"+s);)e=e.replace(\"%\"+s,\"function\"==typeof t?t.call(a,i):t)}),o?e.substr(0,1).toUpperCase()+e.substr(1):e}resolveDTLFormat(t){return n(t,!0)?t:{main:(t=p(t))[0],from:t[1],to:t[2]}}getTimeTicks(t,e,i,o){let a,n,l,h;let d=this,p=d.Date,g=[],f={},m=new p(e),x=t.unitRange,y=t.count||1;if(o=c(o,1),s(e)){d.set(\"Milliseconds\",m,x>=u.second?0:y*Math.floor(d.get(\"Milliseconds\",m)/y)),x>=u.second&&d.set(\"Seconds\",m,x>=u.minute?0:y*Math.floor(d.get(\"Seconds\",m)/y)),x>=u.minute&&d.set(\"Minutes\",m,x>=u.hour?0:y*Math.floor(d.get(\"Minutes\",m)/y)),x>=u.hour&&d.set(\"Hours\",m,x>=u.day?0:y*Math.floor(d.get(\"Hours\",m)/y)),x>=u.day&&d.set(\"Date\",m,x>=u.month?1:Math.max(1,y*Math.floor(d.get(\"Date\",m)/y))),x>=u.month&&(d.set(\"Month\",m,x>=u.year?0:y*Math.floor(d.get(\"Month\",m)/y)),n=d.get(\"FullYear\",m)),x>=u.year&&(n-=n%y,d.set(\"FullYear\",m,n)),x===u.week&&(h=d.get(\"Day\",m),d.set(\"Date\",m,d.get(\"Date\",m)-h+o+(h4*u.month||d.getTimezoneOffset(e)!==d.getTimezoneOffset(i));let p=m.getTime();for(a=1;p1?p=d.makeTime(n,t,r,c+a*y):p+=x*y,a++;g.push(p),x<=u.hour&&g.length<1e4&&g.forEach(function(t){t%18e5==0&&\"000000000\"===d.dateFormat(\"%H%M%S%L\",t)&&(f[t]=\"day\")})}return g.info=r(t,{higherRanks:f,totalRange:x*y}),g}getDateFormat(t,e,i,s){let o=this.dateFormat(\"%m-%d %H:%M:%S.%L\",e),r=\"01-01 00:00:00.000\",a={millisecond:15,second:12,minute:9,hour:6,day:3},n=\"millisecond\",l=n;for(n in u){if(t===u.week&&+this.dateFormat(\"%w\",e)===i&&o.substr(6)===r.substr(6)){n=\"week\";break}if(u[n]>t){n=l;break}if(a[n]&&o.substr(a[n])!==r.substr(a[n]))break;\"week\"!==n&&(l=n)}return this.resolveDTLFormat(s[n]).main}}return m.formatCache={},m}),i(e,\"Core/Defaults.js\",[e[\"Core/Chart/ChartDefaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palettes.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{isTouchDevice:r,svg:a}=e,{merge:n}=o,l={colors:i.colors,symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],weekdays:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],decimalPoint:\".\",numericSymbols:[\"k\",\"M\",\"G\",\"T\",\"P\",\"E\"],resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\" \"},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:t,title:{style:{color:\"#333333\",fontWeight:\"bold\"},text:\"Chart title\",align:\"center\",margin:15,widthAdjust:-44},subtitle:{style:{color:\"#666666\",fontSize:\"0.8em\"},text:\"\",align:\"center\",widthAdjust:-44},caption:{margin:15,style:{color:\"#666666\",fontSize:\"0.8em\"},text:\"\",align:\"left\",verticalAlign:\"bottom\"},plotOptions:{},legend:{enabled:!0,align:\"center\",alignColumns:!0,className:\"highcharts-no-tooltip\",layout:\"horizontal\",itemMarginBottom:2,itemMarginTop:2,labelFormatter:function(){return this.name},borderColor:\"#999999\",borderRadius:0,navigation:{style:{fontSize:\"0.8em\"},activeColor:\"#0022ff\",inactiveColor:\"#cccccc\"},itemStyle:{color:\"#333333\",cursor:\"pointer\",fontSize:\"0.8em\",textDecoration:\"none\",textOverflow:\"ellipsis\"},itemHoverStyle:{color:\"#000000\"},itemHiddenStyle:{color:\"#666666\",textDecoration:\"line-through\"},shadow:!1,itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},squareSymbol:!0,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontSize:\"0.8em\",fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"45%\"},style:{position:\"absolute\",backgroundColor:\"#ffffff\",opacity:.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:a,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %e %b, %H:%M:%S.%L\",second:\"%A, %e %b, %H:%M:%S\",minute:\"%A, %e %b, %H:%M\",hour:\"%A, %e %b, %H:%M\",day:\"%A, %e %b %Y\",week:\"Week from %A, %e %b %Y\",month:\"%B %Y\",year:\"%Y\"},footerFormat:\"\",headerShape:\"callout\",hideDelay:500,padding:8,shape:\"callout\",shared:!1,snap:r?25:10,headerFormat:'{point.key}
',pointFormat:' {series.name}: {point.y}
',backgroundColor:\"#ffffff\",borderWidth:void 0,shadow:!0,stickOnContact:!1,style:{color:\"#333333\",cursor:\"default\",fontSize:\"0.8em\"},useHTML:!1},credits:{enabled:!0,href:\"https://www.highcharts.com?credits\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#999999\",fontSize:\"0.6em\"},text:\"Highcharts.com\"}};l.chart.styledMode=!1;let h=new s(l.time);return{defaultOptions:l,defaultTime:h,getOptions:function(){return l},setOptions:function(t){return n(!0,l,t),(t.time||t.global)&&(e.time?e.time.update(n(l.global,l.time,t.global,t.time)):e.time=h),l}}}),i(e,\"Core/Color/Color.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{isNumber:i,merge:s,pInt:o}=e;class r{static parse(t){return t?new r(t):r.None}constructor(e){let i,s,o,a;this.rgba=[NaN,NaN,NaN,NaN],this.input=e;let n=t.Color;if(n&&n!==r)return new n(e);if(\"object\"==typeof e&&void 0!==e.stops)this.stops=e.stops.map(t=>new r(t[1]));else if(\"string\"==typeof e){if(this.input=e=r.names[e.toLowerCase()]||e,\"#\"===e.charAt(0)){let t=e.length,i=parseInt(e.substr(1),16);7===t?s=[(16711680&i)>>16,(65280&i)>>8,255&i,1]:4===t&&(s=[(3840&i)>>4|(3840&i)>>8,(240&i)>>4|240&i,(15&i)<<4|15&i,1])}if(!s)for(o=r.parsers.length;o--&&!s;)(i=(a=r.parsers[o]).regex.exec(e))&&(s=a.parse(i))}s&&(this.rgba=s)}get(t){let e=this.input,o=this.rgba;if(\"object\"==typeof e&&void 0!==this.stops){let i=s(e);return i.stops=[].slice.call(i.stops),this.stops.forEach((e,s)=>{i.stops[s]=[i.stops[s][0],e.get(t)]}),i}return o&&i(o[0])?\"rgb\"!==t&&(t||1!==o[3])?\"a\"===t?`${o[3]}`:\"rgba(\"+o.join(\",\")+\")\":\"rgb(\"+o[0]+\",\"+o[1]+\",\"+o[2]+\")\":e}brighten(t){let e=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(t)});else if(i(t)&&0!==t)for(let i=0;i<3;i++)e[i]+=o(255*t),e[i]<0&&(e[i]=0),e[i]>255&&(e[i]=255);return this}setOpacity(t){return this.rgba[3]=t,this}tweenTo(t,e){let s=this.rgba,o=t.rgba;if(!i(s[0])||!i(o[0]))return t.input||\"none\";let r=1!==o[3]||1!==s[3];return(r?\"rgba(\":\"rgb(\")+Math.round(o[0]+(s[0]-o[0])*(1-e))+\",\"+Math.round(o[1]+(s[1]-o[1])*(1-e))+\",\"+Math.round(o[2]+(s[2]-o[2])*(1-e))+(r?\",\"+(o[3]+(s[3]-o[3])*(1-e)):\"\")+\")\"}}return r.names={white:\"#ffffff\",black:\"#000000\"},r.parsers=[{regex:/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,parse:function(t){return[o(t[1]),o(t[2]),o(t[3]),parseFloat(t[4],10)]}},{regex:/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,parse:function(t){return[o(t[1]),o(t[2]),o(t[3]),1]}}],r.None=new r(\"\"),r}),i(e,\"Core/Animation/Fx.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{parse:s}=t,{win:o}=e,{isNumber:r,objectEach:a}=i;class n{constructor(t,e,i){this.pos=NaN,this.options=e,this.elem=t,this.prop=i}dSetter(){let t=this.paths,e=t&&t[0],i=t&&t[1],s=this.now||0,o=[];if(1!==s&&e&&i){if(e.length===i.length&&s<1)for(let t=0;t=l+this.startTime?(this.now=this.end,this.pos=1,this.update(),h[this.prop]=!0,i=!0,a(h,function(t){!0!==t&&(i=!1)}),i&&n&&n.call(r),e=!1):(this.pos=o.easing((s-this.startTime)/l),this.now=this.start+(this.end-this.start)*this.pos,this.update(),e=!0),e}initPath(t,e,i){let s=t.startX,o=t.endX,a=i.slice(),n=t.isArea,l=n?2:1,h,d,c,p,u=e&&e.slice();if(!u)return[a,a];function g(t,e){for(;t.length{let s=d(t.options.animation);n=a(e)&&i(e.defer)?o.defer:Math.max(n,s.duration+s.defer),l=Math.min(o.duration,s.duration)}),t.renderer.forExport&&(n=0),{defer:Math.max(0,n-l),duration:Math.min(n,l)}},setAnimation:function(t,e){e.renderer.globalAnimation=h(t,e.options.chart.animation,!0)},stop:c}}),i(e,\"Core/Renderer/HTML/AST.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{SVG_NS:i,win:s}=t,{attr:o,createElement:r,css:a,error:n,isFunction:l,isString:h,objectEach:d,splat:c}=e,{trustedTypes:p}=s,u=p&&l(p.createPolicy)&&p.createPolicy(\"highcharts\",{createHTML:t=>t}),g=u?u.createHTML(\"\"):\"\",f=function(){try{return!!new DOMParser().parseFromString(g,\"text/html\")}catch(t){return!1}}();class m{static filterUserAttributes(t){return d(t,(e,i)=>{let s=!0;-1===m.allowedAttributes.indexOf(i)&&(s=!1),-1!==[\"background\",\"dynsrc\",\"href\",\"lowsrc\",\"src\"].indexOf(i)&&(s=h(e)&&m.allowedReferences.some(t=>0===e.indexOf(t))),s||(n(33,!1,void 0,{\"Invalid attribute in config\":`${i}`}),delete t[i]),h(e)&&t[i]&&(t[i]=e.replace(/{let i=e.split(\":\").map(t=>t.trim()),s=i.shift();return s&&i.length&&(t[s.replace(/-([a-z])/g,t=>t[1].toUpperCase())]=i.join(\":\")),t},{})}static setElementHTML(t,e){t.innerHTML=m.emptyHTML,e&&new m(e).addToDOM(t)}constructor(t){this.nodes=\"string\"==typeof t?this.parseMarkup(t):t}addToDOM(e){return function e(s,r){let l;return c(s).forEach(function(s){let h;let c=s.tagName,p=s.textContent?t.doc.createTextNode(s.textContent):void 0,u=m.bypassHTMLFiltering;if(c){if(\"#text\"===c)h=p;else if(-1!==m.allowedTags.indexOf(c)||u){let n=\"svg\"===c?i:r.namespaceURI||i,l=t.doc.createElementNS(n,c),g=s.attributes||{};d(s,function(t,e){\"tagName\"!==e&&\"attributes\"!==e&&\"children\"!==e&&\"style\"!==e&&\"textContent\"!==e&&(g[e]=t)}),o(l,u?g:m.filterUserAttributes(g)),s.style&&a(l,s.style),p&&l.appendChild(p),e(s.children||[],l),h=l}else n(33,!1,void 0,{\"Invalid tagName in config\":c})}h&&r.appendChild(h),l=h}),l}(this.nodes,e)}parseMarkup(t){let e;let i=[];if(t=t.trim().replace(/ style=([\"'])/g,\" data-style=$1\"),f)e=new DOMParser().parseFromString(u?u.createHTML(t):t,\"text/html\");else{let i=r(\"div\");i.innerHTML=t,e={body:i}}let s=(t,e)=>{let i=t.nodeName.toLowerCase(),o={tagName:i};\"#text\"===i&&(o.textContent=t.textContent||\"\");let r=t.attributes;if(r){let t={};[].forEach.call(r,e=>{\"data-style\"===e.name?o.style=m.parseStyle(e.value):t[e.name]=e.value}),o.attributes=t}if(t.childNodes.length){let e=[];[].forEach.call(t.childNodes,t=>{s(t,e)}),e.length&&(o.children=e)}e.push(o)};return[].forEach.call(e.body.childNodes,t=>s(t,i)),i}}return m.allowedAttributes=[\"alt\",\"aria-controls\",\"aria-describedby\",\"aria-expanded\",\"aria-haspopup\",\"aria-hidden\",\"aria-label\",\"aria-labelledby\",\"aria-live\",\"aria-pressed\",\"aria-readonly\",\"aria-roledescription\",\"aria-selected\",\"class\",\"clip-path\",\"color\",\"colspan\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"disabled\",\"fill\",\"filterUnits\",\"flood-color\",\"flood-opacity\",\"height\",\"href\",\"id\",\"in\",\"markerHeight\",\"markerWidth\",\"offset\",\"opacity\",\"orient\",\"padding\",\"paddingLeft\",\"paddingRight\",\"patternUnits\",\"r\",\"refX\",\"refY\",\"role\",\"scope\",\"slope\",\"src\",\"startOffset\",\"stdDeviation\",\"stroke\",\"stroke-linecap\",\"stroke-width\",\"style\",\"tableValues\",\"result\",\"rowspan\",\"summary\",\"target\",\"tabindex\",\"text-align\",\"text-anchor\",\"textAnchor\",\"textLength\",\"title\",\"type\",\"valign\",\"width\",\"x\",\"x1\",\"x2\",\"xlink:href\",\"y\",\"y1\",\"y2\",\"zIndex\"],m.allowedReferences=[\"https://\",\"http://\",\"mailto:\",\"/\",\"../\",\"./\",\"#\"],m.allowedTags=[\"a\",\"abbr\",\"b\",\"br\",\"button\",\"caption\",\"circle\",\"clipPath\",\"code\",\"dd\",\"defs\",\"div\",\"dl\",\"dt\",\"em\",\"feComponentTransfer\",\"feDropShadow\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feOffset\",\"feMerge\",\"feMergeNode\",\"filter\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"i\",\"img\",\"li\",\"linearGradient\",\"marker\",\"ol\",\"p\",\"path\",\"pattern\",\"pre\",\"rect\",\"small\",\"span\",\"stop\",\"strong\",\"style\",\"sub\",\"sup\",\"svg\",\"table\",\"text\",\"textPath\",\"thead\",\"title\",\"tbody\",\"tspan\",\"td\",\"th\",\"tr\",\"u\",\"ul\",\"#text\"],m.emptyHTML=g,m.bypassHTMLFiltering=!1,m}),i(e,\"Core/Templating.js\",[e[\"Core/Defaults.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{defaultOptions:i,defaultTime:s}=t,{extend:o,getNestedProperty:r,isArray:a,isNumber:n,isObject:l,pick:h,pInt:d}=e,c={add:(t,e)=>t+e,divide:(t,e)=>0!==e?t/e:\"\",eq:(t,e)=>t==e,each:function(t){let e=arguments[arguments.length-1];return!!a(t)&&t.map((i,s)=>p(e.body,o(l(i)?i:{\"@this\":i},{\"@index\":s,\"@first\":0===s,\"@last\":s===t.length-1}))).join(\"\")},ge:(t,e)=>t>=e,gt:(t,e)=>t>e,if:t=>!!t,le:(t,e)=>t<=e,lt:(t,e)=>tt*e,ne:(t,e)=>t!=e,subtract:(t,e)=>t-e,unless:t=>!t};function p(t=\"\",e,o){let a=/\\{([a-zA-Z0-9\\:\\.\\,;\\-\\/<>%_@\"'= #\\(\\)]+)\\}/g,n=/\\(([a-zA-Z0-9\\:\\.\\,;\\-\\/<>%_@\"'= ]+)\\)/g,l=[],d=/f$/,g=/\\.([0-9])/,f=i.lang,m=o&&o.time||s,x=o&&o.numberFormatter||u,y=(t=\"\")=>{let i;return\"true\"===t||\"false\"!==t&&((i=Number(t)).toString()===t?i:r(t,e))},b,v,S=0,M;for(;null!==(b=a.exec(t));){let i=n.exec(b[1]);i&&(b=i,M=!0),v&&v.isBlock||(v={ctx:e,expression:b[1],find:b[0],isBlock:\"#\"===b[1].charAt(0),start:b.index,startInner:b.index+b[0].length,length:b[0].length});let s=b[1].split(\" \")[0].replace(\"#\",\"\");c[s]&&(v.isBlock&&s===v.fn&&S++,v.fn||(v.fn=s));let o=\"else\"===b[1];if(v.isBlock&&v.fn&&(b[1]===`/${v.fn}`||o)){if(S)!o&&S--;else{let e=v.startInner,i=t.substr(e,b.index-e);void 0===v.body?(v.body=i,v.startInner=b.index+b[0].length):v.elseBody=i,v.find+=i+b[0],o||(l.push(v),v=void 0)}}else v.isBlock||l.push(v);if(i&&!v?.isBlock)break}return l.forEach(i=>{let s,o;let{body:r,elseBody:a,expression:n,fn:l}=i;if(l){let t=[i],h=n.split(\" \");for(o=c[l].length;o--;)t.unshift(y(h[o+1]));s=c[l].apply(e,t),i.isBlock&&\"boolean\"==typeof s&&(s=p(s?r:a,e))}else{let t=n.split(\":\");if(s=y(t.shift()||\"\"),t.length&&\"number\"==typeof s){let e=t.join(\":\");if(d.test(e)){let t=parseInt((e.match(g)||[\"\",\"-1\"])[1],10);null!==s&&(s=x(s,t,f.decimalPoint,e.indexOf(\",\")>-1?f.thousandsSep:\"\"))}else s=m.dateFormat(e,s)}}t=t.replace(i.find,h(s,\"\"))}),M?p(t,e,o):t}function u(t,e,s,o){let r,a;t=+t||0,e=+e;let l=i.lang,c=(t.toString().split(\".\")[1]||\"\").split(\"e\")[0].length,p=t.toString().split(\"e\"),u=e;-1===e?e=Math.min(c,20):n(e)?e&&p[1]&&p[1]<0&&((a=e+ +p[1])>=0?(p[0]=(+p[0]).toExponential(a).split(\"e\")[0],e=a):(p[0]=p[0].split(\".\")[0]||0,t=e<20?(p[0]*Math.pow(10,p[1])).toFixed(e):0,p[1]=0)):e=2;let g=(Math.abs(p[1]?p[0]:t)+Math.pow(10,-Math.max(e,c)-1)).toFixed(e),f=String(d(g)),m=f.length>3?f.length%3:0;return s=h(s,l.decimalPoint),o=h(o,l.thousandsSep),r=(t<0?\"-\":\"\")+(m?f.substr(0,m)+o:\"\"),0>+p[1]&&!u?r=\"0\":r+=f.substr(m).replace(/(\\d{3})(?=\\d)/g,\"$1\"+o),e&&(r+=s+g.slice(-e)),p[1]&&0!=+r&&(r+=\"e\"+p[1]),r}return{dateFormat:function(t,e,i){return s.dateFormat(t,e,i)},format:p,helpers:c,numberFormat:u}}),i(e,\"Core/Renderer/RendererRegistry.js\",[e[\"Core/Globals.js\"]],function(t){var e,i;let s;return(i=e||(e={})).rendererTypes={},i.getRendererType=function(t=s){return i.rendererTypes[t]||i.rendererTypes[s]},i.registerRendererType=function(e,o,r){i.rendererTypes[e]=o,(!s||r)&&(s=e,t.Renderer=o)},e}),i(e,\"Core/Renderer/RendererUtilities.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{clamp:i,pick:s,pushUnique:o,stableSort:r}=t;return(e||(e={})).distribute=function t(e,a,n){let l=e,h=l.reducedLen||a,d=(t,e)=>t.target-e.target,c=[],p=e.length,u=[],g=c.push,f,m,x,y=!0,b,v,S=0,M;for(f=p;f--;)S+=e[f].size;if(S>h){for(r(e,(t,e)=>(e.rank||0)-(t.rank||0)),x=(M=e[0].rank===e[e.length-1].rank)?p/2:-1,m=M?x:p-1;x&&S>h;)b=e[f=Math.floor(m)],o(u,f)&&(S-=b.size),m+=x,M&&m>=e.length&&(x/=2,m=x);u.sort((t,e)=>e-t).forEach(t=>g.apply(c,e.splice(t,1)))}for(r(e,d),e=e.map(t=>({size:t.size,targets:[t.target],align:s(t.align,.5)}));y;){for(f=e.length;f--;)b=e[f],v=(Math.min.apply(0,b.targets)+Math.max.apply(0,b.targets))/2,b.pos=i(v-b.size*b.align,0,a-b.size);for(f=e.length,y=!1;f--;)f>0&&e[f-1].pos+e[f-1].size>e[f].pos&&(e[f-1].size+=e[f].size,e[f-1].targets=e[f-1].targets.concat(e[f].targets),e[f-1].align=.5,e[f-1].pos+e[f-1].size>a&&(e[f-1].pos=a-e[f-1].size),e.splice(f,1),y=!0)}return g.apply(l,c),f=0,e.some(e=>{let i=0;return(e.targets||[]).some(()=>(l[f].pos=e.pos+i,void 0!==n&&Math.abs(l[f].pos-l[f].target)>n)?(l.slice(0,f+1).forEach(t=>delete t.pos),l.reducedLen=(l.reducedLen||a)-.1*a,l.reducedLen>.1*a&&t(l,a,n),!0):(i+=l[f].size,f++,!1))}),r(l,d),l},e}),i(e,\"Core/Renderer/SVG/SVGElement.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{animate:o,animObject:r,stop:a}=t,{deg2rad:n,doc:l,svg:h,SVG_NS:d,win:c}=i,{addEvent:p,attr:u,createElement:g,css:f,defined:m,erase:x,extend:y,fireEvent:b,isArray:v,isFunction:S,isObject:M,isString:k,merge:C,objectEach:A,pick:w,pInt:T,replaceNested:P,syncTimeout:L,uniqueKey:O}=s;class D{_defaultGetter(t){let e=w(this[t+\"Value\"],this[t],this.element?this.element.getAttribute(t):null,0);return/^[\\-0-9\\.]+$/.test(e)&&(e=parseFloat(e)),e}_defaultSetter(t,e,i){i.setAttribute(e,t)}add(t){let e;let i=this.renderer,s=this.element;return t&&(this.parentGroup=t),void 0!==this.textStr&&\"text\"===this.element.nodeName&&i.buildText(this),this.added=!0,(!t||t.handleZ||this.zIndex)&&(e=this.zIndexSetter()),e||(t?t.element:i.box).appendChild(s),this.onAdd&&this.onAdd(),this}addClass(t,e){let i=e?\"\":this.attr(\"class\")||\"\";return(t=(t||\"\").split(/ /g).reduce(function(t,e){return -1===i.indexOf(e)&&t.push(e),t},i?[i]:[]).join(\" \"))!==i&&this.attr(\"class\",t),this}afterSetters(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)}align(t,e,i,s=!0){let o,r,a,n,l;let h={},d=this.renderer,c=d.alignedObjects;t?(this.alignOptions=t,this.alignByTranslate=e,(!i||k(i))&&(this.alignTo=a=i||\"renderer\",x(c,this),c.push(this),i=void 0)):(t=this.alignOptions,e=this.alignByTranslate,a=this.alignTo),i=w(i,d[a],d);let p=t.align,u=t.verticalAlign;return o=(i.x||0)+(t.x||0),r=(i.y||0)+(t.y||0),\"right\"===p?n=1:\"center\"===p&&(n=2),n&&(o+=(i.width-(t.width||0))/n),h[e?\"translateX\":\"x\"]=Math.round(o),\"bottom\"===u?l=1:\"middle\"===u&&(l=2),l&&(r+=(i.height-(t.height||0))/l),h[e?\"translateY\":\"y\"]=Math.round(r),s&&(this[this.placed?\"animate\":\"attr\"](h),this.placed=!0),this.alignAttr=h,this}alignSetter(t){let e={left:\"start\",center:\"middle\",right:\"end\"};e[t]&&(this.alignValue=t,this.element.setAttribute(\"text-anchor\",e[t]))}animate(t,e,i){let s=r(w(e,this.renderer.globalAnimation,!0)),a=s.defer;return l.hidden&&(s.duration=0),0!==s.duration?(i&&(s.complete=i),L(()=>{this.element&&o(this,t,s)},a)):(this.attr(t,void 0,i||s.complete),A(t,function(t,e){s.step&&s.step.call(this,t,{prop:e,pos:1,elem:this})},this)),this}applyTextOutline(t){let e=this.element;-1!==t.indexOf(\"contrast\")&&(t=t.replace(/contrast/g,this.renderer.getContrast(e.style.fill)));let s=t.split(\" \"),o=s[s.length-1],r=s[0];if(r&&\"none\"!==r&&i.svg){this.fakeTS=!0,r=r.replace(/(^[\\d\\.]+)(.*?)$/g,function(t,e,i){return 2*Number(e)+i}),this.removeTextOutline();let t=l.createElementNS(d,\"tspan\");u(t,{class:\"highcharts-text-outline\",fill:o,stroke:o,\"stroke-width\":r,\"stroke-linejoin\":\"round\"});let i=e.querySelector(\"textPath\")||e;[].forEach.call(i.childNodes,e=>{let i=e.cloneNode(!0);i.removeAttribute&&[\"fill\",\"stroke\",\"stroke-width\",\"stroke\"].forEach(t=>i.removeAttribute(t)),t.appendChild(i)});let s=0;[].forEach.call(i.querySelectorAll(\"text tspan\"),t=>{s+=Number(t.getAttribute(\"dy\"))});let a=l.createElementNS(d,\"tspan\");a.textContent=\"​\",u(a,{x:Number(e.getAttribute(\"x\")),dy:-s}),t.appendChild(a),i.insertBefore(t,i.firstChild)}}attr(t,e,i,s){let o=this.element,r=D.symbolCustomAttribs,n,l,h=this,d;return\"string\"==typeof t&&void 0!==e&&(n=t,(t={})[n]=e),\"string\"==typeof t?h=(this[t+\"Getter\"]||this._defaultGetter).call(this,t,o):(A(t,function(e,i){d=!1,s||a(this,i),this.symbolName&&-1!==r.indexOf(i)&&(l||(this.symbolAttr(t),l=!0),d=!0),this.rotation&&(\"x\"===i||\"y\"===i)&&(this.doTransform=!0),d||(this[i+\"Setter\"]||this._defaultSetter).call(this,e,i,o)},this),this.afterSetters()),i&&i.call(this),h}clip(t){if(t&&!t.clipPath){let e=O()+\"-\",i=this.renderer.createElement(\"clipPath\").attr({id:e}).add(this.renderer.defs);y(t,{clipPath:i,id:e,count:0}),t.add(i)}return this.attr(\"clip-path\",t?`url(${this.renderer.url}#${t.id})`:\"none\")}crisp(t,e){let i=Math.round(e=e||t.strokeWidth||0)%2/2;return t.x=Math.floor(t.x||this.x||0)+i,t.y=Math.floor(t.y||this.y||0)+i,t.width=Math.floor((t.width||this.width||0)-2*i),t.height=Math.floor((t.height||this.height||0)-2*i),m(t.strokeWidth)&&(t.strokeWidth=e),t}complexColor(t,i,s){let o=this.renderer,r,a,n,l,h,d,c,p,u,g,f=[],x;b(this.renderer,\"complexColor\",{args:arguments},function(){if(t.radialGradient?a=\"radialGradient\":t.linearGradient&&(a=\"linearGradient\"),a){if(n=t[a],h=o.gradients,d=t.stops,u=s.radialReference,v(n)&&(t[a]=n={x1:n[0],y1:n[1],x2:n[2],y2:n[3],gradientUnits:\"userSpaceOnUse\"}),\"radialGradient\"===a&&u&&!m(n.gradientUnits)&&(l=n,n=C(n,o.getRadialAttr(u,l),{gradientUnits:\"userSpaceOnUse\"})),A(n,function(t,e){\"id\"!==e&&f.push(e,t)}),A(d,function(t){f.push(t)}),h[f=f.join(\",\")])g=h[f].attr(\"id\");else{n.id=g=O();let t=h[f]=o.createElement(a).attr(n).add(o.defs);t.radAttr=l,t.stops=[],d.forEach(function(i){0===i[1].indexOf(\"rgba\")?(c=(r=e.parse(i[1])).get(\"rgb\"),p=r.get(\"a\")):(c=i[1],p=1);let s=o.createElement(\"stop\").attr({offset:i[0],\"stop-color\":c,\"stop-opacity\":p}).add(t);t.stops.push(s)})}x=\"url(\"+o.url+\"#\"+g+\")\",s.setAttribute(i,x),s.gradient=f,t.toString=function(){return x}}})}css(t){let e=this.styles,i={},s=this.element,o,r=!e;if(e&&A(t,function(t,s){e&&e[s]!==t&&(i[s]=t,r=!0)}),r){e&&(t=y(e,i)),null===t.width||\"auto\"===t.width?delete this.textWidth:\"text\"===s.nodeName.toLowerCase()&&t.width&&(o=this.textWidth=T(t.width)),y(this.styles,t),o&&!h&&this.renderer.forExport&&delete t.width;let r=C(t);s.namespaceURI===this.SVG_NS&&([\"textOutline\",\"textOverflow\",\"width\"].forEach(t=>r&&delete r[t]),r.color&&(r.fill=r.color)),f(s,r)}return this.added&&(\"text\"===this.element.nodeName&&this.renderer.buildText(this),t.textOutline&&this.applyTextOutline(t.textOutline)),this}dashstyleSetter(t){let e,i=this[\"stroke-width\"];if(\"inherit\"===i&&(i=1),t=t&&t.toLowerCase()){let s=t.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(e=s.length;e--;)s[e]=\"\"+T(s[e])*w(i,NaN);t=s.join(\",\").replace(/NaN/g,\"none\"),this.element.setAttribute(\"stroke-dasharray\",t)}}destroy(){let t=this,e=t.element||{},i=t.renderer,s=e.ownerSVGElement,o=\"SPAN\"===e.nodeName&&t.parentGroup||void 0,r,n;if(e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null,a(t),t.clipPath&&s){let e=t.clipPath;[].forEach.call(s.querySelectorAll(\"[clip-path],[CLIP-PATH]\"),function(t){t.getAttribute(\"clip-path\").indexOf(e.element.id)>-1&&t.removeAttribute(\"clip-path\")}),t.clipPath=e.destroy()}if(t.connector=t.connector?.destroy(),t.stops){for(n=0;ne&&e.join?(i?t+\" \":\"\")+e.join(\" \"):(e||\"\").toString(),\"\")),/(NaN| {2}|^$)/.test(t)&&(t=\"M 0 0\"),this[e]!==t&&(i.setAttribute(e,t),this[e]=t)}fillSetter(t,e,i){\"string\"==typeof t?i.setAttribute(e,t):t&&this.complexColor(t,e,i)}hrefSetter(t,e,i){i.setAttributeNS(\"http://www.w3.org/1999/xlink\",e,t)}getBBox(t,e){let i,s,o,r;let{alignValue:a,element:n,renderer:l,styles:h,textStr:d}=this,{cache:c,cacheKeys:p}=l,u=n.namespaceURI===this.SVG_NS,g=w(e,this.rotation,0),x=l.styledMode?n&&D.prototype.getStyle.call(n,\"font-size\"):h.fontSize;if(m(d)&&(-1===(r=d.toString()).indexOf(\"<\")&&(r=r.replace(/[0-9]/g,\"0\")),r+=[\"\",l.rootFontSize,x,g,this.textWidth,a,h.textOverflow,h.fontWeight].join(\",\")),r&&!t&&(i=c[r]),!i){if(u||l.forExport){try{o=this.fakeTS&&function(t){let e=n.querySelector(\".highcharts-text-outline\");e&&f(e,{display:t})},S(o)&&o(\"none\"),i=n.getBBox?y({},n.getBBox()):{width:n.offsetWidth,height:n.offsetHeight,x:0,y:0},S(o)&&o(\"\")}catch(t){}(!i||i.width<0)&&(i={x:0,y:0,width:0,height:0})}else i=this.htmlGetBBox();s=i.height,u&&(i.height=s=({\"11px,17\":14,\"13px,20\":16})[`${x||\"\"},${Math.round(s)}`]||s),g&&(i=this.getRotatedBox(i,g))}if(r&&(\"\"===d||i.height>0)){for(;p.length>250;)delete c[p.shift()];c[r]||p.push(r),c[r]=i}return i}getRotatedBox(t,e){let{x:i,y:s,width:o,height:r}=t,{alignValue:a,translateY:l,rotationOriginX:h=0,rotationOriginY:d=0}=this,c={right:1,center:.5}[a||0]||0,p=Number(this.element.getAttribute(\"y\")||0)-(l?0:s),u=e*n,g=(e-90)*n,f=Math.cos(u),m=Math.sin(u),x=o*f,y=o*m,b=Math.cos(g),v=Math.sin(g),[[S,M],[k,C]]=[h,d].map(t=>[t-t*f,t*m]),A=i+c*(o-x)+S+C+p*b,w=A+x,T=w-r*b,P=T-x,L=s+p-c*y-M+k+p*v,O=L+y,D=O-r*v,E=D-y,B=Math.min(A,w,T,P),j=Math.min(L,O,D,E),I=Math.max(A,w,T,P)-B,R=Math.max(L,O,D,E)-j;return{x:B,y:j,width:I,height:R}}getStyle(t){return c.getComputedStyle(this.element||this,\"\").getPropertyValue(t)}hasClass(t){return -1!==(\"\"+this.attr(\"class\")).split(\" \").indexOf(t)}hide(){return this.attr({visibility:\"hidden\"})}htmlGetBBox(){return{height:0,width:0,x:0,y:0}}constructor(t,e){this.onEvents={},this.opacity=1,this.SVG_NS=d,this.element=\"span\"===e||\"body\"===e?g(e):l.createElementNS(this.SVG_NS,e),this.renderer=t,this.styles={},b(this,\"afterInit\")}on(t,e){let{onEvents:i}=this;return i[t]&&i[t](),i[t]=p(this.element,t,e),this}opacitySetter(t,e,i){let s=Number(Number(t).toFixed(3));this.opacity=s,i.setAttribute(e,s)}removeClass(t){return this.attr(\"class\",(\"\"+this.attr(\"class\")).replace(k(t)?RegExp(`(^| )${t}( |$)`):t,\" \").replace(/ +/g,\" \").trim())}removeTextOutline(){let t=this.element.querySelector(\"tspan.highcharts-text-outline\");t&&this.safeRemoveChild(t)}safeRemoveChild(t){let e=t.parentNode;e&&e.removeChild(t)}setRadialReference(t){let e=this.element.gradient&&this.renderer.gradients[this.element.gradient];return this.element.radialReference=t,e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(t,e.radAttr)),this}setTextPath(t,e){e=C(!0,{enabled:!0,attributes:{dy:-5,startOffset:\"50%\",textAnchor:\"middle\"}},e);let i=this.renderer.url,s=this.text||this,o=s.textPath,{attributes:r,enabled:a}=e;if(t=t||o&&o.path,o&&o.undo(),t&&a){let e=p(s,\"afterModifyTree\",e=>{if(t&&a){let o=t.attr(\"id\");o||t.attr(\"id\",o=O());let a={x:0,y:0};m(r.dx)&&(a.dx=r.dx,delete r.dx),m(r.dy)&&(a.dy=r.dy,delete r.dy),s.attr(a),this.attr({transform:\"\"}),this.box&&(this.box=this.box.destroy());let n=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:\"textPath\",attributes:y(r,{\"text-anchor\":r.textAnchor,href:`${i}#${o}`}),children:n}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache=\"\",this.renderer.buildText(s)),this}shadow(t){let{renderer:e}=this,i=C(this.parentGroup?.rotation===90?{offsetX:-1,offsetY:-1}:{},M(t)?t:{}),s=e.shadowDefinition(i);return this.attr({filter:t?`url(${e.url}#${s})`:\"none\"})}show(t=!0){return this.attr({visibility:t?\"inherit\":\"visible\"})}\"stroke-widthSetter\"(t,e,i){this[e]=t,i.setAttribute(e,t)}strokeWidth(){if(!this.renderer.styledMode)return this[\"stroke-width\"]||0;let t=this.getStyle(\"stroke-width\"),e=0,i;return/px$/.test(t)?e=T(t):\"\"!==t&&(u(i=l.createElementNS(d,\"rect\"),{width:t,\"stroke-width\":0}),this.element.parentNode.appendChild(i),e=i.getBBox().width,i.parentNode.removeChild(i)),e}symbolAttr(t){let e=this;D.symbolCustomAttribs.forEach(function(i){e[i]=w(t[i],e[i])}),e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})}textSetter(t){t!==this.textStr&&(delete this.textPxLength,this.textStr=t,this.added&&this.renderer.buildText(this))}titleSetter(t){let e=this.element,i=e.getElementsByTagName(\"title\")[0]||l.createElementNS(this.SVG_NS,\"title\");e.insertBefore?e.insertBefore(i,e.firstChild):e.appendChild(i),i.textContent=P(w(t,\"\"),[/<[^>]*>/g,\"\"]).replace(/</g,\"<\").replace(/>/g,\">\")}toFront(){let t=this.element;return t.parentNode.appendChild(t),this}translate(t,e){return this.attr({translateX:t,translateY:e})}updateTransform(t=\"transform\"){let{element:e,matrix:i,rotation:s=0,rotationOriginX:o,rotationOriginY:r,scaleX:a,scaleY:n,translateX:l=0,translateY:h=0}=this,d=[\"translate(\"+l+\",\"+h+\")\"];m(i)&&d.push(\"matrix(\"+i.join(\",\")+\")\"),s&&(d.push(\"rotate(\"+s+\" \"+w(o,e.getAttribute(\"x\"),0)+\" \"+w(r,e.getAttribute(\"y\")||0)+\")\"),this.text?.element.tagName===\"SPAN\"&&this.text.attr({rotation:s,rotationOriginX:(o||0)-this.padding,rotationOriginY:(r||0)-this.padding})),(m(a)||m(n))&&d.push(\"scale(\"+w(a,1)+\" \"+w(n,1)+\")\"),d.length&&!(this.text||this).textPath&&e.setAttribute(t,d.join(\" \"))}visibilitySetter(t,e,i){\"inherit\"===t?i.removeAttribute(e):this[e]!==t&&i.setAttribute(e,t),this[e]=t}xGetter(t){return\"circle\"===this.element.nodeName&&(\"x\"===t?t=\"cx\":\"y\"===t&&(t=\"cy\")),this._defaultGetter(t)}zIndexSetter(t,e){let i=this.renderer,s=this.parentGroup,o=(s||i).element||i.box,r=this.element,a=o===i.box,n,l,h,d=!1,c,p=this.added,u;if(m(t)?(r.setAttribute(\"data-z-index\",t),t=+t,this[e]===t&&(p=!1)):m(this[e])&&r.removeAttribute(\"data-z-index\"),this[e]=t,p){for((t=this.zIndex)&&s&&(s.handleZ=!0),u=(n=o.childNodes).length-1;u>=0&&!d;u--)c=!m(h=(l=n[u]).getAttribute(\"data-z-index\")),l!==r&&(t<0&&c&&!a&&!u?(o.insertBefore(r,n[u]),d=!0):(T(h)<=t||c&&(!m(t)||t>=0))&&(o.insertBefore(r,n[u+1]),d=!0));d||(o.insertBefore(r,n[a?3:0]),d=!0)}return d}}return D.symbolCustomAttribs=[\"anchorX\",\"anchorY\",\"clockwise\",\"end\",\"height\",\"innerR\",\"r\",\"start\",\"width\",\"x\",\"y\"],D.prototype.strokeSetter=D.prototype.fillSetter,D.prototype.yGetter=D.prototype.xGetter,D.prototype.matrixSetter=D.prototype.rotationOriginXSetter=D.prototype.rotationOriginYSetter=D.prototype.rotationSetter=D.prototype.scaleXSetter=D.prototype.scaleYSetter=D.prototype.translateXSetter=D.prototype.translateYSetter=D.prototype.verticalAlignSetter=function(t,e){this[e]=t,this.doTransform=!0},D}),i(e,\"Core/Renderer/SVG/SVGLabel.js\",[e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{defined:i,extend:s,isNumber:o,merge:r,pick:a,removeEvent:n}=e;class l extends t{constructor(t,e,i,s,o,r,a,n,h,d){let c;super(t,\"g\"),this.paddingLeftSetter=this.paddingSetter,this.paddingRightSetter=this.paddingSetter,this.textStr=e,this.x=i,this.y=s,this.anchorX=r,this.anchorY=a,this.baseline=h,this.className=d,this.addClass(\"button\"===d?\"highcharts-no-tooltip\":\"highcharts-label\"),d&&this.addClass(\"highcharts-\"+d),this.text=t.text(void 0,0,0,n).attr({zIndex:1}),\"string\"==typeof o&&((c=/^url\\((.*?)\\)$/.test(o))||this.renderer.symbols[o])&&(this.symbolKey=o),this.bBox=l.emptyBBox,this.padding=3,this.baselineOffset=0,this.needsBox=t.styledMode||c,this.deferredAttr={},this.alignFactor=0}alignSetter(t){let e={left:0,center:.5,right:1}[t];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&o(this.xSetting)&&this.attr({x:this.xSetting}))}anchorXSetter(t,e){this.anchorX=t,this.boxAttr(e,Math.round(t)-this.getCrispAdjust()-this.xSetting)}anchorYSetter(t,e){this.anchorY=t,this.boxAttr(e,t-this.ySetting)}boxAttr(t,e){this.box?this.box.attr(t,e):this.deferredAttr[t]=e}css(e){if(e){let t={};e=r(e),l.textProps.forEach(i=>{void 0!==e[i]&&(t[i]=e[i],delete e[i])}),this.text.css(t),\"fontSize\"in t||\"fontWeight\"in t?this.updateTextPadding():(\"width\"in t||\"textOverflow\"in t)&&this.updateBoxSize()}return t.prototype.css.call(this,e)}destroy(){n(this.element,\"mouseenter\"),n(this.element,\"mouseleave\"),this.text&&this.text.destroy(),this.box&&(this.box=this.box.destroy()),t.prototype.destroy.call(this)}fillSetter(t,e){t&&(this.needsBox=!0),this.fill=t,this.boxAttr(e,t)}getBBox(t,e){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();let{padding:i,height:s=0,translateX:o=0,translateY:r=0,width:n=0}=this,l=a(this.paddingLeft,i),h=e??(this.rotation||0),d={width:n,height:s,x:o+this.bBox.x-l,y:r+this.bBox.y-i+this.baselineOffset};return h&&(d=this.getRotatedBox(d,h)),d}getCrispAdjust(){return this.renderer.styledMode&&this.box?this.box.strokeWidth()%2/2:(this[\"stroke-width\"]?parseInt(this[\"stroke-width\"],10):0)%2/2}heightSetter(t){this.heightSetting=t}onAdd(){this.text.add(this),this.attr({text:a(this.textStr,\"\"),x:this.x||0,y:this.y||0}),this.box&&i(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})}paddingSetter(t,e){o(t)?t!==this[e]&&(this[e]=t,this.updateTextPadding()):this[e]=void 0}rSetter(t,e){this.boxAttr(e,t)}strokeSetter(t,e){this.stroke=t,this.boxAttr(e,t)}\"stroke-widthSetter\"(t,e){t&&(this.needsBox=!0),this[\"stroke-width\"]=t,this.boxAttr(e,t)}\"text-alignSetter\"(t){this.textAlign=t}textSetter(t){void 0!==t&&this.text.attr({text:t}),this.updateTextPadding()}updateBoxSize(){let t;let e=this.text,r={},a=this.padding,n=this.bBox=(!o(this.widthSetting)||!o(this.heightSetting)||this.textAlign)&&i(e.textStr)?e.getBBox(void 0,0):l.emptyBBox;this.width=this.getPaddedWidth(),this.height=(this.heightSetting||n.height||0)+2*a;let h=this.renderer.fontMetrics(e);if(this.baselineOffset=a+Math.min((this.text.firstLineMetrics||h).b,n.height||1/0),this.heightSetting&&(this.baselineOffset+=(this.heightSetting-h.h)/2),this.needsBox&&!e.textPath){if(!this.box){let t=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect();t.addClass((\"button\"===this.className?\"\":\"highcharts-label-box\")+(this.className?\" highcharts-\"+this.className+\"-box\":\"\")),t.add(this)}t=this.getCrispAdjust(),r.x=t,r.y=(this.baseline?-this.baselineOffset:0)+t,r.width=Math.round(this.width),r.height=Math.round(this.height),this.box.attr(s(r,this.deferredAttr)),this.deferredAttr={}}}updateTextPadding(){let t=this.text;if(!t.textPath){this.updateBoxSize();let e=this.baseline?0:this.baselineOffset,s=a(this.paddingLeft,this.padding);i(this.widthSetting)&&this.bBox&&(\"center\"===this.textAlign||\"right\"===this.textAlign)&&(s+=({center:.5,right:1})[this.textAlign]*(this.widthSetting-this.bBox.width)),(s!==t.x||e!==t.y)&&(t.attr(\"x\",s),t.hasBoxWidthChanged&&(this.bBox=t.getBBox(!0)),void 0!==e&&t.attr(\"y\",e)),t.x=s,t.y=e}}widthSetter(t){this.widthSetting=o(t)?t:void 0}getPaddedWidth(){let t=this.padding,e=a(this.paddingLeft,t),i=a(this.paddingRight,t);return(this.widthSetting||this.bBox.width||0)+e+i}xSetter(t){this.x=t,this.alignFactor&&(t-=this.alignFactor*this.getPaddedWidth(),this[\"forceAnimate:x\"]=!0),this.xSetting=Math.round(t),this.attr(\"translateX\",this.xSetting)}ySetter(t){this.ySetting=this.y=Math.round(t),this.attr(\"translateY\",this.ySetting)}}return l.emptyBBox={width:0,height:0,x:0,y:0},l.textProps=[\"color\",\"direction\",\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontWeight\",\"lineHeight\",\"textAlign\",\"textDecoration\",\"textOutline\",\"textOverflow\",\"whiteSpace\",\"width\"],l}),i(e,\"Core/Renderer/SVG/Symbols.js\",[e[\"Core/Utilities.js\"]],function(t){let{defined:e,isNumber:i,pick:s}=t;function o(t,i,o,r,a){let n=[];if(a){let l=a.start||0,h=s(a.r,o),d=s(a.r,r||o),c=.001>Math.abs((a.end||0)-l-2*Math.PI),p=(a.end||0)-.001,u=a.innerR,g=s(a.open,c),f=Math.cos(l),m=Math.sin(l),x=Math.cos(p),y=Math.sin(p),b=s(a.longArc,p-l-Math.PI<.001?0:1),v=[\"A\",h,d,0,b,s(a.clockwise,1),t+h*x,i+d*y];v.params={start:l,end:p,cx:t,cy:i},n.push([\"M\",t+h*f,i+d*m],v),e(u)&&((v=[\"A\",u,u,0,b,e(a.clockwise)?1-a.clockwise:0,t+u*f,i+u*m]).params={start:p,end:l,cx:t,cy:i},n.push(g?[\"M\",t+u*x,i+u*y]:[\"L\",t+u*x,i+u*y],v)),g||n.push([\"Z\"])}return n}function r(t,e,i,s,o){return o&&o.r?a(t,e,i,s,o):[[\"M\",t,e],[\"L\",t+i,e],[\"L\",t+i,e+s],[\"L\",t,e+s],[\"Z\"]]}function a(t,e,i,s,o){let r=o?.r||0;return[[\"M\",t+r,e],[\"L\",t+i-r,e],[\"A\",r,r,0,0,1,t+i,e+r],[\"L\",t+i,e+s-r],[\"A\",r,r,0,0,1,t+i-r,e+s],[\"L\",t+r,e+s],[\"A\",r,r,0,0,1,t,e+s-r],[\"L\",t,e+r],[\"A\",r,r,0,0,1,t+r,e],[\"Z\"]]}return{arc:o,callout:function(t,e,s,o,r){let n=Math.min(r&&r.r||0,s,o),l=n+6,h=r&&r.anchorX,d=r&&r.anchorY||0,c=a(t,e,s,o,{r:n});if(!i(h)||h0&&d0)return c;if(t+h>s-l){if(d>e+l&&de+l&&d0){let i=do&&hl&&c.splice(1,1,[\"L\",h-6,e],[\"L\",h,e-6],[\"L\",h+6,e],[\"L\",s-n,e]);return c},circle:function(t,e,i,s){return o(t+i/2,e+s/2,i/2,s/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},diamond:function(t,e,i,s){return[[\"M\",t+i/2,e],[\"L\",t+i,e+s/2],[\"L\",t+i/2,e+s],[\"L\",t,e+s/2],[\"Z\"]]},rect:r,roundedRect:a,square:r,triangle:function(t,e,i,s){return[[\"M\",t+i/2,e],[\"L\",t+i,e+s],[\"L\",t,e+s],[\"Z\"]]},\"triangle-down\":function(t,e,i,s){return[[\"M\",t,e],[\"L\",t+i,e],[\"L\",t+i/2,e+s],[\"Z\"]]}}}),i(e,\"Core/Renderer/SVG/TextBuilder.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{doc:s,SVG_NS:o,win:r}=e,{attr:a,extend:n,fireEvent:l,isString:h,objectEach:d,pick:c}=i;return class{constructor(t){let e=t.styles;this.renderer=t.renderer,this.svgElement=t,this.width=t.textWidth,this.textLineHeight=e&&e.lineHeight,this.textOutline=e&&e.textOutline,this.ellipsis=!!(e&&\"ellipsis\"===e.textOverflow),this.noWrap=!!(e&&\"nowrap\"===e.whiteSpace)}buildSVG(){let e=this.svgElement,i=e.element,o=e.renderer,r=c(e.textStr,\"\").toString(),a=-1!==r.indexOf(\"<\"),n=i.childNodes,l=!e.added&&o.box,d=[r,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,e.getStyle(\"font-size\"),this.width].join(\",\");if(d!==e.textCache){e.textCache=d,delete e.actualWidth;for(let t=n.length;t--;)i.removeChild(n[t]);if(a||this.ellipsis||this.width||e.textPath||-1!==r.indexOf(\" \")&&(!this.noWrap||//g.test(r))){if(\"\"!==r){l&&l.appendChild(i);let s=new t(r);this.modifyTree(s.nodes),s.addToDOM(i),this.modifyDOM(),this.ellipsis&&-1!==(i.textContent||\"\").indexOf(\"…\")&&e.attr(\"title\",this.unescapeEntities(e.textStr||\"\",[\"<\",\">\"])),l&&l.removeChild(i)}}else i.appendChild(s.createTextNode(this.unescapeEntities(r)));h(this.textOutline)&&e.applyTextOutline&&e.applyTextOutline(this.textOutline)}}modifyDOM(){let t;let e=this.svgElement,i=a(e.element,\"x\");for(e.firstLineMetrics=void 0;t=e.element.firstChild;)if(/^[\\s\\u200B]*$/.test(t.textContent||\" \"))e.element.removeChild(t);else break;[].forEach.call(e.element.querySelectorAll(\"tspan.highcharts-br\"),(t,s)=>{t.nextSibling&&t.previousSibling&&(0===s&&1===t.previousSibling.nodeType&&(e.firstLineMetrics=e.renderer.fontMetrics(t.previousSibling)),a(t,{dy:this.getLineHeight(t.nextSibling),x:i}))});let n=this.width||0;if(!n)return;let l=(t,r)=>{let l=t.textContent||\"\",h=l.replace(/([^\\^])-/g,\"$1- \").split(\" \"),d=!this.noWrap&&(h.length>1||e.element.childNodes.length>1),c=this.getLineHeight(r),p=0,u=e.actualWidth;if(this.ellipsis)l&&this.truncate(t,l,void 0,0,Math.max(0,n-.8*c),(t,e)=>t.substring(0,e)+\"…\");else if(d){let l=[],d=[];for(;r.firstChild&&r.firstChild!==t;)d.push(r.firstChild),r.removeChild(r.firstChild);for(;h.length;)h.length&&!this.noWrap&&p>0&&(l.push(t.textContent||\"\"),t.textContent=h.join(\" \").replace(/- /g,\"-\")),this.truncate(t,void 0,h,0===p&&u||0,n,(t,e)=>h.slice(0,e).join(\" \").replace(/- /g,\"-\")),u=e.actualWidth,p++;d.forEach(e=>{r.insertBefore(e,t)}),l.forEach(e=>{r.insertBefore(s.createTextNode(e),t);let n=s.createElementNS(o,\"tspan\");n.textContent=\"​\",a(n,{dy:c,x:i}),r.insertBefore(n,t)})}},h=t=>{[].slice.call(t.childNodes).forEach(i=>{i.nodeType===r.Node.TEXT_NODE?l(i,t):(-1!==i.className.baseVal.indexOf(\"highcharts-br\")&&(e.actualWidth=0),h(i))})};h(e.element)}getLineHeight(t){let e=t.nodeType===r.Node.TEXT_NODE?t.parentElement:t;return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(e||this.svgElement.element).h}modifyTree(t){let e=(i,s)=>{let{attributes:o={},children:r,style:a={},tagName:l}=i,h=this.renderer.styledMode;if(\"b\"===l||\"strong\"===l?h?o.class=\"highcharts-strong\":a.fontWeight=\"bold\":(\"i\"===l||\"em\"===l)&&(h?o.class=\"highcharts-emphasized\":a.fontStyle=\"italic\"),a&&a.color&&(a.fill=a.color),\"br\"===l){o.class=\"highcharts-br\",i.textContent=\"​\";let e=t[s+1];e&&e.textContent&&(e.textContent=e.textContent.replace(/^ +/gm,\"\"))}else\"a\"===l&&r&&r.some(t=>\"#text\"===t.tagName)&&(i.children=[{children:r,tagName:\"tspan\"}]);\"#text\"!==l&&\"a\"!==l&&(i.tagName=\"tspan\"),n(i,{attributes:o,style:a}),r&&r.filter(t=>\"#text\"!==t.tagName).forEach(e)};t.forEach(e),l(this.svgElement,\"afterModifyTree\",{nodes:t})}truncate(t,e,i,s,o,r){let a,n;let l=this.svgElement,{rotation:h}=l,d=[],c=i?1:0,p=(e||i||\"\").length,u=p,g=function(e,o){let r=o||e,a=t.parentNode;if(a&&void 0===d[r]&&a.getSubStringLength)try{d[r]=s+a.getSubStringLength(0,i?r+1:r)}catch(t){}return d[r]};if(l.rotation=0,s+(n=g(t.textContent.length))>o){for(;c<=p;)u=Math.ceil((c+p)/2),i&&(a=r(i,u)),n=g(u,a&&a.length-1),c===p?c=p+1:n>o?p=u-1:c=u;0===p?t.textContent=\"\":e&&p===e.length-1||(t.textContent=a||r(e||i,u))}i&&i.splice(0,u),l.actualWidth=n,l.rotation=h}unescapeEntities(t,e){return d(this.renderer.escapes,function(i,s){e&&-1!==e.indexOf(i)||(t=t.toString().replace(RegExp(i,\"g\"),s))}),t}}}),i(e,\"Core/Renderer/SVG/SVGRenderer.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGLabel.js\"],e[\"Core/Renderer/SVG/Symbols.js\"],e[\"Core/Renderer/SVG/TextBuilder.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n,l){let h;let{charts:d,deg2rad:c,doc:p,isFirefox:u,isMS:g,isWebKit:f,noop:m,SVG_NS:x,symbolSizes:y,win:b}=i,{addEvent:v,attr:S,createElement:M,css:k,defined:C,destroyObjectProperties:A,extend:w,isArray:T,isNumber:P,isObject:L,isString:O,merge:D,pick:E,pInt:B,replaceNested:j,uniqueKey:I}=l;class R{constructor(t,e,i,s,o,r,a){let n,l;let h=this.createElement(\"svg\").attr({version:\"1.1\",class:\"highcharts-root\"}),d=h.element;a||h.css(this.getStyle(s||{})),t.appendChild(d),S(t,\"dir\",\"ltr\"),-1===t.innerHTML.indexOf(\"xmlns\")&&S(d,\"xmlns\",this.SVG_NS),this.box=d,this.boxWrapper=h,this.alignedObjects=[],this.url=this.getReferenceURL(),this.createElement(\"desc\").add().element.appendChild(p.createTextNode(\"Created with Highcharts 11.4.0\")),this.defs=this.createElement(\"defs\").add(),this.allowHTML=r,this.forExport=o,this.styledMode=a,this.gradients={},this.cache={},this.cacheKeys=[],this.imgCount=0,this.rootFontSize=h.getStyle(\"font-size\"),this.setSize(e,i,!1),u&&t.getBoundingClientRect&&((n=function(){k(t,{left:0,top:0}),l=t.getBoundingClientRect(),k(t,{left:Math.ceil(l.left)-l.left+\"px\",top:Math.ceil(l.top)-l.top+\"px\"})})(),this.unSubPixelFix=v(b,\"resize\",n))}definition(e){return new t([e]).addToDOM(this.defs.element)}getReferenceURL(){if((u||f)&&p.getElementsByTagName(\"base\").length){if(!C(h)){let e=I(),i=new t([{tagName:\"svg\",attributes:{width:8,height:8},children:[{tagName:\"defs\",children:[{tagName:\"clipPath\",attributes:{id:e},children:[{tagName:\"rect\",attributes:{width:4,height:4}}]}]},{tagName:\"rect\",attributes:{id:\"hitme\",width:8,height:8,\"clip-path\":`url(#${e})`,fill:\"rgba(0,0,0,0.001)\"}}]}]).addToDOM(p.body);k(i,{position:\"fixed\",top:0,left:0,zIndex:9e5});let s=p.elementFromPoint(6,6);h=\"hitme\"===(s&&s.id),p.body.removeChild(i)}if(h)return j(b.location.href.split(\"#\")[0],[/<[^>]*>/g,\"\"],[/([\\('\\)])/g,\"\\\\$1\"],[/ /g,\"%20\"])}return\"\"}getStyle(t){return this.style=w({fontFamily:\"Helvetica, Arial, sans-serif\",fontSize:\"1rem\"},t),this.style}setStyle(t){this.boxWrapper.css(this.getStyle(t))}isHidden(){return!this.boxWrapper.getBBox().width}destroy(){let t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),A(this.gradients||{}),this.gradients=null,this.defs=t.destroy(),this.unSubPixelFix&&this.unSubPixelFix(),this.alignedObjects=null,null}createElement(t){return new this.Element(this,t)}getRadialAttr(t,e){return{cx:t[0]-t[2]/2+(e.cx||0)*t[2],cy:t[1]-t[2]/2+(e.cy||0)*t[2],r:(e.r||0)*t[2]}}shadowDefinition(t){let e=[`highcharts-drop-shadow-${this.chartIndex}`,...Object.keys(t).map(e=>`${e}-${t[e]}`)].join(\"-\").toLowerCase().replace(/[^a-z0-9\\-]/g,\"\"),i=D({color:\"#000000\",offsetX:1,offsetY:1,opacity:.15,width:5},t);return this.defs.element.querySelector(`#${e}`)||this.definition({tagName:\"filter\",attributes:{id:e,filterUnits:i.filterUnits},children:[{tagName:\"feDropShadow\",attributes:{dx:i.offsetX,dy:i.offsetY,\"flood-color\":i.color,\"flood-opacity\":Math.min(5*i.opacity,1),stdDeviation:i.width/2}}]}),e}buildText(t){new n(t).buildSVG()}getContrast(t){let i=e.parse(t).rgba.map(t=>{let e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}),s=.2126*i[0]+.7152*i[1]+.0722*i[2];return 1.05/(s+.05)>(s+.05)/.05?\"#FFFFFF\":\"#000000\"}button(e,i,s,o,r={},a,n,l,h,d){let c,p,u;let f=this.label(e,i,s,h,void 0,void 0,d,void 0,\"button\"),m=this.styledMode,x=r.states||{},y=0;r=D(r),delete r.states;let b=D({color:\"#333333\",cursor:\"pointer\",fontSize:\"0.8em\",fontWeight:\"normal\"},r.style);delete r.style;let S=t.filterUserAttributes(r);return f.attr(D({padding:8,r:2},S)),m||(S=D({fill:\"#f7f7f7\",stroke:\"#cccccc\",\"stroke-width\":1},S),c=(a=D(S,{fill:\"#e6e6e6\"},t.filterUserAttributes(a||x.hover||{}))).style,delete a.style,p=(n=D(S,{fill:\"#e6e9ff\",style:{color:\"#000000\",fontWeight:\"bold\"}},t.filterUserAttributes(n||x.select||{}))).style,delete n.style,u=(l=D(S,{style:{color:\"#cccccc\"}},t.filterUserAttributes(l||x.disabled||{}))).style,delete l.style),v(f.element,g?\"mouseover\":\"mouseenter\",function(){3!==y&&f.setState(1)}),v(f.element,g?\"mouseout\":\"mouseleave\",function(){3!==y&&f.setState(y)}),f.setState=function(t){if(1!==t&&(f.state=y=t),f.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\"+[\"normal\",\"hover\",\"pressed\",\"disabled\"][t||0]),!m){f.attr([S,a,n,l][t||0]);let e=[b,c,p,u][t||0];L(e)&&f.css(e)}},!m&&(f.attr(S).css(w({cursor:\"default\"},b)),d&&f.text.css({pointerEvents:\"none\"})),f.on(\"touchstart\",t=>t.stopPropagation()).on(\"click\",function(t){3!==y&&o.call(f,t)})}crispLine(t,e,i=\"round\"){let s=t[0],o=t[1];return C(s[1])&&s[1]===o[1]&&(s[1]=o[1]=Math[i](s[1])-e%2/2),C(s[2])&&s[2]===o[2]&&(s[2]=o[2]=Math[i](s[2])+e%2/2),t}path(t){let e=this.styledMode?{}:{fill:\"none\"};return T(t)?e.d=t:L(t)&&w(e,t),this.createElement(\"path\").attr(e)}circle(t,e,i){let s=L(t)?t:void 0===t?{}:{x:t,y:e,r:i},o=this.createElement(\"circle\");return o.xSetter=o.ySetter=function(t,e,i){i.setAttribute(\"c\"+e,t)},o.attr(s)}arc(t,e,i,s,o,r){let a;L(t)?(e=(a=t).y,i=a.r,s=a.innerR,o=a.start,r=a.end,t=a.x):a={innerR:s,start:o,end:r};let n=this.symbol(\"arc\",t,e,i,i,a);return n.r=i,n}rect(t,e,i,s,o,r){let a=L(t)?t:void 0===t?{}:{x:t,y:e,r:o,width:Math.max(i||0,0),height:Math.max(s||0,0)},n=this.createElement(\"rect\");return this.styledMode||(void 0!==r&&(a[\"stroke-width\"]=r,w(a,n.crisp(a))),a.fill=\"none\"),n.rSetter=function(t,e,i){n.r=t,S(i,{rx:t,ry:t})},n.rGetter=function(){return n.r||0},n.attr(a)}roundedRect(t){return this.symbol(\"roundedRect\").attr(t)}setSize(t,e,i){this.width=t,this.height=e,this.boxWrapper.animate({width:t,height:e},{step:function(){this.attr({viewBox:\"0 0 \"+this.attr(\"width\")+\" \"+this.attr(\"height\")})},duration:E(i,!0)?void 0:0}),this.alignElements()}g(t){let e=this.createElement(\"g\");return t?e.attr({class:\"highcharts-\"+t}):e}image(t,e,i,s,o,r){let a={preserveAspectRatio:\"none\"};P(e)&&(a.x=e),P(i)&&(a.y=i),P(s)&&(a.width=s),P(o)&&(a.height=o);let n=this.createElement(\"image\").attr(a),l=function(e){n.attr({href:t}),r.call(n,e)};if(r){n.attr({href:\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"});let e=new b.Image;v(e,\"load\",l),e.src=t,e.complete&&l({})}else n.attr({href:t});return n}symbol(t,e,i,s,o,r){let a,n,l,h;let c=this,u=/^url\\((.*?)\\)$/,g=u.test(t),f=!g&&(this.symbols[t]?t:\"circle\"),m=f&&this.symbols[f];if(m)\"number\"==typeof e&&(n=m.call(this.symbols,Math.round(e||0),Math.round(i||0),s||0,o||0,r)),a=this.path(n),c.styledMode||a.attr(\"fill\",\"none\"),w(a,{symbolName:f||void 0,x:e,y:i,width:s,height:o}),r&&w(a,r);else if(g){l=t.match(u)[1];let s=a=this.image(l);s.imgwidth=E(r&&r.width,y[l]&&y[l].width),s.imgheight=E(r&&r.height,y[l]&&y[l].height),h=t=>t.attr({width:t.width,height:t.height}),[\"width\",\"height\"].forEach(t=>{s[`${t}Setter`]=function(t,e){this[e]=t;let{alignByTranslate:i,element:s,width:o,height:a,imgwidth:n,imgheight:l}=this,h=\"width\"===e?n:l,d=1;r&&\"within\"===r.backgroundSize&&o&&a&&n&&l?(d=Math.min(o/n,a/l),S(s,{width:Math.round(n*d),height:Math.round(l*d)})):s&&h&&s.setAttribute(e,h),!i&&n&&l&&this.translate(((o||0)-n*d)/2,((a||0)-l*d)/2)}}),C(e)&&s.attr({x:e,y:i}),s.isImg=!0,C(s.imgwidth)&&C(s.imgheight)?h(s):(s.attr({width:0,height:0}),M(\"img\",{onload:function(){let t=d[c.chartIndex];0===this.width&&(k(this,{position:\"absolute\",top:\"-999em\"}),p.body.appendChild(this)),y[l]={width:this.width,height:this.height},s.imgwidth=this.width,s.imgheight=this.height,s.element&&h(s),this.parentNode&&this.parentNode.removeChild(this),c.imgCount--,c.imgCount||!t||t.hasLoaded||t.onload()},src:l}),this.imgCount++)}return a}clipRect(t,e,i,s){return this.rect(t,e,i,s,0)}text(t,e,i,s){let o={};if(s&&(this.allowHTML||!this.forExport))return this.html(t,e,i);o.x=Math.round(e||0),i&&(o.y=Math.round(i)),C(t)&&(o.text=t);let r=this.createElement(\"text\").attr(o);return s&&(!this.forExport||this.allowHTML)||(r.xSetter=function(t,e,i){let s=i.getElementsByTagName(\"tspan\"),o=i.getAttribute(e);for(let i=0,r;it.align())}}return w(R.prototype,{Element:o,SVG_NS:x,escapes:{\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},symbols:a,draw:m}),s.registerRendererType(\"svg\",R,!0),R}),i(e,\"Core/Renderer/HTML/HTMLElement.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{composed:o}=e,{attr:r,css:a,createElement:n,defined:l,extend:h,pInt:d,pushUnique:c}=s;function p(t,e,s){let o=this.div?.style||s.style;i.prototype[`${e}Setter`].call(this,t,e,s),o&&(o[e]=t)}let u=(t,e)=>{if(!t.div){let s=r(t.element,\"class\"),o=t.css,a=n(\"div\",s?{className:s}:void 0,{position:\"absolute\",left:`${t.translateX||0}px`,top:`${t.translateY||0}px`,...t.styles,display:t.display,opacity:t.opacity,visibility:t.visibility},t.parentGroup?.div||e);t.classSetter=(t,e,i)=>{i.setAttribute(\"class\",t),a.className=t},t.translateXSetter=t.translateYSetter=(e,i)=>{t[i]=e,a.style[\"translateX\"===i?\"left\":\"top\"]=`${e}px`,t.doTransform=!0},t.opacitySetter=t.visibilitySetter=p,t.css=e=>(o.call(t,e),e.cursor&&(a.style.cursor=e.cursor),e.pointerEvents&&(a.style.pointerEvents=e.pointerEvents),t),t.on=function(){return i.prototype.on.apply({element:a,onEvents:t.onEvents},arguments),t},t.div=a}return t.div};class g extends i{static compose(t){c(o,this.compose)&&(t.prototype.html=function(t,e,i){return new g(this,\"span\").attr({text:t,x:Math.round(e),y:Math.round(i)})})}constructor(t,e){super(t,e),this.css({position:\"absolute\",...t.styledMode?{}:{fontFamily:t.style.fontFamily,fontSize:t.style.fontSize}}),this.element.style.whiteSpace=\"nowrap\"}getSpanCorrection(t,e,i){this.xCorr=-t*i,this.yCorr=-e}css(t){let e;let{element:i}=this,s=\"SPAN\"===i.tagName&&t&&\"width\"in t,o=s&&t.width;return s&&(delete t.width,this.textWidth=d(o)||void 0,e=!0),t?.textOverflow===\"ellipsis\"&&(t.whiteSpace=\"nowrap\",t.overflow=\"hidden\"),h(this.styles,t),a(i,t),e&&this.updateTransform(),this}htmlGetBBox(){let{element:t}=this;return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}updateTransform(){if(!this.added){this.alignOnAdd=!0;return}let{element:t,renderer:e,rotation:i,rotationOriginX:s,rotationOriginY:o,styles:r,textAlign:n=\"left\",textWidth:h,translateX:d=0,translateY:c=0,x:p=0,y:u=0}=this,g=r.whiteSpace;if(a(t,{marginLeft:`${d}px`,marginTop:`${c}px`}),\"SPAN\"===t.tagName){let r=[i,n,t.innerHTML,h,this.textAlign].join(\",\"),d=-(this.parentGroup?.padding*1)||0,c,f=!1;if(h!==this.oldTextWidth){let e=this.textPxLength?this.textPxLength:(a(t,{width:\"\",whiteSpace:g||\"nowrap\"}),t.offsetWidth),s=h||0;(s>this.oldTextWidth||e>s)&&(/[ \\-]/.test(t.textContent||t.innerText)||\"ellipsis\"===t.style.textOverflow)&&(a(t,{width:e>s||i?h+\"px\":\"auto\",display:\"block\",whiteSpace:g||\"normal\"}),this.oldTextWidth=h,f=!0)}this.hasBoxWidthChanged=f,r!==this.cTT&&(c=e.fontMetrics(t).b,l(i)&&(i!==(this.oldRotation||0)||n!==this.oldAlign)&&this.setSpanRotation(i,d,d),this.getSpanCorrection(!l(i)&&this.textPxLength||t.offsetWidth,c,{left:0,center:.5,right:1}[n]));let{xCorr:m=0,yCorr:x=0}=this,y=(s??p)-m-p-d,b=(o??u)-x-u-d;a(t,{left:`${p+m}px`,top:`${u+x}px`,transformOrigin:`${y}px ${b}px`}),this.cTT=r,this.oldRotation=i,this.oldAlign=n}}setSpanRotation(t,e,i){a(this.element,{transform:`rotate(${t}deg)`,transformOrigin:`${e}% ${i}px`})}add(t){let e;let i=this.renderer.box.parentNode,s=[];if(this.parentGroup=t,t&&!(e=t.div)){let o=t;for(;o;)s.push(o),o=o.parentGroup;for(let t of s.reverse())e=u(t,i)}return(e||i).appendChild(this.element),this.added=!0,this.alignOnAdd&&this.updateTransform(),this}textSetter(e){e!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,t.setElementHTML(this.element,e??\"\"),this.textStr=e,this.doTransform=!0)}alignSetter(t){this.alignValue=this.textAlign=t,this.doTransform=!0}xSetter(t,e){this[e]=t,this.doTransform=!0}}let f=g.prototype;return f.visibilitySetter=f.opacitySetter=p,f.ySetter=f.rotationSetter=f.rotationOriginXSetter=f.rotationOriginYSetter=f.xSetter,g}),i(e,\"Core/Axis/AxisDefaults.js\",[],function(){var t,e;return(e=t||(t={})).xAxis={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:\"%H:%M:%S.%L\",range:!1},second:{main:\"%H:%M:%S\",range:!1},minute:{main:\"%H:%M\",range:!1},hour:{main:\"%H:%M\",range:!1},day:{main:\"%e %b\"},week:{main:\"%e %b\"},month:{main:\"%b '%y\"},year:{main:\"%Y\"}},endOnTick:!1,gridLineDashStyle:\"Solid\",gridZIndex:1,labels:{autoRotationLimit:80,distance:15,enabled:!0,indentation:10,overflow:\"justify\",padding:5,reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,zIndex:7,style:{color:\"#333333\",cursor:\"default\",fontSize:\"0.8em\"}},maxPadding:.01,minorGridLineDashStyle:\"Solid\",minorTickLength:2,minorTickPosition:\"outside\",minorTicksPerMajor:5,minPadding:.01,offset:void 0,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:\"between\",tickPosition:\"outside\",title:{align:\"middle\",useHTML:!1,x:0,y:0,style:{color:\"#666666\",fontSize:\"0.8em\"}},type:\"linear\",uniqueNames:!0,visible:!0,minorGridLineColor:\"#f2f2f2\",minorGridLineWidth:1,minorTickColor:\"#999999\",lineColor:\"#333333\",lineWidth:1,gridLineColor:\"#e6e6e6\",gridLineWidth:void 0,tickColor:\"#333333\"},e.yAxis={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:void 0},startOnTick:!0,title:{text:\"Values\"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:\"justify\",formatter:function(){let{numberFormatter:t}=this.axis.chart;return t(this.total||0,-1)},style:{color:\"#000000\",fontSize:\"0.7em\",fontWeight:\"bold\",textOutline:\"1px contrast\"}},gridLineWidth:1,lineWidth:0},t}),i(e,\"Core/Foundation.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{addEvent:i,isFunction:s,objectEach:o,removeEvent:r}=t;return(e||(e={})).registerEventOptions=function(t,e){t.eventOptions=t.eventOptions||{},o(e.events,function(e,o){t.eventOptions[o]!==e&&(t.eventOptions[o]&&(r(t,o,t.eventOptions[o]),delete t.eventOptions[o]),s(e)&&(t.eventOptions[o]=e,i(t,o,e,{order:0})))})},e}),i(e,\"Core/Axis/Tick.js\",[e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{deg2rad:s}=e,{clamp:o,correctFloat:r,defined:a,destroyObjectProperties:n,extend:l,fireEvent:h,isNumber:d,merge:c,objectEach:p,pick:u}=i;return class{constructor(t,e,i,s,o){this.isNew=!0,this.isNewLabel=!0,this.axis=t,this.pos=e,this.type=i||\"\",this.parameters=o||{},this.tickmarkOffset=this.parameters.tickmarkOffset,this.options=this.parameters.options,h(this,\"init\"),i||s||this.addLabel()}addLabel(){let e=this,i=e.axis,s=i.options,o=i.chart,n=i.categories,c=i.logarithmic,p=i.names,g=e.pos,f=u(e.options&&e.options.labels,s.labels),m=i.tickPositions,x=g===m[0],y=g===m[m.length-1],b=(!f.step||1===f.step)&&1===i.tickInterval,v=m.info,S=e.label,M,k,C,A=this.parameters.category||(n?u(n[g],p[g],g):g);c&&d(A)&&(A=r(c.lin2log(A))),i.dateTime&&(v?M=(k=o.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid&&v.higherRanks[g]||v.unitName])).main:d(A)&&(M=i.dateTime.getXDateFormat(A,s.dateTimeLabelFormats||{}))),e.isFirst=x,e.isLast=y;let w={axis:i,chart:o,dateTimeLabelFormat:M,isFirst:x,isLast:y,pos:g,tick:e,tickPositionInfo:v,value:A};h(this,\"labelFormat\",w);let T=e=>f.formatter?f.formatter.call(e,e):f.format?(e.text=i.defaultLabelFormatter.call(e),t.format(f.format,e,o)):i.defaultLabelFormatter.call(e),P=T.call(w,w),L=k&&k.list;L?e.shortenLabel=function(){for(C=0;C0&&o+c*p>l&&(v=Math.round((r-o)/Math.cos(d*s))):(y=o-c*p,b=o+(1-c)*p,yl&&(m=l-t.x+m*c,x=-1),(m=Math.min(g,m))m||e.autoRotation&&(h.styles||{}).width)&&(v=m)),v&&(this.shortenLabel?this.shortenLabel():(f.width=Math.floor(v)+\"px\",(i.style||{}).textOverflow||(f.textOverflow=\"ellipsis\"),h.css(f)))}moveLabel(t,e){let i=this,s=i.label,o=i.axis,r=!1,a;s&&s.textStr===t?(i.movedLabel=s,r=!0,delete i.label):p(o.ticks,function(e){r||e.isNew||e===i||!e.label||e.label.textStr!==t||(i.movedLabel=e.label,r=!0,e.labelPos=i.movedLabel.xy,delete e.label)}),!r&&(i.labelPos||s)&&(a=i.labelPos||s.xy,i.movedLabel=i.createLabel(t,e,a),i.movedLabel&&i.movedLabel.attr({opacity:0}))}render(t,e,i){let s=this.axis,o=s.horiz,a=this.pos,n=u(this.tickmarkOffset,s.tickmarkOffset),l=this.getPosition(o,a,n,e),d=l.x,c=l.y,p=s.pos,g=p+s.len,f=o&&d===g||!o&&c===p?-1:1,m=o?d:c;!s.chart.polar&&this.isNew&&(r(m)g)&&(i=0);let x=u(i,this.label&&this.label.newOpacity,1);i=u(i,1),this.isActive=!0,this.renderGridLine(e,i,f),this.renderMark(l,i,f),this.renderLabel(l,e,x,t),this.isNew=!1,h(this,\"afterRender\")}renderGridLine(t,e,i){let s=this.axis,o=s.options,r={},a=this.pos,n=this.type,l=u(this.tickmarkOffset,s.tickmarkOffset),h=s.chart.renderer,d=this.gridLine,c,p=o.gridLineWidth,g=o.gridLineColor,f=o.gridLineDashStyle;\"minor\"===this.type&&(p=o.minorGridLineWidth,g=o.minorGridLineColor,f=o.minorGridLineDashStyle),d||(s.chart.styledMode||(r.stroke=g,r[\"stroke-width\"]=p||0,r.dashstyle=f),n||(r.zIndex=1),t&&(e=0),this.gridLine=d=h.path().attr(r).addClass(\"highcharts-\"+(n?n+\"-\":\"\")+\"grid-line\").add(s.gridGroup)),d&&(c=s.getPlotLinePath({value:a+l,lineWidth:d.strokeWidth()*i,force:\"pass\",old:t,acrossPanes:!1}))&&d[t||this.isNew?\"attr\":\"animate\"]({d:c,opacity:e})}renderMark(t,e,i){let s=this.axis,o=s.options,r=s.chart.renderer,a=this.type,n=s.tickSize(a?a+\"Tick\":\"tick\"),l=t.x,h=t.y,d=u(o[\"minor\"!==a?\"tickWidth\":\"minorTickWidth\"],!a&&s.isXAxis?1:0),c=o[\"minor\"!==a?\"tickColor\":\"minorTickColor\"],p=this.mark,g=!p;n&&(s.opposite&&(n[0]=-n[0]),p||(this.mark=p=r.path().addClass(\"highcharts-\"+(a?a+\"-\":\"\")+\"tick\").add(s.axisGroup),s.chart.styledMode||p.attr({stroke:c,\"stroke-width\":d})),p[g?\"attr\":\"animate\"]({d:this.getMarkPath(l,h,n[0],p.strokeWidth()*i,s.horiz,r),opacity:e}))}renderLabel(t,e,i,s){let o=this.axis,r=o.horiz,a=o.options,n=this.label,l=a.labels,h=l.step,c=u(this.tickmarkOffset,o.tickmarkOffset),p=t.x,g=t.y,f=!0;n&&d(p)&&(n.xy=t=this.getLabelPosition(p,g,n,r,l,c,s,h),(!this.isFirst||this.isLast||a.showFirstLabel)&&(!this.isLast||this.isFirst||a.showLastLabel)?!r||l.step||l.rotation||e||0===i||this.handleOverflow(t):f=!1,h&&s%h&&(f=!1),f&&d(t.y)?(t.opacity=i,n[this.isNewLabel?\"attr\":\"animate\"](t).show(!0),this.isNewLabel=!1):(n.hide(),this.isNewLabel=!0))}replaceMovedLabel(){let t=this.label,e=this.axis;t&&!this.isNew&&(t.animate({opacity:0},void 0,t.destroy),delete this.label),e.isDirty=!0,this.label=this.movedLabel,delete this.movedLabel}}}),i(e,\"Core/Axis/Axis.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/AxisDefaults.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Defaults.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Axis/Tick.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n){let{animObject:l}=t,{xAxis:h,yAxis:d}=e,{defaultOptions:c}=s,{registerEventOptions:p}=o,{deg2rad:u}=r,{arrayMax:g,arrayMin:f,clamp:m,correctFloat:x,defined:y,destroyObjectProperties:b,erase:v,error:S,extend:M,fireEvent:k,getClosestDistance:C,insertItem:A,isArray:w,isNumber:T,isString:P,merge:L,normalizeTickInterval:O,objectEach:D,pick:E,relativeLength:B,removeEvent:j,splat:I,syncTimeout:R}=n,z=(t,e)=>O(e,void 0,void 0,E(t.options.allowDecimals,e<.5||void 0!==t.tickAmount),!!t.tickAmount);M(c,{xAxis:h,yAxis:L(h,d)});class G{constructor(t,e,i){this.init(t,e,i)}init(t,e,i=this.coll){let s=\"xAxis\"===i,o=this.isZAxis||(t.inverted?!s:s);this.chart=t,this.horiz=o,this.isXAxis=s,this.coll=i,k(this,\"init\",{userOptions:e}),this.opposite=E(e.opposite,this.opposite),this.side=E(e.side,this.side,o?this.opposite?0:2:this.opposite?1:3),this.setOptions(e);let r=this.options,a=r.labels,n=r.type;this.userOptions=e,this.minPixelPadding=0,this.reversed=E(r.reversed,this.reversed),this.visible=r.visible,this.zoomEnabled=r.zoomEnabled,this.hasNames=\"category\"===n||!0===r.categories,this.categories=w(r.categories)&&r.categories||(this.hasNames?[]:void 0),this.names||(this.names=[],this.names.keys={}),this.plotLinesAndBandsGroups={},this.positiveValuesOnly=!!this.logarithmic,this.isLinked=y(r.linkedTo),this.ticks={},this.labelEdge=[],this.minorTicks={},this.plotLinesAndBands=[],this.alternateBands={},this.len=0,this.minRange=this.userMinRange=r.minRange||r.maxZoom,this.range=r.range,this.offset=r.offset||0,this.max=void 0,this.min=void 0;let l=E(r.crosshair,I(t.options.tooltip.crosshairs)[s?0:1]);this.crosshair=!0===l?{}:l,-1===t.axes.indexOf(this)&&(s?t.axes.splice(t.xAxis.length,0,this):t.axes.push(this),A(this,t[this.coll])),t.orderItems(this.coll),this.series=this.series||[],t.inverted&&!this.isZAxis&&s&&!y(this.reversed)&&(this.reversed=!0),this.labelRotation=T(a.rotation)?a.rotation:void 0,p(this,r),k(this,\"afterInit\")}setOptions(t){let e=this.horiz?{labels:{autoRotation:[-45]},margin:15}:{title:{rotation:90*this.side}};this.options=L(e,c[this.coll],t),k(this,\"afterSetOptions\",{userOptions:t})}defaultLabelFormatter(){let t=this.axis,{numberFormatter:e}=this.chart,i=T(this.value)?this.value:NaN,s=t.chart.time,o=t.categories,r=this.dateTimeLabelFormat,a=c.lang,n=a.numericSymbols,l=a.numericSymbolMagnitude||1e3,h=t.logarithmic?Math.abs(i):t.tickInterval,d=n&&n.length,p,u;if(o)u=`${this.value}`;else if(r)u=s.dateFormat(r,i);else if(d&&n&&h>=1e3)for(;d--&&void 0===u;)h>=(p=Math.pow(l,d+1))&&10*i%p==0&&null!==n[d]&&0!==i&&(u=e(i/p,-1)+n[d]);return void 0===u&&(u=Math.abs(i)>=1e4?e(i,-1):e(i,-1,void 0,\"\")),u}getSeriesExtremes(){let t;let e=this;k(this,\"getSeriesExtremes\",null,function(){e.hasVisibleSeries=!1,e.dataMin=e.dataMax=e.threshold=void 0,e.softThreshold=!e.isXAxis,e.series.forEach(i=>{if(i.reserveSpace()){let s=i.options,o,r=s.threshold,a,n;if(e.hasVisibleSeries=!0,e.positiveValuesOnly&&0>=(r||0)&&(r=void 0),e.isXAxis)(o=i.xData)&&o.length&&(o=e.logarithmic?o.filter(t=>t>0):o,a=(t=i.getXExtremes(o)).min,n=t.max,T(a)||a instanceof Date||(o=o.filter(T),a=(t=i.getXExtremes(o)).min,n=t.max),o.length&&(e.dataMin=Math.min(E(e.dataMin,a),a),e.dataMax=Math.max(E(e.dataMax,n),n)));else{let t=i.applyExtremes();T(t.dataMin)&&(a=t.dataMin,e.dataMin=Math.min(E(e.dataMin,a),a)),T(t.dataMax)&&(n=t.dataMax,e.dataMax=Math.max(E(e.dataMax,n),n)),y(r)&&(e.threshold=r),(!s.softThreshold||e.positiveValuesOnly)&&(e.softThreshold=!1)}}})}),k(this,\"afterGetSeriesExtremes\")}translate(t,e,i,s,o,r){let a=this.linkedParent||this,n=s&&a.old?a.old.min:a.min;if(!T(n))return NaN;let l=a.minPixelPadding,h=(a.isOrdinal||a.brokenAxis?.hasBreaks||a.logarithmic&&o)&&a.lin2val,d=1,c=0,p=s&&a.old?a.old.transA:a.transA,u=0;if(p||(p=a.transA),i&&(d*=-1,c=a.len),a.reversed&&(d*=-1,c-=d*(a.sector||a.len)),e)u=(t=t*d+c-l)/p+n,h&&(u=a.lin2val(u));else{h&&(t=a.val2lin(t));let e=d*(t-n)*p;u=(a.isRadial?e:x(e))+c+d*l+(T(r)?p*r:0)}return u}toPixels(t,e){return this.translate(t,!1,!this.horiz,void 0,!0)+(e?0:this.pos)}toValue(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,void 0,!0)}getPlotLinePath(t){let e=this,i=e.chart,s=e.left,o=e.top,r=t.old,a=t.value,n=t.lineWidth,l=r&&i.oldChartHeight||i.chartHeight,h=r&&i.oldChartWidth||i.chartWidth,d=e.transB,c=t.translatedValue,p=t.force,u,g,f,x,y;function b(t,e,i){return\"pass\"!==p&&(ti)&&(p?t=m(t,e,i):y=!0),t}let v={value:a,lineWidth:n,old:r,force:p,acrossPanes:t.acrossPanes,translatedValue:c};return k(this,\"getPlotLinePath\",v,function(t){u=f=Math.round((c=m(c=E(c,e.translate(a,void 0,void 0,r)),-1e5,1e5))+d),g=x=Math.round(l-c-d),T(c)?e.horiz?(g=o,x=l-e.bottom+(i.scrollablePixelsY||0),u=f=b(u,s,s+e.width)):(u=s,f=h-e.right+(i.scrollablePixelsX||0),g=x=b(g,o,o+e.height)):(y=!0,p=!1),t.path=y&&!p?void 0:i.renderer.crispLine([[\"M\",u,g],[\"L\",f,x]],n||1)}),v.path}getLinearTickPositions(t,e,i){let s,o,r;let a=x(Math.floor(e/t)*t),n=x(Math.ceil(i/t)*t),l=[];if(x(a+t)===a&&(r=20),this.single)return[e];for(s=a;s<=n&&(l.push(s),(s=x(s+t,r))!==o);)o=s;return l}getMinorTickInterval(){let{minorTicks:t,minorTickInterval:e}=this.options;return!0===t?E(e,\"auto\"):!1!==t?e:void 0}getMinorTickPositions(){let t=this.options,e=this.tickPositions,i=this.minorTickInterval,s=this.pointRangePadding||0,o=(this.min||0)-s,r=(this.max||0)+s,a=r-o,n=[],l;if(a&&a/i(t.xIncrement?t.xData?.slice(0,2):t.xData)||[]))||0),this.dataMax-this.dataMin)),T(i)&&T(s)&&T(o)&&i-s=o,r=(o-i+s)/2,n=[s-r,E(t.min,s-r)],a&&(n[2]=e?e.log2lin(this.dataMin):this.dataMin),l=[(s=g(n))+o,E(t.max,s+o)],a&&(l[2]=e?e.log2lin(this.dataMax):this.dataMax),(i=f(l))-st-e),t=C([i]))}return t&&e?Math.min(t,e):t||e}nameToX(t){let e=w(this.options.categories),i=e?this.categories:this.names,s=t.options.x,o;return t.series.requireSorting=!1,y(s)||(s=this.options.uniqueNames&&i?e?i.indexOf(t.name):E(i.keys[t.name],-1):t.series.autoIncrement()),-1===s?!e&&i&&(o=i.length):o=s,void 0!==o?(this.names[o]=t.name,this.names.keys[t.name]=o):t.x&&(o=t.x),o}updateNames(){let t=this,e=this.names;e.length>0&&(Object.keys(e.keys).forEach(function(t){delete e.keys[t]}),e.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(e=>{e.xIncrement=null,(!e.points||e.isDirtyData)&&(t.max=Math.max(t.max,e.xData.length-1),e.processData(),e.generatePoints()),e.data.forEach(function(i,s){let o;i?.options&&void 0!==i.name&&void 0!==(o=t.nameToX(i))&&o!==i.x&&(i.x=o,e.xData[s]=o)})}))}setAxisTranslation(){let t=this,e=t.max-t.min,i=t.linkedParent,s=!!t.categories,o=t.isXAxis,r=t.axisPointRange||0,a,n=0,l=0,h,d=t.transA;(o||s||r)&&(a=t.getClosest(),i?(n=i.minPointOffset,l=i.pointRangePadding):t.series.forEach(function(e){let i=s?1:o?E(e.options.pointRange,a,0):t.axisPointRange||0,h=e.options.pointPlacement;if(r=Math.max(r,i),!t.single||s){let t=e.is(\"xrange\")?!o:o;n=Math.max(n,t&&P(h)?0:i/2),l=Math.max(l,t&&\"on\"===h?0:i)}}),h=t.ordinal&&t.ordinal.slope&&a?t.ordinal.slope/a:1,t.minPointOffset=n*=h,t.pointRangePadding=l*=h,t.pointRange=Math.min(r,t.single&&s?1:e),o&&a&&(t.closestPointRange=a)),t.translationSlope=t.transA=d=t.staticScale||t.len/(e+l||1),t.transB=t.horiz?t.left:t.bottom,t.minPixelPadding=d*n,k(this,\"afterSetAxisTranslation\")}minFromRange(){let{max:t,min:e}=this;return T(t)&&T(e)&&t-e||void 0}setTickInterval(t){let{categories:e,chart:i,dataMax:s,dataMin:o,dateTime:r,isXAxis:a,logarithmic:n,options:l,softThreshold:h}=this,d=T(this.threshold)?this.threshold:void 0,c=this.minRange||0,{ceiling:p,floor:u,linkedTo:g,softMax:f,softMin:m}=l,b=T(g)&&i[this.coll]?.[g],v=l.tickPixelInterval,M=l.maxPadding,C=l.minPadding,A=0,w,P=T(l.tickInterval)&&l.tickInterval>=0?l.tickInterval:void 0,L,O,D,B;if(r||e||b||this.getTickAmount(),D=E(this.userMin,l.min),B=E(this.userMax,l.max),b?(this.linkedParent=b,w=b.getExtremes(),this.min=E(w.min,w.dataMin),this.max=E(w.max,w.dataMax),l.type!==b.options.type&&S(11,!0,i)):(h&&y(d)&&T(s)&&T(o)&&(o>=d?(L=d,C=0):s<=d&&(O=d,M=0)),this.min=E(D,L,o),this.max=E(B,O,s)),T(this.max)&&T(this.min)&&(n&&(this.positiveValuesOnly&&!t&&0>=Math.min(this.min,E(o,this.min))&&S(10,!0,i),this.min=x(n.log2lin(this.min),16),this.max=x(n.log2lin(this.max),16)),this.range&&T(o)&&(this.userMin=this.min=D=Math.max(o,this.minFromRange()||0),this.userMax=B=this.max,this.range=void 0)),k(this,\"foundExtremes\"),this.adjustForMinRange(),T(this.min)&&T(this.max)){if(!T(this.userMin)&&T(m)&&mthis.max&&(this.max=B=f),e||this.axisPointRange||this.stacking?.usePercentage||b||!(A=this.max-this.min)||(!y(D)&&C&&(this.min-=A*C),y(B)||!M||(this.max+=A*M)),!T(this.userMin)&&T(u)&&(this.min=Math.max(this.min,u)),!T(this.userMax)&&T(p)&&(this.max=Math.min(this.max,p)),h&&T(o)&&T(s)){let t=d||0;!y(D)&&this.min=t?this.min=l.minRange?Math.min(t,this.max-c):t:!y(B)&&this.max>t&&s<=t&&(this.max=l.minRange?Math.max(t,this.min+c):t)}!i.polar&&this.min>this.max&&(y(l.min)?this.max=this.min:y(l.max)&&(this.min=this.max)),A=this.max-this.min}if(this.min!==this.max&&T(this.min)&&T(this.max)?b&&!P&&v===b.options.tickPixelInterval?this.tickInterval=P=b.tickInterval:this.tickInterval=E(P,this.tickAmount?A/Math.max(this.tickAmount-1,1):void 0,e?1:A*v/Math.max(this.len,v)):this.tickInterval=1,a&&!t){let t=this.min!==this.old?.min||this.max!==this.old?.max;this.series.forEach(function(e){e.forceCrop=e.forceCropping?.(),e.processData(t)}),k(this,\"postProcessData\",{hasExtremesChanged:t})}this.setAxisTranslation(),k(this,\"initialAxisTranslation\"),this.pointRange&&!P&&(this.tickInterval=Math.max(this.pointRange,this.tickInterval));let j=E(l.minTickInterval,r&&!this.series.some(t=>t.noSharedTooltip)?this.closestPointRange:0);!P&&this.tickIntervalMath.max(2*this.len,200))n=[this.min,this.max],S(19,!1,this.chart);else if(this.dateTime)n=this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,t.units),this.min,this.max,t.startOfWeek,this.ordinal?.positions,this.closestPointRange,!0);else if(this.logarithmic)n=this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max);else{let t=this.tickInterval,e=t;for(;e<=2*t;)if(n=this.getLinearTickPositions(this.tickInterval,this.min,this.max),this.tickAmount&&n.length>this.tickAmount)this.tickInterval=z(this,e*=1.1);else break}n.length>this.len&&(n=[n[0],n[n.length-1]])[0]===n[1]&&(n.length=1),i&&(this.tickPositions=n,(l=i.apply(this,[this.min,this.max]))&&(n=l))}this.tickPositions=n,this.paddedTicks=n.slice(0),this.trimTicks(n,r,a),!this.isLinked&&T(this.min)&&T(this.max)&&(this.single&&n.length<2&&!this.categories&&!this.series.some(t=>t.is(\"heatmap\")&&\"between\"===t.options.pointPlacement)&&(this.min-=.5,this.max+=.5),e||l||this.adjustTickAmount()),k(this,\"afterSetTickPositions\")}trimTicks(t,e,i){let s=t[0],o=t[t.length-1],r=!this.isOrdinal&&this.minPointOffset||0;if(k(this,\"trimTicks\"),!this.isLinked){if(e&&s!==-1/0)this.min=s;else for(;this.min-r>t[0];)t.shift();if(i)this.max=o;else for(;this.max+r{let{horiz:e,options:i}=t;return[e?i.left:i.top,i.width,i.height,i.pane].join(\",\")},r=o(this);i[this.coll].forEach(function(i){let{series:a}=i;a.length&&a.some(t=>t.visible)&&i!==e&&o(i)===r&&(t=!0,s.push(i))})}if(t&&a){s.forEach(t=>{let i=t.getThresholdAlignment(e);T(i)&&n.push(i)});let t=n.length>1?n.reduce((t,e)=>t+=e,0)/n.length:void 0;s.forEach(e=>{e.thresholdAlignment=t})}return t}getThresholdAlignment(t){if((!T(this.dataMin)||this!==t&&this.series.some(t=>t.isDirty||t.isDirtyData))&&this.getSeriesExtremes(),T(this.threshold)){let t=m((this.threshold-(this.dataMin||0))/((this.dataMax||0)-(this.dataMin||0)),0,1);return this.options.reversed&&(t=1-t),t}}getTickAmount(){let t=this.options,e=t.tickPixelInterval,i=t.tickAmount;y(t.tickInterval)||i||!(this.lenr.push(x(r[r.length-1]+p)),f=()=>r.unshift(x(r[0]-p));if(T(n)&&(u=n<.5?Math.ceil(n*(a-1)):Math.floor(n*(a-1)),o.reversed&&(u=a-1-u)),t.hasData()&&T(s)&&T(i)){let n=()=>{t.transA*=(l-1)/(a-1),t.min=o.startOnTick?r[0]:Math.min(s,r[0]),t.max=o.endOnTick?r[r.length-1]:Math.max(i,r[r.length-1])};if(T(u)&&T(t.threshold)){for(;r[u]!==h||r.length!==a||r[0]>s||r[r.length-1]t.threshold?f():g();if(p>8*t.tickInterval)break;p*=2}n()}else if(l0&&c{i=i||t.isDirtyData||t.isDirty,s=s||t.xAxis&&t.xAxis.isDirty||!1}),this.setAxisSize();let o=this.len!==(this.old&&this.old.len);o||i||s||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(e&&\"yAxis\"===t&&e.buildStacks(),this.forceRedraw=!1,this.userMinRange||(this.minRange=void 0),this.getSeriesExtremes(),this.setTickInterval(),e&&\"xAxis\"===t&&e.buildStacks(),this.isDirty||(this.isDirty=o||this.min!==this.old?.min||this.max!==this.old?.max)):e&&e.cleanStacks(),i&&delete this.allExtremes,k(this,\"afterSetScale\")}setExtremes(t,e,i=!0,s,o){this.series.forEach(t=>{delete t.kdTree}),k(this,\"setExtremes\",o=M(o,{min:t,max:e}),t=>{this.userMin=t.min,this.userMax=t.max,this.eventArgs=t,i&&this.chart.redraw(s)})}setAxisSize(){let t=this.chart,e=this.options,i=e.offsets||[0,0,0,0],s=this.horiz,o=this.width=Math.round(B(E(e.width,t.plotWidth-i[3]+i[1]),t.plotWidth)),r=this.height=Math.round(B(E(e.height,t.plotHeight-i[0]+i[2]),t.plotHeight)),a=this.top=Math.round(B(E(e.top,t.plotTop+i[0]),t.plotHeight,t.plotTop)),n=this.left=Math.round(B(E(e.left,t.plotLeft+i[3]),t.plotWidth,t.plotLeft));this.bottom=t.chartHeight-r-a,this.right=t.chartWidth-o-n,this.len=Math.max(s?o:r,0),this.pos=s?n:a}getExtremes(){let t=this.logarithmic;return{min:t?x(t.lin2log(this.min)):this.min,max:t?x(t.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}getThreshold(t){let e=this.logarithmic,i=e?e.lin2log(this.min):this.min,s=e?e.lin2log(this.max):this.max;return null===t||t===-1/0?t=i:t===1/0?t=s:i>t?t=i:s15&&e<165?t.align=\"right\":e>195&&e<345&&(t.align=\"left\")}),i.align}tickSize(t){let e=this.options,i=E(e[\"tick\"===t?\"tickWidth\":\"minorTickWidth\"],\"tick\"===t&&this.isXAxis&&!this.categories?1:0),s=e[\"tick\"===t?\"tickLength\":\"minorTickLength\"],o;i&&s&&(\"inside\"===e[t+\"Position\"]&&(s=-s),o=[s,i]);let r={tickSize:o};return k(this,\"afterTickSize\",r),r.tickSize}labelMetrics(){let t=this.chart.renderer,e=this.ticks,i=e[Object.keys(e)[0]]||{};return this.chart.renderer.fontMetrics(i.label||i.movedLabel||t.box)}unsquish(){let t=this.options.labels,e=this.horiz,i=this.tickInterval,s=this.len/(((this.categories?1:0)+this.max-this.min)/i),o=t.rotation,r=this.labelMetrics().h,a=Math.max(this.max-this.min,0),n=function(t){let e=t/(s||1);return(e=e>1?Math.ceil(e):1)*i>a&&t!==1/0&&s!==1/0&&a&&(e=Math.ceil(a/i)),x(e*i)},l=i,h,d=Number.MAX_VALUE,c;if(e){if(!t.staggerLines&&(T(o)?c=[o]:s=-90&&i<=90)&&(e=(t=n(Math.abs(r/Math.sin(u*i))))+Math.abs(i/360))g&&(g=e.label.textPxLength)}),this.maxLabelLength=g,this.autoRotation)g>l&&g>d.h?h.rotation=this.labelRotation:this.labelRotation=0;else if(n&&(p=l,!c))for(u=\"clip\",m=i.length;!a&&m--;)(f=s[i[m]].label)&&(\"ellipsis\"===f.styles.textOverflow?f.css({textOverflow:\"clip\"}):f.textPxLength>n&&f.css({width:n+\"px\"}),f.getBBox().height>this.len/i.length-(d.h-d.f)&&(f.specificTextOverflow=\"ellipsis\"));h.rotation&&(p=g>.5*t.chartHeight?.33*t.chartHeight:g,c||(u=\"ellipsis\")),this.labelAlign=o.align||this.autoLabelAlign(this.labelRotation),this.labelAlign&&(h.align=this.labelAlign),i.forEach(function(t){let e=s[t],i=e&&e.label,o=r.width,a={};i&&(i.attr(h),e.shortenLabel?e.shortenLabel():p&&!o&&\"nowrap\"!==r.whiteSpace&&(po.g(e).attr({zIndex:a}).addClass(`highcharts-${i.toLowerCase()}${r} `+(this.isRadial?`highcharts-radial-axis${r} `:\"\")+(s.className||\"\")).add(t);this.axisGroup||(this.gridGroup=r(\"grid\",\"-grid\",s.gridZIndex),this.axisGroup=r(\"axis\",\"\",s.zIndex),this.labelGroup=r(\"axis-labels\",\"-labels\",s.labels.zIndex))}getOffset(){let t=this,{chart:e,horiz:i,options:s,side:o,ticks:r,tickPositions:a,coll:n}=t,l=e.inverted&&!t.isZAxis?[1,0,3,2][o]:o,h=t.hasData(),d=s.title,c=s.labels,p=T(s.crossing),u=e.axisOffset,g=e.clipOffset,f=[-1,1,1,-1][o],m,x=0,b,v=0,S=0,M,C;if(t.showAxis=m=h||s.showEmpty,t.staggerLines=t.horiz&&c.staggerLines||void 0,t.createGroups(),h||t.isLinked?(a.forEach(function(e){t.generateTick(e)}),t.renderUnsquish(),t.reserveSpaceDefault=0===o||2===o||({1:\"left\",3:\"right\"})[o]===t.labelAlign,E(c.reserveSpace,!p&&null,\"center\"===t.labelAlign||null,t.reserveSpaceDefault)&&a.forEach(function(t){S=Math.max(r[t].getLabelSize(),S)}),t.staggerLines&&(S*=t.staggerLines),t.labelOffset=S*(t.opposite?-1:1)):D(r,function(t,e){t.destroy(),delete r[e]}),d?.text&&!1!==d.enabled&&(t.addTitle(m),m&&!p&&!1!==d.reserveSpace&&(t.titleOffset=x=t.axisTitle.getBBox()[i?\"height\":\"width\"],v=y(b=d.offset)?0:E(d.margin,i?5:10))),t.renderLine(),t.offset=f*E(s.offset,u[o]?u[o]+(s.margin||0):0),t.tickRotCorr=t.tickRotCorr||{x:0,y:0},C=0===o?-t.labelMetrics().h:2===o?t.tickRotCorr.y:0,M=Math.abs(S)+v,S&&(M-=C,M+=f*(i?E(c.y,t.tickRotCorr.y+f*c.distance):E(c.x,f*c.distance))),t.axisTitleMargin=E(b,M),t.getMaxLabelDimensions&&(t.maxLabelDimensions=t.getMaxLabelDimensions(r,a)),\"colorAxis\"!==n){let e=this.tickSize(\"tick\");u[o]=Math.max(u[o],(t.axisTitleMargin||0)+x+f*t.offset,M,a&&a.length&&e?e[0]+f*t.offset:0);let i=!t.axisLine||s.offset?0:2*Math.floor(t.axisLine.strokeWidth()/2);g[l]=Math.max(g[l],i)}k(this,\"afterGetOffset\")}getLinePath(t){let e=this.chart,i=this.opposite,s=this.offset,o=this.horiz,r=this.left+(i?this.width:0)+s,a=e.chartHeight-this.bottom-(i?this.height:0)+s;return i&&(t*=-1),e.renderer.crispLine([[\"M\",o?this.left:r,o?a:this.top],[\"L\",o?e.chartWidth-this.right:r,o?a:e.chartHeight-this.bottom]],t)}renderLine(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,\"stroke-width\":this.options.lineWidth,zIndex:7}))}getTitlePosition(t){let e=this.horiz,i=this.left,s=this.top,o=this.len,r=this.options.title,a=e?i:s,n=this.opposite,l=this.offset,h=r.x,d=r.y,c=this.chart.renderer.fontMetrics(t),p=t?Math.max(t.getBBox(!1,0).height-c.h-1,0):0,u={low:a+(e?0:o),middle:a+o/2,high:a+(e?o:0)}[r.align],g=(e?s+this.height:i)+(e?1:-1)*(n?-1:1)*(this.axisTitleMargin||0)+[-p,p,c.f,-p][this.side],f={x:e?u+h:g+(n?this.width:0)+l+h,y:e?g+d-(n?this.height:0)+l:u+d};return k(this,\"afterGetTitlePosition\",{titlePosition:f}),f}renderMinorTick(t,e){let i=this.minorTicks;i[t]||(i[t]=new a(this,t,\"minor\")),e&&i[t].isNew&&i[t].render(null,!0),i[t].render(null,!1,1)}renderTick(t,e,i){let s=this.isLinked,o=this.ticks;(!s||t>=this.min&&t<=this.max||this.grid&&this.grid.isColumn)&&(o[t]||(o[t]=new a(this,t)),i&&o[t].isNew&&o[t].render(e,!0,-1),o[t].render(e))}render(){let t,e;let i=this,s=i.chart,o=i.logarithmic,n=s.renderer,h=i.options,d=i.isLinked,c=i.tickPositions,p=i.axisTitle,u=i.ticks,g=i.minorTicks,f=i.alternateBands,m=h.stackLabels,x=h.alternateGridColor,y=h.crossing,b=i.tickmarkOffset,v=i.axisLine,S=i.showAxis,M=l(n.globalAnimation);if(i.labelEdge.length=0,i.overlap=!1,[u,g,f].forEach(function(t){D(t,function(t){t.isActive=!1})}),T(y)){let t=this.isXAxis?s.yAxis[0]:s.xAxis[0],e=[1,-1,-1,1][this.side];if(t){let s=t.toPixels(y,!0);i.horiz&&(s=t.len-s),i.offset=e*s}}if(i.hasData()||d){let n=i.chart.hasRendered&&i.old&&T(i.old.min);i.minorTickInterval&&!i.categories&&i.getMinorTickPositions().forEach(function(t){i.renderMinorTick(t,n)}),c.length&&(c.forEach(function(t,e){i.renderTick(t,e,n)}),b&&(0===i.min||i.single)&&(u[-1]||(u[-1]=new a(i,-1,null,!0)),u[-1].render(-1))),x&&c.forEach(function(a,n){e=void 0!==c[n+1]?c[n+1]+b:i.max-b,n%2==0&&a=.5)t=Math.round(t),h=a.getLinearTickPositions(t,e,i);else if(t>=.08){let s,o,a,n,l,d,c;let p=Math.floor(e);for(s=t>.3?[1,2,4]:t>.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9],o=p;oe&&(!r||d<=i)&&void 0!==d&&h.push(d),d>i&&(c=!0),d=l}else{let d=this.lin2log(e),c=this.lin2log(i),p=r?a.getMinorTickInterval():l.tickInterval,u=l.tickPixelInterval/(r?5:1),g=r?n/a.tickPositions.length:n;t=s(t=o(\"auto\"===p?null:p,this.minorAutoInterval,(c-d)*u/(g||1))),h=a.getLinearTickPositions(t,d,c).map(this.log2lin),r||(this.minorAutoInterval=t/5)}return r||(a.tickInterval=t),h}lin2log(t){return Math.pow(10,t)}log2lin(t){return Math.log(t)/Math.LN10}}t.Additions=a}(e||(e={})),e}),i(e,\"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{erase:i,extend:s,isNumber:o}=t;return function(t){let e;function r(t){return this.addPlotBandOrLine(t,\"plotBands\")}function a(t,i){let s=this.userOptions,o=new e(this,t);if(this.visible&&(o=o.render()),o){if(this._addedPlotLB||(this._addedPlotLB=!0,(s.plotLines||[]).concat(s.plotBands||[]).forEach(t=>{this.addPlotBandOrLine(t)})),i){let e=s[i]||[];e.push(t),s[i]=e}this.plotLinesAndBands.push(o)}return o}function n(t){return this.addPlotBandOrLine(t,\"plotLines\")}function l(t,e,i){i=i||this.options;let s=this.getPlotLinePath({value:e,force:!0,acrossPanes:i.acrossPanes}),r=[],a=this.horiz,n=!o(this.min)||!o(this.max)||tthis.max&&e>this.max,l=this.getPlotLinePath({value:t,force:!0,acrossPanes:i.acrossPanes}),h,d=1,c;if(l&&s)for(n&&(c=l.toString()===s.toString(),d=0),h=0;h{v?.on(e,t=>{a[e].apply(this,[t])})}),this.eventsAdded=!0),(A||!v.d)&&S?.length?v.attr({d:S}):v&&(S?(v.show(),v.animate({d:S})):v.d&&(v.hide(),b&&(this.label=b=b.destroy()))),y&&(o(y.text)||o(y.formatter))&&S?.length&&t.width>0&&t.height>0&&!S.isFlat?(y=l({align:i&&k&&\"center\",x:i?!k&&4:10,verticalAlign:!i&&k&&\"middle\",y:i?k?16:10:k?6:-4,rotation:i&&!k&&90},y),this.renderLabel(y,S,k,c)):b&&b.hide(),this}renderLabel(t,e,o,r){let a=this.axis,n=a.chart.renderer,h=this.label;h||(this.label=h=n.text(this.getLabelText(t),0,0,t.useHTML).attr({align:t.textAlign||t.align,rotation:t.rotation,class:\"highcharts-plot-\"+(o?\"band\":\"line\")+\"-label\"+(t.className||\"\"),zIndex:r}),a.chart.styledMode||h.css(l({fontSize:\"0.8em\",textOverflow:\"ellipsis\"},t.style)),h.add());let d=e.xBounds||[e[0][1],e[1][1],o?e[2][1]:e[0][1]],c=e.yBounds||[e[0][2],e[1][2],o?e[2][2]:e[0][2]],p=s(d),u=s(c);if(h.align(t,!1,{x:p,y:u,width:i(d)-p,height:i(c)-u}),!h.alignValue||\"left\"===h.alignValue){let e=t.clip?a.width:a.chart.chartWidth;h.css({width:(90===h.rotation?a.height-(h.alignAttr.y-a.top):e-(h.alignAttr.x-a.left))+\"px\"})}h.show(!0)}getLabelText(t){return o(t.formatter)?t.formatter.call(this):t.text}destroy(){a(this.axis.plotLinesAndBands,this),delete this.axis,r(this)}}return c}),i(e,\"Core/Tooltip.js\",[e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){var r;let{format:a}=t,{composed:n,doc:l,isSafari:h}=e,{distribute:d}=i,{addEvent:c,clamp:p,css:u,discardElement:g,extend:f,fireEvent:m,isArray:x,isNumber:y,isString:b,merge:v,pick:S,pushUnique:M,splat:k,syncTimeout:C}=o;class A{constructor(t,e,i){this.allowShared=!0,this.crosshairs=[],this.distance=0,this.isHidden=!0,this.isSticky=!1,this.now={},this.options={},this.outside=!1,this.chart=t,this.init(t,e),this.pointer=i}bodyFormatter(t){return t.map(function(t){let e=t.series.tooltipOptions;return(e[(t.point.formatPrefix||\"point\")+\"Formatter\"]||t.point.tooltipFormatter).call(t.point,e[(t.point.formatPrefix||\"point\")+\"Format\"]||\"\")})}cleanSplit(t){this.chart.series.forEach(function(e){let i=e&&e.tt;i&&(!i.isActive||t?e.tt=i.destroy():i.isActive=!1)})}defaultFormatter(t){let e;let i=this.points||k(this);return(e=(e=[t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0],!0)),e}destroy(){this.label&&(this.label=this.label.destroy()),this.split&&(this.cleanSplit(!0),this.tt&&(this.tt=this.tt.destroy())),this.renderer&&(this.renderer=this.renderer.destroy(),g(this.container)),o.clearTimeout(this.hideTimer),o.clearTimeout(this.tooltipTimeout)}getAnchor(t,e){let i;let{chart:s,pointer:o}=this,r=s.inverted,a=s.plotTop,n=s.plotLeft;if((t=k(t))[0].series&&t[0].series.yAxis&&!t[0].series.yAxis.options.reversedStacks&&(t=t.slice().reverse()),this.followPointer&&e)void 0===e.chartX&&(e=o.normalize(e)),i=[e.chartX-n,e.chartY-a];else if(t[0].tooltipPos)i=t[0].tooltipPos;else{let s=0,o=0;t.forEach(function(t){let e=t.pos(!0);e&&(s+=e[0],o+=e[1])}),s/=t.length,o/=t.length,this.shared&&t.length>1&&e&&(r?s=e.chartX:o=e.chartY),i=[s-n,o-a]}return i.map(Math.round)}getClassName(t,e,i){let s=this.options,o=t.series,r=o.options;return[s.className,\"highcharts-label\",i&&\"highcharts-tooltip-header\",e?\"highcharts-tooltip-box\":\"highcharts-tooltip\",!i&&\"highcharts-color-\"+S(t.colorIndex,o.colorIndex),r&&r.className].filter(b).join(\" \")}getLabel(){let t=this,i=this.chart.styledMode,o=this.options,r=this.split&&this.allowShared,a=this.container,n=this.chart.renderer;if(this.label){let t=!this.label.hasClass(\"highcharts-label\");(!r&&t||r&&!t)&&this.destroy()}if(!this.label){if(this.outside){let t=this.chart.options.chart.style,i=s.getRendererType();this.container=a=e.doc.createElement(\"div\"),a.className=\"highcharts-tooltip-container\",u(a,{position:\"absolute\",top:\"1px\",pointerEvents:\"none\",zIndex:Math.max(this.options.style.zIndex||0,(t&&t.zIndex||0)+3)}),this.renderer=n=new i(a,0,0,t,void 0,void 0,n.styledMode)}if(r?this.label=n.g(\"tooltip\"):(this.label=n.label(\"\",0,0,o.shape,void 0,void 0,o.useHTML,void 0,\"tooltip\").attr({padding:o.padding,r:o.borderRadius}),i||this.label.attr({fill:o.backgroundColor,\"stroke-width\":o.borderWidth||0}).css(o.style).css({pointerEvents:o.style.pointerEvents||(this.shouldStickOnContact()?\"auto\":\"none\")})),t.outside){let e=this.label,{xSetter:i,ySetter:s}=e;e.xSetter=function(s){i.call(e,t.distance),a&&(a.style.left=s+\"px\")},e.ySetter=function(i){s.call(e,t.distance),a&&(a.style.top=i+\"px\")}}this.label.attr({zIndex:8}).shadow(o.shadow).add()}return a&&!a.parentElement&&e.doc.body.appendChild(a),this.label}getPlayingField(){let{body:t,documentElement:e}=l,{chart:i,distance:s,outside:o}=this;return{width:o?Math.max(t.scrollWidth,e.scrollWidth,t.offsetWidth,e.offsetWidth,e.clientWidth)-2*s:i.chartWidth,height:o?Math.max(t.scrollHeight,e.scrollHeight,t.offsetHeight,e.offsetHeight,e.clientHeight):i.chartHeight}}getPosition(t,e,i){let{distance:s,chart:o,outside:r,pointer:a}=this,{inverted:n,plotLeft:l,plotTop:h,polar:d}=o,{plotX:c=0,plotY:p=0}=i,u={},g=n&&i.h||0,{height:f,width:m}=this.getPlayingField(),x=a.getChartPosition(),y=t=>t*x.scaleX,b=t=>t*x.scaleY,v=i=>{let a=\"x\"===i;return[i,a?m:f,a?t:e].concat(r?[a?y(t):b(e),a?x.left-s+y(c+l):x.top-s+b(p+h),0,a?m:f]:[a?t:e,a?c+l:p+h,a?l:h,a?l+o.plotWidth:h+o.plotHeight])},M=v(\"y\"),k=v(\"x\"),C,A=!!i.negative;!d&&o.hoverSeries?.yAxis?.reversed&&(A=!A);let w=!this.followPointer&&S(i.ttBelow,!d&&!n===A),T=function(t,e,i,o,a,n,l){let h=r?\"y\"===t?b(s):y(s):s,d=(i-o)/2,c=oe?m:m+g)}},P=function(t,e,i,o,r){if(re-s)return!1;re-o/2?u[t]=e-o-2:u[t]=r-i/2},L=function(t){[M,k]=[k,M],C=t},O=()=>{!1!==T.apply(0,M)?!1!==P.apply(0,k)||C||(L(!0),O()):C?u.x=u.y=0:(L(!0),O())};return(n&&!d||this.len>1)&&L(),O(),u}hide(t){let e=this;o.clearTimeout(this.hideTimer),t=S(t,this.options.hideDelay),this.isHidden||(this.hideTimer=C(function(){let i=e.getLabel();e.getLabel().animate({opacity:0},{duration:t?150:t,complete:()=>{i.hide(),e.container&&e.container.remove()}}),e.isHidden=!0},t))}init(t,e){this.chart=t,this.options=e,this.crosshairs=[],this.now={x:0,y:0},this.isHidden=!0,this.split=e.split&&!t.inverted&&!t.polar,this.shared=e.shared||this.split,this.outside=S(e.outside,!!(t.scrollablePixelsX||t.scrollablePixelsY))}shouldStickOnContact(t){return!!(!this.followPointer&&this.options.stickOnContact&&(!t||this.pointer.inClass(t.target,\"highcharts-tooltip\")))}move(t,e,i,s){let r=this,a=r.now,n=!1!==r.options.animation&&!r.isHidden&&(Math.abs(t-a.x)>1||Math.abs(e-a.y)>1),l=r.followPointer||r.len>1;f(a,{x:n?(2*a.x+t)/3:t,y:n?(a.y+e)/2:e,anchorX:l?void 0:n?(2*a.anchorX+i)/3:i,anchorY:l?void 0:n?(a.anchorY+s)/2:s}),r.getLabel().attr(a),r.drawTracker(),n&&(o.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){r&&r.move(t,e,i,s)},32))}refresh(t,e){let{chart:i,options:s,pointer:r,shared:n}=this,l=k(t),h=l[0],d=[],c=s.format,p=s.formatter||this.defaultFormatter,u=i.styledMode,g={};if(!s.enabled||!h.series)return;o.clearTimeout(this.hideTimer),this.allowShared=!(!x(t)&&t.series&&t.series.noSharedTooltip),this.followPointer=!this.split&&h.series.tooltipOptions.followPointer;let f=this.getAnchor(t,e),y=f[0],v=f[1];n&&this.allowShared?(r.applyInactiveState(l),l.forEach(function(t){t.setState(\"hover\"),d.push(t.getLabelConfig())}),(g=h.getLabelConfig()).points=d):g=h.getLabelConfig(),this.len=d.length;let M=b(c)?a(c,g,i):p.call(g,this),C=h.series;if(this.distance=S(C.tooltipOptions.distance,16),!1===M)this.hide();else{if(this.split&&this.allowShared)this.renderSplit(M,l);else{let t=y,o=v;if(e&&r.isDirectTouch&&(t=e.chartX-i.plotLeft,o=e.chartY-i.plotTop),i.polar||!1===C.options.clip||l.some(e=>r.isDirectTouch||e.series.shouldShowTooltip(t,o))){let t=this.getLabel();(!s.style.width||u)&&t.css({width:(this.outside?this.getPlayingField():i.spacingBox).width+\"px\"}),t.attr({text:M&&M.join?M.join(\"\"):M}),t.addClass(this.getClassName(h),!0),u||t.attr({stroke:s.borderColor||h.color||C.color||\"#666666\"}),this.updatePosition({plotX:y,plotY:v,negative:h.negative,ttBelow:h.ttBelow,h:f[2]||0})}else{this.hide();return}}this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1}m(this,\"refresh\")}renderSplit(t,e){let i=this,{chart:s,chart:{chartWidth:o,chartHeight:r,plotHeight:a,plotLeft:n,plotTop:c,scrollablePixelsY:u=0,scrollablePixelsX:g,styledMode:m},distance:x,options:y,options:{positioner:v},pointer:M}=i,{scrollLeft:k=0,scrollTop:C=0}=s.scrollablePlotArea?.scrollingContainer||{},A=i.outside&&\"number\"!=typeof g?l.documentElement.getBoundingClientRect():{left:k,right:k+o,top:C,bottom:C+r},w=i.getLabel(),T=this.renderer||s.renderer,P=!!(s.xAxis[0]&&s.xAxis[0].opposite),{left:L,top:O}=M.getChartPosition(),D=c+C,E=0,B=a-u;function j(t,e,s,o,r=!0){let a,n;return s?(a=P?0:B,n=p(t-o/2,A.left,A.right-o-(i.outside?L:0))):(a=e-D,n=p(n=r?t-o-x:t+x,r?n:A.left,A.right)),{x:n,y:a}}b(t)&&(t=[!1,t]);let I=t.slice(0,e.length+1).reduce(function(t,s,o){if(!1!==s&&\"\"!==s){let r=e[o-1]||{isHeader:!0,plotX:e[0].plotX,plotY:a,series:{}},l=r.isHeader,h=l?i:r.series,d=h.tt=function(t,e,s){let o=t,{isHeader:r,series:a}=e;if(!o){let t={padding:y.padding,r:y.borderRadius};m||(t.fill=y.backgroundColor,t[\"stroke-width\"]=y.borderWidth??1),o=T.label(\"\",0,0,y[r?\"headerShape\":\"shape\"],void 0,void 0,y.useHTML).addClass(i.getClassName(e,!0,r)).attr(t).add(w)}return o.isActive=!0,o.attr({text:s}),m||o.css(y.style).attr({stroke:y.borderColor||e.color||a.color||\"#333333\"}),o}(h.tt,r,s.toString()),u=d.getBBox(),g=u.width+d.strokeWidth();l&&(E=u.height,B+=E,P&&(D-=E));let{anchorX:f,anchorY:b}=function(t){let e,i;let{isHeader:s,plotX:o=0,plotY:r=0,series:l}=t;if(s)e=Math.max(n+o,n),i=c+a/2;else{let{xAxis:t,yAxis:s}=l;e=t.pos+p(o,-x,t.len+x),l.shouldShowTooltip(0,s.pos-c+r,{ignoreX:!0})&&(i=s.pos+r)}return{anchorX:e=p(e,A.left-x,A.right+x),anchorY:i}}(r);if(\"number\"==typeof b){let e=u.height+1,s=v?v.call(i,g,e,r):j(f,b,l,g);t.push({align:v?0:void 0,anchorX:f,anchorY:b,boxWidth:g,point:r,rank:S(s.rank,l?1:0),size:e,target:s.y,tt:d,x:s.x})}else d.isActive=!1}return t},[]);!v&&I.some(t=>{let{outside:e}=i,s=(e?L:0)+t.anchorX;return ss})&&(I=I.map(t=>{let{x:e,y:i}=j(t.anchorX,t.anchorY,t.point.isHeader,t.boxWidth,!1);return f(t,{target:i,x:e})})),i.cleanSplit(),d(I,B);let R={left:L,right:L};I.forEach(function(t){let{x:e,boxWidth:s,isHeader:o}=t;!o&&(i.outside&&L+eR.right&&(R.right=L+e))}),I.forEach(function(t){let{x:e,anchorX:s,anchorY:o,pos:r,point:{isHeader:a}}=t,n={visibility:void 0===r?\"hidden\":\"inherit\",x:e,y:(r||0)+D,anchorX:s,anchorY:o};if(i.outside&&e0&&(a||(n.x=e+t,n.anchorX=s+t),a&&(n.x=(R.right-R.left)/2,n.anchorX=s+t))}t.tt.attr(n)});let{container:z,outside:G,renderer:N}=i;if(G&&z&&N){let{width:t,height:e,x:i,y:s}=w.getBBox();N.setSize(t+i,e+s,!1),z.style.left=R.left+\"px\",z.style.top=O+\"px\"}h&&w.attr({opacity:1===w.opacity?.999:1})}drawTracker(){if(!this.shouldStickOnContact()){this.tracker&&(this.tracker=this.tracker.destroy());return}let t=this.chart,e=this.label,i=this.shared?t.hoverPoints:t.hoverPoint;if(!e||!i)return;let s={x:0,y:0,width:0,height:0},o=this.getAnchor(i),r=e.getBBox();o[0]+=t.plotLeft-(e.translateX||0),o[1]+=t.plotTop-(e.translateY||0),s.x=Math.min(0,o[0]),s.y=Math.min(0,o[1]),s.width=o[0]<0?Math.max(Math.abs(o[0]),r.width-o[0]):Math.max(Math.abs(o[0]),r.width),s.height=o[1]<0?Math.max(Math.abs(o[1]),r.height-Math.abs(o[1])):Math.max(Math.abs(o[1]),r.height),this.tracker?this.tracker.attr(s):(this.tracker=e.renderer.rect(s).addClass(\"highcharts-tracker\").add(e),t.styledMode||this.tracker.attr({fill:\"rgba(0,0,0,0)\"}))}styledModeFormat(t){return t.replace('style=\"font-size: 0.8em\"','class=\"highcharts-header\"').replace(/style=\"color:{(point|series)\\.color}\"/g,'class=\"highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}\"')}tooltipFooterHeaderFormatter(t,e){let i=t.series,s=i.tooltipOptions,o=i.xAxis,r=o&&o.dateTime,n={isFooter:e,labelConfig:t},l=s.xDateFormat,h=s[e?\"footerFormat\":\"headerFormat\"];return m(this,\"headerFormatter\",n,function(e){r&&!l&&y(t.key)&&(l=r.getXDateFormat(t.key,s.dateTimeLabelFormats)),r&&l&&(t.point&&t.point.tooltipDateKeys||[\"key\"]).forEach(function(t){h=h.replace(\"{point.\"+t+\"}\",\"{point.\"+t+\":\"+l+\"}\")}),i.chart.styledMode&&(h=this.styledModeFormat(h)),e.text=a(h,{point:t,series:i},this.chart)}),n.text}update(t){this.destroy(),this.init(this.chart,v(!0,this.options,t))}updatePosition(t){let{chart:e,container:i,distance:s,options:o,pointer:r,renderer:a}=this,{height:n=0,width:l=0}=this.getLabel(),{left:h,top:d,scaleX:c,scaleY:p}=r.getChartPosition(),g=(o.positioner||this.getPosition).call(this,l,n,t),f=(t.plotX||0)+e.plotLeft,m=(t.plotY||0)+e.plotTop,x;a&&i&&(o.positioner&&(g.x+=h-s,g.y+=d-s),x=(o.borderWidth||0)+2*s+2,a.setSize(l+x,n+x,!1),(1!==c||1!==p)&&(u(i,{transform:`scale(${c}, ${p})`}),f*=c,m*=p),f+=h-g.x,m+=d-g.y),this.move(Math.round(g.x),Math.round(g.y||0),f,m)}}return(r=A||(A={})).compose=function(t){M(n,\"Core.Tooltip\")&&c(t,\"afterInit\",function(){let t=this.chart;t.options.tooltip&&(t.tooltip=new r(t,t.options.tooltip,this))})},A}),i(e,\"Core/Series/Point.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{animObject:r}=e,{defaultOptions:a}=i,{format:n}=s,{addEvent:l,erase:h,extend:d,fireEvent:c,getNestedProperty:p,isArray:u,isFunction:g,isNumber:f,isObject:m,pick:x,syncTimeout:y,removeEvent:b,uniqueKey:v}=o;class S{animateBeforeDestroy(){let t=this,e={x:t.startXPos,opacity:0},i=t.getGraphicalProps();i.singular.forEach(function(i){t[i]=t[i].animate(\"dataLabel\"===i?{x:t[i].startXPos,y:t[i].startYPos,opacity:0}:e)}),i.plural.forEach(function(e){t[e].forEach(function(e){e.element&&e.animate(d({x:t.startXPos},e.startYPos?{x:e.startXPos,y:e.startYPos}:{}))})})}applyOptions(t,e){let i=this.series,s=i.options.pointValKey||i.pointValKey;return d(this,t=S.prototype.optionsToObject.call(this,t)),this.options=this.options?d(this.options,t):t,t.group&&delete this.group,t.dataLabels&&delete this.dataLabels,s&&(this.y=S.prototype.getNestedProperty.call(this,s)),this.selected&&(this.state=\"select\"),\"name\"in this&&void 0===e&&i.xAxis&&i.xAxis.hasNames&&(this.x=i.xAxis.nameToX(this)),void 0===this.x&&i?void 0===e?this.x=i.autoIncrement():this.x=e:f(t.x)&&i.options.relativeXValue&&(this.x=i.autoIncrement(t.x)),this.isNull=this.isValid&&!this.isValid(),this.formatPrefix=this.isNull?\"null\":\"point\",this}destroy(){if(!this.destroyed){let t=this,e=t.series,i=e.chart,s=e.options.dataSorting,o=i.hoverPoints,a=r(t.series.chart.renderer.globalAnimation),n=()=>{for(let e in(t.graphic||t.graphics||t.dataLabel||t.dataLabels)&&(b(t),t.destroyElements()),t)delete t[e]};t.legendItem&&i.legend.destroyItem(t),o&&(t.setState(),h(o,t),o.length||(i.hoverPoints=null)),t===i.hoverPoint&&t.onMouseOut(),s&&s.enabled?(this.animateBeforeDestroy(),y(n,a.duration)):n(),i.pointCount--}this.destroyed=!0}destroyElements(t){let e=this,i=e.getGraphicalProps(t);i.singular.forEach(function(t){e[t]=e[t].destroy()}),i.plural.forEach(function(t){e[t].forEach(function(t){t&&t.element&&t.destroy()}),delete e[t]})}firePointEvent(t,e,i){let s=this,o=this.series.options;s.manageEvent(t),\"click\"===t&&o.allowPointSelect&&(i=function(t){!s.destroyed&&s.select&&s.select(null,t.ctrlKey||t.metaKey||t.shiftKey)}),c(s,t,e,i)}getClassName(){return\"highcharts-point\"+(this.selected?\" highcharts-point-select\":\"\")+(this.negative?\" highcharts-negative\":\"\")+(this.isNull?\" highcharts-null-point\":\"\")+(void 0!==this.colorIndex?\" highcharts-color-\"+this.colorIndex:\"\")+(this.options.className?\" \"+this.options.className:\"\")+(this.zone&&this.zone.className?\" \"+this.zone.className.replace(\"highcharts-negative\",\"\"):\"\")}getGraphicalProps(t){let e,i;let s=this,o=[],r={singular:[],plural:[]};for((t=t||{graphic:1,dataLabel:1}).graphic&&o.push(\"graphic\",\"connector\"),t.dataLabel&&o.push(\"dataLabel\",\"dataLabelPath\",\"dataLabelUpper\"),i=o.length;i--;)s[e=o[i]]&&r.singular.push(e);return[\"graphic\",\"dataLabel\"].forEach(function(e){let i=e+\"s\";t[e]&&s[i]&&r.plural.push(i)}),r}getLabelConfig(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}}getNestedProperty(t){return t?0===t.indexOf(\"custom.\")?p(t,this.options):this[t]:void 0}getZone(){let t=this.series,e=t.zones,i=t.zoneAxis||\"y\",s,o=0;for(s=e[0];this[i]>=s.value;)s=e[++o];return this.nonZonedColor||(this.nonZonedColor=this.color),s&&s.color&&!this.options.color?this.color=s.color:this.color=this.nonZonedColor,s}hasNewShapeType(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType}constructor(t,e,i){this.formatPrefix=\"point\",this.visible=!0,this.series=t,this.applyOptions(e,i),this.id??(this.id=v()),this.resolveColor(),t.chart.pointCount++,c(this,\"afterInit\")}isValid(){return(f(this.x)||this.x instanceof Date)&&f(this.y)}optionsToObject(t){let e=this.series,i=e.options.keys,s=i||e.pointArrayMap||[\"y\"],o=s.length,r={},a,n=0,l=0;if(f(t)||null===t)r[s[0]]=t;else if(u(t))for(!i&&t.length>o&&(\"string\"==(a=typeof t[0])?r.name=t[0]:\"number\"===a&&(r.x=t[0]),n++);l0?S.prototype.setNestedProperty(r,t[n],s[l]):r[s[l]]=t[n]),n++,l++;else\"object\"==typeof t&&(r=t,t.dataLabels&&(e.hasDataLabels=()=>!0),t.marker&&(e._hasPointMarkers=!0));return r}pos(t,e=this.plotY){if(!this.destroyed){let{plotX:i,series:s}=this,{chart:o,xAxis:r,yAxis:a}=s,n=0,l=0;if(f(i)&&f(e))return t&&(n=r?r.pos:o.plotLeft,l=a?a.pos:o.plotTop),o.inverted&&r&&a?[a.len-e+l,r.len-i+n]:[i+n,e+l]}}resolveColor(){let t=this.series,e=t.chart.options.chart,i=t.chart.styledMode,s,o,r=e.colorCount,a;delete this.nonZonedColor,t.options.colorByPoint?(i||(s=(o=t.options.colors||t.chart.options.colors)[t.colorCounter],r=o.length),a=t.colorCounter,t.colorCounter++,t.colorCounter===r&&(t.colorCounter=0)):(i||(s=t.color),a=t.colorIndex),this.colorIndex=x(this.options.colorIndex,a),this.color=x(this.options.color,s)}setNestedProperty(t,e,i){return i.split(\".\").reduce(function(t,i,s,o){let r=o.length-1===s;return t[i]=r?e:m(t[i],!0)?t[i]:{},t[i]},t),t}shouldDraw(){return!this.isNull}tooltipFormatter(t){let e=this.series,i=e.tooltipOptions,s=x(i.valueDecimals,\"\"),o=i.valuePrefix||\"\",r=i.valueSuffix||\"\";return e.chart.styledMode&&(t=e.chart.tooltip.styledModeFormat(t)),(e.pointArrayMap||[\"y\"]).forEach(function(e){e=\"{point.\"+e,(o||r)&&(t=t.replace(RegExp(e+\"}\",\"g\"),o+e+\"}\"+r)),t=t.replace(RegExp(e+\"}\",\"g\"),e+\":,.\"+s+\"f}\")}),n(t,{point:this,series:this.series},e.chart)}update(t,e,i,s){let o;let r=this,a=r.series,n=r.graphic,l=a.chart,h=a.options;function d(){r.applyOptions(t);let s=n&&r.hasMockGraphic,d=null===r.y?!s:s;n&&d&&(r.graphic=n.destroy(),delete r.hasMockGraphic),m(t,!0)&&(n&&n.element&&t&&t.marker&&void 0!==t.marker.symbol&&(r.graphic=n.destroy()),t?.dataLabels&&r.dataLabel&&(r.dataLabel=r.dataLabel.destroy())),o=r.index,a.updateParallelArrays(r,o),h.data[o]=m(h.data[o],!0)||m(t,!0)?r.options:x(t,h.data[o]),a.isDirty=a.isDirtyData=!0,!a.fixedBox&&a.hasCartesianSeries&&(l.isDirtyBox=!0),\"point\"===h.legendType&&(l.isDirtyLegend=!0),e&&l.redraw(i)}e=x(e,!0),!1===s?d():r.firePointEvent(\"update\",{options:t},d)}remove(t,e){this.series.removePoint(this.series.data.indexOf(this),t,e)}select(t,e){let i=this,s=i.series,o=s.chart;t=x(t,!i.selected),this.selectedStaging=t,i.firePointEvent(t?\"select\":\"unselect\",{accumulate:e},function(){i.selected=i.options.selected=t,s.options.data[s.data.indexOf(i)]=i.options,i.setState(t&&\"select\"),e||o.getSelectedPoints().forEach(function(t){let e=t.series;t.selected&&t!==i&&(t.selected=t.options.selected=!1,e.options.data[e.data.indexOf(t)]=t.options,t.setState(o.hoverPoints&&e.options.inactiveOtherPoints?\"inactive\":\"\"),t.firePointEvent(\"unselect\"))})}),delete this.selectedStaging}onMouseOver(t){let{inverted:e,pointer:i}=this.series.chart;i&&(t=t?i.normalize(t):i.getChartCoordinatesFromPoint(this,e),i.runPointActions(t,this))}onMouseOut(){let t=this.series.chart;this.firePointEvent(\"mouseOut\"),this.series.options.inactiveOtherPoints||(t.hoverPoints||[]).forEach(function(t){t.setState()}),t.hoverPoints=t.hoverPoint=null}manageEvent(t){let e=this.series.options.point||{},i=e.events?.[t];g(i)&&(!this.hcEvents?.[t]||this.hcEvents?.[t]?.map(t=>t.fn).indexOf(i)===-1)?(l(this,t,i),this.hasImportedEvents=!0):this.hasImportedEvents&&!i&&this.hcEvents?.[t]&&(b(this,t),delete this.hcEvents[t],Object.keys(this.hcEvents)||(this.hasImportedEvents=!1))}setState(e,i){let s=this.series,o=this.state,r=s.options.states[e||\"normal\"]||{},n=a.plotOptions[s.type].marker&&s.options.marker,l=n&&!1===n.enabled,h=n&&n.states&&n.states[e||\"normal\"]||{},p=!1===h.enabled,u=this.marker||{},g=s.chart,m=n&&s.markerAttribs,y=s.halo,b,v,S,M=s.stateMarkerGraphic,k;if((e=e||\"\")===this.state&&!i||this.selected&&\"select\"!==e||!1===r.enabled||e&&(p||l&&!1===h.enabled)||e&&u.states&&u.states[e]&&!1===u.states[e].enabled)return;if(this.state=e,m&&(b=s.markerAttribs(this,e)),this.graphic&&!this.hasMockGraphic){if(o&&this.graphic.removeClass(\"highcharts-point-\"+o),e&&this.graphic.addClass(\"highcharts-point-\"+e),!g.styledMode){v=s.pointAttribs(this,e),S=x(g.options.chart.animation,r.animation);let t=v.opacity;s.options.inactiveOtherPoints&&f(t)&&(this.dataLabels||[]).forEach(function(e){e&&!e.hasClass(\"highcharts-data-label-hidden\")&&(e.animate({opacity:t},S),e.connector&&e.connector.animate({opacity:t},S))}),this.graphic.animate(v,S)}b&&this.graphic.animate(b,x(g.options.chart.animation,h.animation,n.animation)),M&&M.hide()}else e&&h&&(k=u.symbol||s.symbol,M&&M.currentSymbol!==k&&(M=M.destroy()),b&&(M?M[i?\"animate\":\"attr\"]({x:b.x,y:b.y}):k&&(s.stateMarkerGraphic=M=g.renderer.symbol(k,b.x,b.y,b.width,b.height).add(s.markerGroup),M.currentSymbol=k)),!g.styledMode&&M&&\"inactive\"!==this.state&&M.attr(s.pointAttribs(this,e))),M&&(M[e&&this.isInside?\"show\":\"hide\"](),M.element.point=this,M.addClass(this.getClassName(),!0));let C=r.halo,A=this.graphic||M,w=A&&A.visibility||\"inherit\";C&&C.size&&A&&\"hidden\"!==w&&!this.isCluster?(y||(s.halo=y=g.renderer.path().add(A.parentGroup)),y.show()[i?\"animate\":\"attr\"]({d:this.haloPath(C.size)}),y.attr({class:\"highcharts-halo highcharts-color-\"+x(this.colorIndex,s.colorIndex)+(this.className?\" \"+this.className:\"\"),visibility:w,zIndex:-1}),y.point=this,g.styledMode||y.attr(d({fill:this.color||s.color,\"fill-opacity\":C.opacity},t.filterUserAttributes(C.attributes||{})))):y&&y.point&&y.point.haloPath&&y.animate({d:y.point.haloPath(0)},null,y.hide),c(this,\"afterSetState\",{state:e})}haloPath(t){let e=this.pos();return e?this.series.chart.renderer.symbols.circle(Math.floor(e[0])-t,e[1]-t,2*t,2*t):[]}}return S}),i(e,\"Core/Pointer.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s;let{parse:o}=t,{charts:r,composed:a}=e,{addEvent:n,attr:l,css:h,extend:d,find:c,fireEvent:p,isNumber:u,isObject:g,objectEach:f,offset:m,pick:x,pushUnique:y,splat:b}=i;class v{applyInactiveState(t){let e=[],i;(t||[]).forEach(function(t){i=t.series,e.push(i),i.linkedParent&&e.push(i.linkedParent),i.linkedSeries&&(e=e.concat(i.linkedSeries)),i.navigatorSeries&&e.push(i.navigatorSeries)}),this.chart.series.forEach(function(t){-1===e.indexOf(t)?t.setState(\"inactive\",!0):t.options.inactiveOtherPoints&&t.setAllPointsToState(\"inactive\")})}destroy(){let t=this;this.eventsToUnbind.forEach(t=>t()),this.eventsToUnbind=[],!e.chartCount&&(v.unbindDocumentMouseUp&&(v.unbindDocumentMouseUp=v.unbindDocumentMouseUp()),v.unbindDocumentTouchEnd&&(v.unbindDocumentTouchEnd=v.unbindDocumentTouchEnd())),clearInterval(t.tooltipTimeout),f(t,function(e,i){t[i]=void 0})}getSelectionMarkerAttrs(t,e){let i={args:{chartX:t,chartY:e},attrs:{},shapeType:\"rect\"};return p(this,\"getSelectionMarkerAttrs\",i,i=>{let s;let{chart:o,zoomHor:r,zoomVert:a}=this,{mouseDownX:n=0,mouseDownY:l=0}=o,h=i.attrs;h.x=o.plotLeft,h.y=o.plotTop,h.width=r?1:o.plotWidth,h.height=a?1:o.plotHeight,r&&(s=t-n,h.width=Math.max(1,Math.abs(s)),h.x=(s>0?0:s)+n),a&&(s=e-l,h.height=Math.max(1,Math.abs(s)),h.y=(s>0?0:s)+l)}),i}drag(t){let{chart:e}=this,{mouseDownX:i=0,mouseDownY:s=0}=e,{panning:r,panKey:a,selectionMarkerFill:n}=e.options.chart,l=e.plotLeft,h=e.plotTop,d=e.plotWidth,c=e.plotHeight,p=g(r)?r.enabled:r,u=a&&t[`${a}Key`],f=t.chartX,m=t.chartY,x,y=this.selectionMarker;if((!y||!y.touch)&&(fl+d&&(f=l+d),mh+c&&(m=h+c),this.hasDragged=Math.sqrt(Math.pow(i-f,2)+Math.pow(s-m,2)),this.hasDragged>10)){x=e.isInsidePlot(i-l,s-h,{visiblePlotOnly:!0});let{shapeType:a,attrs:d}=this.getSelectionMarkerAttrs(f,m);(e.hasCartesianSeries||e.mapView)&&this.hasZoom&&x&&!u&&!y&&(this.selectionMarker=y=e.renderer[a](),y.attr({class:\"highcharts-selection-marker\",zIndex:7}).add(),e.styledMode||y.attr({fill:n||o(\"#334eff\").setOpacity(.25).get()})),y&&y.attr(d),x&&!y&&p&&e.pan(t,r)}}dragStart(t){let e=this.chart;e.mouseIsDown=t.type,e.cancelClick=!1,e.mouseDownX=t.chartX,e.mouseDownY=t.chartY}getSelectionBox(t){let e={args:{marker:t},result:t.getBBox()};return p(this,\"getSelectionBox\",e),e.result}drop(t){let e;let{chart:i,selectionMarker:s}=this;for(let t of i.axes)t.isPanning&&(t.isPanning=!1,(t.options.startOnTick||t.options.endOnTick||t.series.some(t=>t.boosted))&&(t.forceRedraw=!0,t.setExtremes(t.userMin,t.userMax,!1),e=!0));if(e&&i.redraw(),s&&t){if(this.hasDragged){let e=this.getSelectionBox(s);i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(\"xAxis\"===t.coll&&this.zoomX||\"yAxis\"===t.coll&&this.zoomY)),selection:{originalEvent:t,xAxis:[],yAxis:[],...e},from:e})}u(i.index)&&(this.selectionMarker=s.destroy())}i&&u(i.index)&&(h(i.container,{cursor:i._cursor}),i.cancelClick=this.hasDragged>10,i.mouseIsDown=!1,this.hasDragged=0,this.pinchDown=[])}findNearestKDPoint(t,e,i){let s;return t.forEach(function(t){let o=!(t.noSharedTooltip&&e)&&0>t.options.findNearestPointBy.indexOf(\"y\"),r=t.searchPoint(i,o);g(r,!0)&&r.series&&(!g(s,!0)||function(t,i){let s=t.distX-i.distX,o=t.dist-i.dist,r=i.series.group?.zIndex-t.series.group?.zIndex;return 0!==s&&e?s:0!==o?o:0!==r?r:t.series.index>i.series.index?-1:1}(s,r)>0)&&(s=r)}),s}getChartCoordinatesFromPoint(t,e){let{xAxis:i,yAxis:s}=t.series,o=t.shapeArgs;if(i&&s){let r=t.clientX??t.plotX??0,a=t.plotY||0;return t.isNode&&o&&u(o.x)&&u(o.y)&&(r=o.x,a=o.y),e?{chartX:s.len+s.pos-a,chartY:i.len+i.pos-r}:{chartX:r+i.pos,chartY:a+s.pos}}if(o&&o.x&&o.y)return{chartX:o.x,chartY:o.y}}getChartPosition(){if(this.chartPosition)return this.chartPosition;let{container:t}=this.chart,e=m(t);this.chartPosition={left:e.left,top:e.top,scaleX:1,scaleY:1};let{offsetHeight:i,offsetWidth:s}=t;return s>2&&i>2&&(this.chartPosition.scaleX=e.width/s,this.chartPosition.scaleY=e.height/i),this.chartPosition}getCoordinates(t){let e={xAxis:[],yAxis:[]};for(let i of this.chart.axes)e[i.isXAxis?\"xAxis\":\"yAxis\"].push({axis:i,value:i.toValue(t[i.horiz?\"chartX\":\"chartY\"])});return e}getHoverData(t,e,i,s,o,r){let a=[],n=function(t){return t.visible&&!(!o&&t.directTouch)&&x(t.options.enableMouseTracking,!0)},l=e,h,d={chartX:r?r.chartX:void 0,chartY:r?r.chartY:void 0,shared:o};p(this,\"beforeGetHoverData\",d),h=l&&!l.stickyTracking?[l]:i.filter(t=>t.stickyTracking&&(d.filter||n)(t));let u=s&&t||!r?t:this.findNearestKDPoint(h,o,r);return l=u&&u.series,u&&(o&&!l.noSharedTooltip?(h=i.filter(function(t){return d.filter?d.filter(t):n(t)&&!t.noSharedTooltip})).forEach(function(t){let e=c(t.points,function(t){return t.x===u.x&&!t.isNull});g(e)&&(t.boosted&&t.boost&&(e=t.boost.getPoint(e)),a.push(e))}):a.push(u)),p(this,\"afterGetHoverData\",d={hoverPoint:u}),{hoverPoint:d.hoverPoint,hoverSeries:l,hoverPoints:a}}getPointFromEvent(t){let e=t.target,i;for(;e&&!i;)i=e.point,e=e.parentNode;return i}onTrackerMouseOut(t){let e=this.chart,i=t.relatedTarget,s=e.hoverSeries;this.isDirectTouch=!1,!s||!i||s.stickyTracking||this.inClass(i,\"highcharts-tooltip\")||this.inClass(i,\"highcharts-series-\"+s.index)&&this.inClass(i,\"highcharts-tracker\")||s.onMouseOut()}inClass(t,e){let i=t,s;for(;i;){if(s=l(i,\"class\")){if(-1!==s.indexOf(e))return!0;if(-1!==s.indexOf(\"highcharts-container\"))return!1}i=i.parentElement}}constructor(t,e){this.hasDragged=0,this.eventsToUnbind=[],this.options=e,this.chart=t,this.runChartClick=!!e.chart.events?.click,this.pinchDown=[],this.setDOMEvents(),p(this,\"afterInit\")}normalize(t,e){let i=t.touches,s=i?i.length?i.item(0):x(i.changedTouches,t.changedTouches)[0]:t;e||(e=this.getChartPosition());let o=s.pageX-e.left,r=s.pageY-e.top;return d(t,{chartX:Math.round(o/=e.scaleX),chartY:Math.round(r/=e.scaleY)})}onContainerClick(t){let e=this.chart,i=e.hoverPoint,s=this.normalize(t),o=e.plotLeft,r=e.plotTop;!e.cancelClick&&(i&&this.inClass(s.target,\"highcharts-tracker\")?(p(i.series,\"click\",d(s,{point:i})),e.hoverPoint&&i.firePointEvent(\"click\",s)):(d(s,this.getCoordinates(s)),e.isInsidePlot(s.chartX-o,s.chartY-r,{visiblePlotOnly:!0})&&p(e,\"click\",s)))}onContainerMouseDown(t){let i=(1&(t.buttons||t.button))==1;t=this.normalize(t),e.isFirefox&&0!==t.button&&this.onContainerMouseMove(t),(void 0===t.button||i)&&(this.zoomOption(t),i&&t.preventDefault?.(),this.dragStart(t))}onContainerMouseLeave(t){let{pointer:e}=r[x(v.hoverChartIndex,-1)]||{};t=this.normalize(t),this.onContainerMouseMove(t),e&&t.relatedTarget&&!this.inClass(t.relatedTarget,\"highcharts-tooltip\")&&(e.reset(),e.chartPosition=void 0)}onContainerMouseEnter(){delete this.chartPosition}onContainerMouseMove(t){let e=this.chart,i=e.tooltip,s=this.normalize(t);this.setHoverChartIndex(t),(\"mousedown\"===e.mouseIsDown||this.touchSelect(s))&&this.drag(s),!e.openMenu&&(this.inClass(s.target,\"highcharts-tracker\")||e.isInsidePlot(s.chartX-e.plotLeft,s.chartY-e.plotTop,{visiblePlotOnly:!0}))&&!(i&&i.shouldStickOnContact(s))&&(this.inClass(s.target,\"highcharts-no-tooltip\")?this.reset(!1,0):this.runPointActions(s))}onDocumentTouchEnd(t){this.onDocumentMouseUp(t)}onContainerTouchMove(t){this.touchSelect(t)?this.onContainerMouseMove(t):this.touch(t)}onContainerTouchStart(t){this.touchSelect(t)?this.onContainerMouseDown(t):(this.zoomOption(t),this.touch(t,!0))}onDocumentMouseMove(t){let e=this.chart,i=e.tooltip,s=this.chartPosition,o=this.normalize(t,s);!s||e.isInsidePlot(o.chartX-e.plotLeft,o.chartY-e.plotTop,{visiblePlotOnly:!0})||i&&i.shouldStickOnContact(o)||this.inClass(o.target,\"highcharts-tracker\")||this.reset()}onDocumentMouseUp(t){r[x(v.hoverChartIndex,-1)]?.pointer?.drop(t)}pinch(t){let e=this,{chart:i,hasZoom:s,lastTouches:o}=e,r=[].map.call(t.touches||[],t=>e.normalize(t)),a=r.length,n=1===a&&(e.inClass(t.target,\"highcharts-tracker\")&&i.runTrackerClick||e.runChartClick),l=i.tooltip,h=1===a&&x(l?.options.followTouchMove,!0);a>1?e.initiated=!0:h&&(e.initiated=!1),s&&e.initiated&&!n&&!1!==t.cancelable&&t.preventDefault(),\"touchstart\"===t.type?(e.pinchDown=r,e.res=!0):h?this.runPointActions(e.normalize(t)):o&&(p(i,\"touchpan\",{originalEvent:t,touches:r},()=>{let e=t=>{let e=t[0],i=t[1]||e;return{x:e.chartX,y:e.chartY,width:i.chartX-e.chartX,height:i.chartY-e.chartY}};i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(this.zoomHor&&t.horiz||this.zoomVert&&!t.horiz)),to:e(r),from:e(o),trigger:t.type})}),e.res&&(e.res=!1,this.reset(!1,0))),e.lastTouches=r}reset(t,e){let i=this.chart,s=i.hoverSeries,o=i.hoverPoint,r=i.hoverPoints,a=i.tooltip,n=a&&a.shared?r:o;t&&n&&b(n).forEach(function(e){e.series.isCartesian&&void 0===e.plotX&&(t=!1)}),t?a&&n&&b(n).length&&(a.refresh(n),a.shared&&r?r.forEach(function(t){t.setState(t.state,!0),t.series.isCartesian&&(t.series.xAxis.crosshair&&t.series.xAxis.drawCrosshair(null,t),t.series.yAxis.crosshair&&t.series.yAxis.drawCrosshair(null,t))}):o&&(o.setState(o.state,!0),i.axes.forEach(function(t){t.crosshair&&o.series[t.coll]===t&&t.drawCrosshair(null,o)}))):(o&&o.onMouseOut(),r&&r.forEach(function(t){t.setState()}),s&&s.onMouseOut(),a&&a.hide(e),this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove()),i.axes.forEach(function(t){t.hideCrosshair()}),i.hoverPoints=i.hoverPoint=void 0)}runPointActions(t,e,i){let s=this.chart,o=s.series,a=s.tooltip&&s.tooltip.options.enabled?s.tooltip:void 0,l=!!a&&a.shared,h=e||s.hoverPoint,d=h&&h.series||s.hoverSeries,p=(!t||\"touchmove\"!==t.type)&&(!!e||d&&d.directTouch&&this.isDirectTouch),u=this.getHoverData(h,d,o,p,l,t);h=u.hoverPoint,d=u.hoverSeries;let g=u.hoverPoints,f=d&&d.tooltipOptions.followPointer&&!d.tooltipOptions.split,m=l&&d&&!d.noSharedTooltip;if(h&&(i||h!==s.hoverPoint||a&&a.isHidden)){if((s.hoverPoints||[]).forEach(function(t){-1===g.indexOf(t)&&t.setState()}),s.hoverSeries!==d&&d.onMouseOver(),this.applyInactiveState(g),(g||[]).forEach(function(t){t.setState(\"hover\")}),s.hoverPoint&&s.hoverPoint.firePointEvent(\"mouseOut\"),!h.series)return;s.hoverPoints=g,s.hoverPoint=h,h.firePointEvent(\"mouseOver\",void 0,()=>{a&&h&&a.refresh(m?g:h,t)})}else if(f&&a&&!a.isHidden){let e=a.getAnchor([{}],t);s.isInsidePlot(e[0],e[1],{visiblePlotOnly:!0})&&a.updatePosition({plotX:e[0],plotY:e[1]})}this.unDocMouseMove||(this.unDocMouseMove=n(s.container.ownerDocument,\"mousemove\",t=>r[v.hoverChartIndex??-1]?.pointer?.onDocumentMouseMove(t)),this.eventsToUnbind.push(this.unDocMouseMove)),s.axes.forEach(function(e){let i;let o=x((e.crosshair||{}).snap,!0);!o||(i=s.hoverPoint)&&i.series[e.coll]===e||(i=c(g,t=>t.series&&t.series[e.coll]===e)),i||!o?e.drawCrosshair(t,i):e.hideCrosshair()})}setDOMEvents(){let t=this.chart.container,e=t.ownerDocument;t.onmousedown=this.onContainerMouseDown.bind(this),t.onmousemove=this.onContainerMouseMove.bind(this),t.onclick=this.onContainerClick.bind(this),this.eventsToUnbind.push(n(t,\"mouseenter\",this.onContainerMouseEnter.bind(this)),n(t,\"mouseleave\",this.onContainerMouseLeave.bind(this))),v.unbindDocumentMouseUp||(v.unbindDocumentMouseUp=n(e,\"mouseup\",this.onDocumentMouseUp.bind(this)));let i=this.chart.renderTo.parentElement;for(;i&&\"BODY\"!==i.tagName;)this.eventsToUnbind.push(n(i,\"scroll\",()=>{delete this.chartPosition})),i=i.parentElement;this.eventsToUnbind.push(n(t,\"touchstart\",this.onContainerTouchStart.bind(this),{passive:!1}),n(t,\"touchmove\",this.onContainerTouchMove.bind(this),{passive:!1})),v.unbindDocumentTouchEnd||(v.unbindDocumentTouchEnd=n(e,\"touchend\",this.onDocumentTouchEnd.bind(this),{passive:!1}))}setHoverChartIndex(t){let i=this.chart,s=e.charts[x(v.hoverChartIndex,-1)];s&&s!==i&&s.pointer?.onContainerMouseLeave(t||{relatedTarget:i.container}),s&&s.mouseIsDown||(v.hoverChartIndex=i.index)}touch(t,e){let i;let{chart:s,pinchDown:o=[]}=this;this.setHoverChartIndex(),1===t.touches.length?(t=this.normalize(t),s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop,{visiblePlotOnly:!0})&&!s.openMenu?(e&&this.runPointActions(t),\"touchmove\"===t.type&&(i=!!o[0]&&Math.pow(o[0].chartX-t.chartX,2)+Math.pow(o[0].chartY-t.chartY,2)>=16),x(i,!0)&&this.pinch(t)):e&&this.reset()):2===t.touches.length&&this.pinch(t)}touchSelect(t){return!!(this.chart.zooming.singleTouch&&t.touches&&1===t.touches.length)}zoomOption(t){let e=this.chart,i=e.inverted,s=e.zooming.type||\"\",o,r;/touch/.test(t.type)&&(s=x(e.zooming.pinchType,s)),this.zoomX=o=/x/.test(s),this.zoomY=r=/y/.test(s),this.zoomHor=o&&!i||r&&i,this.zoomVert=r&&!i||o&&i,this.hasZoom=o||r}}return(s=v||(v={})).compose=function(t){y(a,\"Core.Pointer\")&&n(t,\"beforeRender\",function(){this.pointer=new s(this,this.options)})},v}),i(e,\"Core/Legend/Legend.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r){var a;let{animObject:n,setAnimation:l}=t,{format:h}=e,{composed:d,marginNames:c}=i,{distribute:p}=o,{addEvent:u,createElement:g,css:f,defined:m,discardElement:x,find:y,fireEvent:b,isNumber:v,merge:S,pick:M,pushUnique:k,relativeLength:C,stableSort:A,syncTimeout:w}=r;class T{constructor(t,e){this.allItems=[],this.initialItemY=0,this.itemHeight=0,this.itemMarginBottom=0,this.itemMarginTop=0,this.itemX=0,this.itemY=0,this.lastItemY=0,this.lastLineHeight=0,this.legendHeight=0,this.legendWidth=0,this.maxItemWidth=0,this.maxLegendWidth=0,this.offsetWidth=0,this.padding=0,this.pages=[],this.symbolHeight=0,this.symbolWidth=0,this.titleHeight=0,this.totalItemWidth=0,this.widthOption=0,this.chart=t,this.setOptions(e),e.enabled&&(this.render(),u(this.chart,\"endResize\",function(){this.legend.positionCheckboxes()})),u(this.chart,\"render\",()=>{this.options.enabled&&this.proximate&&(this.proximatePositions(),this.positionItems())})}setOptions(t){let e=M(t.padding,8);this.options=t,this.chart.styledMode||(this.itemStyle=t.itemStyle,this.itemHiddenStyle=S(this.itemStyle,t.itemHiddenStyle)),this.itemMarginTop=t.itemMarginTop,this.itemMarginBottom=t.itemMarginBottom,this.padding=e,this.initialItemY=e-5,this.symbolWidth=M(t.symbolWidth,16),this.pages=[],this.proximate=\"proximate\"===t.layout&&!this.chart.inverted,this.baseline=void 0}update(t,e){let i=this.chart;this.setOptions(S(!0,this.options,t)),this.destroy(),i.isDirtyLegend=i.isDirtyBox=!0,M(e,!0)&&i.redraw(),b(this,\"afterUpdate\",{redraw:e})}colorizeItem(t,e){let{area:i,group:s,label:o,line:r,symbol:a}=t.legendItem||{};if(s?.[e?\"removeClass\":\"addClass\"](\"highcharts-legend-item-hidden\"),!this.chart.styledMode){let{itemHiddenStyle:s={}}=this,n=s.color,{fillColor:l,fillOpacity:h,lineColor:d,marker:c}=t.options,p=t=>(!e&&(t.fill&&(t.fill=n),t.stroke&&(t.stroke=n)),t);o?.css(S(e?this.itemStyle:s)),r?.attr(p({stroke:d||t.color})),a&&a.attr(p(c&&a.isMarker?t.pointAttribs():{fill:t.color})),i?.attr(p({fill:l||t.color,\"fill-opacity\":l?1:h??.75}))}b(this,\"afterColorizeItem\",{item:t,visible:e})}positionItems(){this.allItems.forEach(this.positionItem,this),this.chart.isResizing||this.positionCheckboxes()}positionItem(t){let{group:e,x:i=0,y:s=0}=t.legendItem||{},o=this.options,r=o.symbolPadding,a=!o.rtl,n=t.checkbox;if(e&&e.element){let o={translateX:a?i:this.legendWidth-i-2*r-4,translateY:s};e[m(e.translateY)?\"animate\":\"attr\"](o,void 0,()=>{b(this,\"afterPositionItem\",{item:t})})}n&&(n.x=i,n.y=s)}destroyItem(t){let e=t.checkbox,i=t.legendItem||{};for(let t of[\"group\",\"label\",\"line\",\"symbol\"])i[t]&&(i[t]=i[t].destroy());e&&x(e),t.legendItem=void 0}destroy(){for(let t of this.getAllItems())this.destroyItem(t);for(let t of[\"clipRect\",\"up\",\"down\",\"pager\",\"nav\",\"box\",\"title\",\"group\"])this[t]&&(this[t]=this[t].destroy());this.display=null}positionCheckboxes(){let t;let e=this.group&&this.group.alignAttr,i=this.clipHeight||this.legendHeight,s=this.titleHeight;e&&(t=e.translateY,this.allItems.forEach(function(o){let r;let a=o.checkbox;a&&(r=t+s+a.y+(this.scrollOffset||0)+3,f(a,{left:e.translateX+o.checkboxOffset+a.x-20+\"px\",top:r+\"px\",display:this.proximate||r>t-6&&r1.5*k?v.height:k))}layoutItem(t){let e=this.options,i=this.padding,s=\"horizontal\"===e.layout,o=t.itemHeight,r=this.itemMarginBottom,a=this.itemMarginTop,n=s?M(e.itemDistance,20):0,l=this.maxLegendWidth,h=e.alignColumns&&this.totalItemWidth>l?this.maxItemWidth:t.itemWidth,d=t.legendItem||{};s&&this.itemX-i+h>l&&(this.itemX=i,this.lastLineHeight&&(this.itemY+=a+this.lastLineHeight+r),this.lastLineHeight=0),this.lastItemY=a+this.itemY+r,this.lastLineHeight=Math.max(o,this.lastLineHeight),d.x=this.itemX,d.y=this.itemY,s?this.itemX+=h:(this.itemY+=a+o+r,this.lastLineHeight=o),this.offsetWidth=this.widthOption||Math.max((s?this.itemX-i-(t.checkbox?0:n):h)+i,this.offsetWidth)}getAllItems(){let t=[];return this.chart.series.forEach(function(e){let i=e&&e.options;e&&M(i.showInLegend,!m(i.linkedTo)&&void 0,!0)&&(t=t.concat((e.legendItem||{}).labels||(\"point\"===i.legendType?e.data:e)))}),b(this,\"afterGetAllItems\",{allItems:t}),t}getAlignment(){let t=this.options;return this.proximate?t.align.charAt(0)+\"tv\":t.floating?\"\":t.align.charAt(0)+t.verticalAlign.charAt(0)+t.layout.charAt(0)}adjustMargins(t,e){let i=this.chart,s=this.options,o=this.getAlignment();o&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(r,a){r.test(o)&&!m(t[a])&&(i[c[a]]=Math.max(i[c[a]],i.legend[(a+1)%2?\"legendHeight\":\"legendWidth\"]+[1,-1,-1,1][a]*s[a%2?\"x\":\"y\"]+M(s.margin,12)+e[a]+(i.titleOffset[a]||0)))})}proximatePositions(){let t;let e=this.chart,i=[],s=\"left\"===this.options.align;for(let o of(this.allItems.forEach(function(t){let o,r,a=s,n,l;t.yAxis&&(t.xAxis.options.reversed&&(a=!a),t.points&&(o=y(a?t.points:t.points.slice(0).reverse(),function(t){return v(t.plotY)})),r=this.itemMarginTop+t.legendItem.label.getBBox().height+this.itemMarginBottom,l=t.yAxis.top-e.plotTop,n=t.visible?(o?o.plotY:t.yAxis.height)+(l-.3*r):l+t.yAxis.height,i.push({target:n,size:r,item:t}))},this),p(i,e.plotHeight)))t=o.item.legendItem||{},v(o.pos)&&(t.y=e.plotTop-e.spacing[0]+o.pos)}render(){let t=this.chart,e=t.renderer,i=this.options,s=this.padding,o=this.getAllItems(),r,a,n,l=this.group,h,d=this.box;this.itemX=s,this.itemY=this.initialItemY,this.offsetWidth=0,this.lastItemY=0,this.widthOption=C(i.width,t.spacingBox.width-s),h=t.spacingBox.width-2*s-i.x,[\"rm\",\"lm\"].indexOf(this.getAlignment().substring(0,2))>-1&&(h/=2),this.maxLegendWidth=this.widthOption||h,l||(this.group=l=e.g(\"legend\").addClass(i.className||\"\").attr({zIndex:7}).add(),this.contentGroup=e.g().attr({zIndex:1}).add(l),this.scrollGroup=e.g().add(this.contentGroup)),this.renderTitle(),A(o,(t,e)=>(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)),i.reversed&&o.reverse(),this.allItems=o,this.display=r=!!o.length,this.lastLineHeight=0,this.maxItemWidth=0,this.totalItemWidth=0,this.itemHeight=0,o.forEach(this.renderItem,this),o.forEach(this.layoutItem,this),a=(this.widthOption||this.offsetWidth)+s,n=this.lastItemY+this.lastLineHeight+this.titleHeight,n=this.handleOverflow(n)+s,d||(this.box=d=e.rect().addClass(\"highcharts-legend-box\").attr({r:i.borderRadius}).add(l)),t.styledMode||d.attr({stroke:i.borderColor,\"stroke-width\":i.borderWidth||0,fill:i.backgroundColor||\"none\"}).shadow(i.shadow),a>0&&n>0&&d[d.placed?\"animate\":\"attr\"](d.crisp.call({},{x:0,y:0,width:a,height:n},d.strokeWidth())),l[r?\"show\":\"hide\"](),t.styledMode&&\"none\"===l.getStyle(\"display\")&&(a=n=0),this.legendWidth=a,this.legendHeight=n,r&&this.align(),this.proximate||this.positionItems(),b(this,\"afterRender\")}align(t=this.chart.spacingBox){let e=this.chart,i=this.options,s=t.y;/(lth|ct|rth)/.test(this.getAlignment())&&e.titleOffset[0]>0?s+=e.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&e.titleOffset[2]>0&&(s-=e.titleOffset[2]),s!==t.y&&(t=S(t,{y:s})),e.hasRendered||(this.group.placed=!1),this.group.align(S(i,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?\"top\":i.verticalAlign}),!0,t)}handleOverflow(t){let e=this,i=this.chart,s=i.renderer,o=this.options,r=o.y,a=\"top\"===o.verticalAlign,n=this.padding,l=o.maxHeight,h=o.navigation,d=M(h.animation,!0),c=h.arrowSize||12,p=this.pages,u=this.allItems,g=function(t){\"number\"==typeof t?S.attr({height:t}):S&&(e.clipRect=S.destroy(),e.contentGroup.clip()),e.contentGroup.div&&(e.contentGroup.div.style.clip=t?\"rect(\"+n+\"px,9999px,\"+(n+t)+\"px,0)\":\"auto\")},f=function(t){return e[t]=s.circle(0,0,1.3*c).translate(c/2,c/2).add(v),i.styledMode||e[t].attr(\"fill\",\"rgba(0,0,0,0.0001)\"),e[t]},m,x,y,b=i.spacingBox.height+(a?-r:r)-n,v=this.nav,S=this.clipRect;return\"horizontal\"!==o.layout||\"middle\"===o.verticalAlign||o.floating||(b/=2),l&&(b=Math.min(b,l)),p.length=0,t&&b>0&&t>b&&!1!==h.enabled?(this.clipHeight=m=Math.max(b-20-this.titleHeight-n,0),this.currentPage=M(this.currentPage,1),this.fullHeight=t,u.forEach((t,e)=>{let i=(y=t.legendItem||{}).y||0,s=Math.round(y.label.getBBox().height),o=p.length;(!o||i-p[o-1]>m&&(x||i)!==p[o-1])&&(p.push(x||i),o++),y.pageIx=o-1,x&&((u[e-1].legendItem||{}).pageIx=o-1),e===u.length-1&&i+s-p[o-1]>m&&i>p[o-1]&&(p.push(i),y.pageIx=o),i!==x&&(x=i)}),S||(S=e.clipRect=s.clipRect(0,n-2,9999,0),e.contentGroup.clip(S)),g(m),v||(this.nav=v=s.g().attr({zIndex:1}).add(this.group),this.up=s.symbol(\"triangle\",0,0,c,c).add(v),f(\"upTracker\").on(\"click\",function(){e.scroll(-1,d)}),this.pager=s.text(\"\",15,10).addClass(\"highcharts-legend-navigation\"),!i.styledMode&&h.style&&this.pager.css(h.style),this.pager.add(v),this.down=s.symbol(\"triangle-down\",0,0,c,c).add(v),f(\"downTracker\").on(\"click\",function(){e.scroll(1,d)})),e.scroll(0),t=b):v&&(g(),this.nav=v.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0),t}scroll(t,e){let i=this.chart,s=this.pages,o=s.length,r=this.clipHeight,a=this.options.navigation,h=this.pager,d=this.padding,c=this.currentPage+t;c>o&&(c=o),c>0&&(void 0!==e&&l(e,i),this.nav.attr({translateX:d,translateY:r+this.padding+7+this.titleHeight,visibility:\"inherit\"}),[this.up,this.upTracker].forEach(function(t){t.attr({class:1===c?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})}),h.attr({text:c+\"/\"+o}),[this.down,this.downTracker].forEach(function(t){t.attr({x:18+this.pager.getBBox().width,class:c===o?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})},this),i.styledMode||(this.up.attr({fill:1===c?a.inactiveColor:a.activeColor}),this.upTracker.css({cursor:1===c?\"default\":\"pointer\"}),this.down.attr({fill:c===o?a.inactiveColor:a.activeColor}),this.downTracker.css({cursor:c===o?\"default\":\"pointer\"})),this.scrollOffset=-s[c-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=c,this.positionCheckboxes(),w(()=>{b(this,\"afterScroll\",{currentPage:c})},n(M(e,i.renderer.globalAnimation,!0)).duration))}setItemEvents(t,e,i){let o=this,r=t.legendItem||{},a=o.chart.renderer.boxWrapper,n=t instanceof s,l=\"highcharts-legend-\"+(n?\"point\":\"series\")+\"-active\",h=o.chart.styledMode,d=i?[e,r.symbol]:[r.group],c=e=>{o.allItems.forEach(i=>{t!==i&&[i].concat(i.linkedSeries||[]).forEach(t=>{t.setState(e,!n)})})};for(let i of d)i&&i.on(\"mouseover\",function(){t.visible&&c(\"inactive\"),t.setState(\"hover\"),t.visible&&a.addClass(l),h||e.css(o.options.itemHoverStyle)}).on(\"mouseout\",function(){o.chart.styledMode||e.css(S(t.visible?o.itemStyle:o.itemHiddenStyle)),c(\"\"),a.removeClass(l),t.setState()}).on(\"click\",function(e){let i=\"legendItemClick\",s=function(){t.setVisible&&t.setVisible(),c(t.visible?\"inactive\":\"\")};a.removeClass(l),e={browserEvent:e},t.firePointEvent?t.firePointEvent(i,e,s):b(t,i,e,s)})}createCheckboxForItem(t){t.checkbox=g(\"input\",{type:\"checkbox\",className:\"highcharts-legend-checkbox\",checked:t.selected,defaultChecked:t.selected},this.options.itemCheckboxStyle,this.chart.container),u(t.checkbox,\"click\",function(e){let i=e.target;b(t.series||t,\"checkboxClick\",{checked:i.checked,item:t},function(){t.select()})})}}return(a=T||(T={})).compose=function(t){k(d,\"Core.Legend\")&&u(t,\"beforeMargins\",function(){this.legend=new a(this,this.options.legend)})},T}),i(e,\"Core/Legend/LegendSymbol.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{extend:i,merge:s,pick:o}=t;return function(t){function e(t,e,r){let a=this.legendItem=this.legendItem||{},{chart:n,options:l}=this,{baseline:h=0,symbolWidth:d,symbolHeight:c}=t,p=this.symbol||\"circle\",u=c/2,g=n.renderer,f=a.group,m=h-Math.round(c*(r?.4:.3)),x={},y,b=l.marker,v=0;if(n.styledMode||(x[\"stroke-width\"]=Math.min(l.lineWidth||0,24),l.dashStyle?x.dashstyle=l.dashStyle:\"square\"===l.linecap||(x[\"stroke-linecap\"]=\"round\")),a.line=g.path().addClass(\"highcharts-graph\").attr(x).add(f),r&&(a.area=g.path().addClass(\"highcharts-area\").add(f)),x[\"stroke-linecap\"]&&(v=Math.min(a.line.strokeWidth(),d)/2),d){let t=[[\"M\",v,m],[\"L\",d-v,m]];a.line.attr({d:t}),a.area?.attr({d:[...t,[\"L\",d-v,h],[\"L\",v,h]]})}if(b&&!1!==b.enabled&&d){let t=Math.min(o(b.radius,u),u);0===p.indexOf(\"url\")&&(b=s(b,{width:c,height:c}),t=0),a.symbol=y=g.symbol(p,d/2-t,m-t,2*t,2*t,i({context:\"legend\"},b)).addClass(\"highcharts-point\").add(f),y.isMarker=!0}}t.areaMarker=function(t,i){e.call(this,t,i,!0)},t.lineMarker=e,t.rectangle=function(t,e){let i=e.legendItem||{},s=t.options,r=t.symbolHeight,a=s.squareSymbol,n=a?r:t.symbolWidth;i.symbol=this.chart.renderer.rect(a?(t.symbolWidth-r)/2:0,t.baseline-r+1,n,r,o(t.options.symbolRadius,r/2)).addClass(\"highcharts-point\").attr({zIndex:3}).add(i.group)}}(e||(e={})),e}),i(e,\"Core/Series/SeriesDefaults.js\",[],function(){return{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1e3},enableMouseTracking:!0,events:{},marker:{enabledThreshold:2,lineColor:\"#ffffff\",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:150},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:\"#cccccc\",lineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:\"center\",borderWidth:0,defer:!0,formatter:function(){let{numberFormatter:t}=this.series.chart;return\"number\"!=typeof this.y?\"\":t(this.y,-1)},padding:5,style:{fontSize:\"0.7em\",fontWeight:\"bold\",color:\"contrast\",textOutline:\"1px contrast\"},verticalAlign:\"bottom\",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:150},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:150},opacity:.2}},stickyTracking:!0,turboThreshold:1e3,findNearestPointBy:\"x\"}}),i(e,\"Core/Series/SeriesRegistry.js\",[e[\"Core/Globals.js\"],e[\"Core/Defaults.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var o;let{defaultOptions:r}=e,{extend:a,extendClass:n,merge:l}=s;return function(e){function s(t,s){let o=r.plotOptions||{},a=s.defaultOptions,n=s.prototype;return n.type=t,n.pointClass||(n.pointClass=i),!e.seriesTypes[t]&&(a&&(o[t]=a),e.seriesTypes[t]=s,!0)}e.seriesTypes=t.seriesTypes,e.registerSeriesType=s,e.seriesType=function(t,o,h,d,c){let p=r.plotOptions||{};if(o=o||\"\",p[t]=l(p[o],h),delete e.seriesTypes[t],s(t,n(e.seriesTypes[o]||function(){},d)),e.seriesTypes[t].prototype.type=t,c){class s extends i{}a(s.prototype,c),e.seriesTypes[t].prototype.pointClass=s}return e.seriesTypes[t]}}(o||(o={})),o}),i(e,\"Core/Series/Series.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Legend/LegendSymbol.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Series/SeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n,l,h){let{animObject:d,setAnimation:c}=t,{defaultOptions:p}=e,{registerEventOptions:u}=i,{svg:g,win:f}=s,{seriesTypes:m}=n,{arrayMax:x,arrayMin:y,clamp:b,correctFloat:v,defined:S,destroyObjectProperties:M,diffObjects:k,erase:C,error:A,extend:w,find:T,fireEvent:P,getClosestDistance:L,getNestedProperty:O,insertItem:D,isArray:E,isNumber:B,isString:j,merge:I,objectEach:R,pick:z,removeEvent:G,splat:N,syncTimeout:W}=h;class H{constructor(){this.zoneAxis=\"y\"}init(t,e){let i;P(this,\"init\",{options:e});let s=this,o=t.series;this.eventsToUnbind=[],s.chart=t,s.options=s.setOptions(e);let r=s.options,a=!1!==r.visible;s.linkedSeries=[],s.bindAxes(),w(s,{name:r.name,state:\"\",visible:a,selected:!0===r.selected}),u(this,r);let n=r.events;(n&&n.click||r.point&&r.point.events&&r.point.events.click||r.allowPointSelect)&&(t.runTrackerClick=!0),s.getColor(),s.getSymbol(),s.parallelArrays.forEach(function(t){s[t+\"Data\"]||(s[t+\"Data\"]=[])}),s.isCartesian&&(t.hasCartesianSeries=!0),o.length&&(i=o[o.length-1]),s._i=z(i&&i._i,-1)+1,s.opacity=s.options.opacity,t.orderItems(\"series\",D(this,o)),r.dataSorting&&r.dataSorting.enabled?s.setDataSortingOptions():s.points||s.data||s.setData(r.data,!1),P(this,\"afterInit\")}is(t){return m[t]&&this instanceof m[t]}bindAxes(){let t;let e=this,i=e.options,s=e.chart;P(this,\"bindAxes\",null,function(){(e.axisTypes||[]).forEach(function(o){s[o].forEach(function(s){t=s.options,(z(i[o],0)===s.index||void 0!==i[o]&&i[o]===t.id)&&(D(e,s.series),e[o]=s,s.isDirty=!0)}),e[o]||e.optionalAxis===o||A(18,!0,s)})}),P(this,\"afterBindAxes\")}updateParallelArrays(t,e,i){let s=t.series,o=B(e)?function(i){let o=\"y\"===i&&s.toYData?s.toYData(t):t[i];s[i+\"Data\"][e]=o}:function(t){Array.prototype[e].apply(s[t+\"Data\"],i)};s.parallelArrays.forEach(o)}hasData(){return this.visible&&void 0!==this.dataMax&&void 0!==this.dataMin||this.visible&&this.yData&&this.yData.length>0}hasMarkerChanged(t,e){let i=t.marker,s=e.marker||{};return i&&(s.enabled&&!i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)}autoIncrement(t){let e=this.options,i=e.pointIntervalUnit,s=e.relativeXValue,o=this.chart.time,r=this.xIncrement,a,n;return(r=z(r,e.pointStart,0),this.pointInterval=n=z(this.pointInterval,e.pointInterval,1),s&&B(t)&&(n*=t),i&&(a=new o.Date(r),\"day\"===i?o.set(\"Date\",a,o.get(\"Date\",a)+n):\"month\"===i?o.set(\"Month\",a,o.get(\"Month\",a)+n):\"year\"===i&&o.set(\"FullYear\",a,o.get(\"FullYear\",a)+n),n=a.getTime()-r),s&&B(t))?r+n:(this.xIncrement=r+n,r)}setDataSortingOptions(){let t=this.options;w(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1}),S(t.pointRange)||(t.pointRange=1)}setOptions(t){let e;let i=this.chart,s=i.options.plotOptions,o=i.userOptions||{},r=I(t),a=i.styledMode,n={plotOptions:s,userOptions:r};P(this,\"setOptions\",n);let l=n.plotOptions[this.type],h=o.plotOptions||{},d=h.series||{},c=p.plotOptions[this.type]||{},u=h[this.type]||{};this.userOptions=n.userOptions;let g=I(l,s.series,u,r);this.tooltipOptions=I(p.tooltip,p.plotOptions.series?.tooltip,c?.tooltip,i.userOptions.tooltip,h.series?.tooltip,u.tooltip,r.tooltip),this.stickyTracking=z(r.stickyTracking,u.stickyTracking,d.stickyTracking,!!this.tooltipOptions.shared&&!this.noSharedTooltip||g.stickyTracking),null===l.marker&&delete g.marker,this.zoneAxis=g.zoneAxis||\"y\";let f=this.zones=(g.zones||[]).map(t=>({...t}));return(g.negativeColor||g.negativeFillColor)&&!g.zones&&(e={value:g[this.zoneAxis+\"Threshold\"]||g.threshold||0,className:\"highcharts-negative\"},a||(e.color=g.negativeColor,e.fillColor=g.negativeFillColor),f.push(e)),f.length&&S(f[f.length-1].value)&&f.push(a?{}:{color:this.color,fillColor:this.fillColor}),P(this,\"afterSetOptions\",{options:g}),g}getName(){return z(this.options.name,\"Series \"+(this.index+1))}getCyclic(t,e,i){let s,o;let r=this.chart,a=`${t}Index`,n=`${t}Counter`,l=i?.length||r.options.chart.colorCount;!e&&(S(o=z(\"color\"===t?this.options.colorIndex:void 0,this[a]))?s=o:(r.series.length||(r[n]=0),s=r[n]%l,r[n]+=1),i&&(e=i[s])),void 0!==s&&(this[a]=s),this[t]=e}getColor(){this.chart.styledMode?this.getCyclic(\"color\"):this.options.colorByPoint?this.color=\"#cccccc\":this.getCyclic(\"color\",this.options.color||p.plotOptions[this.type].color,this.chart.options.colors)}getPointsCollection(){return(this.hasGroupedData?this.points:this.data)||[]}getSymbol(){let t=this.options.marker;this.getCyclic(\"symbol\",t.symbol,this.chart.options.symbols)}findPointIndex(t,e){let i,s,o;let a=t.id,n=t.x,l=this.points,h=this.options.dataSorting;if(a){let t=this.chart.get(a);t instanceof r&&(i=t)}else if(this.linkedParent||this.enabledDataSorting||this.options.relativeXValue){let e=e=>!e.touched&&e.index===t.index;if(h&&h.matchByName?e=e=>!e.touched&&e.name===t.name:this.options.relativeXValue&&(e=e=>!e.touched&&e.options.x===t.x),!(i=T(l,e)))return}return i&&void 0!==(o=i&&i.index)&&(s=!0),void 0===o&&B(n)&&(o=this.xData.indexOf(n,e)),-1!==o&&void 0!==o&&this.cropped&&(o=o>=this.cropStart?o-this.cropStart:o),!s&&B(o)&&l[o]&&l[o].touched&&(o=void 0),o}updateData(t,e){let i=this.options,s=i.dataSorting,o=this.points,r=[],a=this.requireSorting,n=t.length===o.length,l,h,d,c,p=!0;if(this.xIncrement=null,t.forEach(function(t,e){let h;let d=S(t)&&this.pointClass.prototype.optionsToObject.call({series:this},t)||{},p=d.x;d.id||B(p)?(-1===(h=this.findPointIndex(d,c))||void 0===h?r.push(t):o[h]&&t!==i.data[h]?(o[h].update(t,!1,null,!1),o[h].touched=!0,a&&(c=h+1)):o[h]&&(o[h].touched=!0),(!n||e!==h||s&&s.enabled||this.hasDerivedData)&&(l=!0)):r.push(t)},this),l)for(h=o.length;h--;)(d=o[h])&&!d.touched&&d.remove&&d.remove(!1,e);else!n||s&&s.enabled?p=!1:(t.forEach(function(t,e){t===o[e].y||o[e].destroyed||o[e].update(t,!1,null,!1)}),r.length=0);return o.forEach(function(t){t&&(t.touched=!1)}),!!p&&(r.forEach(function(t){this.addPoint(t,!1,null,null,!1)},this),null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=x(this.xData),this.autoIncrement()),!0)}setData(t,e=!0,i,s){let o=this,r=o.points,a=r&&r.length||0,n=o.options,l=o.chart,h=n.dataSorting,d=o.xAxis,c=n.turboThreshold,p=this.xData,u=this.yData,g=o.pointArrayMap,f=g&&g.length,m=n.keys,x,y,b,v=0,S=1,M=null,k;l.options.chart.allowMutatingData||(n.data&&delete o.options.data,o.userOptions.data&&delete o.userOptions.data,k=I(!0,t));let C=(t=k||t||[]).length;if(h&&h.enabled&&(t=this.sortData(t)),l.options.chart.allowMutatingData&&!1!==s&&C&&a&&!o.cropped&&!o.hasGroupedData&&o.visible&&!o.boosted&&(b=this.updateData(t,i)),!b){if(o.xIncrement=null,o.colorCounter=0,this.parallelArrays.forEach(function(t){o[t+\"Data\"].length=0}),c&&C>c){if(B(M=o.getFirstValidPoint(t)))for(x=0;x=0?v:0,S=S>=0?S:1),1===M.length&&(S=0),v===S)for(x=0;x{let s=O(i,t),o=O(i,e);return os?1:0}).forEach(function(t,e){t.x=e},this),e.linkedSeries&&e.linkedSeries.forEach(function(e){let i=e.options,o=i.data;i.dataSorting&&i.dataSorting.enabled||!o||(o.forEach(function(i,r){o[r]=s(e,i),t[r]&&(o[r].x=t[r].x,o[r].index=r)}),e.setData(o,!1))}),t}getProcessedData(t){let e=this,i=e.xAxis,s=e.options,o=s.cropThreshold,r=t||e.getExtremesFromAll||s.getExtremesFromAll,a=i?.logarithmic,n=e.isCartesian,l,h,d=0,c,p,u,g=e.xData,f=e.yData,m=!1,x=g.length;i&&(p=(c=i.getExtremes()).min,u=c.max,m=!!(i.categories&&!i.names.length)),n&&e.sorted&&!r&&(!o||x>o||e.forceCrop)&&(g[x-1]u?(g=[],f=[]):e.yData&&(g[0]u)&&(g=(l=this.cropData(e.xData,e.yData,p,u)).xData,f=l.yData,d=l.start,h=!0));let y=L([a?g.map(a.log2lin):g],()=>e.requireSorting&&!m&&A(15,!1,e.chart));return{xData:g,yData:f,cropped:h,cropStart:d,closestPointRange:y}}processData(t){let e=this.xAxis;if(this.isCartesian&&!this.isDirty&&!e.isDirty&&!this.yAxis.isDirty&&!t)return!1;let i=this.getProcessedData();this.cropped=i.cropped,this.cropStart=i.cropStart,this.processedXData=i.xData,this.processedYData=i.yData,this.closestPointRange=this.basePointRange=i.closestPointRange,P(this,\"afterProcessData\")}cropData(t,e,i,s){let o=t.length,r,a,n=0,l=o;for(r=0;r=i){n=Math.max(0,r-1);break}for(a=r;as){l=a+1;break}return{xData:t.slice(n,l),yData:e.slice(n,l),start:n,end:l}}generatePoints(){let t=this.options,e=this.processedData||t.data,i=this.processedXData,s=this.processedYData,o=this.pointClass,r=i.length,a=this.cropStart||0,n=this.hasGroupedData,l=t.keys,h=[],d=t.dataGrouping&&t.dataGrouping.groupAll?a:0,c,p,u,g,f=this.data;if(!f&&!n){let t=[];t.length=e.length,f=this.data=t}for(l&&n&&(this.options.keys=!1),g=0;g0:p.length)||!n),d=e||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!i||(o[u+a]||c)>=f&&(o[u-a]||c)<=m,h&&d){if(g=p.length)for(;g--;)B(p[g])&&(r[b++]=p[g]);else r[b++]=p}let S={activeYData:r,dataMin:y(r),dataMax:x(r)};return P(this,\"afterGetExtremes\",{dataExtremes:S}),S}applyExtremes(){let t=this.getExtremes();return this.dataMin=t.dataMin,this.dataMax=t.dataMax,t}getFirstValidPoint(t){let e=t.length,i=0,s=null;for(;null===s&&i1)&&(r.step=function(t,e){i&&i.apply(e,arguments),\"width\"===e.prop&&l?.element&&l.attr(o?\"height\":\"width\",t+99)}),n.addClass(\"highcharts-animating\").animate(t,r)}}afterAnimate(){this.setClip(),R(this.chart.sharedClips,(t,e,i)=>{t&&!this.chart.container.querySelector(`[clip-path=\"url(#${t.id})\"]`)&&(t.destroy(),delete i[e])}),this.finishedAnimating=!0,P(this,\"afterAnimate\")}drawPoints(t=this.points){let e,i,s,o,r,a,n;let l=this.chart,h=l.styledMode,{colorAxis:d,options:c}=this,p=c.marker,u=this[this.specialGroup||\"markerGroup\"],g=this.xAxis,f=z(p.enabled,!g||!!g.isRadial||null,this.closestPointRangePx>=p.enabledThreshold*p.radius);if(!1!==p.enabled||this._hasPointMarkers)for(e=0;e0||i.hasImage)&&(i.graphic=s=l.renderer.symbol(t,n.x,n.y,n.width,n.height,a?r:p).add(u),this.enabledDataSorting&&l.hasRendered&&(s.attr({x:i.startXPos}),o=\"animate\")),s&&\"animate\"===o&&s[e?\"show\":\"hide\"](e).animate(n),s){let t=this.pointAttribs(i,h||!i.selected?void 0:\"select\");h?d&&s.css({fill:t.fill}):s[o](t)}s&&s.addClass(i.getClassName(),!0)}else s&&(i.graphic=s.destroy())}markerAttribs(t,e){let i=this.options,s=i.marker,o=t.marker||{},r=o.symbol||s.symbol,a={},n,l,h=z(o.radius,s&&s.radius);e&&(n=s.states[e],h=z((l=o.states&&o.states[e])&&l.radius,n&&n.radius,h&&h+(n&&n.radiusPlus||0))),t.hasImage=r&&0===r.indexOf(\"url\"),t.hasImage&&(h=0);let d=t.pos();return B(h)&&d&&(a.x=d[0]-h,a.y=d[1]-h,i.crisp&&(a.x=Math.floor(a.x))),h&&(a.width=a.height=2*h),a}pointAttribs(t,e){let i=this.options.marker,s=t&&t.options,o=s&&s.marker||{},r=s&&s.color,a=t&&t.color,n=t&&t.zone&&t.zone.color,l,h,d=this.color,c,p,u=z(o.lineWidth,i.lineWidth),g=1;return d=r||n||a||d,c=o.fillColor||i.fillColor||d,p=o.lineColor||i.lineColor||d,e=e||\"normal\",l=i.states[e]||{},u=z((h=o.states&&o.states[e]||{}).lineWidth,l.lineWidth,u+z(h.lineWidthPlus,l.lineWidthPlus,0)),c=h.fillColor||l.fillColor||c,{stroke:p=h.lineColor||l.lineColor||p,\"stroke-width\":u,fill:c,opacity:g=z(h.opacity,l.opacity,g)}}destroy(t){let e,i,s;let o=this,r=o.chart,a=/AppleWebKit\\/533/.test(f.navigator.userAgent),n=o.data||[];for(P(o,\"destroy\",{keepEventsForUpdate:t}),this.removeEvents(t),(o.axisTypes||[]).forEach(function(t){(s=o[t])&&s.series&&(C(s.series,o),s.isDirty=s.forceRedraw=!0)}),o.legendItem&&o.chart.legend.destroyItem(o),e=n.length;e--;)(i=n[e])&&i.destroy&&i.destroy();for(let t of o.zones)M(t,void 0,!0);h.clearTimeout(o.animationTimeout),R(o,function(t,e){t instanceof l&&!t.survive&&t[a&&\"group\"===e?\"hide\":\"destroy\"]()}),r.hoverSeries===o&&(r.hoverSeries=void 0),C(r.series,o),r.orderItems(\"series\"),R(o,function(e,i){t&&\"hcEvents\"===i||delete o[i]})}applyZones(){let{area:t,chart:e,graph:i,zones:s,points:o,xAxis:r,yAxis:a,zoneAxis:n}=this,{inverted:l,renderer:h}=e,d=this[`${n}Axis`],{isXAxis:c,len:p=0}=d||{},u=(i?.strokeWidth()||0)/2+1,g=(t,e=0,i=0)=>{l&&(i=p-i);let{translated:s=0,lineClip:o}=t,r=i-s;o?.push([\"L\",e,Math.abs(r){t.forEach((e,i)=>{(\"M\"===e[0]||\"L\"===e[0])&&(t[i]=[e[0],c?p-e[1]:e[1],c?e[2]:p-e[2]])})};if(s.forEach(t=>{t.lineClip=[],t.translated=b(d.toPixels(z(t.value,e),!0)||0,0,p)}),i&&!this.showLine&&i.hide(),t&&t.hide(),\"y\"===n&&o.length{let s=e.lineClip||[],o=Math.round(e.translated||0);r.reversed&&s.reverse();let{clip:n,simpleClip:d}=e,p=0,g=0,x=r.len,y=a.len;c?(p=o,x=m):(g=o,y=m);let b=[[\"M\",p,g],[\"L\",x,g],[\"L\",x,y],[\"L\",p,y],[\"Z\"]],v=[b[0],...s,b[1],b[2],...f,b[3],b[4]];f=s.reverse(),m=o,l&&(u(v),t&&u(b)),n?(n.animate({d:v}),d?.animate({d:b})):(n=e.clip=h.path(v),t&&(d=e.simpleClip=h.path(b))),i&&e.graph?.clip(n),t&&e.area?.clip(d)})}else this.visible&&(i&&i.show(),t&&t.show())}plotGroup(t,e,i,s,o){let r=this[t],a=!r,n={visibility:i,zIndex:s||.1};return S(this.opacity)&&!this.chart.styledMode&&\"inactive\"!==this.state&&(n.opacity=this.opacity),r||(this[t]=r=this.chart.renderer.g().add(o)),r.addClass(\"highcharts-\"+e+\" highcharts-series-\"+this.index+\" highcharts-\"+this.type+\"-series \"+(S(this.colorIndex)?\"highcharts-color-\"+this.colorIndex+\" \":\"\")+(this.options.className||\"\")+(r.hasClass(\"highcharts-tracker\")?\" highcharts-tracker\":\"\"),!0),r.attr(n)[a?\"attr\":\"animate\"](this.getPlotBox(e)),r}getPlotBox(t){let e=this.xAxis,i=this.yAxis,s=this.chart,o=s.inverted&&!s.polar&&e&&this.invertible&&\"series\"===t;return s.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:s.plotLeft,translateY:i?i.top:s.plotTop,rotation:o?90:0,rotationOriginX:o?(e.len-i.len)/2:0,rotationOriginY:o?(e.len+i.len)/2:0,scaleX:o?-1:1,scaleY:1}}removeEvents(t){let{eventsToUnbind:e}=this;t||G(this),e.length&&(e.forEach(t=>{t()}),e.length=0)}render(){let t=this,{chart:e,options:i,hasRendered:s}=t,o=d(i.animation),r=t.visible?\"inherit\":\"hidden\",a=i.zIndex,n=e.seriesGroup,l=t.finishedAnimating?0:o.duration;P(this,\"render\"),t.plotGroup(\"group\",\"series\",r,a,n),t.markerGroup=t.plotGroup(\"markerGroup\",\"markers\",r,a,n),!1!==i.clip&&t.setClip(),l&&t.animate?.(!0),t.drawGraph&&(t.drawGraph(),t.applyZones()),t.visible&&t.drawPoints(),t.drawDataLabels?.(),t.redrawPoints?.(),i.enableMouseTracking&&t.drawTracker?.(),l&&t.animate?.(),s||(l&&o.defer&&(l+=o.defer),t.animationTimeout=W(()=>{t.afterAnimate()},l||0)),t.isDirty=!1,t.hasRendered=!0,P(t,\"afterRender\")}redraw(){let t=this.isDirty||this.isDirtyData;this.translate(),this.render(),t&&delete this.kdTree}reserveSpace(){return this.visible||!this.chart.options.chart.ignoreHiddenSeries}searchPoint(t,e){let{xAxis:i,yAxis:s}=this,o=this.chart.inverted;return this.searchKDTree({clientX:o?i.len-t.chartY+i.pos:t.chartX-i.pos,plotY:o?s.len-t.chartX+s.pos:t.chartY-s.pos},e,t)}buildKDTree(t){this.buildingKdTree=!0;let e=this,i=e.options.findNearestPointBy.indexOf(\"y\")>-1?2:1;delete e.kdTree,W(function(){e.kdTree=function t(i,s,o){let r,a;let n=i?.length;if(n)return r=e.kdAxisArray[s%o],i.sort((t,e)=>(t[r]||0)-(e[r]||0)),{point:i[a=Math.floor(n/2)],left:t(i.slice(0,a),s+1,o),right:t(i.slice(a+1),s+1,o)}}(e.getValidPoints(void 0,!e.directTouch),i,i),e.buildingKdTree=!1},e.options.kdNow||t?.type===\"touchstart\"?0:1)}searchKDTree(t,e,i){let s=this,[o,r]=this.kdAxisArray,a=e?\"distX\":\"dist\",n=(s.options.findNearestPointBy||\"\").indexOf(\"y\")>-1?2:1,l=!!s.isBubble;if(this.kdTree||this.buildingKdTree||this.buildKDTree(i),this.kdTree)return function t(e,i,n,h){let d=i.point,c=s.kdAxisArray[n%h],p,u,g=d;!function(t,e){let i=t[o],s=e[o],a=S(i)&&S(s)?i-s:null,n=t[r],h=e[r],d=S(n)&&S(h)?n-h:0,c=l&&e.marker?.radius||0;e.dist=Math.sqrt((a&&a*a||0)+d*d)-c,e.distX=S(a)?Math.abs(a)-c:Number.MAX_VALUE}(e,d);let f=(e[c]||0)-(d[c]||0)+(l&&d.marker?.radius||0),m=f<0?\"left\":\"right\",x=f<0?\"right\":\"left\";return i[m]&&(g=(p=t(e,i[m],n+1,h))[a]=0&&r<=(s?s.len:e.plotHeight)&&o>=0&&o<=(i?i.len:e.plotWidth)}drawTracker(){let t=this,e=t.options,i=e.trackByArea,s=[].concat((i?t.areaPath:t.graphPath)||[]),o=t.chart,r=o.pointer,a=o.renderer,n=o.options.tooltip?.snap||0,l=()=>{e.enableMouseTracking&&o.hoverSeries!==t&&t.onMouseOver()},h=\"rgba(192,192,192,\"+(g?1e-4:.002)+\")\",d=t.tracker;d?d.attr({d:s}):t.graph&&(t.tracker=d=a.path(s).attr({visibility:t.visible?\"inherit\":\"hidden\",zIndex:2}).addClass(i?\"highcharts-tracker-area\":\"highcharts-tracker-line\").add(t.group),o.styledMode||d.attr({\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",stroke:h,fill:i?h:\"none\",\"stroke-width\":t.graph.strokeWidth()+(i?0:2*n)}),[t.tracker,t.markerGroup,t.dataLabelsGroup].forEach(t=>{t&&(t.addClass(\"highcharts-tracker\").on(\"mouseover\",l).on(\"mouseout\",t=>{r?.onTrackerMouseOut(t)}),e.cursor&&!o.styledMode&&t.css({cursor:e.cursor}),t.on(\"touchstart\",l))})),P(this,\"afterDrawTracker\")}addPoint(t,e,i,s,o){let r,a;let n=this.options,l=this.data,h=this.chart,d=this.xAxis,c=d&&d.hasNames&&d.names,p=n.data,u=this.xData;e=z(e,!0);let g={series:this};this.pointClass.prototype.applyOptions.apply(g,[t]);let f=g.x;if(a=u.length,this.requireSorting&&ff;)a--;this.updateParallelArrays(g,\"splice\",[a,0,0]),this.updateParallelArrays(g,a),c&&g.name&&(c[f]=g.name),p.splice(a,0,t),(r||this.processedData)&&(this.data.splice(a,0,null),this.processData()),\"point\"===n.legendType&&this.generatePoints(),i&&(l[0]&&l[0].remove?l[0].remove(!1):(l.shift(),this.updateParallelArrays(g,\"shift\"),p.shift())),!1!==o&&P(this,\"addPoint\",{point:g}),this.isDirty=!0,this.isDirtyData=!0,e&&h.redraw(s)}removePoint(t,e,i){let s=this,o=s.data,r=o[t],a=s.points,n=s.chart,l=function(){a&&a.length===o.length&&a.splice(t,1),o.splice(t,1),s.options.data.splice(t,1),s.updateParallelArrays(r||{series:s},\"splice\",[t,1]),r&&r.destroy(),s.isDirty=!0,s.isDirtyData=!0,e&&n.redraw()};c(i,n),e=z(e,!0),r?r.firePointEvent(\"remove\",null,l):l()}remove(t,e,i,s){let o=this,r=o.chart;function a(){o.destroy(s),r.isDirtyLegend=r.isDirtyBox=!0,r.linkSeries(s),z(t,!0)&&r.redraw(e)}!1!==i?P(o,\"remove\",null,a):a()}update(t,e){P(this,\"update\",{options:t=k(t,this.userOptions)});let i=this,s=i.chart,o=i.userOptions,r=i.initialType||i.type,a=s.options.plotOptions,n=m[r].prototype,l=i.finishedAnimating&&{animation:!1},h={},d,c,p=[\"colorIndex\",\"eventOptions\",\"navigatorSeries\",\"symbolIndex\",\"baseSeries\"],u=t.type||o.type||s.options.chart.type,g=!(this.hasDerivedData||u&&u!==this.type||void 0!==t.pointStart||void 0!==t.pointInterval||void 0!==t.relativeXValue||t.joinBy||t.mapData||[\"dataGrouping\",\"pointStart\",\"pointInterval\",\"pointIntervalUnit\",\"keys\"].some(t=>i.hasOptionChanged(t)));u=u||r,g&&(p.push(\"data\",\"isDirtyData\",\"isDirtyCanvas\",\"points\",\"processedData\",\"processedXData\",\"processedYData\",\"xIncrement\",\"cropped\",\"_hasPointMarkers\",\"hasDataLabels\",\"nodes\",\"layout\",\"level\",\"mapMap\",\"mapData\",\"minY\",\"maxY\",\"minX\",\"maxX\",\"transformGroups\"),!1!==t.visible&&p.push(\"area\",\"graph\"),i.parallelArrays.forEach(function(t){p.push(t+\"Data\")}),t.data&&(t.dataSorting&&w(i.options.dataSorting,t.dataSorting),this.setData(t.data,!1))),t=I(o,{index:void 0===o.index?i.index:o.index,pointStart:a?.series?.pointStart??o.pointStart??i.xData?.[0]},!g&&{data:i.options.data},t,l),g&&t.data&&(t.data=i.options.data),(p=[\"group\",\"markerGroup\",\"dataLabelsGroup\",\"transformGroup\"].concat(p)).forEach(function(t){p[t]=i[t],delete i[t]});let f=!1;if(m[u]){if(f=u!==i.type,i.remove(!1,!1,!1,!0),f){if(s.propFromSeries(),Object.setPrototypeOf)Object.setPrototypeOf(i,m[u].prototype);else{let t=Object.hasOwnProperty.call(i,\"hcEvents\")&&i.hcEvents;for(c in n)i[c]=void 0;w(i,m[u].prototype),t?i.hcEvents=t:delete i.hcEvents}}}else A(17,!0,s,{missingModuleFor:u});if(p.forEach(function(t){i[t]=p[t]}),i.init(s,t),g&&this.points)for(let t of(!1===(d=i.options).visible?(h.graphic=1,h.dataLabel=1):(this.hasMarkerChanged(d,o)&&(h.graphic=1),i.hasDataLabels?.()||(h.dataLabel=1)),this.points))t&&t.series&&(t.resolveColor(),Object.keys(h).length&&t.destroyElements(h),!1===d.showInLegend&&t.legendItem&&s.legend.destroyItem(t));i.initialType=r,s.linkSeries(),s.setSortedData(),f&&i.linkedSeries.length&&(i.isDirtyData=!0),P(this,\"afterUpdate\"),z(e,!0)&&s.redraw(!!g&&void 0)}setName(t){this.name=this.options.name=this.userOptions.name=t,this.chart.isDirtyLegend=!0}hasOptionChanged(t){let e=this.chart,i=this.options[t],s=e.options.plotOptions,o=this.userOptions[t],r=z(s?.[this.type]?.[t],s?.series?.[t]);return o&&!S(r)?i!==o:i!==z(r,i)}onMouseOver(){let t=this.chart,e=t.hoverSeries,i=t.pointer;i?.setHoverChartIndex(),e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&P(this,\"mouseOver\"),this.setState(\"hover\"),t.hoverSeries=this}onMouseOut(){let t=this.options,e=this.chart,i=e.tooltip,s=e.hoverPoint;e.hoverSeries=null,s&&s.onMouseOut(),this&&t.events.mouseOut&&P(this,\"mouseOut\"),i&&!this.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),e.series.forEach(function(t){t.setState(\"\",!0)})}setState(t,e){let i=this,s=i.options,o=i.graph,r=s.inactiveOtherPoints,a=s.states,n=z(a[t||\"normal\"]&&a[t||\"normal\"].animation,i.chart.options.chart.animation),l=s.lineWidth,h=s.opacity;if(t=t||\"\",i.state!==t&&([i.group,i.markerGroup,i.dataLabelsGroup].forEach(function(e){e&&(i.state&&e.removeClass(\"highcharts-series-\"+i.state),t&&e.addClass(\"highcharts-series-\"+t))}),i.state=t,!i.chart.styledMode)){if(a[t]&&!1===a[t].enabled)return;if(t&&(l=a[t].lineWidth||l+(a[t].lineWidthPlus||0),h=z(a[t].opacity,h)),o&&!o.dashstyle&&B(l))for(let t of[o,...this.zones.map(t=>t.graph)])t?.animate({\"stroke-width\":l},n);r||[i.group,i.markerGroup,i.dataLabelsGroup,i.labelBySeries].forEach(function(t){t&&t.animate({opacity:h},n)})}e&&r&&i.points&&i.setAllPointsToState(t||void 0)}setAllPointsToState(t){this.points.forEach(function(e){e.setState&&e.setState(t)})}setVisible(t,e){let i=this,s=i.chart,o=s.options.chart.ignoreHiddenSeries,r=i.visible;i.visible=t=i.options.visible=i.userOptions.visible=void 0===t?!r:t;let a=t?\"show\":\"hide\";[\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\",\"tt\"].forEach(t=>{i[t]?.[a]()}),(s.hoverSeries===i||s.hoverPoint?.series===i)&&i.onMouseOut(),i.legendItem&&s.legend.colorizeItem(i,t),i.isDirty=!0,i.options.stacking&&s.series.forEach(t=>{t.options.stacking&&t.visible&&(t.isDirty=!0)}),i.linkedSeries.forEach(e=>{e.setVisible(t,!1)}),o&&(s.isDirtyBox=!0),P(i,a),!1!==e&&s.redraw()}show(){this.setVisible(!0)}hide(){this.setVisible(!1)}select(t){this.selected=t=this.options.selected=void 0===t?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),P(this,t?\"select\":\"unselect\")}shouldShowTooltip(t,e,i={}){return i.series=this,i.visiblePlotOnly=!0,this.chart.isInsidePlot(t,e,i)}drawLegendSymbol(t,e){o[this.options.legendSymbol||\"rectangle\"]?.call(this,t,e)}}return H.defaultOptions=a,H.types=n.seriesTypes,H.registerType=n.registerSeriesType,w(H.prototype,{axisTypes:[\"xAxis\",\"yAxis\"],coll:\"series\",colorCounter:0,directTouch:!1,invertible:!0,isCartesian:!0,kdAxisArray:[\"clientX\",\"plotY\"],parallelArrays:[\"x\",\"y\"],pointClass:r,requireSorting:!0,sorted:!0}),n.series=H,H}),i(e,\"Core/Chart/Chart.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Defaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Axis/Tick.js\"]],function(t,e,i,s,o,r,a,n,l,h,d,c,p,u){let{animate:g,animObject:f,setAnimation:m}=t,{defaultOptions:x,defaultTime:y}=i,{numberFormat:b}=s,{registerEventOptions:v}=o,{charts:S,doc:M,marginNames:k,svg:C,win:A}=r,{seriesTypes:w}=l,{addEvent:T,attr:P,createElement:L,css:O,defined:D,diffObjects:E,discardElement:B,erase:j,error:I,extend:R,find:z,fireEvent:G,getStyle:N,isArray:W,isNumber:H,isObject:X,isString:F,merge:Y,objectEach:U,pick:V,pInt:_,relativeLength:$,removeEvent:Z,splat:K,syncTimeout:q,uniqueKey:J}=c;class Q{static chart(t,e,i){return new Q(t,e,i)}constructor(t,e,i){this.sharedClips={};let s=[...arguments];(F(t)||t.nodeName)&&(this.renderTo=s.shift()),this.init(s[0],s[1])}setZoomOptions(){let t=this.options.chart,e=t.zooming;this.zooming={...e,type:V(t.zoomType,e.type),key:V(t.zoomKey,e.key),pinchType:V(t.pinchType,e.pinchType),singleTouch:V(t.zoomBySingleTouch,e.singleTouch,!1),resetButton:Y(e.resetButton,t.resetZoomButton)}}init(t,e){G(this,\"init\",{args:arguments},function(){let i=Y(x,t),s=i.chart;this.userOptions=R({},t),this.margin=[],this.spacing=[],this.labelCollectors=[],this.callback=e,this.isResizing=0,this.options=i,this.axes=[],this.series=[],this.time=t.time&&Object.keys(t.time).length?new d(t.time):r.time,this.numberFormatter=s.numberFormatter||b,this.styledMode=s.styledMode,this.hasCartesianSeries=s.showAxes,this.index=S.length,S.push(this),r.chartCount++,v(this,s),this.xAxis=[],this.yAxis=[],this.pointCount=this.colorCounter=this.symbolCounter=0,this.setZoomOptions(),G(this,\"afterInit\"),this.firstRender()})}initSeries(t){let e=this.options.chart,i=t.type||e.type,s=w[i];s||I(17,!0,this,{missingModuleFor:i});let o=new s;return\"function\"==typeof o.init&&o.init(this,t),o}setSortedData(){this.getSeriesOrderByLinks().forEach(function(t){t.points||t.data||!t.enabledDataSorting||t.setData(t.options.data,!1)})}getSeriesOrderByLinks(){return this.series.concat().sort(function(t,e){return t.linkedSeries.length||e.linkedSeries.length?e.linkedSeries.length-t.linkedSeries.length:0})}orderItems(t,e=0){let i=this[t],s=this.options[t]=K(this.options[t]).slice(),o=this.userOptions[t]=this.userOptions[t]?K(this.userOptions[t]).slice():[];if(this.hasRendered&&(s.splice(e),o.splice(e)),i)for(let t=e,r=i.length;t=Math.max(l+r,t.pos)&&e<=Math.min(l+r+c.width,t.pos+t.len)||(g.isInsidePlot=!1)}if(!i.ignoreY&&g.isInsidePlot){let t=!s&&i.axis&&!i.axis.isXAxis&&i.axis||d&&(s?d.xAxis:d.yAxis)||{pos:a,len:1/0},e=i.paneCoordinates?t.pos+u:a+u;e>=Math.max(h+a,t.pos)&&e<=Math.min(h+a+c.height,t.pos+t.len)||(g.isInsidePlot=!1)}return G(this,\"afterIsInsidePlot\",g),g.isInsidePlot}redraw(t){G(this,\"beforeRedraw\");let e=this.hasCartesianSeries?this.axes:this.colorAxis||[],i=this.series,s=this.pointer,o=this.legend,r=this.userOptions.legend,a=this.renderer,n=a.isHidden(),l=[],h,d,c,p=this.isDirtyBox,u=this.isDirtyLegend,g;for(a.rootFontSize=a.boxWrapper.getStyle(\"font-size\"),this.setResponsive&&this.setResponsive(!1),m(!!this.hasRendered&&t,this),n&&this.temporaryDisplay(),this.layOutTitles(!1),c=i.length;c--;)if(((g=i[c]).options.stacking||g.options.centerInCategory)&&(d=!0,g.isDirty)){h=!0;break}if(h)for(c=i.length;c--;)(g=i[c]).options.stacking&&(g.isDirty=!0);i.forEach(function(t){t.isDirty&&(\"point\"===t.options.legendType?(\"function\"==typeof t.updateTotals&&t.updateTotals(),u=!0):r&&(r.labelFormatter||r.labelFormat)&&(u=!0)),t.isDirtyData&&G(t,\"updatedData\")}),u&&o&&o.options.enabled&&(o.render(),this.isDirtyLegend=!1),d&&this.getStacks(),e.forEach(function(t){t.updateNames(),t.setScale()}),this.getMargins(),e.forEach(function(t){t.isDirty&&(p=!0)}),e.forEach(function(t){let e=t.min+\",\"+t.max;t.extKey!==e&&(t.extKey=e,l.push(function(){G(t,\"afterSetExtremes\",R(t.eventArgs,t.getExtremes())),delete t.eventArgs})),(p||d)&&t.redraw()}),p&&this.drawChartBox(),G(this,\"predraw\"),i.forEach(function(t){(p||t.isDirty)&&t.visible&&t.redraw(),t.isDirtyData=!1}),s&&s.reset(!0),a.draw(),G(this,\"redraw\"),G(this,\"render\"),n&&this.temporaryDisplay(!0),l.forEach(function(t){t.call()})}get(t){let e=this.series;function i(e){return e.id===t||e.options&&e.options.id===t}let s=z(this.axes,i)||z(this.series,i);for(let t=0;!s&&t(e.getPointsCollection().forEach(e=>{V(e.selectedStaging,e.selected)&&t.push(e)}),t),[])}getSelectedSeries(){return this.series.filter(function(t){return t.selected})}setTitle(t,e,i){this.applyDescription(\"title\",t),this.applyDescription(\"subtitle\",e),this.applyDescription(\"caption\",void 0),this.layOutTitles(i)}applyDescription(t,e){let i=this,s=this.options[t]=Y(this.options[t],e),o=this[t];o&&e&&(this[t]=o=o.destroy()),s&&!o&&((o=this.renderer.text(s.text,0,0,s.useHTML).attr({align:s.align,class:\"highcharts-\"+t,zIndex:s.zIndex||4}).add()).update=function(e,s){i.applyDescription(t,e),i.layOutTitles(s)},this.styledMode||o.css(R(\"title\"===t?{fontSize:this.options.isStock?\"1em\":\"1.2em\"}:{},s.style)),this[t]=o)}layOutTitles(t=!0){let e=[0,0,0],i=this.renderer,s=this.spacingBox;[\"title\",\"subtitle\",\"caption\"].forEach(function(t){let o=this[t],r=this.options[t],a=r.verticalAlign||\"top\",n=\"title\"===t?\"top\"===a?-3:0:\"top\"===a?e[0]+2:0;if(o){o.css({width:(r.width||s.width+(r.widthAdjust||0))+\"px\"});let t=i.fontMetrics(o).b,l=Math.round(o.getBBox(r.useHTML).height);o.align(R({y:\"bottom\"===a?t:n+t,height:l},r),!1,\"spacingBox\"),r.floating||(\"top\"===a?e[0]=Math.ceil(e[0]+l):\"bottom\"===a&&(e[2]=Math.ceil(e[2]+l)))}},this),e[0]&&\"top\"===(this.options.title.verticalAlign||\"top\")&&(e[0]+=this.options.title.margin),e[2]&&\"bottom\"===this.options.caption.verticalAlign&&(e[2]+=this.options.caption.margin);let o=!this.titleOffset||this.titleOffset.join(\",\")!==e.join(\",\");this.titleOffset=e,G(this,\"afterLayOutTitles\"),!this.isDirtyBox&&o&&(this.isDirtyBox=this.isDirtyLegend=o,this.hasRendered&&t&&this.isDirtyBox&&this.redraw())}getContainerBox(){return{width:N(this.renderTo,\"width\",!0)||0,height:N(this.renderTo,\"height\",!0)||0}}getChartSize(){let t=this.options.chart,e=t.width,i=t.height,s=this.getContainerBox();this.chartWidth=Math.max(0,e||s.width||600),this.chartHeight=Math.max(0,$(i,this.chartWidth)||(s.height>1?s.height:400)),this.containerBox=s}temporaryDisplay(t){let e=this.renderTo,i;if(t)for(;e&&e.style;)e.hcOrigStyle&&(O(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(M.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style&&(M.body.contains(e)||e.parentNode||(e.hcOrigDetached=!0,M.body.appendChild(e)),(\"none\"===N(e,\"display\",!1)||e.hcOricDetached)&&(e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},i={display:\"block\",overflow:\"hidden\"},e!==this.renderTo&&(i.height=0),O(e,i),e.offsetWidth||e.style.setProperty(\"display\",\"block\",\"important\")),(e=e.parentNode)!==M.body););}setClassName(t){this.container.className=\"highcharts-container \"+(t||\"\")}getContainer(){let t=this.options,e=t.chart,i=\"data-highcharts-chart\",s=J(),o,r=this.renderTo;r||(this.renderTo=r=e.renderTo),F(r)&&(this.renderTo=r=M.getElementById(r)),r||I(13,!0,this);let n=_(P(r,i));H(n)&&S[n]&&S[n].hasRendered&&S[n].destroy(),P(r,i,this.index),r.innerHTML=p.emptyHTML,e.skipClone||r.offsetWidth||this.temporaryDisplay(),this.getChartSize();let l=this.chartHeight,d=this.chartWidth;O(r,{overflow:\"hidden\"}),this.styledMode||(o=R({position:\"relative\",overflow:\"hidden\",width:d+\"px\",height:l+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\",userSelect:\"none\",\"touch-action\":\"manipulation\",outline:\"none\"},e.style||{}));let c=L(\"div\",{id:s},o,r);this.container=c,this.getChartSize(),d===this.chartWidth||(d=this.chartWidth,this.styledMode||O(c,{width:V(e.style?.width,d+\"px\")})),this.containerBox=this.getContainerBox(),this._cursor=c.style.cursor;let u=e.renderer||!C?a.getRendererType(e.renderer):h;if(this.renderer=new u(c,d,l,void 0,e.forExport,t.exporting&&t.exporting.allowHTML,this.styledMode),m(void 0,this),this.setClassName(e.className),this.styledMode)for(let e in t.defs)this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);this.renderer.chartIndex=this.index,G(this,\"afterGetContainer\")}getMargins(t){let{spacing:e,margin:i,titleOffset:s}=this;this.resetMargins(),s[0]&&!D(i[0])&&(this.plotTop=Math.max(this.plotTop,s[0]+e[0])),s[2]&&!D(i[2])&&(this.marginBottom=Math.max(this.marginBottom,s[2]+e[2])),this.legend&&this.legend.display&&this.legend.adjustMargins(i,e),G(this,\"getMargins\"),t||this.getAxisMargins()}getAxisMargins(){let t=this,e=t.axisOffset=[0,0,0,0],i=t.colorAxis,s=t.margin,o=function(t){t.forEach(function(t){t.visible&&t.getOffset()})};t.hasCartesianSeries?o(t.axes):i&&i.length&&o(i),k.forEach(function(i,o){D(s[o])||(t[i]+=e[o])}),t.setChartSize()}getOptions(){return E(this.userOptions,x)}reflow(t){let e=this,i=e.containerBox,s=e.getContainerBox();delete e.pointer?.chartPosition,!e.isPrinting&&!e.isResizing&&i&&s.width&&((s.width!==i.width||s.height!==i.height)&&(c.clearTimeout(e.reflowTimeout),e.reflowTimeout=q(function(){e.container&&e.setSize(void 0,void 0,!1)},t?100:0)),e.containerBox=s)}setReflow(){let t=this,e=e=>{t.options?.chart.reflow&&t.hasLoaded&&t.reflow(e)};if(\"function\"==typeof ResizeObserver)new ResizeObserver(e).observe(t.renderTo);else{let t=T(A,\"resize\",e);T(this,\"destroy\",t)}}setSize(t,e,i){let s=this,o=s.renderer;s.isResizing+=1,m(i,s);let r=o.globalAnimation;s.oldChartHeight=s.chartHeight,s.oldChartWidth=s.chartWidth,void 0!==t&&(s.options.chart.width=t),void 0!==e&&(s.options.chart.height=e),s.getChartSize();let{chartWidth:a,chartHeight:n,scrollablePixelsX:l=0,scrollablePixelsY:h=0}=s;(s.isDirtyBox||a!==s.oldChartWidth||n!==s.oldChartHeight)&&(s.styledMode||(r?g:O)(s.container,{width:`${a+l}px`,height:`${n+h}px`},r),s.setChartSize(!0),o.setSize(a,n,r),s.axes.forEach(function(t){t.isDirty=!0,t.setScale()}),s.isDirtyLegend=!0,s.isDirtyBox=!0,s.layOutTitles(),s.getMargins(),s.redraw(r),s.oldChartHeight=void 0,G(s,\"resize\"),setTimeout(()=>{s&&G(s,\"endResize\",void 0,()=>{s.isResizing-=1})},f(r).duration))}setChartSize(t){let e,i,s,o;let r=this.inverted,a=this.renderer,n=this.chartWidth,l=this.chartHeight,h=this.options.chart,d=this.spacing,c=this.clipOffset;this.plotLeft=e=Math.round(this.plotLeft),this.plotTop=i=Math.round(this.plotTop),this.plotWidth=s=Math.max(0,Math.round(n-e-this.marginRight)),this.plotHeight=o=Math.max(0,Math.round(l-i-this.marginBottom)),this.plotSizeX=r?o:s,this.plotSizeY=r?s:o,this.plotBorderWidth=h.plotBorderWidth||0,this.spacingBox=a.spacingBox={x:d[3],y:d[0],width:n-d[3]-d[1],height:l-d[0]-d[2]},this.plotBox=a.plotBox={x:e,y:i,width:s,height:o};let p=2*Math.floor(this.plotBorderWidth/2),u=Math.ceil(Math.max(p,c[3])/2),g=Math.ceil(Math.max(p,c[0])/2);this.clipBox={x:u,y:g,width:Math.floor(this.plotSizeX-Math.max(p,c[1])/2-u),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(p,c[2])/2-g))},t||(this.axes.forEach(function(t){t.setAxisSize(),t.setAxisTranslation()}),a.alignElements()),G(this,\"afterSetChartSize\",{skipAxes:t})}resetMargins(){G(this,\"resetMargins\");let t=this,e=t.options.chart;[\"margin\",\"spacing\"].forEach(function(i){let s=e[i],o=X(s)?s:[s,s,s,s];[\"Top\",\"Right\",\"Bottom\",\"Left\"].forEach(function(s,r){t[i][r]=V(e[i+s],o[r])})}),k.forEach(function(e,i){t[e]=V(t.margin[i],t.spacing[i])}),t.axisOffset=[0,0,0,0],t.clipOffset=[0,0,0,0]}drawChartBox(){let t=this.options.chart,e=this.renderer,i=this.chartWidth,s=this.chartHeight,o=this.styledMode,r=this.plotBGImage,a=t.backgroundColor,n=t.plotBackgroundColor,l=t.plotBackgroundImage,h=this.plotLeft,d=this.plotTop,c=this.plotWidth,p=this.plotHeight,u=this.plotBox,g=this.clipRect,f=this.clipBox,m=this.chartBackground,x=this.plotBackground,y=this.plotBorder,b,v,S,M=\"animate\";m||(this.chartBackground=m=e.rect().addClass(\"highcharts-background\").add(),M=\"attr\"),o?b=v=m.strokeWidth():(v=(b=t.borderWidth||0)+(t.shadow?8:0),S={fill:a||\"none\"},(b||m[\"stroke-width\"])&&(S.stroke=t.borderColor,S[\"stroke-width\"]=b),m.attr(S).shadow(t.shadow)),m[M]({x:v/2,y:v/2,width:i-v-b%2,height:s-v-b%2,r:t.borderRadius}),M=\"animate\",x||(M=\"attr\",this.plotBackground=x=e.rect().addClass(\"highcharts-plot-background\").add()),x[M](u),!o&&(x.attr({fill:n||\"none\"}).shadow(t.plotShadow),l&&(r?(l!==r.attr(\"href\")&&r.attr(\"href\",l),r.animate(u)):this.plotBGImage=e.image(l,h,d,c,p).add())),g?g.animate({width:f.width,height:f.height}):this.clipRect=e.clipRect(f),M=\"animate\",y||(M=\"attr\",this.plotBorder=y=e.rect().addClass(\"highcharts-plot-border\").attr({zIndex:1}).add()),o||y.attr({stroke:t.plotBorderColor,\"stroke-width\":t.plotBorderWidth||0,fill:\"none\"}),y[M](y.crisp({x:h,y:d,width:c,height:p},-y.strokeWidth())),this.isDirtyBox=!1,G(this,\"afterDrawChartBox\")}propFromSeries(){let t,e,i;let s=this,o=s.options.chart,r=s.options.series;[\"inverted\",\"angular\",\"polar\"].forEach(function(a){for(e=w[o.type],i=o[a]||e&&e.prototype[a],t=r&&r.length;!i&&t--;)(e=w[r[t].type])&&e.prototype[a]&&(i=!0);s[a]=i})}linkSeries(t){let e=this,i=e.series;i.forEach(function(t){t.linkedSeries.length=0}),i.forEach(function(t){let{linkedTo:i}=t.options;if(F(i)){let s;(s=\":previous\"===i?e.series[t.index-1]:e.get(i))&&s.linkedParent!==t&&(s.linkedSeries.push(t),t.linkedParent=s,s.enabledDataSorting&&t.setDataSortingOptions(),t.visible=V(t.options.visible,s.options.visible,t.visible))}}),G(this,\"afterLinkSeries\",{isUpdating:t})}renderSeries(){this.series.forEach(function(t){t.translate(),t.render()})}render(){let t=this.axes,e=this.colorAxis,i=this.renderer,s=this.options.chart.axisLayoutRuns||2,o=t=>{t.forEach(t=>{t.visible&&t.render()})},r=0,a=!0,n,l=0;for(let e of(this.setTitle(),G(this,\"beforeMargins\"),this.getStacks?.(),this.getMargins(!0),this.setChartSize(),t)){let{options:t}=e,{labels:i}=t;if(e.horiz&&e.visible&&i.enabled&&e.series.length&&\"colorAxis\"!==e.coll&&!this.polar){r=t.tickLength,e.createGroups();let s=new u(e,0,\"\",!0),o=s.createLabel(\"x\",i);if(s.destroy(),o&&V(i.reserveSpace,!H(t.crossing))&&(r=o.getBBox().height+i.distance+Math.max(t.offset||0,0)),r){o?.destroy();break}}}for(this.plotHeight=Math.max(this.plotHeight-r,0);(a||n||s>1)&&l(l?1:1.1),n=i/this.plotHeight>(l?1:1.05),l++}this.drawChartBox(),this.hasCartesianSeries?o(t):e&&e.length&&o(e),this.seriesGroup||(this.seriesGroup=i.g(\"series-group\").attr({zIndex:3}).shadow(this.options.chart.seriesGroupShadow).add()),this.renderSeries(),this.addCredits(),this.setResponsive&&this.setResponsive(),this.hasRendered=!0}addCredits(t){let e=this,i=Y(!0,this.options.credits,t);i.enabled&&!this.credits&&(this.credits=this.renderer.text(i.text+(this.mapCredits||\"\"),0,0).addClass(\"highcharts-credits\").on(\"click\",function(){i.href&&(A.location.href=i.href)}).attr({align:i.position.align,zIndex:8}),e.styledMode||this.credits.css(i.style),this.credits.add().align(i.position),this.credits.update=function(t){e.credits=e.credits.destroy(),e.addCredits(t)})}destroy(){let t;let e=this,i=e.axes,s=e.series,o=e.container,a=o&&o.parentNode;for(G(e,\"destroy\"),e.renderer.forExport?j(S,e):S[e.index]=void 0,r.chartCount--,e.renderTo.removeAttribute(\"data-highcharts-chart\"),Z(e),t=i.length;t--;)i[t]=i[t].destroy();for(this.scroller&&this.scroller.destroy&&this.scroller.destroy(),t=s.length;t--;)s[t]=s[t].destroy();[\"title\",\"subtitle\",\"chartBackground\",\"plotBackground\",\"plotBGImage\",\"plotBorder\",\"seriesGroup\",\"clipRect\",\"credits\",\"pointer\",\"rangeSelector\",\"legend\",\"resetZoomButton\",\"tooltip\",\"renderer\"].forEach(function(t){let i=e[t];i&&i.destroy&&(e[t]=i.destroy())}),o&&(o.innerHTML=p.emptyHTML,Z(o),a&&B(o)),U(e,function(t,i){delete e[i]})}firstRender(){let t=this,e=t.options;t.getContainer(),t.resetMargins(),t.setChartSize(),t.propFromSeries(),t.getAxes();let i=W(e.series)?e.series:[];e.series=[],i.forEach(function(e){t.initSeries(e)}),t.linkSeries(),t.setSortedData(),G(t,\"beforeRender\"),t.render(),t.pointer?.getChartPosition(),t.renderer.imgCount||t.hasLoaded||t.onload(),t.temporaryDisplay(!0)}onload(){this.callbacks.concat([this.callback]).forEach(function(t){t&&void 0!==this.index&&t.apply(this,[this])},this),G(this,\"load\"),G(this,\"render\"),D(this.index)&&this.setReflow(),this.warnIfA11yModuleNotLoaded(),this.hasLoaded=!0}warnIfA11yModuleNotLoaded(){let{options:t,title:e}=this;!t||this.accessibility||(this.renderer.boxWrapper.attr({role:\"img\",\"aria-label\":(e&&e.element.textContent||\"\").replace(/this.transform({reset:!0,trigger:\"zoom\"}))}pan(t,e){let i=this,s=\"object\"==typeof e?e:{enabled:e,type:\"x\"},o=s.type,r=o&&i[({x:\"xAxis\",xy:\"axes\",y:\"yAxis\"})[o]].filter(t=>t.options.panningEnabled&&!t.options.isInternal),a=i.options.chart;a?.panning&&(a.panning=s),G(this,\"pan\",{originalEvent:t},()=>{i.transform({axes:r,event:t,to:{x:t.chartX-(i.mouseDownX||0),y:t.chartY-(i.mouseDownY||0)},trigger:\"pan\"}),O(i.container,{cursor:\"move\"})})}transform(t){let{axes:e=this.axes,event:i,from:s={},reset:o,selection:r,to:a={},trigger:n}=t,{inverted:l,resetZoomButton:h}=this,d=!1,c;for(let t of(this.hoverPoints?.forEach(t=>t.setState()),e)){let{horiz:e,len:h,minPointOffset:p=0,options:u,reversed:g}=t,f=e?\"width\":\"height\",m=e?\"x\":\"y\",x=a[f]||t.len,y=s[f]||t.len,b=10>Math.abs(x)?1:x/y,v=(s[m]||0)+y/2-t.pos,S=v-((a[m]??t.pos)+x/2-t.pos)/b,M=g&&!l||!g&&l?-1:1;if(!o&&(v<0||v>t.len))continue;let k=t.toValue(S,!0)+p*M,C=t.toValue(S+h/b,!0)-(p*M||0),A=t.allExtremes;if(k>C&&([k,C]=[C,k]),1===b&&!o&&\"yAxis\"===t.coll&&!A){for(let e of t.series){let t=e.getExtremes(e.getProcessedData(!0).yData,!0);A??(A={dataMin:Number.MAX_VALUE,dataMax:-Number.MAX_VALUE}),H(t.dataMin)&&H(t.dataMax)&&(A.dataMin=Math.min(t.dataMin,A.dataMin),A.dataMax=Math.max(t.dataMax,A.dataMax))}t.allExtremes=A}let{dataMin:w,dataMax:T,min:P,max:L}=R(t.getExtremes(),A||{}),O=w??u.min,E=T??u.max,B=C-k,j=t.categories?0:Math.min(B,E-O),I=O-j*(D(u.min)?0:u.minPadding),z=E+j*(D(u.max)?0:u.maxPadding),G=t.allowZoomOutside||1===b||\"zoom\"!==n&&b>1,N=Math.min(u.min??I,I,G?P:I),W=Math.max(u.max??z,z,G?L:z);(!t.isOrdinal||1!==b||o)&&(k=1&&(C=k+B)),C>W&&(C=W,b>=1&&(k=C-B)),(o||t.series.length&&(k!==P||C!==L)&&k>=N&&C<=W)&&(r?r[t.coll].push({axis:t,min:k,max:C}):(t.isPanning=\"zoom\"!==n,t.setExtremes(o?void 0:k,o?void 0:C,!1,!1,{move:S,trigger:n,scale:b}),!o&&(k>N||C{delete t.selection,t.trigger=\"zoom\",this.transform(t)}):(c&&!h?this.showResetZoom():!c&&h&&(this.resetZoomButton=h.destroy()),this.redraw(\"zoom\"===n&&(this.options.chart.animation??this.pointCount<100)))),d}}return R(Q.prototype,{callbacks:[],collectionsWithInit:{xAxis:[Q.prototype.addAxis,[!0]],yAxis:[Q.prototype.addAxis,[!1]],series:[Q.prototype.addSeries]},collectionsWithUpdate:[\"xAxis\",\"yAxis\",\"series\"],propsRequireDirtyBox:[\"backgroundColor\",\"borderColor\",\"borderWidth\",\"borderRadius\",\"plotBackgroundColor\",\"plotBackgroundImage\",\"plotBorderColor\",\"plotBorderWidth\",\"plotShadow\",\"shadow\"],propsRequireReflow:[\"margin\",\"marginTop\",\"marginRight\",\"marginBottom\",\"marginLeft\",\"spacing\",\"spacingTop\",\"spacingRight\",\"spacingBottom\",\"spacingLeft\"],propsRequireUpdateSeries:[\"chart.inverted\",\"chart.polar\",\"chart.ignoreHiddenSeries\",\"chart.type\",\"colors\",\"plotOptions\",\"time\",\"tooltip\"]}),Q}),i(e,\"Extensions/ScrollablePlotArea.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{stop:o}=t,{composed:r}=e,{addEvent:a,createElement:n,css:l,defined:h,merge:d,pushUnique:c}=s;function p(){let t=this.scrollablePlotArea;(this.scrollablePixelsX||this.scrollablePixelsY)&&!t&&(this.scrollablePlotArea=t=new g(this)),t?.applyFixed()}function u(){this.chart.scrollablePlotArea&&(this.chart.scrollablePlotArea.isDirty=!0)}class g{static compose(t,e,i){c(r,this.compose)&&(a(t,\"afterInit\",u),a(e,\"afterSetChartSize\",t=>this.afterSetSize(t.target,t)),a(e,\"render\",p),a(i,\"show\",u))}static afterSetSize(t,e){let i,s,o;let{minWidth:r,minHeight:a}=t.options.chart.scrollablePlotArea||{},{clipBox:n,plotBox:l,inverted:c,renderer:p}=t;if(!p.forExport&&(r?(t.scrollablePixelsX=i=Math.max(0,r-t.chartWidth),i&&(t.scrollablePlotBox=d(t.plotBox),l.width=t.plotWidth+=i,n[c?\"height\":\"width\"]+=i,o=!0)):a&&(t.scrollablePixelsY=s=Math.max(0,a-t.chartHeight),h(s)&&(t.scrollablePlotBox=d(t.plotBox),l.height=t.plotHeight+=s,n[c?\"width\":\"height\"]+=s,o=!1)),h(o)&&!e.skipAxes))for(let e of t.axes)e.horiz===o&&(e.setAxisSize(),e.setAxisTranslation())}constructor(t){let e;let s=t.options.chart,o=i.getRendererType(),r=s.scrollablePlotArea||{},h=this.moveFixedElements.bind(this),d={WebkitOverflowScrolling:\"touch\",overflowX:\"hidden\",overflowY:\"hidden\"};t.scrollablePixelsX&&(d.overflowX=\"auto\"),t.scrollablePixelsY&&(d.overflowY=\"auto\"),this.chart=t;let c=this.parentDiv=n(\"div\",{className:\"highcharts-scrolling-parent\"},{position:\"relative\"},t.renderTo),p=this.scrollingContainer=n(\"div\",{className:\"highcharts-scrolling\"},d,c),u=this.innerContainer=n(\"div\",{className:\"highcharts-inner-container\"},void 0,p),g=this.fixedDiv=n(\"div\",{className:\"highcharts-fixed\"},{position:\"absolute\",overflow:\"hidden\",pointerEvents:\"none\",zIndex:(s.style?.zIndex||0)+2,top:0},void 0,!0),f=this.fixedRenderer=new o(g,t.chartWidth,t.chartHeight,s.style);this.mask=f.path().attr({fill:s.backgroundColor||\"#fff\",\"fill-opacity\":r.opacity??.85,zIndex:-1}).addClass(\"highcharts-scrollable-mask\").add(),p.parentNode.insertBefore(g,p),l(t.renderTo,{overflow:\"visible\"}),a(t,\"afterShowResetZoom\",h),a(t,\"afterApplyDrilldown\",h),a(t,\"afterLayOutTitles\",h),a(p,\"scroll\",()=>{let{pointer:i,hoverPoint:s}=t;i&&(delete i.chartPosition,s&&(e=s),i.runPointActions(void 0,e,!0))}),u.appendChild(t.container)}applyFixed(){let{chart:t,fixedRenderer:e,isDirty:i,scrollingContainer:s}=this,{axisOffset:r,chartWidth:a,chartHeight:n,container:d,plotHeight:c,plotLeft:p,plotTop:u,plotWidth:g,scrollablePixelsX:f=0,scrollablePixelsY:m=0}=t,{scrollPositionX:x=0,scrollPositionY:y=0}=t.options.chart.scrollablePlotArea||{},b=a+f,v=n+m;e.setSize(a,n),(i??!0)&&(this.isDirty=!1,this.moveFixedElements()),o(t.container),l(d,{width:`${b}px`,height:`${v}px`}),t.renderer.boxWrapper.attr({width:b,height:v,viewBox:[0,0,b,v].join(\" \")}),t.chartBackground?.attr({width:b,height:v}),l(s,{width:`${a}px`,height:`${n}px`}),h(i)||(s.scrollLeft=f*x,s.scrollTop=m*y);let S=u-r[0]-1,M=p-r[3]-1,k=u+c+r[2]+1,C=p+g+r[1]+1,A=p+g-f,w=u+c-m,T=[[\"M\",0,0]];f?T=[[\"M\",0,S],[\"L\",p-1,S],[\"L\",p-1,k],[\"L\",0,k],[\"Z\"],[\"M\",A,S],[\"L\",a,S],[\"L\",a,k],[\"L\",A,k],[\"Z\"]]:m&&(T=[[\"M\",M,0],[\"L\",M,u-1],[\"L\",C,u-1],[\"L\",C,0],[\"Z\"],[\"M\",M,w],[\"L\",M,n],[\"L\",C,n],[\"L\",C,w],[\"Z\"]]),\"adjustHeight\"!==t.redrawTrigger&&this.mask.attr({d:T})}moveFixedElements(){let t;let{container:e,inverted:i,scrollablePixelsX:s,scrollablePixelsY:o}=this.chart,r=this.fixedRenderer,a=[\".highcharts-breadcrumbs-group\",\".highcharts-contextbutton\",\".highcharts-caption\",\".highcharts-credits\",\".highcharts-legend\",\".highcharts-legend-checkbox\",\".highcharts-navigator-series\",\".highcharts-navigator-xaxis\",\".highcharts-navigator-yaxis\",\".highcharts-navigator\",\".highcharts-reset-zoom\",\".highcharts-drillup-button\",\".highcharts-scrollbar\",\".highcharts-subtitle\",\".highcharts-title\"];for(let n of(s&&!i?t=\".highcharts-yaxis\":s&&i?t=\".highcharts-xaxis\":o&&!i?t=\".highcharts-xaxis\":o&&i&&(t=\".highcharts-yaxis\"),t&&a.push(`${t}:not(.highcharts-radial-axis)`,`${t}-labels:not(.highcharts-radial-axis-labels)`),a))[].forEach.call(e.querySelectorAll(n),t=>{(t.namespaceURI===r.SVG_NS?r.box:r.box.parentNode).appendChild(t),t.style.pointerEvents=\"auto\"})}}return g}),i(e,\"Core/Axis/Stacking/StackItem.js\",[e[\"Core/Templating.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{format:s}=t,{series:o}=e,{destroyObjectProperties:r,fireEvent:a,isNumber:n,pick:l}=i;return class{constructor(t,e,i,s,o){let r=t.chart.inverted,a=t.reversed;this.axis=t;let n=this.isNegative=!!i!=!!a;this.options=e=e||{},this.x=s,this.total=null,this.cumulative=null,this.points={},this.hasValidPoints=!1,this.stack=o,this.leftCliff=0,this.rightCliff=0,this.alignOptions={align:e.align||(r?n?\"left\":\"right\":\"center\"),verticalAlign:e.verticalAlign||(r?\"middle\":n?\"bottom\":\"top\"),y:e.y,x:e.x},this.textAlign=e.textAlign||(r?n?\"right\":\"left\":\"center\")}destroy(){r(this,this.axis)}render(t){let e=this.axis.chart,i=this.options,o=i.format,r=o?s(o,this,e):i.formatter.call(this);if(this.label)this.label.attr({text:r,visibility:\"hidden\"});else{this.label=e.renderer.label(r,null,void 0,i.shape,void 0,void 0,i.useHTML,!1,\"stack-labels\");let s={r:i.borderRadius||0,text:r,padding:l(i.padding,5),visibility:\"hidden\"};e.styledMode||(s.fill=i.backgroundColor,s.stroke=i.borderColor,s[\"stroke-width\"]=i.borderWidth,this.label.css(i.style||{})),this.label.attr(s),this.label.added||this.label.add(t)}this.label.labelrank=e.plotSizeY,a(this,\"afterRender\")}setOffset(t,e,i,s,r,h){let{alignOptions:d,axis:c,label:p,options:u,textAlign:g}=this,f=c.chart,m=this.getStackBox({xOffset:t,width:e,boxBottom:i,boxTop:s,defaultX:r,xAxis:h}),{verticalAlign:x}=d;if(p&&m){let t=p.getBBox(void 0,0),e=p.padding,i=\"justify\"===l(u.overflow,\"justify\"),s;d.x=u.x||0,d.y=u.y||0;let{x:r,y:a}=this.adjustStackPosition({labelBox:t,verticalAlign:x,textAlign:g});m.x-=r,m.y-=a,p.align(d,!1,m),(s=f.isInsidePlot(p.alignAttr.x+d.x+r,p.alignAttr.y+d.y+a))||(i=!1),i&&o.prototype.justifyDataLabel.call(c,p,d,p.alignAttr,t,m),p.attr({x:p.alignAttr.x,y:p.alignAttr.y,rotation:u.rotation,rotationOriginX:t.width*({left:0,center:.5,right:1})[u.textAlign||\"center\"],rotationOriginY:t.height/2}),l(!i&&u.crop,!0)&&(s=n(p.x)&&n(p.y)&&f.isInsidePlot(p.x-e+(p.width||0),p.y)&&f.isInsidePlot(p.x+e,p.y)),p[s?\"show\":\"hide\"]()}a(this,\"afterSetOffset\",{xOffset:t,width:e})}adjustStackPosition({labelBox:t,verticalAlign:e,textAlign:i}){let s={bottom:0,middle:1,top:2,right:1,center:0,left:-1},o=s[e],r=s[i];return{x:t.width/2+t.width/2*r,y:t.height/2*o}}getStackBox(t){let e=this.axis,i=e.chart,{boxTop:s,defaultX:o,xOffset:r,width:a,boxBottom:h}=t,d=e.stacking.usePercentage?100:l(s,this.total,0),c=e.toPixels(d),p=t.xAxis||i.xAxis[0],u=l(o,p.translate(this.x))+r,g=Math.abs(c-e.toPixels(h||n(e.min)&&e.logarithmic&&e.logarithmic.lin2log(e.min)||0)),f=i.inverted,m=this.isNegative;return f?{x:(m?c:c-g)-i.plotLeft,y:p.height-u-a,width:g,height:a}:{x:u+p.transB-i.plotLeft,y:(m?c-g:c)-i.plotTop,width:a,height:g}}}}),i(e,\"Core/Axis/Stacking/StackingAxis.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){var r;let{getDeferredAnimation:a}=t,{series:{prototype:n}}=i,{addEvent:l,correctFloat:h,defined:d,destroyObjectProperties:c,fireEvent:p,isArray:u,isNumber:g,objectEach:f,pick:m}=o;function x(){let t=this.inverted;this.axes.forEach(t=>{t.stacking&&t.stacking.stacks&&t.hasVisibleSeries&&(t.stacking.oldStacks=t.stacking.stacks)}),this.series.forEach(e=>{let i=e.xAxis&&e.xAxis.options||{};e.options.stacking&&e.reserveSpace()&&(e.stackKey=[e.type,m(e.options.stack,\"\"),t?i.top:i.left,t?i.height:i.width].join(\",\"))})}function y(){let t=this.stacking;if(t){let e=t.stacks;f(e,(t,i)=>{c(t),delete e[i]}),t.stackTotalGroup?.destroy()}}function b(){this.stacking||(this.stacking=new A(this))}function v(t,e,i,s){return!d(t)||t.x!==e||s&&t.stackKey!==s?t={x:e,index:0,key:s,stackKey:s}:t.index++,t.key=[i,e,t.index].join(\",\"),t}function S(){let t;let e=this,i=e.yAxis,s=e.stackKey||\"\",o=i.stacking.stacks,r=e.processedXData,a=e.options.stacking,n=e[a+\"Stacker\"];n&&[s,\"-\"+s].forEach(i=>{let s=r.length,a,l,h;for(;s--;)a=r[s],t=e.getStackIndicator(t,a,e.index,i),l=o[i]?.[a],(h=l?.points[t.key||\"\"])&&n.call(e,h,l,s)})}function M(t,e,i){let s=e.total?100/e.total:0;t[0]=h(t[0]*s),t[1]=h(t[1]*s),this.stackedYData[i]=t[1]}function k(t){(this.is(\"column\")||this.is(\"columnrange\"))&&(this.options.centerInCategory&&!this.options.stacking&&this.chart.series.length>1?n.setStackedPoints.call(this,t,\"group\"):t.stacking.resetStacks())}function C(t,e){let i,o,r,a,n,l,c,p,g;let f=e||this.options.stacking;if(!f||!this.reserveSpace()||(({group:\"xAxis\"})[f]||\"yAxis\")!==t.coll)return;let x=this.processedXData,y=this.processedYData,b=[],v=y.length,S=this.options,M=S.threshold||0,k=S.startFromThreshold?M:0,C=S.stack,A=e?`${this.type},${f}`:this.stackKey||\"\",w=\"-\"+A,T=this.negStacks,P=t.stacking,L=P.stacks,O=P.oldStacks;for(P.stacksTouched+=1,c=0;c0&&!1===this.singleStacks&&(r.points[l][0]=r.points[this.index+\",\"+p+\",0\"][0])):(delete r.points[l],delete r.points[this.index]);let e=r.total||0;\"percent\"===f?(a=o?A:w,e=T&&L[a]?.[p]?(a=L[a][p]).total=Math.max(a.total||0,e)+Math.abs(g)||0:h(e+(Math.abs(g)||0))):\"group\"===f?(u(g)&&(g=g[0]),null!==g&&e++):e=h(e+(g||0)),\"group\"===f?r.cumulative=(e||1)-1:r.cumulative=h(m(r.cumulative,k)+(g||0)),r.total=e,null!==g&&(r.points[l].push(r.cumulative),b[c]=r.cumulative,r.hasValidPoints=!0)}\"percent\"===f&&(P.usePercentage=!0),\"group\"!==f&&(this.stackedYData=b),P.oldStacks={}}class A{constructor(t){this.oldStacks={},this.stacks={},this.stacksTouched=0,this.axis=t}buildStacks(){let t,e;let i=this.axis,s=i.series,o=\"xAxis\"===i.coll,r=i.options.reversedStacks,a=s.length;for(this.resetStacks(),this.usePercentage=!1,e=a;e--;)t=s[r?e:a-e-1],o&&t.setGroupedPoints(i),t.setStackedPoints(i);if(!o)for(e=0;e{f(t,t=>{t.cumulative=t.total})}))}resetStacks(){f(this.stacks,t=>{f(t,(e,i)=>{g(e.touched)&&e.touched{f(t,t=>{t.render(r)})}),r.animate({opacity:1},o)}}return(r||(r={})).compose=function(t,e,i){let s=e.prototype,o=i.prototype;s.getStacks||(l(t,\"init\",b),l(t,\"destroy\",y),s.getStacks=x,o.getStackIndicator=v,o.modifyStacks=S,o.percentStacker=M,o.setGroupedPoints=k,o.setStackedPoints=C)},r}),i(e,\"Series/Line/LineSeries.js\",[e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{defined:s,merge:o,isObject:r}=i;class a extends t{drawGraph(){let t=this.options,e=(this.gappedPath||this.getGraphPath).call(this),i=this.chart.styledMode;[this,...this.zones].forEach((s,a)=>{let n,l=s.graph,h=l?\"animate\":\"attr\",d=s.dashStyle||t.dashStyle;l?(l.endX=this.preventGraphAnimation?null:e.xMap,l.animate({d:e})):e.length&&(s.graph=l=this.chart.renderer.path(e).addClass(\"highcharts-graph\"+(a?` highcharts-zone-graph-${a-1} `:\" \")+(a&&s.className||\"\")).attr({zIndex:1}).add(this.group)),l&&!i&&(n={stroke:!a&&t.lineColor||s.color||this.color||\"#cccccc\",\"stroke-width\":t.lineWidth||0,fill:this.fillGraph&&this.color||\"none\"},d?n.dashstyle=d:\"square\"!==t.linecap&&(n[\"stroke-linecap\"]=n[\"stroke-linejoin\"]=\"round\"),l[h](n).shadow(a<2&&t.shadow&&o({filterUnits:\"userSpaceOnUse\"},r(t.shadow)?t.shadow:{}))),l&&(l.startX=e.xMap,l.isArea=e.isArea)})}getGraphPath(t,e,i){let o=this,r=o.options,a=[],n=[],l,h=r.step,d=(t=t||o.points).reversed;return d&&t.reverse(),(h=({right:1,center:2})[h]||h&&3)&&d&&(h=4-h),(t=this.getValidPoints(t,!1,!(r.connectNulls&&!e&&!i))).forEach(function(d,c){let p;let u=d.plotX,g=d.plotY,f=t[c-1],m=d.isNull||\"number\"!=typeof g;(d.leftCliff||f&&f.rightCliff)&&!i&&(l=!0),m&&!s(e)&&c>0?l=!r.connectNulls:m&&!e?l=!0:(0===c||l?p=[[\"M\",d.plotX,d.plotY]]:o.getPointSpline?p=[o.getPointSpline(t,d,c)]:h?(p=1===h?[[\"L\",f.plotX,g]]:2===h?[[\"L\",(f.plotX+u)/2,f.plotY],[\"L\",(f.plotX+u)/2,g]]:[[\"L\",u,f.plotY]]).push([\"L\",u,g]):p=[[\"L\",u,g]],n.push(d.x),h&&(n.push(d.x),2===h&&n.push(d.x)),a.push.apply(a,p),l=!1)}),a.xMap=n,o.graphPath=a,a}}return a.defaultOptions=o(t.defaultOptions,{legendSymbol:\"lineMarker\"}),e.registerSeriesType(\"line\",a),a}),i(e,\"Series/Area/AreaSeries.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{seriesTypes:{line:i}}=t,{extend:s,merge:o,objectEach:r,pick:a}=e;class n extends i{drawGraph(){this.areaPath=[],super.drawGraph.apply(this);let{areaPath:t,options:e}=this;[this,...this.zones].forEach((i,s)=>{let o={},r=i.fillColor||e.fillColor,a=i.area,n=a?\"animate\":\"attr\";a?(a.endX=this.preventGraphAnimation?null:t.xMap,a.animate({d:t})):(o.zIndex=0,(a=i.area=this.chart.renderer.path(t).addClass(\"highcharts-area\"+(s?` highcharts-zone-area-${s-1} `:\" \")+(s&&i.className||\"\")).add(this.group)).isArea=!0),this.chart.styledMode||(o.fill=r||i.color||this.color,o[\"fill-opacity\"]=r?1:e.fillOpacity??.75,a.css({pointerEvents:this.stickyTracking?\"none\":\"auto\"})),a[n](o),a.startX=t.xMap,a.shiftUnit=e.step?2:1})}getGraphPath(t){let e,s,o;let r=i.prototype.getGraphPath,n=this.options,l=n.stacking,h=this.yAxis,d=[],c=[],p=this.index,u=h.stacking.stacks[this.stackKey],g=n.threshold,f=Math.round(h.getThreshold(n.threshold)),m=a(n.connectNulls,\"percent\"===l),x=function(i,s,o){let r=t[i],a=l&&u[r.x].points[p],n=r[o+\"Null\"]||0,m=r[o+\"Cliff\"]||0,x,y,b=!0;m||n?(x=(n?a[0]:a[1])+m,y=a[0]+m,b=!!n):!l&&t[s]&&t[s].isNull&&(x=y=g),void 0!==x&&(c.push({plotX:e,plotY:null===x?f:h.getThreshold(x),isNull:b,isCliff:!0}),d.push({plotX:e,plotY:null===y?f:h.getThreshold(y),doCurve:!1}))};t=t||this.points,l&&(t=this.getStackPoints(t));for(let i=0,r=t.length;it.visible);s.forEach(function(t,r){let f=0,m,x;if(h[t]&&!h[t].isNull)i.push(h[t]),[-1,1].forEach(function(i){let o=1===i?\"rightNull\":\"leftNull\",a=l[s[r+i]],n=0;if(a){let i=u;for(;i>=0&&i=0&&ei&&r>h?(r=Math.max(i,h),n=2*h-r):rp&&n>h?(n=Math.max(p,h),r=2*h-n):n=Math.abs(e)&&n>.5;return s=n-(e=Math.round(e)+a),l&&s&&(e-=1,s+=1),{x:t,y:e,width:i,height:s}}adjustForMissingColumns(t,e,i,s){if(!i.isNull&&s.columnCount>1){let o=this.xAxis.series.filter(t=>t.visible).map(t=>t.index),r=0,a=0;y(this.xAxis.stacking?.stacks,t=>{if(\"number\"==typeof i.x){let e=t[i.x.toString()];if(e&&g(e.points[this.index])){let t=Object.keys(e.points).filter(t=>!t.match(\",\")&&e.points[t]&&e.points[t].length>1).map(parseFloat).filter(t=>-1!==o.indexOf(t)).sort((t,e)=>e-t);r=t.indexOf(this.index),a=t.length}}}),r=this.xAxis.reversed?a-1-r:r;let n=(a-1)*s.paddedWidth+e;t=(i.plotX||0)+n/2-e-r*s.paddedWidth}return t}translate(){let t=this,e=t.chart,i=t.options,s=t.dense=t.closestPointRange*t.xAxis.transA<2,r=t.borderWidth=x(i.borderWidth,s?0:1),a=t.xAxis,n=t.yAxis,l=i.threshold,h=x(i.minPointLength,5),p=t.getColumnMetrics(),g=p.width,m=t.pointXOffset=p.offset,y=t.dataMin,b=t.dataMax,v=t.barW=Math.max(g,1+2*r),S=t.translatedThreshold=n.getThreshold(l);e.inverted&&(S-=.5),i.pointPadding&&(v=Math.ceil(v)),o.prototype.translate.apply(t),t.points.forEach(function(s){let o=x(s.yBottom,S),r=999+Math.abs(o),u=s.plotX||0,M=d(s.plotY,-r,n.len+r),k,C=Math.min(M,o),A=Math.max(M,o)-C,w=g,T=u+m,P=v;h&&Math.abs(A)h?o-h:S-(k?h:0)),c(s.options.pointWidth)&&(T-=Math.round(((w=P=Math.ceil(s.options.pointWidth))-g)/2)),i.centerInCategory&&!i.stacking&&(T=t.adjustForMissingColumns(T,w,s,p)),s.barX=T,s.pointWidth=w,s.tooltipPos=e.inverted?[d(n.len+n.pos-e.plotLeft-M,n.pos-e.plotLeft,n.len+n.pos-e.plotLeft),a.len+a.pos-e.plotTop-T-P/2,A]:[a.left-e.plotLeft+T+P/2,d(M+n.pos-e.plotTop,n.pos-e.plotTop,n.len+n.pos-e.plotTop),A],s.shapeType=t.pointClass.prototype.shapeType||\"roundedRect\",s.shapeArgs=t.crispCol(T,s.isNull?S:C,P,s.isNull?0:A)}),u(this,\"afterColumnTranslate\")}drawGraph(){this.group[this.dense?\"addClass\":\"removeClass\"](\"highcharts-dense-data\")}pointAttribs(t,e){let i=this.options,s=this.pointAttrToOptions||{},o=s.stroke||\"borderColor\",r=s[\"stroke-width\"]||\"borderWidth\",a,n,h,d=t&&t.color||this.color,c=t&&t[o]||i[o]||d,p=t&&t.options.dashStyle||i.dashStyle,u=t&&t[r]||i[r]||this[r]||0,g=x(t&&t.opacity,i.opacity,1);t&&this.zones.length&&(n=t.getZone(),d=t.options.color||n&&(n.color||t.nonZonedColor)||this.color,n&&(c=n.borderColor||c,p=n.dashStyle||p,u=n.borderWidth||u)),e&&t&&(h=(a=m(i.states[e],t.options.states&&t.options.states[e]||{})).brightness,d=a.color||void 0!==h&&l(d).brighten(a.brightness).get()||d,c=a[o]||c,u=a[r]||u,p=a.dashStyle||p,g=x(a.opacity,g));let f={fill:d,stroke:c,\"stroke-width\":u,opacity:g};return p&&(f.dashstyle=p),f}drawPoints(t=this.points){let e;let i=this,s=this.chart,o=i.options,r=s.renderer,a=o.animationLimit||250;t.forEach(function(t){let n=t.plotY,l=t.graphic,h=!!l,d=l&&s.pointCountt?.enabled)}function i(t,e,i,s,o){let r=this.chart,l=this.isCartesian&&r.inverted,h=this.enabledDataSorting,d=t.plotX,p=t.plotY,g=i.rotation||0,f=a(d)&&a(p)&&r.isInsidePlot(d,Math.round(p),{inverted:l,paneCoordinates:!0,series:this}),m=0===g&&\"justify\"===u(i.overflow,h?\"none\":\"justify\"),x=this.visible&&!1!==t.visible&&a(d)&&(t.series.forceDL||h&&!m||f||u(i.inside,!!this.options.stacking)&&s&&r.isInsidePlot(d,l?s.x+1:s.y+s.height-1,{inverted:l,paneCoordinates:!0,series:this})),y=t.pos();if(x&&y){var b;let a=e.getBBox(),l=e.getBBox(void 0,0),d={right:1,center:.5}[i.align||0]||0,p={bottom:1,middle:.5}[i.verticalAlign||0]||0;if(s=n({x:y[0],y:Math.round(y[1]),width:0,height:0},s||{}),n(i,{width:a.width,height:a.height}),b=s,h&&this.xAxis&&!m&&this.setDataLabelStartPos(t,e,o,f,b),e.align(c(i,{width:l.width,height:l.height}),!1,s,!1),e.alignAttr.x+=d*(l.width-a.width),e.alignAttr.y+=p*(l.height-a.height),e[e.placed?\"animate\":\"attr\"]({x:e.alignAttr.x+(a.width-l.width)/2,y:e.alignAttr.y+(a.height-l.height)/2,rotationOriginX:(e.width||0)/2,rotationOriginY:(e.height||0)/2}),m&&s.height>=0)this.justifyDataLabel(e,i,e.alignAttr,a,s,o);else if(u(i.crop,!0)){let{x:t,y:i}=e.alignAttr;x=r.isInsidePlot(t,i,{paneCoordinates:!0,series:this})&&r.isInsidePlot(t+a.width-1,i+a.height-1,{paneCoordinates:!0,series:this})}i.shape&&!g&&e[o?\"attr\":\"animate\"]({anchorX:y[0],anchorY:y[1]})}o&&h&&(e.placed=!1),x||h&&!m?(e.show(),e.placed=!0):(e.hide(),e.placed=!1)}function s(){return this.plotGroup(\"dataLabelsGroup\",\"data-labels\",this.hasRendered?\"inherit\":\"hidden\",this.options.dataLabels.zIndex||6)}function m(t){let e=this.hasRendered||0,i=this.initDataLabelsGroup().attr({opacity:+e});return!e&&i&&(this.visible&&i.show(),this.options.animation?i.animate({opacity:1},t):i.attr({opacity:1})),i}function x(t){let e;t=t||this.points;let i=this,s=i.chart,n=i.options,h=s.renderer,{backgroundColor:c,plotBackgroundColor:m}=s.options.chart,x=h.getContrast(d(m)&&m||d(c)&&c||\"#000000\"),y=v(i),{animation:S,defer:M}=y[0],k=M?o(s,S,i):{defer:0,duration:0};l(this,\"drawDataLabels\"),i.hasDataLabels?.()&&(e=this.initDataLabels(k),t.forEach(t=>{let o=t.dataLabels||[];f(b(y,t.dlOptions||t.options?.dataLabels)).forEach((l,c)=>{let f=l.enabled&&(t.visible||t.dataLabelOnHidden)&&(!t.isNull||t.dataLabelOnNull)&&function(t,e){let i=e.filter;if(i){let e=i.operator,s=t[i.property],o=i.value;return\">\"===e&&s>o||\"<\"===e&&s=\"===e&&s>=o||\"<=\"===e&&s<=o||\"==\"===e&&s==o||\"===\"===e&&s===o||\"!=\"===e&&s!=o||\"!==\"===e&&s!==o}return!0}(t,l),{backgroundColor:m,borderColor:y,distance:b,style:v={}}=l,S,M,k,C,A={},w=o[c],T=!w,P;if(f&&(M=u(l[t.formatPrefix+\"Format\"],l.format),S=t.getLabelConfig(),k=a(M)?r(M,S,s):(l[t.formatPrefix+\"Formatter\"]||l.formatter).call(S,l),C=l.rotation,!s.styledMode&&(v.color=u(l.color,v.color,d(i.color)?i.color:void 0,\"#000000\"),\"contrast\"===v.color?(\"none\"!==m&&(P=m),t.contrastColor=h.getContrast(\"auto\"!==P&&P||t.color||i.color),v.color=P||!a(b)&&l.inside||0>g(b||0)||n.stacking?t.contrastColor:x):delete t.contrastColor,n.cursor&&(v.cursor=n.cursor)),A={r:l.borderRadius||0,rotation:C,padding:l.padding,zIndex:1},s.styledMode||(A.fill=\"auto\"===m?t.color:m,A.stroke=\"auto\"===y?t.color:y,A[\"stroke-width\"]=l.borderWidth),p(A,(t,e)=>{void 0===t&&delete A[e]})),!w||f&&a(k)&&!!w.div==!!l.useHTML&&(w.rotation&&l.rotation||w.rotation===l.rotation)||(w=void 0,T=!0),f&&a(k)&&(w?A.text=k:(w=h.label(k,0,0,l.shape,void 0,void 0,l.useHTML,void 0,\"data-label\")).addClass(\" highcharts-data-label-color-\"+t.colorIndex+\" \"+(l.className||\"\")+(l.useHTML?\" highcharts-tracker\":\"\")),w)){w.options=l,w.attr(A),s.styledMode||w.css(v).shadow(l.shadow);let r=l[t.formatPrefix+\"TextPath\"]||l.textPath;r&&!l.useHTML&&(w.setTextPath(t.getDataLabelPath?.(w)||t.graphic,r),t.dataLabelPath&&!r.enabled&&(t.dataLabelPath=t.dataLabelPath.destroy())),w.added||w.add(e),i.alignDataLabel(t,w,l,void 0,T),w.isActive=!0,o[c]&&o[c]!==w&&o[c].destroy(),o[c]=w}});let l=o.length;for(;l--;)o[l]&&o[l].isActive?o[l].isActive=!1:(o[l]?.destroy(),o.splice(l,1));t.dataLabel=o[0],t.dataLabels=o})),l(this,\"afterDrawDataLabels\")}function y(t,e,i,s,o,r){let a=this.chart,n=e.align,l=e.verticalAlign,h=t.box?0:t.padding||0,{x:d=0,y:c=0}=e,p,u;return(p=(i.x||0)+h)<0&&(\"right\"===n&&d>=0?(e.align=\"left\",e.inside=!0):d-=p,u=!0),(p=(i.x||0)+s.width-h)>a.plotWidth&&(\"left\"===n&&d<=0?(e.align=\"right\",e.inside=!0):d+=a.plotWidth-p,u=!0),(p=i.y+h)<0&&(\"bottom\"===l&&c>=0?(e.verticalAlign=\"top\",e.inside=!0):c-=p,u=!0),(p=(i.y||0)+s.height-h)>a.plotHeight&&(\"top\"===l&&c<=0?(e.verticalAlign=\"bottom\",e.inside=!0):c+=a.plotHeight-p,u=!0),u&&(e.x=d,e.y=c,t.placed=!r,t.align(e,void 0,o)),u}function b(t,e){let i=[],s;if(h(t)&&!h(e))i=t.map(function(t){return c(t,e)});else if(h(e)&&!h(t))i=e.map(function(e){return c(t,e)});else if(h(t)||h(e)){if(h(t)&&h(e))for(s=Math.max(t.length,e.length);s--;)i[s]=c(t[s],e[s])}else i=c(t,e);return i}function v(t){let e=t.chart.options.plotOptions;return f(b(b(e?.series?.dataLabels,e?.[t.type]?.dataLabels),t.options.dataLabels))}function S(t,e,i,s,o){let r=this.chart,a=r.inverted,n=this.xAxis,l=n.reversed,h=((a?e.height:e.width)||0)/2,d=t.pointWidth,c=d?d/2:0;e.startXPos=a?o.x:l?-h-c:n.width-h+c,e.startYPos=a?l?this.yAxis.height-h+c:-h-c:o.y,s?\"hidden\"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0},void 0,e.hide),r.hasRendered&&(i&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)}t.compose=function(t){let o=t.prototype;o.initDataLabels||(o.initDataLabels=m,o.initDataLabelsGroup=s,o.alignDataLabel=i,o.drawDataLabels=x,o.justifyDataLabel=y,o.setDataLabelStartPos=S,o.hasDataLabels=e)}}(s||(s={})),s}),i(e,\"Series/Column/ColumnDataLabel.js\",[e[\"Core/Series/DataLabel.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var o;let{composed:r}=e,{series:a}=i,{merge:n,pick:l,pushUnique:h}=s;return function(e){function i(t,e,i,s,o){let r=this.chart.inverted,h=t.series,d=(h.xAxis?h.xAxis.len:this.chart.plotSizeX)||0,c=(h.yAxis?h.yAxis.len:this.chart.plotSizeY)||0,p=t.dlBox||t.shapeArgs,u=l(t.below,t.plotY>l(this.translatedThreshold,c)),g=l(i.inside,!!this.options.stacking);if(p){if(s=n(p),!(\"allow\"===i.overflow&&!1===i.crop)){s.y<0&&(s.height+=s.y,s.y=0);let t=s.y+s.height-c;t>0&&t {series.name}
',pointFormat:\"x: {point.x}
y: {point.y}
\"}}}),i(e,\"Series/Scatter/ScatterSeries.js\",[e[\"Series/Scatter/ScatterSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{column:s,line:o}=e.seriesTypes,{addEvent:r,extend:a,merge:n}=i;class l extends o{applyJitter(){let t=this,e=this.options.jitter,i=this.points.length;e&&this.points.forEach(function(s,o){[\"x\",\"y\"].forEach(function(r,a){let n,l=\"plot\"+r.toUpperCase(),h,d,c;e[r]&&!s.isNull&&(n=t[r+\"Axis\"],c=e[r]*n.transA,n&&!n.isLog&&(h=Math.max(0,s[l]-c),d=Math.min(n.len,s[l]+c),s[l]=h+(d-h)*function(t){let e=1e4*Math.sin(t);return e-Math.floor(e)}(o+a*i),\"x\"===r&&(s.clientX=s.plotX)))})})}drawGraph(){this.options.lineWidth?super.drawGraph():this.graph&&(this.graph=this.graph.destroy())}}return l.defaultOptions=n(o.defaultOptions,t),a(l.prototype,{drawTracker:s.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"]}),r(l,\"afterTranslate\",function(){this.applyJitter()}),e.registerSeriesType(\"scatter\",l),l}),i(e,\"Series/CenteredUtilities.js\",[e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s,o;let{deg2rad:r}=t,{fireEvent:a,isNumber:n,pick:l,relativeLength:h}=i;return(o=s||(s={})).getCenter=function(){let t=this.options,i=this.chart,s=2*(t.slicedOffset||0),o=i.plotWidth-2*s,r=i.plotHeight-2*s,d=t.center,c=Math.min(o,r),p=t.thickness,u,g=t.size,f=t.innerSize||0,m,x;\"string\"==typeof g&&(g=parseFloat(g)),\"string\"==typeof f&&(f=parseFloat(f));let y=[l(d[0],\"50%\"),l(d[1],\"50%\"),l(g&&g<0?void 0:t.size,\"100%\"),l(f&&f<0?void 0:t.innerSize||0,\"0%\")];for(!i.angular||this instanceof e||(y[3]=0),m=0;m<4;++m)x=y[m],u=m<2||2===m&&/%$/.test(x),y[m]=h(x,[o,r,c,y[2]][m])+(u?s:0);return y[3]>y[2]&&(y[3]=y[2]),n(p)&&2*p0&&(y[3]=y[2]-2*p),a(this,\"afterGetCenter\",{positions:y}),y},o.getStartAndEndRadians=function(t,e){let i=n(t)?t:0,s=n(e)&&e>i&&e-i<360?e:i+360;return{start:r*(i+-90),end:r*(s+-90)}},s}),i(e,\"Series/Pie/PiePoint.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{setAnimation:s}=t,{addEvent:o,defined:r,extend:a,isNumber:n,pick:l,relativeLength:h}=i;class d extends e{getConnectorPath(t){let e=t.dataLabelPosition,i=t.options||{},s=i.connectorShape,o=this.connectorShapes[s]||s;return e&&o.call(this,{...e.computed,alignment:e.alignment},e.connectorPosition,i)||[]}getTranslate(){return this.sliced&&this.slicedTranslation||{translateX:0,translateY:0}}haloPath(t){let e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+t,e.r+t,{innerR:e.r-1,start:e.start,end:e.end,borderRadius:e.borderRadius})}constructor(t,e,i){super(t,e,i),this.half=0,this.name??(this.name=\"Slice\");let s=t=>{this.slice(\"select\"===t.type)};o(this,\"select\",s),o(this,\"unselect\",s)}isValid(){return n(this.y)&&this.y>=0}setVisible(t,e=!0){t!==this.visible&&this.update({visible:t??!this.visible},e,void 0,!1)}slice(t,e,i){let o=this.series;s(i,o.chart),e=l(e,!0),this.sliced=this.options.sliced=t=r(t)?t:!this.sliced,o.options.data[o.data.indexOf(this)]=this.options,this.graphic&&this.graphic.animate(this.getTranslate())}}return a(d.prototype,{connectorShapes:{fixedOffset:function(t,e,i){let s=e.breakAt,o=e.touchingSliceAt,r=i.softConnector?[\"C\",t.x+(\"left\"===t.alignment?-5:5),t.y,2*s.x-o.x,2*s.y-o.y,s.x,s.y]:[\"L\",s.x,s.y];return[[\"M\",t.x,t.y],r,[\"L\",o.x,o.y]]},straight:function(t,e){let i=e.touchingSliceAt;return[[\"M\",t.x,t.y],[\"L\",i.x,i.y]]},crookedLine:function(t,e,i){let{breakAt:s,touchingSliceAt:o}=e,{series:r}=this,[a,n,l]=r.center,d=l/2,{plotLeft:c,plotWidth:p}=r.chart,u=\"left\"===t.alignment,{x:g,y:f}=t,m=s.x;if(i.crookDistance){let t=h(i.crookDistance,1);m=u?a+d+(p+c-a-d)*(1-t):c+(a-d)*t}else m=a+(n-f)*Math.tan((this.angle||0)-Math.PI/2);let x=[[\"M\",g,f]];return(u?m<=g&&m>=s.x:m>=g&&m<=s.x)&&x.push([\"L\",m,f]),x.push([\"L\",s.x,s.y],[\"L\",o.x,o.y]),x}}}),d}),i(e,\"Series/Pie/PieSeriesDefaults.js\",[],function(){return{borderRadius:3,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{connectorPadding:5,connectorShape:\"crookedLine\",crookDistance:void 0,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:\"#ffffff\",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}}}),i(e,\"Series/Pie/PieSeries.js\",[e[\"Series/CenteredUtilities.js\"],e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Globals.js\"],e[\"Series/Pie/PiePoint.js\"],e[\"Series/Pie/PieSeriesDefaults.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/Symbols.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n,l){let{getStartAndEndRadians:h}=t,{noop:d}=i,{clamp:c,extend:p,fireEvent:u,merge:g,pick:f}=l;class m extends r{animate(t){let e=this,i=e.points,s=e.startAngleRad;t||i.forEach(function(t){let i=t.graphic,o=t.shapeArgs;i&&o&&(i.attr({r:f(t.startR,e.center&&e.center[3]/2),start:s,end:s}),i.animate({r:o.r,start:o.start,end:o.end},e.options.animation))})}drawEmpty(){let t,e;let i=this.startAngleRad,s=this.endAngleRad,o=this.options;0===this.total&&this.center?(t=this.center[0],e=this.center[1],this.graph||(this.graph=this.chart.renderer.arc(t,e,this.center[1]/2,0,i,s).addClass(\"highcharts-empty-series\").add(this.group)),this.graph.attr({d:n.arc(t,e,this.center[2]/2,0,{start:i,end:s,innerR:this.center[3]/2})}),this.chart.styledMode||this.graph.attr({\"stroke-width\":o.borderWidth,fill:o.fillColor||\"none\",stroke:o.color||\"#cccccc\"})):this.graph&&(this.graph=this.graph.destroy())}drawPoints(){let t=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy()),e.graphic||(e.graphic=t[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})}generatePoints(){super.generatePoints(),this.updateTotals()}getX(t,e,i,s){let o=this.center,r=this.radii?this.radii[i.index]||0:o[2]/2,a=s.dataLabelPosition,n=a?.distance||0,l=Math.asin(c((t-o[1])/(r+n),-1,1));return o[0]+Math.cos(l)*(r+n)*(e?-1:1)+(n>0?(e?-1:1)*(s.padding||0):0)}hasData(){return!!this.processedXData.length}redrawPoints(){let t,e,i,s;let o=this,r=o.chart;this.drawEmpty(),o.group&&!r.styledMode&&o.group.shadow(o.options.shadow),o.points.forEach(function(a){let n={};e=a.graphic,!a.isNull&&e?(s=a.shapeArgs,t=a.getTranslate(),r.styledMode||(i=o.pointAttribs(a,a.selected&&\"select\")),a.delayedRendering?(e.setRadialReference(o.center).attr(s).attr(t),r.styledMode||e.attr(i).attr({\"stroke-linejoin\":\"round\"}),a.delayedRendering=!1):(e.setRadialReference(o.center),r.styledMode||g(!0,n,i),g(!0,n,s,t),e.animate(n)),e.attr({visibility:a.visible?\"inherit\":\"hidden\"}),e.addClass(a.getClassName(),!0)):e&&(a.graphic=e.destroy())})}sortByAngle(t,e){t.sort(function(t,i){return void 0!==t.angle&&(i.angle-t.angle)*e})}translate(t){u(this,\"translate\"),this.generatePoints();let e=this.options,i=e.slicedOffset,s=h(e.startAngle,e.endAngle),o=this.startAngleRad=s.start,r=(this.endAngleRad=s.end)-o,a=this.points,n=e.ignoreHiddenPoint,l=a.length,d,c,p,g,f,m,x,y=0;for(t||(this.center=t=this.getCenter()),m=0;m1.5*Math.PI?p-=2*Math.PI:p<-Math.PI/2&&(p+=2*Math.PI),x.slicedTranslation={translateX:Math.round(Math.cos(p)*i),translateY:Math.round(Math.sin(p)*i)},g=Math.cos(p)*t[2]/2,f=Math.sin(p)*t[2]/2,x.tooltipPos=[t[0]+.7*g,t[1]+.7*f],x.half=p<-Math.PI/2||p>Math.PI/2?1:0,x.angle=p}u(this,\"afterTranslate\")}updateTotals(){let t=this.points,e=t.length,i=this.options.ignoreHiddenPoint,s,o,r=0;for(s=0;s0&&(o.visible||!i)?o.y/r*100:0,o.total=r}}return m.defaultOptions=g(r.defaultOptions,o),p(m.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawTracker:e.prototype.drawTracker,getCenter:t.getCenter,getSymbol:d,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointAttribs:e.prototype.pointAttribs,pointClass:s,requireSorting:!1,searchPoint:d,trackerGroups:[\"group\",\"dataLabelsGroup\"]}),a.registerSeriesType(\"pie\",m),m}),i(e,\"Series/Pie/PieDataLabel.js\",[e[\"Core/Series/DataLabel.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){var r;let{composed:a,noop:n}=e,{distribute:l}=i,{series:h}=s,{arrayMax:d,clamp:c,defined:p,pick:u,pushUnique:g,relativeLength:f}=o;return function(e){let i={radialDistributionY:function(t,e){return(e.dataLabelPosition?.top||0)+t.distributeBox.pos},radialDistributionX:function(t,e,i,s,o){let r=o.dataLabelPosition;return t.getX(i<(r?.top||0)+2||i>(r?.bottom||0)-2?s:i,e.half,e,o)},justify:function(t,e,i,s){return s[0]+(t.half?-1:1)*(i+(e.dataLabelPosition?.distance||0))},alignToPlotEdges:function(t,e,i,s){let o=t.getBBox().width;return e?o+s:i-o-s},alignToConnectors:function(t,e,i,s){let o=0,r;return t.forEach(function(t){(r=t.dataLabel.getBBox().width)>o&&(o=r)}),e?o+s:i-o-s}};function s(t,e){let{center:i,options:s}=this,o=i[2]/2,r=t.angle||0,a=Math.cos(r),n=Math.sin(r),l=i[0]+a*o,h=i[1]+n*o,d=Math.min((s.slicedOffset||0)+(s.borderWidth||0),e/5);return{natural:{x:l+a*e,y:h+n*e},computed:{},alignment:e<0?\"center\":t.half?\"right\":\"left\",connectorPosition:{breakAt:{x:l+a*d,y:h+n*d},touchingSliceAt:{x:l,y:h}},distance:e}}function o(){let t=this,e=t.points,i=t.chart,s=i.plotWidth,o=i.plotHeight,r=i.plotLeft,a=Math.round(i.chartWidth/3),n=t.center,c=n[2]/2,g=n[1],m=[[],[]],x=[0,0,0,0],y=t.dataLabelPositioners,b,v,S,M=0;t.visible&&t.hasDataLabels?.()&&(e.forEach(t=>{(t.dataLabels||[]).forEach(t=>{t.shortened&&(t.attr({width:\"auto\"}).css({width:\"auto\",textOverflow:\"clip\"}),t.shortened=!1)})}),h.prototype.drawDataLabels.apply(t),e.forEach(t=>{(t.dataLabels||[]).forEach((e,i)=>{let s=n[2]/2,o=e.options,r=f(o?.distance||0,s);0===i&&m[t.half].push(t),!p(o?.style?.width)&&e.getBBox().width>a&&(e.css({width:Math.round(.7*a)+\"px\"}),e.shortened=!0),e.dataLabelPosition=this.getDataLabelPosition(t,r),M=Math.max(M,r)})}),m.forEach((e,a)=>{let h=e.length,d=[],f,m,b=0,k;h&&(t.sortByAngle(e,a-.5),M>0&&(f=Math.max(0,g-c-M),m=Math.min(g+c+M,i.plotHeight),e.forEach(t=>{(t.dataLabels||[]).forEach(e=>{let s=e.dataLabelPosition;s&&s.distance>0&&(s.top=Math.max(0,g-c-s.distance),s.bottom=Math.min(g+c+s.distance,i.plotHeight),b=e.getBBox().height||21,t.distributeBox={target:(e.dataLabelPosition?.natural.y||0)-s.top+b/2,size:b,rank:t.y},d.push(t.distributeBox))})}),l(d,k=m+b-f,k/5)),e.forEach(i=>{(i.dataLabels||[]).forEach(l=>{let h=l.options||{},g=i.distributeBox,f=l.dataLabelPosition,m=f?.natural.y||0,b=h.connectorPadding||0,M=0,k=m,C=\"inherit\";if(f){if(d&&p(g)&&f.distance>0&&(void 0===g.pos?C=\"hidden\":(S=g.size,k=y.radialDistributionY(i,l))),h.justify)M=y.justify(i,l,c,n);else switch(h.alignTo){case\"connectors\":M=y.alignToConnectors(e,a,s,r);break;case\"plotEdges\":M=y.alignToPlotEdges(l,a,s,r);break;default:M=y.radialDistributionX(t,i,k,m,l)}if(f.attribs={visibility:C,align:f.alignment},f.posAttribs={x:M+(h.x||0)+(({left:b,right:-b})[f.alignment]||0),y:k+(h.y||0)-l.getBBox().height/2},f.computed.x=M,f.computed.y=k,u(h.crop,!0)){let t;M-(v=l.getBBox().width)s-b&&0===a&&(t=Math.round(M+v-s+b),x[1]=Math.max(t,x[1])),k-S/2<0?x[0]=Math.max(Math.round(-k+S/2),x[0]):k+S/2>o&&(x[2]=Math.max(Math.round(k+S/2-o),x[2])),f.sideOverflow=t}}})}))}),(0===d(x)||this.verifyDataLabelOverflow(x))&&(this.placeDataLabels(),this.points.forEach(e=>{(e.dataLabels||[]).forEach(s=>{let{connectorColor:o,connectorWidth:r=1}=s.options||{},a=s.dataLabelPosition;if(r){let n;b=s.connector,a&&a.distance>0?(n=!b,b||(s.connector=b=i.renderer.path().addClass(\"highcharts-data-label-connector highcharts-color-\"+e.colorIndex+(e.className?\" \"+e.className:\"\")).add(t.dataLabelsGroup)),i.styledMode||b.attr({\"stroke-width\":r,stroke:o||e.color||\"#666666\"}),b[n?\"attr\":\"animate\"]({d:e.getConnectorPath(s)}),b.attr({visibility:a.attribs?.visibility})):b&&(s.connector=b.destroy())}})})))}function r(){this.points.forEach(t=>{(t.dataLabels||[]).forEach(t=>{let e=t.dataLabelPosition;e?(e.sideOverflow&&(t.css({width:Math.max(t.getBBox().width-e.sideOverflow,0)+\"px\",textOverflow:(t.options?.style||{}).textOverflow||\"ellipsis\"}),t.shortened=!0),t.attr(e.attribs),t[t.moved?\"animate\":\"attr\"](e.posAttribs),t.moved=!0):t&&t.attr({y:-9999})}),delete t.distributeBox},this)}function m(t){let e=this.center,i=this.options,s=i.center,o=i.minSize||80,r=o,a=null!==i.size;return!a&&(null!==s[0]?r=Math.max(e[2]-Math.max(t[1],t[3]),o):(r=Math.max(e[2]-t[1]-t[3],o),e[0]+=(t[3]-t[1])/2),null!==s[1]?r=c(r,o,e[2]-Math.max(t[0],t[2])):(r=c(r,o,e[2]-t[0]-t[2]),e[1]+=(t[0]-t[2])/2),r!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y),o,r,n,l,h,d=!1;for(let i=0;i(e.labelrank||0)-(t.labelrank||0));for(let i=0;i{s(t,t=>{t.label&&e.push(t.label)})});for(let i of t.series||[])if(i.visible&&i.hasDataLabels?.()){let s=i=>{for(let s of i)s.visible&&(s.dataLabels||[]).forEach(i=>{let r=i.options||{};i.labelrank=o(r.labelrank,s.labelrank,s.shapeArgs?.height),r.allowOverlap??Number(r.distance)>0?(i.oldOpacity=i.opacity,i.newOpacity=1,a(i,t)):e.push(i)})};s(i.nodes||[]),s(i.points)}this.hideOverlappingLabels(e)}return{compose:function(t){let i=t.prototype;i.hideOverlappingLabels||(i.hideOverlappingLabels=r,e(t,\"render\",n))}}}),i(e,\"Extensions/BorderRadius.js\",[e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{defaultOptions:s}=t,{noop:o}=e,{addEvent:r,extend:a,isObject:n,merge:l,relativeLength:h}=i,d={radius:0,scope:\"stack\",where:void 0},c=o,p=o;function u(t,e,i,s,o={}){let r=c(t,e,i,s,o),{innerR:a=0,r:n=i,start:l=0,end:d=0}=o;if(o.open||!o.borderRadius)return r;let p=d-l,u=Math.sin(p/2),g=Math.max(Math.min(h(o.borderRadius||0,n-a),(n-a)/2,n*u/(1+u)),0),f=Math.min(g,p/Math.PI*2*a),m=r.length-1;for(;m--;)!function(t,e,i){let s,o,r;let a=t[e],n=t[e+1];if(\"Z\"===n[0]&&(n=t[0]),(\"M\"===a[0]||\"L\"===a[0])&&\"A\"===n[0]?(s=a,o=n,r=!0):\"A\"===a[0]&&(\"M\"===n[0]||\"L\"===n[0])&&(s=n,o=a),s&&o&&o.params){let a=o[1],n=o[5],l=o.params,{start:h,end:d,cx:c,cy:p}=l,u=n?a-i:a+i,g=u?Math.asin(i/u):0,f=n?g:-g,m=Math.cos(g)*u;r?(l.start=h+f,s[1]=c+m*Math.cos(h),s[2]=p+m*Math.sin(h),t.splice(e+1,0,[\"A\",i,i,0,0,1,c+a*Math.cos(l.start),p+a*Math.sin(l.start)])):(l.end=d-f,o[6]=c+a*Math.cos(l.end),o[7]=p+a*Math.sin(l.end),t.splice(e+1,0,[\"A\",i,i,0,0,1,c+m*Math.cos(d),p+m*Math.sin(d)])),o[4]=Math.abs(l.end-l.start)1?f:g);return r}function g(){if(this.options.borderRadius&&!(this.chart.is3d&&this.chart.is3d())){let{options:t,yAxis:e}=this,i=\"percent\"===t.stacking,o=s.plotOptions?.[this.type]?.borderRadius,r=f(t.borderRadius,n(o)?o:{}),l=e.options.reversed;for(let s of this.points){let{shapeArgs:o}=s;if(\"roundedRect\"===s.shapeType&&o){let{width:n=0,height:d=0,y:c=0}=o,p=c,u=d;if(\"stack\"===r.scope&&s.stackTotal){let o=e.translate(i?100:s.stackTotal,!1,!0,!1,!0),r=e.translate(t.threshold||0,!1,!0,!1,!0),a=this.crispCol(0,Math.min(o,r),0,Math.abs(o-r));p=a.y,u=a.height}let g=(s.negative?-1:1)*(l?-1:1)==-1,f=r.where;!f&&this.is(\"waterfall\")&&Math.abs((s.yBottom||0)-(this.translatedThreshold||0))>this.borderWidth&&(f=\"all\"),f||(f=\"end\");let m=Math.min(h(r.radius,n),n/2,\"all\"===f?d/2:1/0)||0;\"end\"===f&&(g&&(p-=m),u+=m),a(o,{brBoxHeight:u,brBoxY:p,r:m})}}}}function f(t,e){return n(t)||(t={radius:t||0}),l(d,e,t)}function m(){let t=f(this.options.borderRadius);for(let e of this.points){let i=e.shapeArgs;i&&(i.borderRadius=h(t.radius,(i.r||0)-(i.innerR||0)))}}function x(t,e,i,s,o={}){let r=p(t,e,i,s,o),{r:a=0,brBoxHeight:n=s,brBoxY:l=e}=o,h=e-l,d=l+n-(e+s),c=h-a>-.1?0:a,u=d-a>-.1?0:a,g=Math.max(c&&h,0),f=Math.max(u&&d,0),m=[t+c,e],x=[t+i-c,e],y=[t+i,e+c],b=[t+i,e+s-u],v=[t+i-u,e+s],S=[t+u,e+s],M=[t,e+s-u],k=[t,e+c],C=(t,e)=>Math.sqrt(Math.pow(t,2)-Math.pow(e,2));if(g){let t=C(c,c-g);m[0]-=t,x[0]+=t,y[1]=k[1]=e+c-g}if(s=a(i.minWidth,0)&&this.chartHeight>=a(i.minHeight,0)}).call(this)&&e.push(t._id)}function l(t,e){let s=this.options.responsive,a=this.currentResponsive,l=[],h;!e&&s&&s.rules&&s.rules.forEach(t=>{void 0===t._id&&(t._id=n()),this.matchResponsiveRule(t,l)},this);let d=r(...l.map(t=>o((s||{}).rules||[],e=>e._id===t)).map(t=>t&&t.chartOptions));d.isResponsiveOptions=!0,l=l.toString()||void 0;let c=a&&a.ruleIds;l!==c&&(a&&this.update(a.undoOptions,t,!0),l?((h=i(d,this.options,!0,this.collectionsWithUpdate)).isResponsiveOptions=!0,this.currentResponsive={ruleIds:l,mergedOptions:d,undoOptions:h},this.update(d,t,!0)):this.currentResponsive=void 0)}t.compose=function(t){let i=t.prototype;return i.matchResponsiveRule||s(i,{matchResponsiveRule:e,setResponsive:l}),t}}(e||(e={})),e}),i(e,\"masters/highcharts.src.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Animation/Fx.js\"],e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Templating.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Renderer/HTML/HTMLElement.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Axis/DateTimeAxis.js\"],e[\"Core/Axis/LogarithmicAxis.js\"],e[\"Core/Axis/PlotLineOrBand/PlotLineOrBand.js\"],e[\"Core/Axis/Tick.js\"],e[\"Core/Tooltip.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Pointer.js\"],e[\"Core/Legend/Legend.js\"],e[\"Core/Legend/LegendSymbol.js\"],e[\"Core/Chart/Chart.js\"],e[\"Extensions/ScrollablePlotArea.js\"],e[\"Core/Axis/Stacking/StackingAxis.js\"],e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/Column/ColumnDataLabel.js\"],e[\"Series/Pie/PieDataLabel.js\"],e[\"Core/Series/DataLabel.js\"],e[\"Extensions/OverlappingDataLabels.js\"],e[\"Extensions/BorderRadius.js\"],e[\"Core/Responsive.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Time.js\"]],function(t,e,i,s,o,r,a,n,l,h,d,c,p,u,g,f,m,x,y,b,v,S,M,k,C,A,w,T,P,L,O,D,E,B,j,I){return t.AST=r,t.Axis=p,t.Chart=M,t.Color=j,t.DataLabel=O,t.Fx=s,t.HTMLElement=c,t.Legend=v,t.LegendSymbol=S,t.OverlappingDataLabels=t.OverlappingDataLabels||D,t.PlotLineOrBand=f,t.Point=y,t.Pointer=b,t.RendererRegistry=n,t.Series=w,t.SeriesRegistry=T,t.StackItem=A,t.SVGElement=h,t.SVGRenderer=d,t.Templating=a,t.Tick=m,t.Time=I,t.Tooltip=x,t.animate=o.animate,t.animObject=o.animObject,t.chart=M.chart,t.color=j.parse,t.dateFormat=a.dateFormat,t.defaultOptions=i.defaultOptions,t.distribute=l.distribute,t.format=a.format,t.getDeferredAnimation=o.getDeferredAnimation,t.getOptions=i.getOptions,t.numberFormat=a.numberFormat,t.seriesType=T.seriesType,t.setAnimation=o.setAnimation,t.setOptions=i.setOptions,t.stop=o.stop,t.time=i.defaultTime,t.timers=s.timers,E.compose(t.Series,t.SVGElement,t.SVGRenderer),P.compose(t.Series.types.column),O.compose(t.Series),u.compose(t.Axis),c.compose(t.SVGRenderer),v.compose(t.Chart),g.compose(t.Axis),D.compose(t.Chart),L.compose(t.Series.types.pie),f.compose(t.Axis),b.compose(t.Chart),B.compose(t.Chart),k.compose(t.Axis,t.Chart,t.Series),C.compose(t.Axis,t.Chart,t.Series),x.compose(t.Pointer),e.extend(t,e),t}),i(e,\"Series/DataModifyComposition.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var o;let{tooltipFormatter:r}=e.prototype,{addEvent:a,arrayMax:n,arrayMin:l,correctFloat:h,defined:d,isArray:c,isNumber:p,isString:u,pick:g}=s;return function(t){function e(t,e,i){!this.isXAxis&&(this.series.forEach(function(i){\"compare\"===t&&\"boolean\"!=typeof e?i.setCompare(e,!1):\"cumulative\"!==t||u(e)||i.setCumulative(e,!1)}),g(i,!0)&&this.chart.redraw())}function i(t){let e=this,{numberFormatter:i}=e.series.chart,s=function(s){t=t.replace(\"{point.\"+s+\"}\",(e[s]>0&&\"change\"===s?\"+\":\"\")+i(e[s],g(e.series.tooltipOptions.changeDecimals,2)))};return d(e.change)&&s(\"change\"),d(e.cumulativeSum)&&s(\"cumulativeSum\"),r.apply(this,[t])}function s(){let t;let e=this.options.compare;(\"percent\"===e||\"value\"===e||this.options.cumulative)&&(t=new v(this),\"percent\"===e||\"value\"===e?t.initCompare(e):t.initCumulative()),this.dataModify=t}function o(t){let e=t.dataExtremes,i=e.activeYData;if(this.dataModify&&e){let t;this.options.compare?t=[this.dataModify.modifyValue(e.dataMin),this.dataModify.modifyValue(e.dataMax)]:this.options.cumulative&&c(i)&&i.length>=2&&(t=v.getCumulativeExtremes(i)),t&&(e.dataMin=l(t),e.dataMax=n(t))}}function f(t,e){this.options.compare=this.userOptions.compare=t,this.update({},g(e,!0)),this.dataModify&&(\"value\"===t||\"percent\"===t)?this.dataModify.initCompare(t):this.points.forEach(t=>{delete t.change})}function m(){if(this.xAxis&&this.processedYData&&this.dataModify){let t=this.processedXData,e=this.processedYData,i=e.length,s=!0===this.options.compareStart?0:1,o=-1,r;for(this.pointArrayMap&&(o=this.pointArrayMap.indexOf(this.options.pointValKey||this.pointValKey||\"y\")),r=0;r-1?e[r][o]:e[r];if(p(i)&&0!==i&&t[r+s]>=(this.xAxis.min||0)){this.dataModify.compareValue=i;break}}}}function x(t,e){this.setModifier(\"compare\",t,e)}function y(t,e){t=g(t,!1),this.options.cumulative=this.userOptions.cumulative=t,this.update({},g(e,!0)),this.dataModify?this.dataModify.initCumulative():this.points.forEach(t=>{delete t.cumulativeSum})}function b(t,e){this.setModifier(\"cumulative\",t,e)}t.compose=function(t,r,n){let l=r.prototype,h=n.prototype,d=t.prototype;return d.setCompare||(d.setCompare=f,d.setCumulative=y,a(t,\"afterInit\",s),a(t,\"afterGetExtremes\",o),a(t,\"afterProcessData\",m)),l.setCompare||(l.setCompare=x,l.setModifier=e,l.setCumulative=b,h.tooltipFormatter=i),t};class v{constructor(t){this.series=t}modifyValue(){return 0}static getCumulativeExtremes(t){let e=1/0,i=-1/0;return t.reduce((t,s)=>{let o=t+s;return e=Math.min(e,o,t),i=Math.max(i,o,t),o}),[e,i]}initCompare(t){this.modifyValue=function(e,i){null===e&&(e=0);let s=this.compareValue;if(void 0!==e&&void 0!==s){if(\"value\"===t?e-=s:e=e/s*100-(100===this.series.options.compareBase?0:100),void 0!==i){let t=this.series.points[i];t&&(t.change=e)}return e}return 0}}initCumulative(){this.modifyValue=function(t,e){if(null===t&&(t=0),void 0!==t&&void 0!==e){let i=e>0?this.series.points[e-1]:null;i&&i.cumulativeSum&&(t=h(i.cumulativeSum+t));let s=this.series.points[e];return s&&(s.cumulativeSum=t),t}return 0}}}t.Additions=v}(o||(o={})),o}),i(e,\"Stock/Navigator/ChartNavigatorComposition.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let i;let{isTouchDevice:s}=t,{addEvent:o,merge:r,pick:a}=e,n=[];function l(){this.navigator&&this.navigator.setBaseSeries(null,!1)}function h(){let t,e,i;let s=this.legend,o=this.navigator;if(o){t=s&&s.options,e=o.xAxis,i=o.yAxis;let{scrollbarHeight:r,scrollButtonSize:n}=o;this.inverted?(o.left=o.opposite?this.chartWidth-r-o.height:this.spacing[3]+r,o.top=this.plotTop+n):(o.left=a(e.left,this.plotLeft+n),o.top=o.navigatorOptions.top||this.chartHeight-o.height-r-(this.scrollbar?.options.margin||0)-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(t&&\"bottom\"===t.verticalAlign&&\"proximate\"!==t.layout&&t.enabled&&!t.floating?s.legendHeight+a(t.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0)),e&&i&&(this.inverted?e.options.left=i.options.left=o.left:e.options.top=i.options.top=o.top,e.setAxisSize(),i.setAxisSize())}}function d(t){!this.navigator&&!this.scroller&&(this.options.navigator.enabled||this.options.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this),a(t.redraw,!0)&&this.redraw(t.animation))}function c(){let t=this.options;(t.navigator.enabled||t.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this))}function p(){let t=this.options,e=t.navigator,i=t.rangeSelector;if((e&&e.enabled||i&&i.enabled)&&(!s&&\"x\"===this.zooming.type||s&&\"x\"===this.zooming.pinchType))return!1}function u(t){let e=t.navigator;if(e&&t.xAxis[0]){let i=t.xAxis[0].getExtremes();e.render(i.min,i.max)}}function g(t){let e=t.options.navigator||{},i=t.options.scrollbar||{};!this.navigator&&!this.scroller&&(e.enabled||i.enabled)&&(r(!0,this.options.navigator,e),r(!0,this.options.scrollbar,i),delete t.options.navigator,delete t.options.scrollbar)}return{compose:function(t,s){if(e.pushUnique(n,t)){let e=t.prototype;i=s,e.callbacks.push(u),o(t,\"afterAddSeries\",l),o(t,\"afterSetChartSize\",h),o(t,\"afterUpdate\",d),o(t,\"beforeRender\",c),o(t,\"beforeShowResetZoom\",p),o(t,\"update\",g)}}}}),i(e,\"Core/Axis/NavigatorAxisComposition.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{isTouchDevice:i}=t,{addEvent:s,correctFloat:o,defined:r,isNumber:a,pick:n}=e;function l(){this.navigatorAxis||(this.navigatorAxis=new d(this))}function h(t){let e;let s=this.chart,o=s.options,a=o.navigator,n=this.navigatorAxis,l=s.zooming.pinchType,h=o.rangeSelector,d=s.zooming.type;if(this.isXAxis&&(a?.enabled||h?.enabled)){if(\"y\"===d&&\"zoom\"===t.trigger)e=!1;else if((\"zoom\"===t.trigger&&\"xy\"===d||i&&\"xy\"===l)&&this.options.range){let e=n.previousZoom;r(t.min)?n.previousZoom=[this.min,this.max]:e&&(t.min=e[0],t.max=e[1],n.previousZoom=void 0)}}void 0!==e&&t.preventDefault()}class d{static compose(t){t.keepProps.includes(\"navigatorAxis\")||(t.keepProps.push(\"navigatorAxis\"),s(t,\"init\",l),s(t,\"setExtremes\",h))}constructor(t){this.axis=t}destroy(){this.axis=void 0}toFixedRange(t,e,i,s){let l=this.axis,h=l.chart,d=n(l.ordinal?.convertOverscroll(l.options.overscroll),0),c=n(i,l.translate(t,!0,!l.horiz)),p=n(s,l.translate(e,!0,!l.horiz)),u=h&&h.fixedRange,g=(l.pointRange||0)/2;if(r(i)||(c=o(c+g)),r(s)||(p=o(p-g)),u&&l.dataMin&&l.dataMax){let t=l.dataMax+d;p>=t&&(c=o(t-u),p=o(t)),c<=l.dataMin&&(p=o(l.dataMin+u))}return a(c)&&a(p)||(c=p=void 0),{min:c,max:p}}}return d}),i(e,\"Stock/Navigator/NavigatorDefaults.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Series/SeriesRegistry.js\"]],function(t,e){let{parse:i}=t,{seriesTypes:s}=e;return{height:40,margin:25,maskInside:!0,handles:{width:7,height:15,symbols:[\"navigator-handle\",\"navigator-handle\"],enabled:!0,lineWidth:1,backgroundColor:\"#f2f2f2\",borderColor:\"#999999\"},maskFill:i(\"#667aff\").setOpacity(.3).get(),outlineColor:\"#999999\",outlineWidth:1,series:{type:void 0===s.areaspline?\"line\":\"areaspline\",fillOpacity:.05,lineWidth:1,compare:null,sonification:{enabled:!1},dataGrouping:{approximation:\"average\",enabled:!0,groupPixelWidth:2,firstAnchor:\"firstPoint\",anchor:\"middle\",lastAnchor:\"lastPoint\",units:[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2,3,4]],[\"week\",[1,2,3]],[\"month\",[1,3,6]],[\"year\",null]]},dataLabels:{enabled:!1,zIndex:2},id:\"highcharts-navigator-series\",className:\"highcharts-navigator-series\",lineColor:null,marker:{enabled:!1},threshold:null},xAxis:{className:\"highcharts-navigator-xaxis\",tickLength:0,lineWidth:0,gridLineColor:\"#e6e6e6\",gridLineWidth:1,tickPixelInterval:200,labels:{align:\"left\",style:{color:\"#000000\",fontSize:\"0.7em\",opacity:.6,textOutline:\"2px contrast\"},x:3,y:-4},crosshair:!1},yAxis:{className:\"highcharts-navigator-yaxis\",gridLineWidth:0,startOnTick:!1,endOnTick:!1,minPadding:.1,maxPadding:.1,labels:{enabled:!1},crosshair:!1,title:{text:null},tickLength:0,tickWidth:0}}}),i(e,\"Stock/Navigator/NavigatorSymbols.js\",[],function(){return{\"navigator-handle\":function(t,e,i,s,o={}){let r=o.width?o.width/2:i,a=Math.round(r/3)+.5;return[[\"M\",-r-1,.5],[\"L\",r,.5],[\"L\",r,(s=o.height||s)+.5],[\"L\",-r-1,s+.5],[\"L\",-r-1,.5],[\"M\",-a,4],[\"L\",-a,s-3],[\"M\",a-1,4],[\"L\",a-1,s-3]]}}}),i(e,\"Stock/Utilities/StockUtilities.js\",[e[\"Core/Utilities.js\"]],function(t){let{defined:e}=t;return{setFixedRange:function(t){let i=this.xAxis[0];e(i.dataMax)&&e(i.dataMin)&&t?this.fixedRange=Math.min(t,i.dataMax-i.dataMin):this.fixedRange=t}}}),i(e,\"Stock/Navigator/NavigatorComposition.js\",[e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Axis/NavigatorAxisComposition.js\"],e[\"Stock/Navigator/NavigatorDefaults.js\"],e[\"Stock/Navigator/NavigatorSymbols.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Stock/Utilities/StockUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n){let{setOptions:l}=t,{composed:h}=e,{getRendererType:d}=r,{setFixedRange:c}=a,{addEvent:p,extend:u,pushUnique:g}=n;function f(){this.chart.navigator&&!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}return{compose:function(t,e,r){i.compose(e),g(h,\"Navigator\")&&(t.prototype.setFixedRange=c,u(d().prototype.symbols,o),p(r,\"afterUpdate\",f),l({navigator:s}))}}}),i(e,\"Core/Axis/ScrollbarAxis.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){var i;let{composed:s}=t,{addEvent:o,defined:r,pick:a,pushUnique:n}=e;return function(t){let e;function i(t){let e=a(t.options&&t.options.min,t.min),i=a(t.options&&t.options.max,t.max);return{axisMin:e,axisMax:i,scrollMin:r(t.dataMin)?Math.min(e,t.min,t.dataMin,a(t.threshold,1/0)):e,scrollMax:r(t.dataMax)?Math.max(i,t.max,t.dataMax,a(t.threshold,-1/0)):i}}function l(){let t=this.scrollbar,e=t&&!t.options.opposite,i=this.horiz?2:e?3:1;t&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[i]+=t.size+(t.options.margin||0))}function h(){let t=this;t.options&&t.options.scrollbar&&t.options.scrollbar.enabled&&(t.options.scrollbar.vertical=!t.horiz,t.options.startOnTick=t.options.endOnTick=!1,t.scrollbar=new e(t.chart.renderer,t.options.scrollbar,t.chart),o(t.scrollbar,\"changed\",function(e){let s,o;let{axisMin:a,axisMax:n,scrollMin:l,scrollMax:h}=i(t),d=h-l;if(r(a)&&r(n)){if(t.horiz&&!t.reversed||!t.horiz&&t.reversed?(s=l+d*this.to,o=l+d*this.from):(s=l+d*(1-this.from),o=l+d*(1-this.to)),this.shouldUpdateExtremes(e.DOMType)){let i=\"mousemove\"!==e.DOMType&&\"touchmove\"!==e.DOMType&&void 0;t.setExtremes(o,s,!0,i,e)}else this.setRange(this.from,this.to)}}))}function d(){let t,e,s;let{scrollMin:o,scrollMax:a}=i(this),n=this.scrollbar,l=this.axisTitleMargin+(this.titleOffset||0),h=this.chart.scrollbarsOffsets,d=this.options.margin||0;if(n&&h){if(this.horiz)this.opposite||(h[1]+=l),n.position(this.left,this.top+this.height+2+h[1]-(this.opposite?d:0),this.width,this.height),this.opposite||(h[1]+=d),t=1;else{let e;this.opposite&&(h[0]+=l),e=n.options.opposite?this.left+this.width+2+h[0]-(this.opposite?0:d):this.opposite?0:d,n.position(e,this.top,this.width,this.height),this.opposite&&(h[0]+=d),t=0}h[t]+=n.size+(n.options.margin||0),isNaN(o)||isNaN(a)||!r(this.min)||!r(this.max)||this.min===this.max?n.setRange(0,1):(e=(this.min-o)/(a-o),s=(this.max-o)/(a-o),this.horiz&&!this.reversed||!this.horiz&&this.reversed?n.setRange(e,s):n.setRange(1-s,1-e))}}t.compose=function(t,i){n(s,\"Axis.Scrollbar\")&&(e=i,o(t,\"afterGetOffset\",l),o(t,\"afterInit\",h),o(t,\"afterRender\",d))}}(i||(i={})),i}),i(e,\"Stock/Scrollbar/ScrollbarDefaults.js\",[],function(){return{height:10,barBorderRadius:5,buttonBorderRadius:0,buttonsEnabled:!1,liveRedraw:void 0,margin:void 0,minWidth:6,opposite:!0,step:.2,zIndex:3,barBackgroundColor:\"#cccccc\",barBorderWidth:0,barBorderColor:\"#cccccc\",buttonArrowColor:\"#333333\",buttonBackgroundColor:\"#e6e6e6\",buttonBorderColor:\"#cccccc\",buttonBorderWidth:1,rifleColor:\"none\",trackBackgroundColor:\"rgba(255, 255, 255, 0.001)\",trackBorderColor:\"#cccccc\",trackBorderRadius:5,trackBorderWidth:1}}),i(e,\"Stock/Scrollbar/Scrollbar.js\",[e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Axis/ScrollbarAxis.js\"],e[\"Stock/Scrollbar/ScrollbarDefaults.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{defaultOptions:r}=t,{addEvent:a,correctFloat:n,defined:l,destroyObjectProperties:h,fireEvent:d,merge:c,pick:p,removeEvent:u}=o;class g{static compose(t){i.compose(t,g)}static swapXY(t,e){return e&&t.forEach(t=>{let e;let i=t.length;for(let s=0;sthis.calculatedWidth?e.minWidth:0;return{chartX:(t.chartX-this.x-this.xOffset)/(this.barWidth-i),chartY:(t.chartY-this.y-this.yOffset)/(this.barWidth-i)}}destroy(){let t=this,e=t.chart.scroller;t.removeEvents(),[\"track\",\"scrollbarRifles\",\"scrollbar\",\"scrollbarGroup\",\"group\"].forEach(function(e){t[e]&&t[e].destroy&&(t[e]=t[e].destroy())}),e&&t===e.scrollbar&&(e.scrollbar=null,h(e.scrollbarButtons))}drawScrollbarButton(t){let e=this.renderer,i=this.scrollbarButtons,s=this.options,o=this.size,r=e.g().add(this.group);if(i.push(r),s.buttonsEnabled){let a=e.rect().addClass(\"highcharts-scrollbar-button\").add(r);this.chart.styledMode||a.attr({stroke:s.buttonBorderColor,\"stroke-width\":s.buttonBorderWidth,fill:s.buttonBackgroundColor}),a.attr(a.crisp({x:-.5,y:-.5,width:o+1,height:o+1,r:s.buttonBorderRadius},a.strokeWidth()));let n=e.path(g.swapXY([[\"M\",o/2+(t?-1:1),o/2-3],[\"L\",o/2+(t?-1:1),o/2+3],[\"L\",o/2+(t?2:-2),o/2]],s.vertical)).addClass(\"highcharts-scrollbar-arrow\").add(i[t]);this.chart.styledMode||n.attr({fill:s.buttonArrowColor})}}init(t,e,i){this.scrollbarButtons=[],this.renderer=t,this.userOptions=e,this.options=c(s,r.scrollbar,e),this.options.margin=p(this.options.margin,10),this.chart=i,this.size=p(this.options.size,this.options.height),e.enabled&&(this.render(),this.addEvents())}mouseDownHandler(t){let e=this.chart.pointer?.normalize(t)||t,i=this.cursorToScrollbarPosition(e);this.chartX=i.chartX,this.chartY=i.chartY,this.initPositions=[this.from,this.to],this.grabbedCenter=!0}mouseMoveHandler(t){let e;let i=this.chart.pointer?.normalize(t)||t,s=this.options.vertical?\"chartY\":\"chartX\",o=this.initPositions||[];this.grabbedCenter&&(!t.touches||0!==t.touches[0][s])&&(e=this.cursorToScrollbarPosition(i)[s]-this[s],this.hasDragged=!0,this.updatePosition(o[0]+e,o[1]+e),this.hasDragged&&d(this,\"changed\",{from:this.from,to:this.to,trigger:\"scrollbar\",DOMType:t.type,DOMEvent:t}))}mouseUpHandler(t){this.hasDragged&&d(this,\"changed\",{from:this.from,to:this.to,trigger:\"scrollbar\",DOMType:t.type,DOMEvent:t}),this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null}position(t,e,i,s){let{buttonsEnabled:o,margin:r=0,vertical:a}=this.options,n=this.rendered?\"animate\":\"attr\",l=s,h=0;this.group.show(),this.x=t,this.y=e+this.trackBorderWidth,this.width=i,this.height=s,this.xOffset=l,this.yOffset=h,a?(this.width=this.yOffset=i=h=this.size,this.xOffset=l=0,this.yOffset=h=o?this.size:0,this.barWidth=s-(o?2*i:0),this.x=t+=r):(this.height=s=this.size,this.xOffset=l=o?this.size:0,this.barWidth=i-(o?2*s:0),this.y=this.y+r),this.group[n]({translateX:t,translateY:this.y}),this.track[n]({width:i,height:s}),this.scrollbarButtons[1][n]({translateX:a?0:i-l,translateY:a?s-h:0})}removeEvents(){this._events.forEach(function(t){u.apply(null,t)}),this._events.length=0}render(){let t=this.renderer,e=this.options,i=this.size,s=this.chart.styledMode,o=t.g(\"scrollbar\").attr({zIndex:e.zIndex}).hide().add();this.group=o,this.track=t.rect().addClass(\"highcharts-scrollbar-track\").attr({r:e.trackBorderRadius||0,height:i,width:i}).add(o),s||this.track.attr({fill:e.trackBackgroundColor,stroke:e.trackBorderColor,\"stroke-width\":e.trackBorderWidth});let r=this.trackBorderWidth=this.track.strokeWidth();this.track.attr({x:-r%2/2,y:-r%2/2}),this.scrollbarGroup=t.g().add(o),this.scrollbar=t.rect().addClass(\"highcharts-scrollbar-thumb\").attr({height:i-r,width:i-r,r:e.barBorderRadius||0}).add(this.scrollbarGroup),this.scrollbarRifles=t.path(g.swapXY([[\"M\",-3,i/4],[\"L\",-3,2*i/3],[\"M\",0,i/4],[\"L\",0,2*i/3],[\"M\",3,i/4],[\"L\",3,2*i/3]],e.vertical)).addClass(\"highcharts-scrollbar-rifles\").add(this.scrollbarGroup),s||(this.scrollbar.attr({fill:e.barBackgroundColor,stroke:e.barBorderColor,\"stroke-width\":e.barBorderWidth}),this.scrollbarRifles.attr({stroke:e.rifleColor,\"stroke-width\":1})),this.scrollbarStrokeWidth=this.scrollbar.strokeWidth(),this.scrollbarGroup.translate(-this.scrollbarStrokeWidth%2/2,-this.scrollbarStrokeWidth%2/2),this.drawScrollbarButton(0),this.drawScrollbarButton(1)}setRange(t,e){let i,s;let o=this.options,r=o.vertical,a=o.minWidth,h=this.barWidth,d=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?\"attr\":\"animate\";if(!l(h))return;let c=h*Math.min(e,1);i=Math.ceil(h*(t=Math.max(t,0))),this.calculatedWidth=s=n(c-i),s=1?this.group.hide():this.group.show()),this.rendered=!0}shouldUpdateExtremes(t){return p(this.options.liveRedraw,e.svg&&!e.isTouchDevice&&!this.chart.boosted)||\"mouseup\"===t||\"touchend\"===t||!l(t)}trackClick(t){let e=this.chart.pointer?.normalize(t)||t,i=this.to-this.from,s=this.y+this.scrollbarTop,o=this.x+this.scrollbarLeft;this.options.vertical&&e.chartY>s||!this.options.vertical&&e.chartX>o?this.updatePosition(this.from+i,this.to+i):this.updatePosition(this.from-i,this.to-i),d(this,\"changed\",{from:this.from,to:this.to,trigger:\"scrollbar\",DOMEvent:t})}update(t){this.destroy(),this.init(this.chart.renderer,c(!0,this.options,t),this.chart)}updatePosition(t,e){e>1&&(t=n(1-n(e-t)),e=1),t<0&&(e=n(e-t),t=0),this.from=t,this.to=e}}return g.defaultOptions=s,r.scrollbar=c(!0,g.defaultOptions,r.scrollbar),g}),i(e,\"Stock/Navigator/Navigator.js\",[e[\"Core/Axis/Axis.js\"],e[\"Stock/Navigator/ChartNavigatorComposition.js\"],e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Axis/NavigatorAxisComposition.js\"],e[\"Stock/Navigator/NavigatorComposition.js\"],e[\"Stock/Scrollbar/Scrollbar.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n){let{defaultOptions:l}=i,{isTouchDevice:h}=s,{addEvent:d,clamp:c,correctFloat:p,defined:u,destroyObjectProperties:g,erase:f,extend:m,find:x,fireEvent:y,isArray:b,isNumber:v,merge:S,pick:M,removeEvent:k,splat:C}=n;function A(t,...e){let i=[].filter.call(e,v);if(i.length)return Math[t].apply(0,i)}class w{static compose(t,i,s){e.compose(t,w),r.compose(t,i,s)}constructor(t){this.scrollbarHeight=0,this.init(t)}drawHandle(t,e,i,s){let o=this.navigatorOptions.handles.height;this.handles[e][s](i?{translateX:Math.round(this.left+this.height/2),translateY:Math.round(this.top+parseInt(t,10)+.5-o)}:{translateX:Math.round(this.left+parseInt(t,10)),translateY:Math.round(this.top+this.height/2-o/2-1)})}drawOutline(t,e,i,s){let o=this.navigatorOptions.maskInside,r=this.outline.strokeWidth(),a=r/2,n=r%2/2,l=this.scrollButtonSize,h=this.size,d=this.top,c=this.height,p=d-a,u=d+c,g=this.left,f,m;i?(f=d+e+n,e=d+t+n,m=[[\"M\",g+c,d-l-n],[\"L\",g+c,f],[\"L\",g,f],[\"M\",g,e],[\"L\",g+c,e],[\"L\",g+c,d+h+l]],o&&m.push([\"M\",g+c,f-a],[\"L\",g+c,e+a])):(g-=l,t+=g+l-n,e+=g+l-n,m=[[\"M\",g,p],[\"L\",t,p],[\"L\",t,u],[\"M\",e,u],[\"L\",e,p],[\"L\",g+h+2*l,d+a]],o&&m.push([\"M\",t-a,p],[\"L\",e+a,p])),this.outline[s]({d:m})}drawMasks(t,e,i,s){let o,r,a,n;let l=this.left,h=this.top,d=this.height;i?(a=[l,l,l],n=[h,h+t,h+e],r=[d,d,d],o=[t,e-t,this.size-e]):(a=[l,l+t,l+e],n=[h,h,h],r=[t,e-t,this.size-e],o=[d,d,d]),this.shades.forEach((t,e)=>{t[s]({x:a[e],y:n[e],width:r[e],height:o[e]})})}renderElements(){let t=this,e=t.navigatorOptions,i=e.maskInside,s=t.chart,o=s.inverted,r=s.renderer,a={cursor:o?\"ns-resize\":\"ew-resize\"},n=t.navigatorGroup=r.g(\"navigator\").attr({zIndex:8,visibility:\"hidden\"}).add();if([!i,i,!i].forEach((i,o)=>{let l=r.rect().addClass(\"highcharts-navigator-mask\"+(1===o?\"-inside\":\"-outside\")).add(n);s.styledMode||(l.attr({fill:i?e.maskFill:\"rgba(0,0,0,0)\"}),1===o&&l.css(a)),t.shades[o]=l}),t.outline=r.path().addClass(\"highcharts-navigator-outline\").add(n),s.styledMode||t.outline.attr({\"stroke-width\":e.outlineWidth,stroke:e.outlineColor}),e.handles&&e.handles.enabled){let i=e.handles,{height:o,width:l}=i;[0,1].forEach(e=>{t.handles[e]=r.symbol(i.symbols[e],-l/2-1,0,l,o,i),s.inverted&&t.handles[e].attr({rotation:90,rotationOriginX:Math.floor(-l/2),rotationOriginY:(o+l)/2}),t.handles[e].attr({zIndex:7-e}).addClass(\"highcharts-navigator-handle highcharts-navigator-handle-\"+[\"left\",\"right\"][e]).add(n),s.styledMode||t.handles[e].attr({fill:i.backgroundColor,stroke:i.borderColor,\"stroke-width\":i.lineWidth}).css(a)})}}update(t){(this.series||[]).forEach(t=>{t.baseSeries&&delete t.baseSeries.navigatorSeries}),this.destroy(),S(!0,this.chart.options.navigator,t),this.init(this.chart)}render(t,e,i,s){let o=this.chart,r=this.xAxis,a=r.pointRange||0,n=r.navigatorAxis.fake?o.xAxis[0]:r,l=this.navigatorEnabled,h=this.rendered,d=o.inverted,g=o.xAxis[0].minRange,f=o.xAxis[0].options.maxRange,m=this.scrollButtonSize,x,b,S,k=this.scrollbarHeight,C,A;if(this.hasDragged&&!u(i))return;if(t=p(t-a/2),e=p(e+a/2),!v(t)||!v(e)){if(!h)return;i=0,s=M(r.width,n.width)}this.left=M(r.left,o.plotLeft+m+(d?o.plotWidth:0));let w=this.size=C=M(r.len,(d?o.plotHeight:o.plotWidth)-2*m);x=d?k:C+2*m,i=M(i,r.toPixels(t,!0)),s=M(s,r.toPixels(e,!0)),v(i)&&Math.abs(i)!==1/0||(i=0,s=x);let T=r.toValue(i,!0),P=r.toValue(s,!0),L=Math.abs(p(P-T));Lf&&(this.grabbedLeft?i=r.toPixels(P-f-a,!0):this.grabbedRight&&(s=r.toPixels(T+f+a,!0))),this.zoomedMax=c(Math.max(i,s),0,w),this.zoomedMin=c(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(i,s),0,w),this.range=this.zoomedMax-this.zoomedMin,w=Math.round(this.zoomedMax);let O=Math.round(this.zoomedMin);l&&(this.navigatorGroup.attr({visibility:\"inherit\"}),A=h&&!this.hasDragged?\"animate\":\"attr\",this.drawMasks(O,w,d,A),this.drawOutline(O,w,d,A),this.navigatorOptions.handles.enabled&&(this.drawHandle(O,0,d,A),this.drawHandle(w,1,d,A))),this.scrollbar&&(d?(S=this.top-m,b=this.left-k+(l||!n.opposite?0:(n.titleOffset||0)+n.axisTitleMargin),k=C+2*m):(S=this.top+(l?this.height:-k),b=this.left-m),this.scrollbar.position(b,S,x,k),this.scrollbar.setRange(this.zoomedMin/(C||1),this.zoomedMax/(C||1))),this.rendered=!0,y(this,\"afterRender\")}addMouseEvents(){let t=this,e=t.chart,i=e.container,s=[],o,r;t.mouseMoveHandler=o=function(e){t.onMouseMove(e)},t.mouseUpHandler=r=function(e){t.onMouseUp(e)},(s=t.getPartsEvents(\"mousedown\")).push(d(e.renderTo,\"mousemove\",o),d(i.ownerDocument,\"mouseup\",r),d(e.renderTo,\"touchmove\",o),d(i.ownerDocument,\"touchend\",r)),s.concat(t.getPartsEvents(\"touchstart\")),t.eventsToUnbind=s,t.series&&t.series[0]&&s.push(d(t.series[0].xAxis,\"foundExtremes\",function(){e.navigator.modifyNavigatorAxisExtremes()}))}getPartsEvents(t){let e=this,i=[];return[\"shades\",\"handles\"].forEach(function(s){e[s].forEach(function(o,r){i.push(d(o.element,t,function(t){e[s+\"Mousedown\"](t,r)}))})}),i}shadesMousedown(t,e){t=this.chart.pointer?.normalize(t)||t;let i=this.chart,s=this.xAxis,o=this.zoomedMin,r=this.size,a=this.range,n=this.left,l=t.chartX,h,d,c,p;i.inverted&&(l=t.chartY,n=this.top),1===e?(this.grabbedCenter=l,this.fixedWidth=a,this.dragOffset=l-o):(p=l-n-a/2,0===e?p=Math.max(0,p):2===e&&p+a>=r&&(p=r-a,this.reversedExtremes?(p-=a,d=this.getUnionExtremes().dataMin):h=this.getUnionExtremes().dataMax),p!==o&&(this.fixedWidth=a,u((c=s.navigatorAxis.toFixedRange(p,p+a,d,h)).min)&&y(this,\"setRange\",{min:Math.min(c.min,c.max),max:Math.max(c.min,c.max),redraw:!0,eventArguments:{trigger:\"navigator\"}})))}handlesMousedown(t,e){t=this.chart.pointer?.normalize(t)||t;let i=this.chart,s=i.xAxis[0],o=this.reversedExtremes;0===e?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=o?s.min:s.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=o?s.max:s.min),i.setFixedRange(void 0)}onMouseMove(t){let e=this,i=e.chart,s=e.navigatorSize,o=e.range,r=e.dragOffset,a=i.inverted,n=e.left,l;(!t.touches||0!==t.touches[0].pageX)&&(l=(t=i.pointer?.normalize(t)||t).chartX,a&&(n=e.top,l=t.chartY),e.grabbedLeft?(e.hasDragged=!0,e.render(0,0,l-n,e.otherHandlePos)):e.grabbedRight?(e.hasDragged=!0,e.render(0,0,e.otherHandlePos,l-n)):e.grabbedCenter&&(e.hasDragged=!0,ls+r-o&&(l=s+r-o),e.render(0,0,l-r,l-r+o)),e.hasDragged&&e.scrollbar&&M(e.scrollbar.options.liveRedraw,!h&&!this.chart.boosted)&&(t.DOMType=t.type,setTimeout(function(){e.onMouseUp(t)},0)))}onMouseUp(t){let e,i,s,o,r,a;let n=this.chart,l=this.xAxis,h=this.scrollbar,d=t.DOMEvent||t,c=n.inverted,p=this.rendered&&!this.hasDragged?\"animate\":\"attr\";(this.hasDragged&&(!h||!h.hasDragged)||\"scrollbar\"===t.trigger)&&(s=this.getUnionExtremes(),this.zoomedMin===this.otherHandlePos?o=this.fixedExtreme:this.zoomedMax===this.otherHandlePos&&(r=this.fixedExtreme),this.zoomedMax===this.size&&(r=this.reversedExtremes?s.dataMin:s.dataMax),0===this.zoomedMin&&(o=this.reversedExtremes?s.dataMax:s.dataMin),u((a=l.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,o,r)).min)&&y(this,\"setRange\",{min:Math.min(a.min,a.max),max:Math.max(a.min,a.max),redraw:!0,animation:!this.hasDragged&&null,eventArguments:{trigger:\"navigator\",triggerOp:\"navigator-drag\",DOMEvent:d}})),\"mousemove\"!==t.DOMType&&\"touchmove\"!==t.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null),this.navigatorEnabled&&v(this.zoomedMin)&&v(this.zoomedMax)&&(i=Math.round(this.zoomedMin),e=Math.round(this.zoomedMax),this.shades&&this.drawMasks(i,e,c,p),this.outline&&this.drawOutline(i,e,c,p),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(i,0,c,p),this.drawHandle(e,1,c,p)))}removeEvents(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(t){t()}),this.eventsToUnbind=void 0),this.removeBaseSeriesEvents()}removeBaseSeriesEvents(){let t=this.baseSeries||[];this.navigatorEnabled&&t[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&&t.forEach(function(t){k(t,\"updatedData\",this.updatedDataHandler)},this),t[0].xAxis&&k(t[0].xAxis,\"foundExtremes\",this.modifyBaseAxisExtremes))}init(e){let i=e.options,s=i.navigator||{},r=s.enabled,n=i.scrollbar||{},l=n.enabled,h=r&&s.height||0,c=l&&n.height||0,p=n.buttonsEnabled&&c||0;this.handles=[],this.shades=[],this.chart=e,this.setBaseSeries(),this.height=h,this.scrollbarHeight=c,this.scrollButtonSize=p,this.scrollbarEnabled=l,this.navigatorEnabled=r,this.navigatorOptions=s,this.scrollbarOptions=n,this.opposite=M(s.opposite,!!(!r&&e.inverted));let u=this,g=u.baseSeries,f=e.xAxis.length,m=e.yAxis.length,x=g&&g[0]&&g[0].xAxis||e.xAxis[0]||{options:{}};if(e.isDirtyBox=!0,u.navigatorEnabled?(u.xAxis=new t(e,S({breaks:x.options.breaks,ordinal:x.options.ordinal,overscroll:x.options.overscroll},s.xAxis,{id:\"navigator-x-axis\",yAxis:\"navigator-y-axis\",type:\"datetime\",index:f,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1},e.inverted?{offsets:[p,0,-p,0],width:h}:{offsets:[0,-p,0,p],height:h}),\"xAxis\"),u.yAxis=new t(e,S(s.yAxis,{id:\"navigator-y-axis\",alignTicks:!1,offset:0,index:m,isInternal:!0,reversed:M(s.yAxis&&s.yAxis.reversed,e.yAxis[0]&&e.yAxis[0].reversed,!1),zoomEnabled:!1},e.inverted?{width:h}:{height:h}),\"yAxis\"),g||s.series.data?u.updateNavigatorSeries(!1):0===e.series.length&&(u.unbindRedraw=d(e,\"beforeRedraw\",function(){e.series.length>0&&!u.series&&(u.setBaseSeries(),u.unbindRedraw())})),u.reversedExtremes=e.inverted&&!u.xAxis.reversed||!e.inverted&&u.xAxis.reversed,u.renderElements(),u.addMouseEvents()):(u.xAxis={chart:e,navigatorAxis:{fake:!0},translate:function(t,i){let s=e.xAxis[0],o=s.getExtremes(),r=s.len-2*p,a=A(\"min\",s.options.min,o.dataMin),n=A(\"max\",s.options.max,o.dataMax)-a;return i?t*n/r+a:r*(t-a)/n},toPixels:function(t){return this.translate(t)},toValue:function(t){return this.translate(t,!0)}},u.xAxis.navigatorAxis.axis=u.xAxis,u.xAxis.navigatorAxis.toFixedRange=o.prototype.toFixedRange.bind(u.xAxis.navigatorAxis)),e.options.scrollbar.enabled){let t=S(e.options.scrollbar,{vertical:e.inverted});!v(t.margin)&&u.navigatorEnabled&&(t.margin=e.inverted?-3:3),e.scrollbar=u.scrollbar=new a(e.renderer,t,e),d(u.scrollbar,\"changed\",function(t){let e=u.size,i=e*this.to,s=e*this.from;u.hasDragged=u.scrollbar.hasDragged,u.render(0,0,s,i),this.shouldUpdateExtremes(t.DOMType)&&setTimeout(function(){u.onMouseUp(t)})})}u.addBaseSeriesEvents(),u.addChartEvents()}getUnionExtremes(t){let e;let i=this.chart.xAxis[0],s=this.xAxis,o=s.options,r=i.options;return t&&null===i.dataMin||(e={dataMin:M(o&&o.min,A(\"min\",r.min,i.dataMin,s.dataMin,s.min)),dataMax:M(o&&o.max,A(\"max\",r.max,i.dataMax,s.dataMax,s.max))}),e}setBaseSeries(t,e){let i=this.chart,s=this.baseSeries=[];t=t||i.options&&i.options.navigator.baseSeries||(i.series.length?x(i.series,t=>!t.options.isInternal).index:0),(i.series||[]).forEach((e,i)=>{!e.options.isInternal&&(e.options.showInNavigator||(i===t||e.options.id===t)&&!1!==e.options.showInNavigator)&&s.push(e)}),this.xAxis&&!this.xAxis.navigatorAxis.fake&&this.updateNavigatorSeries(!0,e)}updateNavigatorSeries(t,e){let i=this,s=i.chart,o=i.baseSeries,r={enableMouseTracking:!1,index:null,linkedTo:null,group:\"nav\",padXAxis:!1,xAxis:\"navigator-x-axis\",yAxis:\"navigator-y-axis\",showInLegend:!1,stacking:void 0,isInternal:!0,states:{inactive:{opacity:1}}},a=i.series=(i.series||[]).filter(t=>{let e=t.baseSeries;return!(0>o.indexOf(e))||(e&&(k(e,\"updatedData\",i.updatedDataHandler),delete e.navigatorSeries),t.chart&&t.destroy(),!1)}),n,h,d=i.navigatorOptions.series,c;o&&o.length&&o.forEach(t=>{let p=t.navigatorSeries,u=m({color:t.color,visible:t.visible},b(d)?l.navigator.series:d);if(p&&!1===i.navigatorOptions.adaptToUpdatedData)return;r.name=\"Navigator \"+o.length,c=(n=t.options||{}).navigatorOptions||{},u.dataLabels=C(u.dataLabels),(h=S(n,r,u,c)).pointRange=M(u.pointRange,c.pointRange,l.plotOptions[h.type||\"line\"].pointRange);let g=c.data||u.data;i.hasNavigatorData=i.hasNavigatorData||!!g,h.data=g||n.data&&n.data.slice(0),p&&p.options?p.update(h,e):(t.navigatorSeries=s.initSeries(h),s.setSortedData(),t.navigatorSeries.baseSeries=t,a.push(t.navigatorSeries))}),(d.data&&!(o&&o.length)||b(d))&&(i.hasNavigatorData=!1,(d=C(d)).forEach((t,e)=>{r.name=\"Navigator \"+(a.length+1),(h=S(l.navigator.series,{color:s.series[e]&&!s.series[e].options.isInternal&&s.series[e].color||s.options.colors[e]||s.options.colors[0]},r,t)).data=t.data,h.data&&(i.hasNavigatorData=!0,a.push(s.initSeries(h)))})),t&&this.addBaseSeriesEvents()}addBaseSeriesEvents(){let t=this,e=t.baseSeries||[];e[0]&&e[0].xAxis&&e[0].eventsToUnbind.push(d(e[0].xAxis,\"foundExtremes\",this.modifyBaseAxisExtremes)),e.forEach(e=>{e.eventsToUnbind.push(d(e,\"show\",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)})),e.eventsToUnbind.push(d(e,\"hide\",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)})),!1!==this.navigatorOptions.adaptToUpdatedData&&e.xAxis&&e.eventsToUnbind.push(d(e,\"updatedData\",this.updatedDataHandler)),e.eventsToUnbind.push(d(e,\"remove\",function(){this.navigatorSeries&&(f(t.series,this.navigatorSeries),u(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1),delete this.navigatorSeries)}))})}getBaseSeriesMin(t){return this.baseSeries.reduce(function(t,e){return Math.min(t,e.xData&&e.xData.length?e.xData[0]:t)},t)}modifyNavigatorAxisExtremes(){let t=this.xAxis;if(void 0!==t.getExtremes){let e=this.getUnionExtremes(!0);e&&(e.dataMin!==t.min||e.dataMax!==t.max)&&(t.min=e.dataMin,t.max=e.dataMax)}}modifyBaseAxisExtremes(){let t,e;let i=this.chart.navigator,s=this.getExtremes(),o=s.min,r=s.max,a=s.dataMin,n=s.dataMax,l=r-o,h=i.stickToMin,d=i.stickToMax,c=M(this.ordinal?.convertOverscroll(this.options.overscroll),0),p=i.series&&i.series[0],u=!!this.setExtremes;!(this.eventArgs&&\"rangeSelectorButton\"===this.eventArgs.trigger)&&(h&&(t=(e=a)+l),d&&(t=n+c,h||(e=Math.max(a,t-l,i.getBaseSeriesMin(p&&p.xData?p.xData[0]:-Number.MAX_VALUE)))),u&&(h||d)&&v(e)&&(this.min=this.userMin=e,this.max=this.userMax=t)),i.stickToMin=i.stickToMax=null}updatedDataHandler(){let t=this.chart.navigator,e=this.navigatorSeries,i=t.reversedExtremes?0===Math.round(t.zoomedMin):Math.round(t.zoomedMax)>=Math.round(t.size);t.stickToMax=M(this.chart.options.navigator&&this.chart.options.navigator.stickToMax,i),t.stickToMin=t.shouldStickToMin(this,t),e&&!t.hasNavigatorData&&(e.options.pointStart=this.xData[0],e.setData(this.options.data,!1,null,!1))}shouldStickToMin(t,e){let i=e.getBaseSeriesMin(t.xData[0]),s=t.xAxis,o=s.max,r=s.min,a=s.options.range;return!!(v(o)&&v(r))&&(a&&o-i>0?o-i{t.destroy&&t.destroy()}),[\"series\",\"xAxis\",\"yAxis\",\"shades\",\"outline\",\"scrollbarTrack\",\"scrollbarRifles\",\"scrollbarGroup\",\"scrollbar\",\"navigatorGroup\",\"rendered\"].forEach(t=>{this[t]&&this[t].destroy&&this[t].destroy(),this[t]=null}),[this.handles].forEach(t=>{g(t)})}}return w}),i(e,\"Core/Axis/OrdinalAxis.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var o;let{addEvent:r,correctFloat:a,css:n,defined:l,error:h,isNumber:d,pick:c,timeUnits:p,isString:u}=s;return function(t){function s(t,e,i,s,o=[],r=0,a){let n={},d=this.options.tickPixelInterval,c=this.chart.time,u=[],g,f,m,x,y,b=0,v=[],S=-Number.MAX_VALUE;if(!this.options.ordinal&&!this.options.breaks||!o||o.length<3||void 0===e)return c.getTimeTicks.apply(c,arguments);let M=o.length;for(g=0;gi,o[g]5*r||y){if(o[g]>S){for(f=c.getTimeTicks(t,o[b],o[g],s);f.length&&f[0]<=S;)f.shift();f.length&&(S=f[f.length-1]),u.push(v.length),v=v.concat(f)}b=g+1}if(y)break}if(f){if(x=f.info,a&&x.unitRange<=p.hour){for(b=1,g=v.length-1;bi?t-1:t,a=void 0;c--;)h=Math.abs(a-(r=e[c])),a&&h<.8*d&&(null===l||h<.8*l)?(n[v[c]]&&!n[v[c+1]]?(o=c+1,a=r):o=c,v.splice(o,1)):a=r}return v}function o(t){let e=this.ordinal.positions;if(!e)return t;let i=e.length-1,s;return(t<0?t=e[0]:t>i?t=e[i]:(i=Math.floor(t),s=t-i),void 0!==s&&void 0!==e[i])?e[i]+(s?s*(e[i+1]-e[i]):0):t}function g(t){let e=this.ordinal,i=this.old?this.old.min:this.min,s=this.old?this.old.transA:this.transA,o=e.getExtendedPositions();if(o&&o.length){let r=a((t-i)*s+this.minPixelPadding),n=a(e.getIndexOfPoint(r,o)),l=a(n%1);if(n>=0&&n<=o.length-1){let t=o[Math.floor(n)],e=o[Math.ceil(n)];return o[Math.floor(n)]+l*(e-t)}}return t}function f(e,i){let s=t.Additions.findIndexOf(e,i,!0);if(e[s]===i)return s;let o=(i-e[s])/(e[s+1]-e[s]);return s+o}function m(){this.ordinal||(this.ordinal=new t.Additions(this))}function x(){let{eventArgs:t,options:e}=this;if(this.isXAxis&&l(e.overscroll)&&0!==e.overscroll&&d(this.max)&&d(this.min)&&(this.options.ordinal&&!this.ordinal.originalOrdinalRange&&this.ordinal.getExtendedPositions(!1),this.max===this.dataMax&&(t?.trigger!==\"pan\"||this.isInternal)&&t?.trigger!==\"navigator\")){let i=this.ordinal.convertOverscroll(e.overscroll);this.max+=i,!this.isInternal&&l(this.userMin)&&t?.trigger!==\"mousewheel\"&&(this.min+=i)}}function y(){this.horiz&&!this.isDirty&&(this.isDirty=this.isOrdinal&&this.chart.navigator&&!this.chart.navigator.adaptToUpdatedData)}function b(){this.ordinal&&(this.ordinal.beforeSetTickPositions(),this.tickInterval=this.ordinal.postProcessTickInterval(this.tickInterval))}function v(t){let e=this.xAxis[0],i=e.ordinal.convertOverscroll(e.options.overscroll),s=t.originalEvent.chartX,o=this.options.chart.panning,r=!1;if(o&&\"y\"!==o.type&&e.options.ordinal&&e.series.length){let t,o;let a=this.mouseDownX,l=e.getExtremes(),h=l.dataMax,d=l.min,c=l.max,p=this.hoverPoints,u=e.closestPointRange||e.ordinal&&e.ordinal.overscrollPointsRange,g=Math.round((a-s)/(e.translationSlope*(e.ordinal.slope||u))),f=e.ordinal.getExtendedPositions(),m={ordinal:{positions:f,extendedOrdinalPositions:f}},x=e.index2val,y=e.val2lin;m.ordinal.positions?Math.abs(g)>1&&(p&&p.forEach(function(t){t.setState()}),h>(o=m.ordinal.positions)[o.length-1]&&o.push(h),this.setFixedRange(c-d),(t=e.navigatorAxis.toFixedRange(void 0,void 0,x.apply(m,[y.apply(m,[d,!0])+g]),x.apply(m,[y.apply(m,[c,!0])+g]))).min>=Math.min(l.dataMin,d)&&t.max<=Math.max(h,c)+i&&e.setExtremes(t.min,t.max,!0,!1,{trigger:\"pan\"}),this.mouseDownX=s,n(this.container,{cursor:\"move\"})):r=!0}else r=!0;r||o&&/y/.test(o.type)?i&&(e.max=e.dataMax+i):t.preventDefault()}function S(){let t=this.xAxis;t&&t.options.ordinal&&(delete t.ordinal.index,delete t.ordinal.originalOrdinalRange)}function M(t,e){let i;let s=this.ordinal,o=s.positions,r=s.slope,a;if(!o)return t;let n=o.length;if(o[0]<=t&&o[n-1]>=t)i=f(o,t);else{if(!((a=s.getExtendedPositions&&s.getExtendedPositions())&&a.length))return t;let n=a.length;r||(r=(a[n-1]-a[0])/n);let l=f(a,o[0]);if(t>=a[0]&&t<=a[n-1])i=f(a,t)-l;else{if(!e)return t;i=t0&&\"highcharts-navigator-series\"!==t.options.id&&t.processedXData.length>1&&(y=i!==t.processedXData[1]-t.processedXData[0]),i=t.processedXData[1]-t.processedXData[0],t.boosted&&(b=t.boosted),t.reserveSpace()&&(!1!==t.takeOrdinalPosition||r)&&(n=(f=f.concat(t.processedXData)).length,f.sort(function(t,e){return t-e}),m=Math.min(m,c(t.closestPointRange,m)),n)){for(e=0;e2){for(h=f[1]-f[0],g=n-1;g--&&!x;)f[g+1]-f[g]!==h&&(x=!0);!t.options.keepOrdinalPadding&&(f[0]-s>h||o-f[f.length-1]>h)&&(x=!0)}else t.options.overscroll&&(2===n?m=f[1]-f[0]:1===n?(m=t.ordinal.convertOverscroll(t.options.overscroll),f=[f[0],f[0]+m]):m=e.overscrollPointsRange);x||t.forceOrdinal?(t.options.overscroll&&(e.overscrollPointsRange=m,f=f.concat(e.getOverscrollPositions())),e.positions=f,d=t.ordinal2lin(Math.max(s,f[0]),!0),p=Math.max(t.ordinal2lin(Math.min(o,f[f.length-1]),!0),1),e.slope=u=(o-s)/(p-d),e.offset=s-d*u):(e.overscrollPointsRange=c(t.closestPointRange,e.overscrollPointsRange),e.positions=t.ordinal.slope=e.offset=void 0)}t.isOrdinal=a&&x,e.groupIntervalFactor=null}static findIndexOf(t,e,i){let s=0,o=t.length-1,r;for(;st.x>=e&&t.x<=i)};s.series.forEach(t=>{let e=t.points?.[0];l(e?.plotX)&&(e.plotX{t.updateNames(),t.setScale()}),this.getAxisMargins(),e.render();let i=e.options.verticalAlign;e.options.floating||(\"bottom\"===i?this.extraBottomMargin=!0:\"middle\"===i||(this.extraTopMargin=!0))}}function b(t){let e,i,s,o;let r=t.rangeSelector,a=()=>{r&&(e=t.xAxis[0].getExtremes(),i=t.legend,o=r&&r.options.verticalAlign,c(e.min)&&r.render(e.min,e.max),i.display&&\"top\"===o&&o===i.options.verticalAlign&&(s=p(t.spacingBox),\"vertical\"===i.options.layout?s.y=t.plotTop:s.y+=r.getHeight(),i.group.placed=!1,i.align(s)))};r&&(d(f,e=>e[0]===t)||f.push([t,[n(t.xAxis[0],\"afterSetExtremes\",function(t){r&&r.render(t.min,t.max)}),n(t,\"redraw\",a)]]),a())}function v(){for(let t=0,e=f.length;tt()),f.splice(t,1);return}}}function S(){let t=this.rangeSelector;if(t){let e=t.getHeight();this.extraTopMargin&&(this.plotTop+=e),this.extraBottomMargin&&(this.marginBottom+=e)}}function M(){let t=this.rangeSelector;if(t&&!t.options.floating){t.render();let e=t.options.verticalAlign;\"bottom\"===e?this.extraBottomMargin=!0:\"middle\"!==e&&(this.extraTopMargin=!0)}}function k(t){let e=t.options.rangeSelector,i=this.extraBottomMargin,s=this.extraTopMargin,r=this.rangeSelector;if(e&&e.enabled&&!l(r)&&this.options.rangeSelector&&(this.options.rangeSelector.enabled=!0,this.rangeSelector=r=new o(this)),this.extraBottomMargin=!1,this.extraTopMargin=!1,r){b(this);let t=e&&e.verticalAlign||r.options&&r.options.verticalAlign;r.options.floating||(\"bottom\"===t?this.extraBottomMargin=!0:\"middle\"===t||(this.extraTopMargin=!0)),(this.extraBottomMargin!==i||this.extraTopMargin!==s)&&(this.isDirtyBox=!0)}}return{compose:function(t,e,s){if(o=s,g(a,\"RangeSelector\")){let s=e.prototype;t.prototype.minFromRange=m,n(e,\"afterGetContainer\",x),n(e,\"beforeRender\",y),n(e,\"destroy\",v),n(e,\"getMargins\",S),n(e,\"render\",M),n(e,\"update\",k),s.callbacks.push(b),h(r,{rangeSelector:i.rangeSelector}),h(r.lang,i.lang)}}}}),i(e,\"Stock/RangeSelector/RangeSelector.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Stock/RangeSelector/RangeSelectorComposition.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(e,i,s,o,r,a){let{defaultOptions:n}=i,{addEvent:l,createElement:h,css:d,defined:c,destroyObjectProperties:p,discardElement:u,extend:g,fireEvent:f,isNumber:m,merge:x,objectEach:y,pad:b,pick:v,pInt:S,splat:M}=a;class k{static compose(t,e){o.compose(t,e,k)}constructor(t){this.buttonOptions=k.prototype.defaultButtons,this.initialButtonGroupWidth=0,this.chart=t,this.init(t)}clickButton(t,i){let s=this.chart,o=this.buttonOptions[t],r=s.xAxis[0],a=s.scroller&&s.scroller.getUnionExtremes()||r||{},n=o.type,h=o.dataGrouping,d=a.dataMin,p=a.dataMax,u,g=r&&Math.round(Math.min(r.max,v(p,r.max))),x,y=o._range,b,S,k,C,A,w=!0;if(null!==d&&null!==p){if(this.setSelected(t),h&&(this.forcedDataGrouping=!0,e.prototype.setDataGrouping.call(r||{chart:this.chart},h,!1),this.frozenStates=o.preserveDataGrouping),\"month\"===n||\"year\"===n)r?(C={range:o,max:g,chart:s,dataMin:d,dataMax:p},u=r.minFromRange.call(C),m(C.newMax)&&(g=C.newMax),w=!1):y=o;else if(y)g=Math.min((u=Math.max(g-y,d))+y,p),w=!1;else if(\"ytd\"===n){if(r)(void 0===p||void 0===d)&&(d=Number.MAX_VALUE,p=Number.MIN_VALUE,s.series.forEach(t=>{let e=t.xData;e&&(d=Math.min(e[0],d),p=Math.max(e[e.length-1],p))}),i=!1),u=b=(A=this.getYTDExtremes(p,d,s.time.useUTC)).min,g=A.max;else{this.deferredYTDClick=t;return}}else\"all\"===n&&r&&(s.navigator&&s.navigator.baseSeries[0]&&(s.navigator.baseSeries[0].xAxis.options.range=void 0),u=d,g=p);w&&o._offsetMin&&c(u)&&(u+=o._offsetMin),o._offsetMax&&c(g)&&(g+=o._offsetMax),this.dropdown&&(this.dropdown.selectedIndex=t+1),r?(r.setExtremes(u,g,v(i,!0),void 0,{trigger:\"rangeSelectorButton\",rangeSelectorButton:o}),s.setFixedRange(o._range)):(k=(x=M(s.options.xAxis)[0]).range,x.range=y,S=x.min,x.min=b,l(s,\"load\",function(){s.setFixedRange(o._range),x.range=k,x.min=S})),f(this,\"afterBtnClick\")}}setSelected(t){this.selected=this.options.selected=t}init(t){let e=this,i=t.options.rangeSelector,s=i.buttons||e.defaultButtons.slice(),o=i.selected,r=function(){let t=e.minInput,i=e.maxInput;t&&t.blur&&f(t,\"blur\"),i&&i.blur&&f(i,\"blur\")};e.chart=t,e.options=i,e.buttons=[],e.buttonOptions=s,this.eventsToUnbind=[],this.eventsToUnbind.push(l(t.container,\"mousedown\",r)),this.eventsToUnbind.push(l(t,\"resize\",r)),s.forEach(e.computeButtonRange),void 0!==o&&s[o]&&this.clickButton(o,!1),this.eventsToUnbind.push(l(t,\"load\",function(){t.xAxis&&t.xAxis[0]&&l(t.xAxis[0],\"setExtremes\",function(i){m(this.max)&&m(this.min)&&this.max-this.min!==t.fixedRange&&\"rangeSelectorButton\"!==i.trigger&&\"updatedData\"!==i.trigger&&e.forcedDataGrouping&&!e.frozenStates&&this.setDataGrouping(!1,!1)})}))}updateButtonStates(){let t=this,e=this.chart,i=this.dropdown,s=e.xAxis[0],o=Math.round(s.max-s.min),r=!s.hasVisibleSeries,a=24*36e5,n=e.scroller&&e.scroller.getUnionExtremes()||s,l=n.dataMin,h=n.dataMax,d=t.getYTDExtremes(h,l,e.time.useUTC),p=d.min,u=d.max,g=t.selected,f=t.options.allButtonsEnabled,x=t.buttons,y=m(g),b=!1;t.buttonOptions.forEach((e,n)=>{let d=e._range,m=e.type,v=e.count||1,S=x[n],M=e._offsetMax-e._offsetMin,k=n===g,C=d>h-l,A=dd&&(L=!0)}else(\"month\"===m||\"year\"===m)&&o+36e5>=({month:28,year:365})[m]*a*v-M&&o-36e5<=({month:31,year:366})[m]*a*v+M?L=!0:\"ytd\"===m?(L=u-p+M===o,T=!k):\"all\"===m&&(L=s.max-s.min>=h-l,P=!k&&y&&L);let O=!f&&!(b&&\"all\"===m)&&(C||A||P||r),D=b&&\"all\"===m||k&&L||L&&!y&&!T||k&&t.frozenStates;O?w=3:D&&(y=!0,w=2),S.state!==w&&(S.setState(w),i&&(i.options[n+1].disabled=O,2===w&&(i.selectedIndex=n+1)),0===w&&g===n?t.setSelected():(2===w&&!c(g)||b)&&t.setSelected(n))})}computeButtonRange(t){let e=t.type,i=t.count||1,s={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5};s[e]?t._range=s[e]*i:(\"month\"===e||\"year\"===e)&&(t._range=24*({month:30,year:365})[e]*36e5*i),t._offsetMin=v(t.offsetMin,0),t._offsetMax=v(t.offsetMax,0),t._range+=t._offsetMax-t._offsetMin}getInputValue(t){let e=\"min\"===t?this.minInput:this.maxInput,i=this.chart.options.rangeSelector,s=this.chart.time;return e?(\"text\"===e.type&&i.inputDateParser||this.defaultInputDateParser)(e.value,s.useUTC,s):0}setInputValue(t,e){let i=this.options,s=this.chart.time,o=\"min\"===t?this.minInput:this.maxInput,r=\"min\"===t?this.minDateBox:this.maxDateBox;if(o){let t=o.getAttribute(\"data-hc-time\"),a=c(t)?Number(t):void 0;if(c(e)){let t=a;c(t)&&o.setAttribute(\"data-hc-time-previous\",t),o.setAttribute(\"data-hc-time\",e),a=e}o.value=s.dateFormat(this.inputTypeFormats[o.type]||i.inputEditDateFormat,a),r&&r.attr({text:s.dateFormat(i.inputDateFormat,a)})}}setInputExtremes(t,e,i){let s=\"min\"===t?this.minInput:this.maxInput;if(s){let t=this.inputTypeFormats[s.type],o=this.chart.time;if(t){let r=o.dateFormat(t,e);s.min!==r&&(s.min=r);let a=o.dateFormat(t,i);s.max!==a&&(s.max=a)}}}showInput(t){let e=\"min\"===t?this.minDateBox:this.maxDateBox,i=\"min\"===t?this.minInput:this.maxInput;if(i&&e&&this.inputGroup){let t=\"text\"===i.type,{translateX:s=0,translateY:o=0}=this.inputGroup,{x:r=0,width:a=0,height:n=0}=e,{inputBoxWidth:l}=this.options;d(i,{width:t?a+(l?-2:20)+\"px\":\"auto\",height:n-2+\"px\",border:\"2px solid silver\"}),t&&l?d(i,{left:s+r+\"px\",top:o+\"px\"}):d(i,{left:Math.min(Math.round(r+s-(i.offsetWidth-a)/2),this.chart.chartWidth-i.offsetWidth)+\"px\",top:o-(i.offsetHeight-n)/2+\"px\"})}}hideInput(t){let e=\"min\"===t?this.minInput:this.maxInput;e&&d(e,{top:\"-9999em\",border:0,width:\"1px\",height:\"1px\"})}defaultInputDateParser(t,e,i){let o=t.split(\"/\").join(\"-\").split(\" \").join(\"T\");if(-1===o.indexOf(\"T\")&&(o+=\"T00:00\"),e)o+=\"Z\";else{let t;if(s.isSafari&&!((t=o).length>6&&(t.lastIndexOf(\"-\")===t.length-6||t.lastIndexOf(\"+\")===t.length-6))){let t=new Date(o).getTimezoneOffset()/60;o+=t<=0?`+${b(-t)}:00`:`-${b(t)}:00`}}let r=Date.parse(o);if(!m(r)){let e=t.split(\"-\");r=Date.UTC(S(e[0]),S(e[1])-1,S(e[2]))}return i&&e&&m(r)&&(r+=i.getTimezoneOffset(r)),r}drawInput(t){let{chart:e,div:i,inputGroup:o}=this,r=this,a=e.renderer.style||{},l=e.renderer,c=e.options.rangeSelector,p=n.lang,u=\"min\"===t;function f(){let{maxInput:i,minInput:s}=r,o=e.xAxis[0],a=e.scroller&&e.scroller.getUnionExtremes()||o,n=a.dataMin,l=a.dataMax,h=r.getInputValue(t);h!==Number(S.getAttribute(\"data-hc-time-previous\"))&&m(h)&&(S.setAttribute(\"data-hc-time-previous\",h),u&&i&&m(n)?h>Number(i.getAttribute(\"data-hc-time\"))?h=void 0:hl&&(h=l)),void 0!==h&&o.setExtremes(u?h:o.min,u?o.max:h,void 0,void 0,{trigger:\"rangeSelectorInput\"}))}let y=p[u?\"rangeSelectorFrom\":\"rangeSelectorTo\"]||\"\",b=l.label(y,0).addClass(\"highcharts-range-label\").attr({padding:y?2:0,height:y?c.inputBoxHeight:0}).add(o),v=l.label(\"\",0).addClass(\"highcharts-range-input\").attr({padding:2,width:c.inputBoxWidth,height:c.inputBoxHeight,\"text-align\":\"center\"}).on(\"click\",function(){r.showInput(t),r[t+\"Input\"].focus()});e.styledMode||v.attr({stroke:c.inputBoxBorderColor,\"stroke-width\":1}),v.add(o);let S=h(\"input\",{name:t,className:\"highcharts-range-selector\"},void 0,i);S.setAttribute(\"type\",function(t){if(-1!==t.indexOf(\"%L\"))return\"text\";let e=[\"a\",\"A\",\"d\",\"e\",\"w\",\"b\",\"B\",\"m\",\"o\",\"y\",\"Y\"].some(e=>-1!==t.indexOf(\"%\"+e)),i=[\"H\",\"k\",\"I\",\"l\",\"M\",\"S\"].some(e=>-1!==t.indexOf(\"%\"+e));return e&&i?\"datetime-local\":e?\"date\":i?\"time\":\"text\"}(c.inputDateFormat||\"%e %b %Y\")),e.styledMode||(b.css(x(a,c.labelStyle)),v.css(x({color:\"#333333\"},a,c.inputStyle)),d(S,g({position:\"absolute\",border:0,boxShadow:\"0 0 15px rgba(0,0,0,0.3)\",width:\"1px\",height:\"1px\",padding:0,textAlign:\"center\",fontSize:a.fontSize,fontFamily:a.fontFamily,top:\"-9999em\"},c.inputStyle))),S.onfocus=()=>{r.showInput(t)},S.onblur=()=>{S===s.doc.activeElement&&f(),r.hideInput(t),r.setInputValue(t),S.blur()};let M=!1;return S.onchange=()=>{M||(f(),r.hideInput(t),S.blur())},S.onkeypress=t=>{13===t.keyCode&&f()},S.onkeydown=t=>{M=!0,(38===t.keyCode||40===t.keyCode)&&f()},S.onkeyup=()=>{M=!1},{dateBox:v,input:S,label:b}}getPosition(){let t=this.chart,e=t.options.rangeSelector,i=\"top\"===e.verticalAlign?t.plotTop-t.axisOffset[0]:0;return{buttonTop:i+e.buttonPosition.y,inputTop:i+e.inputPosition.y-10}}getYTDExtremes(t,e,i){let s=this.chart.time,o=new s.Date(t),r=s.get(\"FullYear\",o),a=Math.max(e,i?s.Date.UTC(r,0,1):+new s.Date(r,0,1)),n=o.getTime();return{max:Math.min(t||n,n),min:a}}render(t,e){let i=this.chart,s=i.renderer,o=i.container,r=i.options,a=r.rangeSelector,n=v(r.chart.style&&r.chart.style.zIndex,0)+1,l=a.inputEnabled,d=this.rendered;if(!1!==a.enabled){if(!d&&(this.group=s.g(\"range-selector-group\").attr({zIndex:7}).add(),this.div=h(\"div\",void 0,{position:\"relative\",height:0,zIndex:n}),this.buttonOptions.length&&this.renderButtons(),o.parentNode&&o.parentNode.insertBefore(this.div,o),l)){this.inputGroup=s.g(\"input-group\").add(this.group);let t=this.drawInput(\"min\");this.minDateBox=t.dateBox,this.minLabel=t.label,this.minInput=t.input;let e=this.drawInput(\"max\");this.maxDateBox=e.dateBox,this.maxLabel=e.label,this.maxInput=e.input}if(l){this.setInputValue(\"min\",t),this.setInputValue(\"max\",e);let s=i.scroller&&i.scroller.getUnionExtremes()||i.xAxis[0]||{};if(c(s.dataMin)&&c(s.dataMax)){let t=i.xAxis[0].minRange||0;this.setInputExtremes(\"min\",s.dataMin,Math.min(s.dataMax,this.getInputValue(\"max\"))-t),this.setInputExtremes(\"max\",Math.max(s.dataMin,this.getInputValue(\"min\"))+t,s.dataMax)}if(this.inputGroup){let t=0;[this.minLabel,this.minDateBox,this.maxLabel,this.maxDateBox].forEach(e=>{if(e){let{width:i}=e.getBBox();i&&(e.attr({x:t}),t+=i+a.inputSpacing)}})}}this.alignElements(),this.rendered=!0}}renderButtons(){let{buttons:t,chart:e,options:i}=this,o=n.lang,r=e.renderer,a=x(i.buttonTheme),d=a&&a.states,c=a.width||28;delete a.width,delete a.states,this.buttonGroup=r.g(\"range-selector-buttons\").add(this.group);let p=this.dropdown=h(\"select\",void 0,{position:\"absolute\",width:\"1px\",height:\"1px\",padding:0,border:0,top:\"-9999em\",cursor:\"pointer\",opacity:1e-4},this.div);l(p,\"touchstart\",()=>{p.style.fontSize=\"16px\"}),[[s.isMS?\"mouseover\":\"mouseenter\"],[s.isMS?\"mouseout\":\"mouseleave\"],[\"change\",\"click\"]].forEach(([e,i])=>{l(p,e,()=>{let s=t[this.currentButtonIndex()];s&&f(s.element,i||e)})}),this.zoomText=r.label(o&&o.rangeSelectorZoom||\"\",0).attr({padding:i.buttonTheme.padding,height:i.buttonTheme.height,paddingLeft:0,paddingRight:0}).add(this.buttonGroup),this.chart.styledMode||(this.zoomText.css(i.labelStyle),a[\"stroke-width\"]=v(a[\"stroke-width\"],0)),h(\"option\",{textContent:this.zoomText.textStr,disabled:!0},void 0,p),this.buttonOptions.forEach((e,i)=>{h(\"option\",{textContent:e.title||e.text},void 0,p),t[i]=r.button(e.text,0,0,t=>{let s;let o=e.events&&e.events.click;o&&(s=o.call(e,t)),!1!==s&&this.clickButton(i),this.isActive=!0},a,d&&d.hover,d&&d.select,d&&d.disabled).attr({\"text-align\":\"center\",width:c}).add(this.buttonGroup),e.title&&t[i].attr(\"title\",e.title)})}alignElements(){let{buttonGroup:t,buttons:e,chart:i,group:s,inputGroup:o,options:r,zoomText:a}=this,n=i.options,l=n.exporting&&!1!==n.exporting.enabled&&n.navigation&&n.navigation.buttonOptions,{buttonPosition:h,inputPosition:d,verticalAlign:c}=r,p=(t,e)=>l&&this.titleCollision(i)&&\"top\"===c&&\"right\"===e.align&&e.y-t.getBBox().height-12<(l.y||0)+(l.height||0)+i.spacing[0]?-40:0,u=i.plotLeft;if(s&&h&&d){let n=h.x-i.spacing[3];if(t){if(this.positionButtons(),!this.initialButtonGroupWidth){let t=0;a&&(t+=a.getBBox().width+5),e.forEach((i,s)=>{t+=i.width||0,s!==e.length-1&&(t+=r.buttonSpacing)}),this.initialButtonGroupWidth=t}u-=i.spacing[3],this.updateButtonStates();let o=p(t,h);this.alignButtonGroup(o),s.placed=t.placed=i.hasLoaded}let l=0;o&&(l=p(o,d),\"left\"===d.align?n=u:\"right\"===d.align&&(n=-Math.max(i.axisOffset[1],-l)),o.align({y:d.y,width:o.getBBox().width,align:d.align,x:d.x+n-2},!0,i.spacingBox),o.placed=i.hasLoaded),this.handleCollision(l),s.align({verticalAlign:c},!0,i.spacingBox);let g=s.alignAttr.translateY,f=s.getBBox().height+20,m=0;if(\"bottom\"===c){let t=i.legend&&i.legend.options;m=g-(f=f+(t&&\"bottom\"===t.verticalAlign&&t.enabled&&!t.floating?i.legend.legendHeight+v(t.margin,10):0)-20)-(r.floating?0:r.y)-(i.titleOffset?i.titleOffset[2]:0)-10}\"top\"===c?(r.floating&&(m=0),i.titleOffset&&i.titleOffset[0]&&(m=i.titleOffset[0]),m+=i.margin[0]-i.spacing[0]||0):\"middle\"===c&&(d.y===h.y?m=g:(d.y||h.y)&&(d.y<0||h.y<0?m-=Math.min(d.y,h.y):m=g-f)),s.translate(r.x,r.y+Math.floor(m));let{minInput:x,maxInput:y,dropdown:b}=this;r.inputEnabled&&x&&y&&(x.style.marginTop=s.translateY+\"px\",y.style.marginTop=s.translateY+\"px\"),b&&(b.style.marginTop=s.translateY+\"px\")}}alignButtonGroup(t,e){let{chart:i,options:s,buttonGroup:o}=this,{buttonPosition:r}=s,a=i.plotLeft-i.spacing[3],n=r.x-i.spacing[3];\"right\"===r.align?n+=t-a:\"center\"===r.align&&(n-=a/2),o&&o.align({y:r.y,width:v(e,this.initialButtonGroupWidth),align:r.align,x:n},!0,i.spacingBox)}positionButtons(){let{buttons:t,chart:e,options:i,zoomText:s}=this,o=e.hasLoaded?\"animate\":\"attr\",{buttonPosition:r}=i,a=e.plotLeft,n=a;s&&\"hidden\"!==s.visibility&&(s[o]({x:v(a+r.x,a)}),n+=r.x+s.getBBox().width+5);for(let e=0,s=this.buttonOptions.length;e{let t=0;return this.buttons.forEach(e=>{let i=e.getBBox();i.width>t&&(t=i.width)}),t},l=e=>{if(s&&i){let r=s.alignAttr.translateX+s.alignOptions.x-t+s.getBBox().x+2,n=s.alignOptions.width,l=i.alignAttr.translateX+i.getBBox().x;return l+e>r&&r+n>l&&o.y{s&&i&&s.attr({translateX:s.alignAttr.translateX+(e.axisOffset[1]>=-t?0:-t),translateY:s.alignAttr.translateY+i.getBBox().height+10})};if(i){if(\"always\"===r){this.collapseButtons(t),l(n())&&h();return}\"never\"===r&&this.expandButtons()}s&&i?a.align===o.align||l(this.initialButtonGroupWidth+20)?\"responsive\"===r?(this.collapseButtons(t),l(n())&&h()):h():\"responsive\"===r&&this.expandButtons():i&&\"responsive\"===r&&(this.initialButtonGroupWidth>e.plotWidth?this.collapseButtons(t):this.expandButtons())}collapseButtons(t){let{buttons:e,buttonOptions:i,chart:s,dropdown:o,options:r,zoomText:a}=this;if(!0===this.isCollapsed)return;this.isCollapsed=!0;let n=s.userOptions.rangeSelector&&s.userOptions.rangeSelector.buttonTheme||{},l=t=>({text:t?`${t} ▾`:\"▾\",width:\"auto\",paddingLeft:v(r.buttonTheme.paddingLeft,n.padding,8),paddingRight:v(r.buttonTheme.paddingRight,n.padding,8)});a&&a.hide();let h=!1;i.forEach((t,i)=>{let s=e[i];2!==s.state?s.hide():(s.show(),s.attr(l(t.text)),h=!0)}),h||(o&&(o.selectedIndex=0),e[0].show(),e[0].attr(l(this.zoomText&&this.zoomText.textStr)));let{align:d}=r.buttonPosition;this.positionButtons(),(\"right\"===d||\"center\"===d)&&this.alignButtonGroup(t,e[this.currentButtonIndex()].getBBox().width),this.showDropdown()}expandButtons(){let{buttons:t,buttonOptions:e,options:i,zoomText:s}=this;this.hideDropdown(),!1!==this.isCollapsed&&(this.isCollapsed=!1,s&&s.show(),e.forEach((e,s)=>{let o=t[s];o.show(),o.attr({text:e.text,width:i.buttonTheme.width||28,paddingLeft:v(i.buttonTheme.paddingLeft,\"unset\"),paddingRight:v(i.buttonTheme.paddingRight,\"unset\")}),o.state<2&&o.setState(0)}),this.positionButtons())}currentButtonIndex(){let{dropdown:t}=this;return t&&t.selectedIndex>0?t.selectedIndex-1:0}showDropdown(){let{buttonGroup:t,buttons:e,chart:i,dropdown:s}=this;if(t&&s){let{translateX:o=0,translateY:r=0}=t,a=e[this.currentButtonIndex()].getBBox();d(s,{left:i.plotLeft+o+\"px\",top:r+.5+\"px\",width:a.width+\"px\",height:a.height+\"px\"}),this.hasVisibleDropdown=!0}}hideDropdown(){let{dropdown:t}=this;t&&(d(t,{top:\"-9999em\",width:\"1px\",height:\"1px\"}),this.hasVisibleDropdown=!1)}getHeight(){let t=this.options,e=this.group,i=t.inputPosition,s=t.buttonPosition,o=t.y,r=s.y,a=i.y,n=0;if(t.height)return t.height;this.alignElements(),n=e?e.getBBox(!0).height+13+o:0;let l=Math.min(a,r);return(a<0&&r<0||a>0&&r>0)&&(n+=Math.abs(l)),n}titleCollision(t){return!(t.options.title.text||t.options.subtitle.text)}update(t){let e=this.chart;x(!0,e.options.rangeSelector,t),this.destroy(),this.init(e),this.render()}destroy(){let e=this,i=e.minInput,s=e.maxInput;e.eventsToUnbind&&(e.eventsToUnbind.forEach(t=>t()),e.eventsToUnbind=void 0),p(e.buttons),i&&(i.onfocus=i.onblur=i.onchange=null),s&&(s.onfocus=s.onblur=s.onchange=null),y(e,function(i,s){i&&\"chart\"!==s&&(i instanceof r?i.destroy():i instanceof t.HTMLElement&&u(i)),i!==k.prototype[s]&&(e[s]=null)},this)}}return g(k.prototype,{defaultButtons:[{type:\"month\",count:1,text:\"1m\",title:\"View 1 month\"},{type:\"month\",count:3,text:\"3m\",title:\"View 3 months\"},{type:\"month\",count:6,text:\"6m\",title:\"View 6 months\"},{type:\"ytd\",text:\"YTD\",title:\"View year to date\"},{type:\"year\",count:1,text:\"1y\",title:\"View 1 year\"},{type:\"all\",text:\"All\",title:\"View all\"}],inputTypeFormats:{\"datetime-local\":\"%Y-%m-%dT%H:%M:%S\",date:\"%Y-%m-%d\",time:\"%H:%M:%S\"}}),k}),i(e,\"Core/Chart/StockChart.js\",[e[\"Core/Chart/Chart.js\"],e[\"Core/Templating.js\"],e[\"Core/Defaults.js\"],e[\"Stock/Navigator/NavigatorDefaults.js\"],e[\"Stock/RangeSelector/RangeSelectorDefaults.js\"],e[\"Stock/Scrollbar/ScrollbarDefaults.js\"],e[\"Stock/Utilities/StockUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n){let{format:l}=e,{getOptions:h}=i,{setFixedRange:d}=a,{addEvent:c,clamp:p,defined:u,extend:g,find:f,isNumber:m,isString:x,merge:y,pick:b,splat:v}=n;function S(t,e,i){return\"xAxis\"===t?{minPadding:0,maxPadding:0,overscroll:0,ordinal:!0}:\"yAxis\"===t?{labels:{y:-2},opposite:i.opposite??e.opposite??!0,showLastLabel:!!(e.categories||\"category\"===e.type),title:{text:i.title?.text!==\"Values\"?i.title?.text:null}}:{}}function M(t,e){if(\"xAxis\"===t){let t=b(e.navigator&&e.navigator.enabled,s.enabled,!0),i={type:\"datetime\",categories:void 0};return t&&(i.startOnTick=!1,i.endOnTick=!1),i}return{}}class k extends t{init(t,e){let i=h(),a=t.xAxis,n=t.yAxis,l=b(t.navigator&&t.navigator.enabled,s.enabled,!0);t.xAxis=t.yAxis=void 0;let d=y({chart:{panning:{enabled:!0,type:\"x\"},zooming:{pinchType:\"x\",mouseWheel:{type:\"x\"}}},navigator:{enabled:l},scrollbar:{enabled:b(r.enabled,!0)},rangeSelector:{enabled:b(o.rangeSelector.enabled,!0)},title:{text:null},tooltip:{split:b(i.tooltip&&i.tooltip.split,!0),crosshairs:!0},legend:{enabled:!1}},t,{isStock:!0});t.xAxis=a,t.yAxis=n,d.xAxis=v(t.xAxis||{}).map(e=>y(S(\"xAxis\",e,i.xAxis),e,M(\"xAxis\",t))),d.yAxis=v(t.yAxis||{}).map(t=>y(S(\"yAxis\",t,i.yAxis),t)),super.init(d,e)}createAxis(t,e){return e.axis=y(S(t,e.axis,h()[t]),e.axis,M(t,this.userOptions)),super.createAxis(t,e)}}return c(t,\"update\",function(t){let e=t.options;\"scrollbar\"in e&&this.navigator&&(y(!0,this.options.scrollbar,e.scrollbar),this.navigator.update({}),delete e.scrollbar)}),function(t){function e(t){if(!this.crosshair||!this.crosshair.label||!this.crosshair.label.enabled||!this.cross||!m(this.min)||!m(this.max))return;let e=this.chart,i=this.logarithmic,s=this.crosshair.label,o=this.horiz,r=this.opposite,a=this.left,n=this.top,h=this.width,d=\"inside\"===this.options.tickPosition,c=!1!==this.crosshair.snap,p=t.e||this.cross&&this.cross.e,u=t.point,f=this.crossLabel,x,y,v=s.format,S=\"\",M,k=0,C=this.min,A=this.max;i&&(C=i.lin2log(this.min),A=i.lin2log(this.max));let w=o?\"center\":r?\"right\"===this.labelAlign?\"right\":\"left\":\"left\"===this.labelAlign?\"left\":\"center\";f||(f=this.crossLabel=e.renderer.label(\"\",0,void 0,s.shape||\"callout\").addClass(\"highcharts-crosshair-label highcharts-color-\"+(u&&u.series?u.series.colorIndex:this.series[0]&&this.series[0].colorIndex)).attr({align:s.align||w,padding:b(s.padding,8),r:b(s.borderRadius,3),zIndex:2}).add(this.labelGroup),e.styledMode||f.attr({fill:s.backgroundColor||u&&u.series&&u.series.color||\"#666666\",stroke:s.borderColor||\"\",\"stroke-width\":s.borderWidth||0}).css(g({color:\"#ffffff\",fontWeight:\"normal\",fontSize:\"0.7em\",textAlign:\"center\"},s.style||{}))),o?(x=c?(u.plotX||0)+a:p.chartX,y=n+(r?0:this.height)):(x=a+this.offset+(r?h:0),y=c?(u.plotY||0)+n:p.chartY),v||s.formatter||(this.dateTime&&(S=\"%b %d, %Y\"),v=\"{value\"+(S?\":\"+S:\"\")+\"}\");let T=c?this.isXAxis?u.x:u.y:this.toValue(o?p.chartX:p.chartY),P=u&&u.series?u.series.isPointInside(u):m(T)&&T>C&&T=M.right&&(k=-(D+O.width-M.right)),f.attr({x:x+k,y:y,anchorX:o?x:this.opposite?0:e.chartWidth,anchorY:o?this.opposite?e.chartHeight:0:y+O.height/2})}function i(){this.crossLabel&&(this.crossLabel=this.crossLabel.hide())}function s(t){let e=this.chart,i=this.options,s=e._labelPanes=e._labelPanes||{},o=i.labels;if(e.options.isStock&&\"yAxis\"===this.coll){let e=i.top+\",\"+i.height;!s[e]&&o.enabled&&(15===o.distance&&1===this.side&&(o.distance=0),void 0===o.align&&(o.align=\"right\"),s[e]=this,t.align=\"right\",t.preventDefault())}}function o(){let t=this.chart,e=this.options&&this.options.top+\",\"+this.options.height;e&&t._labelPanes&&t._labelPanes[e]===this&&delete t._labelPanes[e]}function r(t){let e=this,i=e.isLinked&&!e.series&&e.linkedParent?e.linkedParent.series:e.series,s=e.chart,o=s.renderer,r=e.left,a=e.top,n=[],l=t.translatedValue,h=t.value,d=t.force,c,g,y,v,S=[],M,k;if(s.options.isStock&&!1!==t.acrossPanes&&\"xAxis\"===e.coll||\"yAxis\"===e.coll){for(let o of(t.preventDefault(),S=(t=>{let o=\"xAxis\"===t?\"yAxis\":\"xAxis\",r=e.options[o];return m(r)?[s[o][r]]:x(r)?[s.get(r)]:i.map(t=>t[o])})(e.coll),e.isXAxis?s.yAxis:s.xAxis))if(!u(o.options.id)||-1===o.options.id.indexOf(\"navigator\")){let t=o.isXAxis?\"yAxis\":\"xAxis\";e===(u(o.options[t])?s[t][o.options[t]]:s[t][0])&&S.push(o)}for(let t of(M=S.length?[]:[e.isXAxis?s.yAxis[0]:s.xAxis[0]],S))-1!==M.indexOf(t)||f(M,e=>e.pos===t.pos&&e.len===t.len)||M.push(t);if(m(k=b(l,e.translate(h||0,void 0,void 0,t.old)))){if(e.horiz)for(let t of M){let i;v=(g=t.pos)+t.len,c=y=Math.round(k+e.transB),\"pass\"!==d&&(cr+e.width)&&(d?c=y=p(c,r,r+e.width):i=!0),i||n.push([\"M\",c,g],[\"L\",y,v])}else for(let t of M){let i;y=(c=t.pos)+t.len,g=v=Math.round(a+e.height-k),\"pass\"!==d&&(ga+e.height)&&(d?g=v=p(g,a,a+e.height):i=!0),i||n.push([\"M\",c,g],[\"L\",y,v])}}t.path=n.length>0?o.crispPolyLine(n,t.lineWidth||1):void 0}}function a(t){if(this.chart.options.isStock){let e;this.is(\"column\")||this.is(\"columnrange\")?e={borderWidth:0,shadow:!1}:this.is(\"scatter\")||this.is(\"sma\")||(e={marker:{enabled:!1,radius:2}}),e&&(t.plotOptions[this.type]=y(t.plotOptions[this.type],e))}}function n(){let t=this.chart,e=this.options.dataGrouping;return!1!==this.allowDG&&e&&b(e.enabled,t.options.isStock)}function h(t,e){for(let i=0;i {series.name}
High: {point.high}
Low: {point.low}
Close: {point.close}
'},threshold:null,states:{hover:{lineWidth:3}},stickyTracking:!0}}),i(e,\"Series/HLC/HLCSeries.js\",[e[\"Series/HLC/HLCPoint.js\"],e[\"Series/HLC/HLCSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{column:o}=i.seriesTypes,{extend:r,merge:a}=s;class n extends o{extendStem(t,e,i){let s=t[0],o=t[1];\"number\"==typeof s[2]&&(s[2]=Math.max(i+e,s[2])),\"number\"==typeof o[2]&&(o[2]=Math.min(i-e,o[2]))}getPointPath(t,e){let i=e.strokeWidth(),s=t.series,o=i%2/2,r=Math.round(t.plotX)-o,a=Math.round(t.shapeArgs.width/2),n=t.plotClose,l=[[\"M\",r,Math.round(t.yBottom)],[\"L\",r,Math.round(t.plotHigh)]];return null!==t.close&&(n=Math.round(t.plotClose)+o,l.push([\"M\",r,n],[\"L\",r+a,n]),s.extendStem(l,i/2,n)),l}drawSinglePoint(t){let e=t.series,i=e.chart,s,o=t.graphic;void 0!==t.plotY&&(o||(t.graphic=o=i.renderer.path().add(e.group)),i.styledMode||o.attr(e.pointAttribs(t,t.selected&&\"select\")),s=e.getPointPath(t,o),o[o?\"animate\":\"attr\"]({d:s}).addClass(t.getClassName(),!0))}drawPoints(){this.points.forEach(this.drawSinglePoint)}init(){super.init.apply(this,arguments),this.options.stacking=void 0}pointAttribs(t,e){let i=super.pointAttribs.call(this,t,e);return delete i.fill,i}toYData(t){return[t.high,t.low,t.close]}translate(){let t=this,e=t.yAxis,i=this.pointArrayMap&&this.pointArrayMap.slice()||[],s=i.map(t=>`plot${t.charAt(0).toUpperCase()+t.slice(1)}`);s.push(\"yBottom\"),i.push(\"low\"),super.translate.apply(t),t.points.forEach(function(o){i.forEach(function(i,r){let a=o[i];null!==a&&(t.dataModify&&(a=t.dataModify.modifyValue(a)),o[s[r]]=e.toPixels(a,!0))}),o.tooltipPos[1]=o.plotHigh+e.pos-t.chart.plotTop})}}return n.defaultOptions=a(o.defaultOptions,e),r(n.prototype,{pointClass:t,animate:null,directTouch:!1,pointArrayMap:[\"high\",\"low\",\"close\"],pointAttrToOptions:{stroke:\"color\",\"stroke-width\":\"lineWidth\"},pointValKey:\"close\"}),i.registerSeriesType(\"hlc\",n),n}),i(e,\"Series/OHLC/OHLCPoint.js\",[e[\"Core/Series/SeriesRegistry.js\"]],function(t){let{seriesTypes:{hlc:e}}=t;class i extends e.prototype.pointClass{getClassName(){return super.getClassName.call(this)+(this.open {series.name}
Open: {point.open}
High: {point.high}
Low: {point.low}
Close: {point.close}
'}}}),i(e,\"Series/OHLC/OHLCSeries.js\",[e[\"Core/Globals.js\"],e[\"Series/OHLC/OHLCPoint.js\"],e[\"Series/OHLC/OHLCSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o){let{composed:r}=t,{hlc:a}=s.seriesTypes,{addEvent:n,extend:l,merge:h,pushUnique:d}=o;function c(t){let e=t.options,i=e.dataGrouping;i&&e.useOhlcData&&\"highcharts-navigator-series\"!==e.id&&(i.approximation=\"ohlc\")}function p(t){let e=t.options;e.useOhlcData&&\"highcharts-navigator-series\"!==e.id&&l(this,{pointValKey:u.prototype.pointValKey,pointArrayMap:u.prototype.pointArrayMap,toYData:u.prototype.toYData})}class u extends a{static compose(t,...e){d(r,\"OHLCSeries\")&&(n(t,\"afterSetOptions\",c),n(t,\"init\",p))}getPointPath(t,e){let i=super.getPointPath(t,e),s=e.strokeWidth(),o=s%2/2,r=Math.round(t.plotX)-o,a=Math.round(t.shapeArgs.width/2),n=t.plotOpen;return null!==t.open&&(n=Math.round(t.plotOpen)+o,i.push([\"M\",r,n],[\"L\",r-a,n]),super.extendStem(i,s/2,n)),i}pointAttribs(t,e){let i=super.pointAttribs.call(this,t,e),s=this.options;return delete i.fill,!t.options.color&&s.upColor&&t.openo&&(i-=Math.round((r-o)/2),o=r),n=t[e](i,s,o,r),l&&h){let a=l;if(\"circle\"===e)a=i+o/2;else{let t=n[0],e=n[1];\"M\"===t[0]&&\"L\"===e[0]&&(a=(t[1]+e[1])/2)}let d=s>h?s:s+r;n.push([\"M\",a,d],[\"L\",l,h]),n=n.concat(t.circle(l-1,h-1,2,2))}return n}}e.compose=function(e){if(-1===i.indexOf(e)){i.push(e);let t=e.prototype.symbols;t.flag=s,o(t,\"circle\"),o(t,\"square\")}let r=t.getRendererType();i.indexOf(r)&&i.push(r)}}(e||(e={})),e}),i(e,\"Series/OnSeriesComposition.js\",[e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var o;let{composed:r}=e,{prototype:a}=t,{prototype:n}=i,{defined:l,pushUnique:h,stableSort:d}=s;return function(t){function e(t){return n.getPlotBox.call(this.options.onSeries&&this.chart.get(this.options.onSeries)||this,t)}function i(){a.translate.apply(this);let t=this,e=t.options,i=t.chart,s=t.points,o=e.onSeries,r=o&&i.get(o),n=r&&r.options.step,h=r&&r.points,c=i.inverted,p=t.xAxis,u=t.yAxis,g=s.length-1,f,m,x=e.onKey||\"y\",y=h&&h.length,b=0,v,S,M,k,C;if(r&&r.visible&&y){for(b=(r.pointXOffset||0)+(r.barW||0)/2,k=r.currentDataGrouping,S=h[y-1].x+(k?k.totalRange:0),d(s,(t,e)=>t.x-e.x),x=\"plot\"+x[0].toUpperCase()+x.substr(1);y--&&s[g];)if(v=h[y],(f=s[g]).y=v.y,v.x<=f.x&&void 0!==v[x]){if(f.x<=S&&(f.plotY=v[x],v.xMath.pow(1-o,3)*t[r]+3*(1-o)*(1-o)*o*i[r]+3*(1-o)*o*o*s[r]+o*o*o*e[r],r=0,a=1,n;for(let t=0;t<100;t++){let t=(r+a)/2,e=o(t,0);if(null===e)break;if(.25>Math.abs(e-f.plotX)){n=t;break}e{let o;e.plotX+=b,(void 0===e.plotY||c)&&(e.plotX>=0&&e.plotX<=p.len?c?(e.plotY=p.translate(e.x,0,1,0,1),e.plotX=l(e.y)?u.translate(e.y,0,0,0,1):0):e.plotY=(p.opposite?0:t.yAxis.len)+p.offset:e.shapeArgs={}),(m=s[i-1])&&m.plotX===e.plotX&&(void 0===m.stackIndex&&(m.stackIndex=0),o=m.stackIndex+1),e.stackIndex=o}),this.onSeries=r}t.compose=function(t){if(h(r,\"OnSeries\")){let s=t.prototype;s.getPlotBox=e,s.translate=i}return t},t.getPlotBox=e,t.translate=i}(o||(o={})),o}),i(e,\"Series/Flags/FlagsSeries.js\",[e[\"Series/Flags/FlagsPoint.js\"],e[\"Series/Flags/FlagsSeriesDefaults.js\"],e[\"Series/Flags/FlagsSymbols.js\"],e[\"Core/Globals.js\"],e[\"Series/OnSeriesComposition.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r,a,n,l){let{noop:h}=s,{distribute:d}=r,{series:c,seriesTypes:{column:p}}=a,{addEvent:u,defined:g,extend:f,merge:m,objectEach:x,wrap:y}=l;class b extends p{animate(t){t&&this.setClip()}drawPoints(){let t,e,i,s,o,r,a,l,h,c,p;let u=this.points,f=this.chart,b=f.renderer,v=f.inverted,S=this.options,M=S.y,k=this.yAxis,C={},A=[];for(s=u.length;s--;)o=u[s],c=(v?o.plotY:o.plotX)>this.xAxis.len,t=o.plotX,a=o.stackIndex,i=o.options.shape||S.shape,void 0!==(e=o.plotY)&&(e=o.plotY+M-(void 0!==a&&a*S.stackDistance)),o.anchorX=a?void 0:o.plotX,l=a?void 0:o.plotY,p=\"flag\"!==i,r=o.graphic,void 0!==e&&t>=0&&!c?(r&&o.hasNewShapeType()&&(r=r.destroy()),r||(r=o.graphic=b.label(\"\",null,null,i,null,null,S.useHTML).addClass(\"highcharts-point\").add(this.markerGroup),o.graphic.div&&(o.graphic.div.point=o),r.isNew=!0),r.attr({align:p?\"center\":\"left\",width:S.width,height:S.height,\"text-align\":S.textAlign}),f.styledMode||r.attr(this.pointAttribs(o)).css(m(S.style,o.style)).shadow(S.shadow),t>0&&(t-=r.strokeWidth()%2),h={y:e,anchorY:l},S.allowOverlapX&&(h.x=t,h.anchorX=o.anchorX),r.attr({text:o.options.title||S.title||\"A\"})[r.isNew?\"attr\":\"animate\"](h),S.allowOverlapX||(C[o.plotX]?C[o.plotX].size=Math.max(C[o.plotX].size,r.width||0):C[o.plotX]={align:p?.5:0,size:r.width||0,target:t,anchorX:t}),o.tooltipPos=[t,e+k.pos-f.plotTop]):r&&(o.graphic=r.destroy());if(!S.allowOverlapX){let t=100;for(let e of(x(C,function(e){e.plotX=e.anchorX,A.push(e),t=Math.max(e.size,t)}),d(A,v?k.len:this.xAxis.len,t),u)){let t=e.plotX,i=e.graphic,s=i&&C[t];s&&i&&(g(s.pos)?i[i.isNew?\"attr\":\"animate\"]({x:s.pos+(s.align||0)*s.size,anchorX:e.anchorX}).show().isNew=!1:i.hide().isNew=!0)}}S.useHTML&&this.markerGroup&&y(this.markerGroup,\"on\",function(t){return n.prototype.on.apply(t.apply(this,[].slice.call(arguments,1)),[].slice.call(arguments,1))})}drawTracker(){let t=this.points;for(let e of(super.drawTracker(),t)){let i=e.graphic;i&&(e.unbindMouseOver&&e.unbindMouseOver(),e.unbindMouseOver=u(i.element,\"mouseover\",function(){for(let s of(e.stackIndex>0&&!e.raised&&(e._y=i.y,i.attr({y:e._y-8}),e.raised=!0),t))s!==e&&s.raised&&s.graphic&&(s.graphic.attr({y:s._y}),s.raised=!1)}))}}pointAttribs(t,e){let i=this.options,s=t&&t.color||this.color,o=i.lineColor,r=t&&t.lineWidth,a=t&&t.fillColor||i.fillColor;return e&&(a=i.states[e].fillColor,o=i.states[e].lineColor,r=i.states[e].lineWidth),{fill:a||s,stroke:o||s,\"stroke-width\":r||i.lineWidth||0}}setClip(){c.prototype.setClip.apply(this,arguments),!1!==this.options.clip&&this.sharedClipKey&&this.markerGroup&&this.markerGroup.clip(this.chart.sharedClips[this.sharedClipKey])}}return b.compose=i.compose,b.defaultOptions=m(p.defaultOptions,e),o.compose(b),f(b.prototype,{allowDG:!1,forceCrop:!0,invertible:!1,noSharedTooltip:!0,pointClass:t,sorted:!1,takeOrdinalPosition:!1,trackerGroups:[\"markerGroup\"],buildKDTree:h,init:c.prototype.init}),a.registerSeriesType(\"flags\",b),b}),i(e,\"Core/Axis/BrokenAxis.js\",[e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Utilities.js\"]],function(t,e){var i;let{addEvent:s,find:o,fireEvent:r,isArray:a,isNumber:n,pick:l}=e;return function(e){function i(){void 0!==this.brokenAxis&&this.brokenAxis.setBreaks(this.options.breaks,!1)}function h(){this.brokenAxis?.hasBreaks&&(this.options.ordinal=!1)}function d(){let t=this.brokenAxis;if(t?.hasBreaks){let e=this.tickPositions,i=this.tickPositions.info,s=[];for(let i=0;ie.to||s>e.from&&oe.from&&oe.from&&o>e.to&&o0){let e,n;for(\"value\"!==this.options.gapUnit&&(r*=this.basePointRange),i&&i>r&&i>=this.basePointRange&&(r=i);a--;)if(n&&!1!==n.visible||(n=s[a+1]),e=s[a],!1!==n.visible&&!1!==e.visible){if(n.x-e.x>r){let i=(e.x+n.x)/2;s.splice(a+1,0,{isNull:!0,x:i}),o.stacking&&this.options.stacking&&((o.stacking.stacks[this.stackKey][i]=new t(o,o.options.stackLabels,!1,i,this.stack)).total=0)}n=e}}return this.getGraphPath(s)}e.compose=function(t,e){if(!t.keepProps.includes(\"brokenAxis\")){t.keepProps.push(\"brokenAxis\"),s(t,\"init\",c),s(t,\"afterInit\",i),s(t,\"afterSetTickPositions\",d),s(t,\"afterSetOptions\",h);let o=e.prototype;o.drawBreaks=g,o.gappedPath=f,s(e,\"afterGeneratePoints\",p),s(e,\"afterRender\",u)}return t};class m{static isInBreak(t,e){let i=t.repeat||1/0,s=t.from,o=t.to-t.from,r=e>=s?(e-s)%i:i-(s-e)%i;return t.inclusive?r<=o:r=s);r++)o.to=t)break;else if(m.isInBreak(o,t)){s-=t-o.from;break}return s}constructor(t){this.hasBreaks=!1,this.axis=t}findBreakAt(t,e){return o(e,function(e){return e.fromp;)g-=c;for(;gthis.chart.plotSizeX/s||r&&n.forced)&&(o=!0));return o?s:0}function h(){this.series.forEach(function(t){t.hasProcessed=!1})}function d(t,e){let s;if(e=a(e,!0),t||(t={forced:!1,units:null}),this instanceof i)for(s=this.series.length;s--;)this.series[s].update({dataGrouping:t},!1);else this.chart.options.series.forEach(function(e){e.dataGrouping=\"boolean\"==typeof t?t:r(t,e.dataGrouping)});this.ordinal&&(this.ordinal.slope=void 0),e&&this.chart.redraw()}return{compose:function(t){i=t;let e=t.prototype;e.applyGrouping||(s(t,\"afterSetScale\",h),s(t,\"postProcessData\",n),o(e,{applyGrouping:n,getGroupPixelWidth:l,setDataGrouping:d}))}}}),i(e,\"Extensions/DataGrouping/DataGroupingSeriesComposition.js\",[e[\"Extensions/DataGrouping/ApproximationRegistry.js\"],e[\"Extensions/DataGrouping/DataGroupingDefaults.js\"],e[\"Core/Axis/DateTimeAxis.js\"],e[\"Core/Defaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,o,r){let{series:{prototype:a}}=o,{addEvent:n,defined:l,error:h,extend:d,isNumber:c,merge:p,pick:u}=r,g=a.generatePoints;function f(t){var s;let o,r;let n=this.chart,d=this.options.dataGrouping,p=!1!==this.allowDG&&d&&u(d.enabled,n.options.isStock),g=this.reserveSpace(),f=this.currentDataGrouping,m,x,y=!1;p&&!this.requireSorting&&(this.requireSorting=y=!0);let b=!1==!(this.isCartesian&&!this.isDirty&&!this.xAxis.isDirty&&!this.yAxis.isDirty&&!t)||!p;if(y&&(this.requireSorting=!1),b)return;this.destroyGroupedData();let v=d.groupAll?this.xData:this.processedXData,S=d.groupAll?this.yData:this.processedYData,M=n.plotSizeX,k=this.xAxis,C=k.options.ordinal,A=this.groupPixelWidth;if(A&&v&&v.length&&M){r=!0,this.isDirty=!0,this.points=null;let t=k.getExtremes(),p=t.min,u=t.max,f=C&&k.ordinal&&k.ordinal.getGroupIntervalFactor(p,u,this)||1,y=A*(u-p)/M*f,b=k.getTimeTicks(i.Additions.prototype.normalizeTimeTickInterval(y,d.units||e.units),Math.min(p,v[0]),Math.max(u,v[v.length-1]),k.options.startOfWeek,v,this.closestPointRange),w=a.groupData.apply(this,[v,S,b,d.approximation]),T=w.groupedXData,P=w.groupedYData,L=0;for(d&&d.smoothed&&T.length&&(d.firstAnchor=\"firstPoint\",d.anchor=\"middle\",d.lastAnchor=\"lastPoint\",h(32,!1,n,{\"dataGrouping.smoothed\":\"use dataGrouping.anchor\"})),o=1;o=e[0]){let i;d++;let s=t.groupMap[0].start,r=t.groupMap[0].length;c(s)&&c(r)&&(i=s+(r-1)),e[0]=({start:e[0],middle:e[0]+.5*o,end:e[0]+o,firstPoint:t.xData[0],lastPoint:i&&t.xData[i]})[n]}if(r>0&&l&&o&&e[r]>=i-o){h--;let i=t.groupMap[t.groupMap.length-1].start;e[r]=({start:e[r],middle:e[r]+.5*o,end:e[r]+o,firstPoint:i&&t.xData[i],lastPoint:t.xData[t.xData.length-1]})[l]}if(a&&\"start\"!==a){let t=o*({middle:.5,end:1})[a];for(;h>=d;)e[h]+=t,h--}}(this,T,u),g&&(l((s=T)[0])&&c(k.min)&&c(k.dataMin)&&s[0]k.max&&((!l(k.options.max)&&c(k.dataMax)&&k.max>=k.dataMax||k.max===k.dataMax)&&(k.max=Math.max(s[s.length-1],k.max)),k.dataMax=Math.max(s[s.length-1],k.dataMax))),d.groupAll&&(this.allGroupedData=P,T=(x=this.cropData(T,P,k.min,k.max)).xData,P=x.yData,this.cropStart=x.start),this.processedXData=T,this.processedYData=P}else this.groupMap=null;this.hasGroupedData=r,this.preventGraphAnimation=(f&&f.totalRange)!==(m&&m.totalRange)}function m(){this.groupedData&&(this.groupedData.forEach(function(t,e){t&&(this.groupedData[e]=t.destroy?t.destroy():null)},this),this.groupedData.length=0,delete this.allGroupedData)}function x(){g.apply(this),this.destroyGroupedData(),this.groupedData=this.hasGroupedData?this.points:null}function y(){return this.is(\"arearange\")?\"range\":this.is(\"ohlc\")?\"ohlc\":this.is(\"hlc\")?\"hlc\":this.is(\"column\")||this.options.cumulative?\"sum\":\"average\"}function b(e,i,s,o){let r=this,a=r.data,n=r.options&&r.options.data,h=[],d=[],u=[],g=e.length,f=!!i,m=[],x=r.pointArrayMap,y=x&&x.length,b=[\"x\"].concat(x||[\"y\"]),v=this.options.dataGrouping&&this.options.dataGrouping.groupAll,S,M,k,C=0,A=0,w=\"function\"==typeof o?o:o&&t[o]?t[o]:t[r.getDGApproximation&&r.getDGApproximation()||\"average\"];if(y){let t=x.length;for(;t--;)m.push([])}else m.push([]);let T=y||1;for(let t=0;t<=g;t++)if(!(e[t]=s[C+1]||t===g;){S=s[C],r.dataGroupInfo={start:v?A:r.cropStart+A,length:m[0].length,groupStart:S},k=w.apply(r,m),r.pointClass&&!l(r.dataGroupInfo.options)&&(r.dataGroupInfo.options=p(r.pointClass.prototype.optionsToObject.call({series:r},r.options.data[r.cropStart+A])),b.forEach(function(t){delete r.dataGroupInfo.options[t]})),void 0!==k&&(h.push(S),d.push(k),u.push(r.dataGroupInfo)),A=t;for(let t=0;t{let e=t.axis.getExtremes(),o=e.min,r=e.max,a=s(t.axis.minPointOffset,0);return i(o)&&i(r)&&t.value>=o-a&&t.value<=r+a&&!t.axis.options.isInternal})[0]},getFieldType:function(t,i){let s=o[t],r=typeof i;return e(s)&&(r=s),({string:\"text\",number:\"number\",boolean:\"checkbox\"})[r]}}}),i(e,\"Extensions/MouseWheelZoom/MouseWheelZoom.js\",[e[\"Core/Utilities.js\"],e[\"Extensions/Annotations/NavigationBindingsUtilities.js\"]],function(t,e){let i;let{addEvent:s,isObject:o,pick:r,defined:a,merge:n}=t,{getAssignedAxis:l}=e,h=[],d={enabled:!0,sensitivity:1.1},c=t=>(o(t)||(t={enabled:t??!0}),n(d,t)),p=function(t,e,s,o,n,l,h){let d=r(h.type,t.zooming.type,\"\"),c=[];\"x\"===d?c=s:\"y\"===d?c=o:\"xy\"===d&&(c=t.axes);let p=t.transform({axes:c,to:{x:n-5,y:l-5,width:10,height:10},from:{x:n-5*e,y:l-5*e,width:10*e,height:10*e},trigger:\"mousewheel\"});return p&&(a(i)&&clearTimeout(i),i=setTimeout(()=>{t.pointer?.drop()},400)),p};function u(){let t=c(this.zooming.mouseWheel);t.enabled&&s(this.container,\"wheel\",e=>{e=this.pointer?.normalize(e)||e;let{pointer:i}=this,s=i&&!i.inClass(e.target,\"highcharts-no-mousewheel\");if(this.isInsidePlot(e.chartX-this.plotLeft,e.chartY-this.plotTop)&&s){let s=t.sensitivity||1.1,o=e.detail||(e.deltaY||0)/120,r=l(i.getCoordinates(e).xAxis),a=l(i.getCoordinates(e).yAxis);p(this,Math.pow(s,o),r?[r.axis]:this.xAxis,a?[a.axis]:this.yAxis,e.chartX,e.chartY,t)&&e.preventDefault?.()}})}return{compose:function(t){-1===h.indexOf(t)&&(h.push(t),s(t,\"afterGetContainer\",u))}}}),i(e,\"masters/modules/mouse-wheel-zoom.src.js\",[e[\"Core/Globals.js\"],e[\"Extensions/MouseWheelZoom/MouseWheelZoom.js\"]],function(t,e){return t.MouseWheelZoom=t.MouseWheelZoom||e,t.MouseWheelZoom.compose(t.Chart),t}),i(e,\"masters/modules/stock.src.js\",[e[\"Core/Globals.js\"],e[\"Series/DataModifyComposition.js\"],e[\"Stock/Navigator/Navigator.js\"],e[\"Core/Axis/OrdinalAxis.js\"],e[\"Stock/RangeSelector/RangeSelector.js\"],e[\"Stock/Scrollbar/Scrollbar.js\"],e[\"Core/Chart/StockChart.js\"],e[\"Series/OHLC/OHLCSeries.js\"],e[\"Series/Flags/FlagsSeries.js\"]],function(t,e,i,s,o,r,a,n,l){return t.Navigator=t.Navigator||i,t.OrdinalAxis=t.OrdinalAxis||s,t.RangeSelector=t.RangeSelector||o,t.Scrollbar=t.Scrollbar||r,t.stockChart=t.stockChart||a.stockChart,t.StockChart=t.StockChart||t.stockChart,t.extend(t.StockChart,a),e.compose(t.Series,t.Axis,t.Point),l.compose(t.Renderer),n.compose(t.Series),t.Navigator.compose(t.Chart,t.Axis,t.Series),t.OrdinalAxis.compose(t.Axis,t.Series,t.Chart),t.RangeSelector.compose(t.Axis,t.Chart),t.Scrollbar.compose(t.Axis),t.StockChart.compose(t.Chart,t.Axis,t.Series,t.SVGRenderer),t}),i(e,\"masters/highstock.src.js\",[e[\"masters/highcharts.src.js\"]],function(t){return t.product=\"Highstock\",t}),e[\"masters/highstock.src.js\"]._modules=e,e[\"masters/highstock.src.js\"]});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * Boost module\n *\n * (c) 2010-2024 Highsoft AS\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * */function(e){\"object\"==typeof module&&module.exports?(e.default=e,module.exports=e):\"function\"==typeof define&&define.amd?define(\"highcharts/modules/boost\",[\"highcharts\"],function(t){return e(t),e.Highcharts=t,e}):e(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(e){\"use strict\";var t=e?e._modules:{};function i(e,t,i,s){e.hasOwnProperty(t)||(e[t]=s.apply(null,i),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:t,module:e[t]}})))}i(t,\"Extensions/Boost/Boostables.js\",[],function(){return[\"area\",\"areaspline\",\"arearange\",\"column\",\"columnrange\",\"bar\",\"line\",\"scatter\",\"heatmap\",\"bubble\",\"treemap\"]}),i(t,\"Extensions/Boost/BoostableMap.js\",[t[\"Extensions/Boost/Boostables.js\"]],function(e){let t={};return e.forEach(e=>{t[e]=!0}),t}),i(t,\"Extensions/Boost/BoostChart.js\",[t[\"Extensions/Boost/BoostableMap.js\"],t[\"Core/Globals.js\"],t[\"Core/Utilities.js\"]],function(e,t,i){let{composed:s}=t,{addEvent:o,pick:r,pushUnique:n}=i;function a(t){let i=t.series,s=t.boost=t.boost||{},o=t.options.boost||{},n=r(o.seriesThreshold,50);if(i.length>=n)return!0;if(1===i.length)return!1;let a=o.allowForce;if(void 0===a){for(let e of(a=!0,t.xAxis))if(r(e.min,-1/0)>r(e.dataMin,-1/0)||r(e.max,1/0)0)return t=e.length,!0}),t}(t.processedXData,f.data,t.points)>=(f.boostThreshold||Number.MAX_VALUE)&&++h);return s.forceChartBoost=a&&(l===i.length&&h===l||h>5),s.forceChartBoost}function l(e){function t(){e.boost&&e.boost.wgl&&a(e)&&e.boost.wgl.render(e)}o(e,\"predraw\",function(){e.boost=e.boost||{},e.boost.forceChartBoost=void 0,e.boosted=!1,e.axes.some(e=>e.isPanning)||e.boost.clear?.(),e.boost.canvas&&e.boost.wgl&&a(e)&&e.boost.wgl.allocateBuffer(e),e.boost.markerGroup&&e.xAxis&&e.xAxis.length>0&&e.yAxis&&e.yAxis.length>0&&e.boost.markerGroup.translate(e.xAxis[0].pos,e.yAxis[0].pos)}),o(e,\"load\",t,{order:-1}),o(e,\"redraw\",t);let i=-1,s=-1;o(e.pointer,\"afterGetHoverData\",()=>{let t=e.hoverSeries;if(e.boost=e.boost||{},e.boost.markerGroup&&t){let o=e.inverted?t.yAxis:t.xAxis,r=e.inverted?t.xAxis:t.yAxis;(o&&o.pos!==i||r&&r.pos!==s)&&(e.boost.markerGroup.translate(o.pos,r.pos),i=o.pos,s=r.pos)}})}return{compose:function(e,t){return t&&n(s,\"Boost.Chart\")&&e.prototype.callbacks.push(l),e},getBoostClipRect:function(e,t){let i={x:e.plotLeft,y:e.plotTop,width:e.plotWidth,height:e.navigator?e.navigator.top+e.navigator.height-e.plotTop:e.plotHeight};if(t.getClipBox){let{xAxis:s,yAxis:o}=t;if(i=t.getClipBox(),e.inverted){let e=i.width;i.width=i.height,i.height=e,i.x=o.pos,i.y=s.pos}else i.x=s.pos,i.y=o.pos}if(t===e){let t=e.inverted?e.xAxis:e.yAxis;t.length<=1&&(i.y=Math.min(t[0].pos,i.y),i.height=t[0].pos-e.plotTop+t[0].len)}return i},isChartSeriesBoosting:a}}),i(t,\"Extensions/Boost/WGLDrawMode.js\",[],function(){return{area:\"LINES\",arearange:\"LINES\",areaspline:\"LINES\",column:\"LINES\",columnrange:\"LINES\",bar:\"LINES\",line:\"LINE_STRIP\",scatter:\"POINTS\",heatmap:\"TRIANGLES\",treemap:\"TRIANGLES\",bubble:\"POINTS\"}}),i(t,\"Extensions/Boost/WGLShader.js\",[t[\"Core/Utilities.js\"]],function(e){let{clamp:t,error:i,pick:s}=e;return class{constructor(e){if(this.errors=[],this.uLocations={},this.gl=e,e&&!this.createShader())return}bind(){this.gl&&this.shaderProgram&&this.gl.useProgram(this.shaderProgram)}createShader(){let e=this.stringToProgram(\"#version 100\\n#define LN10 2.302585092994046\\nprecision highp float;\\nattribute vec4 aVertexPosition;\\nattribute vec4 aColor;\\nvarying highp vec2 position;\\nvarying highp vec4 vColor;\\nuniform mat4 uPMatrix;\\nuniform float pSize;\\nuniform float translatedThreshold;\\nuniform bool hasThreshold;\\nuniform bool skipTranslation;\\nuniform float xAxisTrans;\\nuniform float xAxisMin;\\nuniform float xAxisMinPad;\\nuniform float xAxisPointRange;\\nuniform float xAxisLen;\\nuniform bool xAxisPostTranslate;\\nuniform float xAxisOrdinalSlope;\\nuniform float xAxisOrdinalOffset;\\nuniform float xAxisPos;\\nuniform bool xAxisCVSCoord;\\nuniform bool xAxisIsLog;\\nuniform bool xAxisReversed;\\nuniform float yAxisTrans;\\nuniform float yAxisMin;\\nuniform float yAxisMinPad;\\nuniform float yAxisPointRange;\\nuniform float yAxisLen;\\nuniform bool yAxisPostTranslate;\\nuniform float yAxisOrdinalSlope;\\nuniform float yAxisOrdinalOffset;\\nuniform float yAxisPos;\\nuniform bool yAxisCVSCoord;\\nuniform bool yAxisIsLog;\\nuniform bool yAxisReversed;\\nuniform bool isBubble;\\nuniform bool bubbleSizeByArea;\\nuniform float bubbleZMin;\\nuniform float bubbleZMax;\\nuniform float bubbleZThreshold;\\nuniform float bubbleMinSize;\\nuniform float bubbleMaxSize;\\nuniform bool bubbleSizeAbs;\\nuniform bool isInverted;\\nfloat bubbleRadius(){\\nfloat value = aVertexPosition.w;\\nfloat zMax = bubbleZMax;\\nfloat zMin = bubbleZMin;\\nfloat radius = 0.0;\\nfloat pos = 0.0;\\nfloat zRange = zMax - zMin;\\nif (bubbleSizeAbs){\\nvalue = value - bubbleZThreshold;\\nzMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\\nzMin = 0.0;\\n}\\nif (value < zMin){\\nradius = bubbleZMin / 2.0 - 1.0;\\n} else {\\npos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;\\nif (bubbleSizeByArea && pos > 0.0){\\npos = sqrt(pos);\\n}\\nradius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\\n}\\nreturn radius * 2.0;\\n}\\nfloat translate(float val,\\nfloat pointPlacement,\\nfloat localA,\\nfloat localMin,\\nfloat minPixelPadding,\\nfloat pointRange,\\nfloat len,\\nbool cvsCoord,\\nbool isLog,\\nbool reversed\\n){\\nfloat sign = 1.0;\\nfloat cvsOffset = 0.0;\\nif (cvsCoord) {\\nsign *= -1.0;\\ncvsOffset = len;\\n}\\nif (isLog) {\\nval = log(val) / LN10;\\n}\\nif (reversed) {\\nsign *= -1.0;\\ncvsOffset -= sign * len;\\n}\\nreturn sign * (val - localMin) * localA + cvsOffset + \\n(sign * minPixelPadding);\\n}\\nfloat xToPixels(float value) {\\nif (skipTranslation){\\nreturn value;// + xAxisPos;\\n}\\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;\\n}\\nfloat yToPixels(float value, float checkTreshold) {\\nfloat v;\\nif (skipTranslation){\\nv = value;// + yAxisPos;\\n} else {\\nv = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;\\nif (v > yAxisLen) {\\nv = yAxisLen;\\n}\\n}\\nif (checkTreshold > 0.0 && hasThreshold) {\\nv = min(v, translatedThreshold);\\n}\\nreturn v;\\n}\\nvoid main(void) {\\nif (isBubble){\\ngl_PointSize = bubbleRadius();\\n} else {\\ngl_PointSize = pSize;\\n}\\nvColor = aColor;\\nif (skipTranslation && isInverted) {\\ngl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);\\n} else if (isInverted) {\\ngl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);\\n} else {\\ngl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\\n}\\n}\",\"vertex\"),t=this.stringToProgram(\"precision highp float;\\nuniform vec4 fillColor;\\nvarying highp vec2 position;\\nvarying highp vec4 vColor;\\nuniform sampler2D uSampler;\\nuniform bool isCircle;\\nuniform bool hasColor;\\nvoid main(void) {\\nvec4 col = fillColor;\\nvec4 tcol = texture2D(uSampler, gl_PointCoord.st);\\nif (hasColor) {\\ncol = vColor;\\n}\\nif (isCircle) {\\ncol *= tcol;\\nif (tcol.r < 0.0) {\\ndiscard;\\n} else {\\ngl_FragColor = col;\\n}\\n} else {\\ngl_FragColor = col;\\n}\\n}\",\"fragment\"),i=e=>this.gl.getUniformLocation(this.shaderProgram,e);return e&&t?(this.shaderProgram=this.gl.createProgram(),this.gl.attachShader(this.shaderProgram,e),this.gl.attachShader(this.shaderProgram,t),this.gl.linkProgram(this.shaderProgram),this.gl.getProgramParameter(this.shaderProgram,this.gl.LINK_STATUS))?(this.gl.useProgram(this.shaderProgram),this.gl.bindAttribLocation(this.shaderProgram,0,\"aVertexPosition\"),this.pUniform=i(\"uPMatrix\"),this.psUniform=i(\"pSize\"),this.fcUniform=i(\"fillColor\"),this.isBubbleUniform=i(\"isBubble\"),this.bubbleSizeAbsUniform=i(\"bubbleSizeAbs\"),this.bubbleSizeAreaUniform=i(\"bubbleSizeByArea\"),this.uSamplerUniform=i(\"uSampler\"),this.skipTranslationUniform=i(\"skipTranslation\"),this.isCircleUniform=i(\"isCircle\"),this.isInverted=i(\"isInverted\"),!0):(this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram)),this.handleErrors(),this.shaderProgram=!1,!1):(this.shaderProgram=!1,this.handleErrors(),!1)}handleErrors(){this.errors.length&&i(\"[highcharts boost] shader error - \"+this.errors.join(\"\\n\"))}stringToProgram(e,t){let i=this.gl.createShader(\"vertex\"===t?this.gl.VERTEX_SHADER:this.gl.FRAGMENT_SHADER);return(this.gl.shaderSource(i,e),this.gl.compileShader(i),this.gl.getShaderParameter(i,this.gl.COMPILE_STATUS))?i:(this.errors.push(\"when compiling \"+t+\" shader:\\n\"+this.gl.getShaderInfoLog(i)),!1)}destroy(){this.gl&&this.shaderProgram&&(this.gl.deleteProgram(this.shaderProgram),this.shaderProgram=!1)}fillColorUniform(){return this.fcUniform}getProgram(){return this.shaderProgram}pointSizeUniform(){return this.psUniform}perspectiveUniform(){return this.pUniform}reset(){this.gl&&this.shaderProgram&&(this.gl.uniform1i(this.isBubbleUniform,0),this.gl.uniform1i(this.isCircleUniform,0))}setBubbleUniforms(e,i,o,r=1){let n=e.options,a=Number.MAX_VALUE,l=-Number.MAX_VALUE;if(this.gl&&this.shaderProgram&&e.is(\"bubble\")){let h=e.getPxExtremes();a=s(n.zMin,t(i,!1===n.displayNegative?n.zThreshold:-Number.MAX_VALUE,a)),l=s(n.zMax,Math.max(l,o)),this.gl.uniform1i(this.isBubbleUniform,1),this.gl.uniform1i(this.isCircleUniform,1),this.gl.uniform1i(this.bubbleSizeAreaUniform,\"width\"!==e.options.sizeBy),this.gl.uniform1i(this.bubbleSizeAbsUniform,e.options.sizeByAbsoluteValue),this.setUniform(\"bubbleMinSize\",h.minPxSize*r),this.setUniform(\"bubbleMaxSize\",h.maxPxSize*r),this.setUniform(\"bubbleZMin\",a),this.setUniform(\"bubbleZMax\",l),this.setUniform(\"bubbleZThreshold\",e.options.zThreshold)}}setColor(e){this.gl&&this.shaderProgram&&this.gl.uniform4f(this.fcUniform,e[0]/255,e[1]/255,e[2]/255,e[3])}setDrawAsCircle(e){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.isCircleUniform,e?1:0)}setInverted(e){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.isInverted,e)}setPMatrix(e){this.gl&&this.shaderProgram&&this.gl.uniformMatrix4fv(this.pUniform,!1,e)}setPointSize(e){this.gl&&this.shaderProgram&&this.gl.uniform1f(this.psUniform,e)}setSkipTranslation(e){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.skipTranslationUniform,!0===e?1:0)}setTexture(e){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.uSamplerUniform,e)}setUniform(e,t){if(this.gl&&this.shaderProgram){let i=this.uLocations[e]=this.uLocations[e]||this.gl.getUniformLocation(this.shaderProgram,e);this.gl.uniform1f(i,t)}}}}),i(t,\"Extensions/Boost/WGLVertexBuffer.js\",[],function(){return class{constructor(e,t,i){this.buffer=!1,this.iterator=0,this.preAllocated=!1,this.vertAttribute=!1,this.components=i||2,this.dataComponents=i,this.gl=e,this.shader=t}allocate(e){this.iterator=-1,this.preAllocated=new Float32Array(4*e)}bind(){if(!this.buffer)return!1;this.gl.vertexAttribPointer(this.vertAttribute,this.components,this.gl.FLOAT,!1,0,0)}build(e,t,i){let s;return(this.data=e||[],this.data&&0!==this.data.length||this.preAllocated)?(this.components=i||this.components,this.buffer&&this.gl.deleteBuffer(this.buffer),this.preAllocated||(s=new Float32Array(this.data)),this.buffer=this.gl.createBuffer(),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.buffer),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.preAllocated||s,this.gl.STATIC_DRAW),this.vertAttribute=this.gl.getAttribLocation(this.shader.getProgram(),t),this.gl.enableVertexAttribArray(this.vertAttribute),s=!1,!0):(this.destroy(),!1)}destroy(){this.buffer&&(this.gl.deleteBuffer(this.buffer),this.buffer=!1,this.vertAttribute=!1),this.iterator=0,this.components=this.dataComponents||2,this.data=[]}push(e,t,i,s){this.preAllocated&&(this.preAllocated[++this.iterator]=e,this.preAllocated[++this.iterator]=t,this.preAllocated[++this.iterator]=i,this.preAllocated[++this.iterator]=s)}render(e,t,i){let s=this.preAllocated?this.preAllocated.length:this.data.length;return!!this.buffer&&!!s&&((!e||e>s||e<0)&&(e=0),(!t||t>s)&&(t=s),!(e>=t)&&(i=i||\"POINTS\",this.gl.drawArrays(this.gl[i],e/this.components,(t-e)/this.components),!0))}}}),i(t,\"Extensions/Boost/WGLRenderer.js\",[t[\"Core/Color/Color.js\"],t[\"Core/Globals.js\"],t[\"Core/Utilities.js\"],t[\"Extensions/Boost/WGLDrawMode.js\"],t[\"Extensions/Boost/WGLShader.js\"],t[\"Extensions/Boost/WGLVertexBuffer.js\"]],function(e,t,i,s,o,r){let{parse:n}=e,{doc:a,win:l}=t,{isNumber:h,isObject:f,merge:d,objectEach:u,pick:g}=i,c={column:!0,columnrange:!0,bar:!0,area:!0,areaspline:!0,arearange:!0},m={scatter:!0,bubble:!0},b=[\"webgl\",\"experimental-webgl\",\"moz-webgl\",\"webkit-3d\"];class p{static orthoMatrix(e,t){return[2/e,0,0,0,0,-(2/t),0,0,0,0,-2,0,-1,1,-1,1]}static seriesPointCount(e){let t,i,s;return e.boosted?(t=!!e.options.stacking,i=e.xData||e.options.xData||e.processedXData,s=(t?e.data:i||e.options.data).length,\"treemap\"===e.type?s*=12:\"heatmap\"===e.type?s*=6:c[e.type]&&(s*=2),s):0}constructor(e){this.data=[],this.height=0,this.isInited=!1,this.markerData=[],this.series=[],this.textureHandles={},this.width=0,this.postRenderCallback=e,this.settings={pointSize:1,lineWidth:1,fillColor:\"#AA00AA\",useAlpha:!0,usePreallocated:!1,useGPUTranslations:!1,debug:{timeRendering:!1,timeSeriesProcessing:!1,timeSetup:!1,timeBufferCopy:!1,timeKDTree:!1,showSkipSummary:!1}}}getPixelRatio(){return this.settings.pixelRatio||l.devicePixelRatio||1}setOptions(e){\"pixelRatio\"in e||(e.pixelRatio=1),d(!0,this.settings,e)}allocateBuffer(e){let t=this.vbuffer,i=0;this.settings.usePreallocated&&(e.series.forEach(e=>{e.boosted&&(i+=p.seriesPointCount(e))}),t&&t.allocate(i))}allocateBufferForSingleSeries(e){let t=this.vbuffer,i=0;this.settings.usePreallocated&&(e.boosted&&(i=p.seriesPointCount(e)),t&&t.allocate(i))}clear(){let e=this.gl;e&&e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}pushSeriesData(e,t){let i=this.data,s=this.settings,o=this.vbuffer,r=e.pointArrayMap&&\"low,high\"===e.pointArrayMap.join(\",\"),{chart:a,options:l,sorted:h,xAxis:d,yAxis:u}=e,g=!!l.stacking,m=l.data,b=e.xAxis.getExtremes(),p=b.min-(e.xAxis.minPointOffset||0),x=b.max+(e.xAxis.minPointOffset||0),A=e.yAxis.getExtremes(),y=A.min-(e.yAxis.minPointOffset||0),P=A.max+(e.yAxis.minPointOffset||0),v=e.xData||l.xData||e.processedXData,T=e.yData||l.yData||e.processedYData,E=e.zData||l.zData||e.processedZData,S=!v||0===v.length,M=l.connectNulls,C=e.points||!1,k=g?e.data:v||m,U={x:Number.MAX_VALUE,y:0},w={x:-Number.MAX_VALUE,y:0},R=void 0===a.index,B=c[e.type],D=l.zoneAxis||\"y\",L=l.zones||!1,z=l.threshold,_=this.getPixelRatio(),N=e.chart.plotWidth,I=!1,G=!1,O,X,V=0,j=!1,F,H,W,Y,q=-1,Z=!1,K=!1,Q,J=!1,$=!1,ee=!1,et=!1,ei=!0,es=!0,eo,er=!1,en=!1,ea=0;if(l.boostData&&l.boostData.length>0)return;l.gapSize&&(en=\"value\"!==l.gapUnit?l.gapSize*e.closestPointRange:l.gapSize),L&&(eo=[],L.forEach((e,t)=>{if(e.color){let i=n(e.color).rgba;i[0]/=255,i[1]/=255,i[2]/=255,eo[t]=i,er||void 0!==e.value||(er=i)}}),er||(er=n(e.pointAttribs&&e.pointAttribs().fill||e.color).rgba,er[0]/=255,er[1]/=255,er[2]/=255)),a.inverted&&(N=e.chart.plotHeight),e.closestPointRangePx=Number.MAX_VALUE;let el=e=>{e&&(t.colorData.push(e[0]),t.colorData.push(e[1]),t.colorData.push(e[2]),t.colorData.push(e[3]))},eh=(e,r,n,a=1,l)=>{el(l),1!==_&&(!s.useGPUTranslations||t.skipTranslation)&&(e*=_,r*=_,a*=_),s.usePreallocated&&o?(o.push(e,r,n?1:0,a),ea+=4):(i.push(e),i.push(r),i.push(n?_:0),i.push(a))},ef=()=>{t.segments.length&&(t.segments[t.segments.length-1].to=i.length||ea)},ed=()=>{t.segments.length&&t.segments[t.segments.length-1].from===(i.length||ea)||(ef(),t.segments.push({from:i.length||ea}))},eu=(e,t,i,s,o)=>{el(o),eh(e+i,t),el(o),eh(e,t),el(o),eh(e,t+s),el(o),eh(e,t+s),el(o),eh(e+i,t+s),el(o),eh(e+i,t)};if(ed(),C&&C.length>0){t.skipTranslation=!0,t.drawMode=\"TRIANGLES\",C[0].node&&C[0].node.levelDynamic&&C.sort((e,t)=>{if(e.node){if(e.node.levelDynamic>t.node.levelDynamic)return 1;if(e.node.levelDynamic{let i,s;let o=t.plotY;if(void 0!==o&&!isNaN(o)&&null!==t.y&&t.shapeArgs){let{x:o=0,y:r=0,width:l=0,height:h=0}=t.shapeArgs;i=(s=a.styledMode?t.series.colorAttribs(t):s=t.series.pointAttribs(t))[\"stroke-width\"]||0,ee=n(s.fill).rgba,ee[0]/=255,ee[1]/=255,ee[2]/=255,e.is(\"treemap\")&&(i=i||1,X=n(s.stroke).rgba,X[0]/=255,X[1]/=255,X[2]/=255,eu(o,r,l,h,X),i/=2),e.is(\"heatmap\")&&a.inverted&&(o=d.len-o,r=u.len-r,l=-l,h=-h),eu(o+i,r+i,l-2*i,h-2*i,ee)}}),ef();return}for(;q=3&&(Y=W[2],W[2]>t.zMax&&(t.zMax=W[2]),W[2]t.zMax&&(t.zMax=E[q]),E[q]=p&&K<=x&&(J=!0),Z&&Z>=p&&Z<=x&&($=!0),r?(S&&(H=W.slice(1,3)),Q=H[0],H=H[1]):g&&(F=W.x,Q=(H=W.stackY)-W.y),null!=y&&null!=P&&(ei=H>=y&&H<=P),F>x&&w.xp&&(U.x=F,U.y=H),null!==H||!M){if(null===H||!ei&&!J&&!$){ed();continue}if(h&&(K>=p||F>=p)&&(Z<=x||F<=x)&&(et=!0),et||J||$){if(en&&F-Z>en&&ed(),L){let e;L.some((t,i)=>{let s=L[i-1];return\"x\"===D?void 0!==t.value&&F<=t.value&&(eo[i]&&(!s||F>=s.value)&&(e=eo[i]),!0):void 0!==t.value&&H<=t.value&&(eo[i]&&(!s||H>=s.value)&&(e=eo[i]),!0)}),ee=e||er||ee}if(s.useGPUTranslations||(t.skipTranslation=!0,F=d.toPixels(F,!0),H=u.toPixels(H,!0),!(F>N)||\"POINTS\"!==t.drawMode)){if(t.hasMarkers&&et&&!1!==I&&(e.closestPointRangePx=Math.min(e.closestPointRangePx,Math.abs(F-I))),!s.useGPUTranslations&&!s.usePreallocated&&I&&1>Math.abs(F-I)&&G&&1>Math.abs(H-G)){s.debug.showSkipSummary&&++V;continue}B&&(O=Q,(!1===Q||void 0===Q)&&(O=H<0?H:0),(r||g)&&!u.logarithmic||(O=Math.max(null===z?y:z,y)),s.useGPUTranslations||(O=u.toPixels(O,!0)),eh(F,O,0,0,ee)),l.step&&!es&&eh(F,G,0,2,ee),eh(F,H,0,\"bubble\"===e.type?Y||1:2,ee),I=F,G=H,j=!0,es=!1}}}}s.debug.showSkipSummary&&console.log(\"skipped points:\",V);let eg=(e,i)=>{if(s.useGPUTranslations||(t.skipTranslation=!0,e.x=d.toPixels(e.x,!0),e.y=u.toPixels(e.y,!0)),i){this.data=[e.x,e.y,0,2].concat(this.data);return}eh(e.x,e.y,0,2)};!j&&!1!==M&&\"line_strip\"===e.drawMode&&(U.x-Number.MAX_VALUE&&eg(w)),ef()}pushSeries(e){let t=this.markerData,i=this.series,o=this.settings;i.length>0&&i[i.length-1].hasMarkers&&(i[i.length-1].markerTo=t.length),o.debug.timeSeriesProcessing&&console.time(\"building \"+e.type+\" series\");let r={segments:[],markerFrom:t.length,colorData:[],series:e,zMin:Number.MAX_VALUE,zMax:-Number.MAX_VALUE,hasMarkers:!!e.options.marker&&!1!==e.options.marker.enabled,showMarkers:!0,drawMode:s[e.type]||\"LINE_STRIP\"};e.index>=i.length?i.push(r):i[e.index]=r,this.pushSeriesData(e,r),o.debug.timeSeriesProcessing&&console.timeEnd(\"building \"+e.type+\" series\")}flush(){let e=this.vbuffer;this.data=[],this.markerData=[],this.series=[],e&&e.destroy()}setXAxis(e){let t=this.shader;if(!t)return;let i=this.getPixelRatio();t.setUniform(\"xAxisTrans\",e.transA*i),t.setUniform(\"xAxisMin\",e.min),t.setUniform(\"xAxisMinPad\",e.minPixelPadding*i),t.setUniform(\"xAxisPointRange\",e.pointRange),t.setUniform(\"xAxisLen\",e.len*i),t.setUniform(\"xAxisPos\",e.pos*i),t.setUniform(\"xAxisCVSCoord\",!e.horiz),t.setUniform(\"xAxisIsLog\",!!e.logarithmic),t.setUniform(\"xAxisReversed\",!!e.reversed)}setYAxis(e){let t=this.shader;if(!t)return;let i=this.getPixelRatio();t.setUniform(\"yAxisTrans\",e.transA*i),t.setUniform(\"yAxisMin\",e.min),t.setUniform(\"yAxisMinPad\",e.minPixelPadding*i),t.setUniform(\"yAxisPointRange\",e.pointRange),t.setUniform(\"yAxisLen\",e.len*i),t.setUniform(\"yAxisPos\",e.pos*i),t.setUniform(\"yAxisCVSCoord\",!e.horiz),t.setUniform(\"yAxisIsLog\",!!e.logarithmic),t.setUniform(\"yAxisReversed\",!!e.reversed)}setThreshold(e,t){let i=this.shader;i&&(i.setUniform(\"hasThreshold\",e),i.setUniform(\"translatedThreshold\",t))}renderChart(i){let s=this.gl,o=this.settings,a=this.shader,l=this.vbuffer,f=this.getPixelRatio();if(!i)return!1;this.width=i.chartWidth*f,this.height=i.chartHeight*f;let d=this.height,u=this.width;if(!s||!a||!u||!d)return!1;o.debug.timeRendering&&console.time(\"gl rendering\"),s.canvas.width=u,s.canvas.height=d,a.bind(),s.viewport(0,0,u,d),a.setPMatrix(p.orthoMatrix(u,d)),o.lineWidth>1&&!t.isMS&&s.lineWidth(o.lineWidth),l&&(l.build(this.data,\"aVertexPosition\",4),l.bind()),a.setInverted(i.inverted),this.series.forEach((t,d)=>{let u=t.series.options,c=u.marker,b=void 0!==u.lineWidth?u.lineWidth:1,p=u.threshold,x=h(p),A=t.series.yAxis.getThreshold(p),y=g(u.marker?u.marker.enabled:null,!!t.series.xAxis.isRadial||null,t.series.closestPointRangePx>2*((u.marker?u.marker.radius:10)||10)),P=this.textureHandles[c&&c.symbol||t.series.symbol]||this.textureHandles.circle,v,T,E,S=[];if(0!==t.segments.length&&t.segments[0].from!==t.segments[0].to&&(P.isReady&&(s.bindTexture(s.TEXTURE_2D,P.handle),a.setTexture(P.handle)),i.styledMode?E=t.series.markerGroup&&t.series.markerGroup.getStyle(\"fill\"):(E=\"POINTS\"===t.drawMode&&t.series.pointAttribs&&t.series.pointAttribs().fill||t.series.color,u.colorByPoint&&(E=t.series.chart.options.colors[d])),t.series.fillOpacity&&u.fillOpacity&&(E=new e(E).setOpacity(g(u.fillOpacity,1)).get()),S=n(E).rgba,o.useAlpha||(S[3]=1),\"LINES\"===t.drawMode&&o.useAlpha&&S[3]<1&&(S[3]/=10),\"add\"===u.boostBlending?(s.blendFunc(s.SRC_ALPHA,s.ONE),s.blendEquation(s.FUNC_ADD)):\"mult\"===u.boostBlending||\"multiply\"===u.boostBlending?s.blendFunc(s.DST_COLOR,s.ZERO):\"darken\"===u.boostBlending?(s.blendFunc(s.ONE,s.ONE),s.blendEquation(s.FUNC_MIN)):s.blendFuncSeparate(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA,s.ONE,s.ONE_MINUS_SRC_ALPHA),a.reset(),t.colorData.length>0?(a.setUniform(\"hasColor\",1),(T=new r(s,a)).build(Array(t.segments[0].from).concat(t.colorData),\"aColor\",4),T.bind()):(a.setUniform(\"hasColor\",0),s.disableVertexAttribArray(s.getAttribLocation(a.getProgram(),\"aColor\"))),a.setColor(S),this.setXAxis(t.series.xAxis),this.setYAxis(t.series.yAxis),this.setThreshold(x,A),\"POINTS\"===t.drawMode&&a.setPointSize(2*g(u.marker&&u.marker.radius,.5)*f),a.setSkipTranslation(t.skipTranslation),\"bubble\"===t.series.type&&a.setBubbleUniforms(t.series,t.zMin,t.zMax,f),a.setDrawAsCircle(m[t.series.type]||!1),l)){if(b>0||\"LINE_STRIP\"!==t.drawMode)for(v=0;v{this.render(e)},1)}setSize(e,t){let i=this.shader;i&&(this.width!==e||this.height!==t)&&(this.width=e,this.height=t,i.bind(),i.setPMatrix(p.orthoMatrix(e,t)))}init(e,t){let i=this.settings;if(this.isInited=!1,!e)return!1;i.debug.timeSetup&&console.time(\"gl setup\");for(let t=0;t{let i={isReady:!1,texture:a.createElement(\"canvas\"),handle:s.createTexture()},o=i.texture.getContext(\"2d\");this.textureHandles[e]=i,i.texture.width=512,i.texture.height=512,o.mozImageSmoothingEnabled=!1,o.webkitImageSmoothingEnabled=!1,o.msImageSmoothingEnabled=!1,o.imageSmoothingEnabled=!1,o.strokeStyle=\"rgba(255, 255, 255, 0)\",o.fillStyle=\"#FFF\",t(o);try{s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,i.handle),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,i.texture),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.bindTexture(s.TEXTURE_2D,null),i.isReady=!0}catch(e){}};return l(\"circle\",e=>{e.beginPath(),e.arc(256,256,256,0,2*Math.PI),e.stroke(),e.fill()}),l(\"square\",e=>{e.fillRect(0,0,512,512)}),l(\"diamond\",e=>{e.beginPath(),e.moveTo(256,0),e.lineTo(512,256),e.lineTo(256,512),e.lineTo(0,256),e.lineTo(256,0),e.fill()}),l(\"triangle\",e=>{e.beginPath(),e.moveTo(0,512),e.lineTo(256,0),e.lineTo(512,512),e.lineTo(0,512),e.fill()}),l(\"triangle-down\",e=>{e.beginPath(),e.moveTo(0,0),e.lineTo(256,512),e.lineTo(512,0),e.lineTo(0,0),e.fill()}),this.isInited=!0,i.debug.timeSetup&&console.timeEnd(\"gl setup\"),!0}destroy(){let e=this.gl,t=this.shader,i=this.vbuffer;this.flush(),i&&i.destroy(),t&&t.destroy(),e&&(u(this.textureHandles,t=>{t.handle&&e.deleteTexture(t.handle)}),e.canvas.width=1,e.canvas.height=1)}}return p}),i(t,\"Extensions/Boost/BoostSeries.js\",[t[\"Extensions/Boost/BoostableMap.js\"],t[\"Extensions/Boost/Boostables.js\"],t[\"Extensions/Boost/BoostChart.js\"],t[\"Core/Defaults.js\"],t[\"Core/Globals.js\"],t[\"Core/Utilities.js\"],t[\"Extensions/Boost/WGLRenderer.js\"]],function(e,t,i,s,o,r,n){let a,l;let{getBoostClipRect:h,isChartSeriesBoosting:f}=i,{getOptions:d}=s,{composed:u,doc:g,noop:c,win:m}=o,{addEvent:b,destroyObjectProperties:p,error:x,extend:A,fireEvent:y,isArray:P,isNumber:v,pick:T,pushUnique:E,wrap:S,defined:M}=r;function C(e,t){let i=t.boost;e&&i&&i.target&&i.canvas&&!f(t.chart)&&e.allocateBufferForSingleSeries(t)}function k(e){return T(e&&e.options&&e.options.boost&&e.options.boost.enabled,!0)}function U(e,t){let i=e.constructor,s=e.seriesGroup||t.group,o=e.chartWidth,r=e.chartHeight,a=e,d=\"undefined\"!=typeof SVGForeignObjectElement,u=(a=f(e)?e:t).boost=a.boost||{};if(d=!1,l||(l=g.createElement(\"canvas\")),!u.target&&(u.canvas=l,e.renderer.forExport||!d?(a.renderTarget=u.target=e.renderer.image(\"\",0,0,o,r).addClass(\"highcharts-boost-canvas\").add(s),u.clear=function(){u.target.attr({href:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\"})},u.copy=function(){u.resize(),u.target.attr({href:u.canvas.toDataURL(\"image/png\")})}):(u.targetFo=e.renderer.createElement(\"foreignObject\").add(s),a.renderTarget=u.target=g.createElement(\"canvas\"),u.targetCtx=u.target.getContext(\"2d\"),u.targetFo.element.appendChild(u.target),u.clear=function(){u.target.width=u.canvas.width,u.target.height=u.canvas.height},u.copy=function(){u.target.width=u.canvas.width,u.target.height=u.canvas.height,u.targetCtx.drawImage(u.canvas,0,0)}),u.resize=function(){o=e.chartWidth,r=e.chartHeight,(u.targetFo||u.target).attr({x:0,y:0,width:o,height:r}).css({pointerEvents:\"none\",mixedBlendMode:\"normal\",opacity:1}),a instanceof i&&a.boost.markerGroup.translate(e.plotLeft,e.plotTop)},u.clipRect=e.renderer.clipRect(),(u.targetFo||u.target).attr({zIndex:t.options.zIndex}),a instanceof i&&(a.boost.markerGroup=a.renderer.g().add(s).translate(t.xAxis.pos,t.yAxis.pos))),u.canvas.width=o,u.canvas.height=r,u.clipRect){let t=h(e,a),i=t.width===e.clipBox.width&&t.height===e.clipBox.height?s:u.targetFo||u.target;u.clipRect.attr(t),i?.clip(u.clipRect)}return u.resize(),u.clear(),!u.wgl&&(u.wgl=new n(e=>{e.settings.debug.timeBufferCopy&&console.time(\"buffer copy\"),u.copy(),e.settings.debug.timeBufferCopy&&console.timeEnd(\"buffer copy\")}),u.wgl.init(u.canvas)||x(\"[highcharts boost] - unable to init WebGL renderer\"),u.wgl.setOptions(e.options.boost||{}),a instanceof i&&u.wgl.allocateBuffer(e)),u.wgl.setSize(o,r),u.wgl}function w(e){let t=e.points;if(t){let e,i;for(i=0;i{let i=e[t];i&&(e[t]=i.destroy())}),e.zones))p(t,void 0,!0)}function R(e,t,i,s,o,r){let n=(o=o||0)+(s=s||3e3),a=!0;for(;a&&o(i.boostThreshold||Number.MAX_VALUE)&&v(r.min)&&v(r.max)&&(!t||v(o.min)&&v(o.max))&&(!n||v(n.min)&&v(n.max))}let D=(e,t)=>!e.forceCrop&&(f(e.chart)||(t?t.length:0)>=(e.options.boostThreshold||Number.MAX_VALUE));function L(){let e=this,t=e.chart;t.boost&&t.boost.markerGroup===e.markerGroup&&(e.markerGroup=null),t.hoverPoints&&(t.hoverPoints=t.hoverPoints.filter(function(t){return t.series===e})),t.hoverPoint&&t.hoverPoint.series===e&&(t.hoverPoint=null)}function z(){let e=this.boost;e&&e.canvas&&e.target&&(e.wgl&&e.wgl.clear(),e.clear&&e.clear())}function _(e){let t=e.boost;t&&t.canvas&&t.target&&t.wgl&&!f(e.chart)&&t.wgl.render(e.chart)}function N(e,t){let i=e.options,s=e.xAxis,o=e.pointClass;if(t instanceof o)return t;let r=e.xData||i.xData||e.processedXData||!1,n=new o(e,(e.options.data||[])[t.i],r?r[t.i]:void 0);return n.category=T(s.categories?s.categories[n.x]:n.x,n.x),n.dist=t.dist,n.distX=t.distX,n.plotX=t.plotX,n.plotY=t.plotY,n.index=t.i,n.percentage=t.percentage,n.isInside=e.isPointInside(n),n}function I(e){var t,i,s,o;let{options:r,xAxis:n,yAxis:a}=this;if(!this.isDirty&&!n.isDirty&&!a.isDirty&&!e)return!1;this.yAxis.setTickInterval();let l=r.boostThreshold||0,h=r.cropThreshold,f=r.data||this.data,d=this.xData,u=n.getExtremes(),g=u.max??Number.MAX_VALUE,c=u.min??-Number.MAX_VALUE,m=this.yData,b=a.getExtremes(),p=b.max??Number.MAX_VALUE,x=b.min??-Number.MAX_VALUE;if(!this.boosted&&n.old&&a.old&&c>=(n.old.min??-Number.MAX_VALUE)&&g<=(n.old.max??Number.MAX_VALUE)&&x>=(a.old.min??-Number.MAX_VALUE)&&p<=(a.old.max??Number.MAX_VALUE))return this.processedXData??(this.processedXData=d),this.processedYData??(this.processedYData=m),!0;if(!l||f.length=c&&M<=g&&U>=x&&U<=p?(A.push({x:M,y:U}),y.push(M),P.push(U),T&&(C=Math.max(C,M),k=Math.min(k,M)),E&&(w=Math.max(w,U),R=Math.min(R,U))):S=!0;return T&&((t=n.options).max??(t.max=C),(i=n.options).min??(i.min=k)),E&&((s=a.options).max??(s.max=w),(o=a.options).min??(o.min=R)),this.cropped=S,this.cropStart=0,this.processedXData=y,this.processedYData=P,D(this,y)||(this.processedData=A),!0}function G(){let e=this.options||{},t=this.chart,i=this.xAxis,s=this.yAxis,o=e.xData||this.processedXData,r=e.yData||this.processedYData,n=this.processedData||e.data,l=i.getExtremes(),h=l.min-(i.minPointOffset||0),d=l.max+(i.minPointOffset||0),u=s.getExtremes(),g=u.min-(s.minPointOffset||0),m=u.max+(s.minPointOffset||0),b={},p=!!this.sampling,x=e.enableMouseTracking,A=e.threshold,P=this.pointArrayMap&&\"low,high\"===this.pointArrayMap.join(\",\"),v=!!e.stacking,T=this.cropStart||0,E=this.requireSorting,S=!o,k=\"x\"===e.findNearestPointBy,B=this.xData||this.options.xData||this.processedXData||!1,D=!1,L,z=s.getThreshold(A),N,I,G,O;if(i.isPanning||s.isPanning||(D=U(t,this),t.boosted=!0,!this.visible))return;(this.points||this.graph)&&w(this),f(t)?(this.markerGroup&&this.markerGroup!==t.boost.markerGroup&&this.markerGroup.destroy(),this.markerGroup=t.boost.markerGroup,this.boost&&this.boost.target&&(this.renderTarget=this.boost.target=this.boost.target.destroy())):(t.boost&&this.markerGroup===t.boost.markerGroup&&(this.markerGroup=void 0),this.markerGroup=this.plotGroup(\"markerGroup\",\"markers\",!0,1,t.seriesGroup));let X=this.points=[],V=(e,o,r,n)=>{let l=!!B&&B[T+r],h=e=>{t.inverted&&(e=i.len-e,o=s.len-o),X.push({destroy:c,x:l,clientX:e,plotX:e,plotY:o,i:T+r,percentage:n})};e=Math.ceil(e),a=k?e:e+\",\"+o,x&&(b[a]?l===B[B.length-1]&&(X.length--,h(e)):(b[a]=!0,h(e)))};this.buildKDTree=c,y(this,\"renderCanvas\"),D&&(C(D,this),D.pushSeries(this),_(this));let j=D.settings;t.renderer.forExport||(j.debug.timeKDTree&&console.time(\"kd tree building\"),R(v?this.data.slice(T):o||n,function(e,o){let n=void 0===t.index,a,l,f,u,c,b=!1,x=!0;return!M(e)||(!n&&(S?(a=e[0],l=e[1]):(a=e,l=r[o]),P?(S&&(l=e.slice(1,3)),b=l[0],l=l[1]):v&&(a=e.x,b=(l=e.stackY)-e.y,c=e.percentage),E||(x=(l||0)>=g&&l<=m),null!==l&&a>=h&&a<=d&&x&&(f=i.toPixels(a,!0),p?((void 0===G||f===L)&&(P||(b=l),(void 0===O||l>I)&&(I=l,O=o),(void 0===G||b{y(this,\"renderedCanvas\"),delete this.buildKDTree,this.options&&this.buildKDTree(),j.debug.timeKDTree&&console.timeEnd(\"kd tree building\")}))}function O(e){let t=!0;if(this.chart.options&&this.chart.options.boost&&(t=void 0===this.chart.options.boost.enabled||this.chart.options.boost.enabled),!t||!this.boosted)return e.call(this);this.chart.boosted=!0;let i=U(this.chart,this);i&&(C(i,this),i.pushSeries(this)),_(this)}function X(e){if(this.boosted){if(B(this))return{};if(this.xAxis.isPanning||this.yAxis.isPanning)return this}return e.apply(this,[].slice.call(arguments,1))}function V(t){let i=this.options.data;if(k(this.chart)&&e[this.type]){let e=this.is(\"scatter\")&&!this.is(\"bubble\");if(!D(this,i)||e||this.options.stacking||!B(this,!0)){if(this.boosted&&(this.xAxis?.isPanning||this.yAxis?.isPanning))return;e&&!this.yAxis.treeGrid?I.call(this,arguments[1]):t.apply(this,[].slice.call(arguments,1)),i=this.processedXData}if(this.boosted=D(this,i),this.boosted){let e;this.options.data&&this.options.data.length&&!v(e=this.getFirstValidPoint(this.options.data))&&!P(e)&&x(12,!1,this.chart),function(e){e.boost=e.boost||{getPoint:t=>N(e,t)};let t=e.boost.altered=[];if([\"allowDG\",\"directTouch\",\"stickyTracking\"].forEach(i=>{t.push({prop:i,val:e[i],own:Object.hasOwnProperty.call(e,i)})}),e.allowDG=!1,e.directTouch=!1,e.stickyTracking=!0,e.finishedAnimating=!0,e.labelBySeries&&(e.labelBySeries=e.labelBySeries.destroy()),e.is(\"scatter\")&&e.data.length){for(let t of e.data)t?.destroy?.();e.data.length=0,e.points.length=0,delete e.processedData}}(this)}else!function(e){let t=e.boost;t&&((t.altered||[]).forEach(t=>{t.own?e[t.prop]=t.val:delete e[t.prop]}),t.clear&&t.clear())}(this)}else t.apply(this,[].slice.call(arguments,1))}function j(e){let t=e.apply(this,[].slice.call(arguments,1));return this.boost&&t?this.boost.getPoint(t):t}return{compose:function(i,s,o){if(E(u,\"Boost.Series\")){let r=d().plotOptions,n=i.prototype;if(b(i,\"destroy\",L),b(i,\"hide\",z),o&&(n.renderCanvas=G),S(n,\"getExtremes\",X),S(n,\"processData\",V),S(n,\"searchPoint\",j),[\"translate\",\"generatePoints\",\"drawTracker\",\"drawPoints\",\"render\"].forEach(t=>(function(t,i,s){function o(t){let i=this.options.stacking&&(\"translate\"===s||\"generatePoints\"===s);this.boosted&&!i&&k(this.chart)&&\"heatmap\"!==this.type&&\"treemap\"!==this.type&&e[this.type]&&0!==this.options.boostThreshold?\"render\"===s&&this.renderCanvas&&this.renderCanvas():t.call(this)}if(S(t,s,o),\"translate\"===s)for(let e of[\"column\",\"arearange\",\"columnrange\",\"heatmap\",\"treemap\"])i[e]&&S(i[e].prototype,s,o)})(n,s,t)),t.forEach(e=>{let t=r[e];t&&(t.boostThreshold=5e3,t.boostData=[],s[e].prototype.fillOpacity=!0)}),o){let{area:e,areaspline:t,bubble:i,column:o,heatmap:r,scatter:n,treemap:a}=s;if(e&&A(e.prototype,{fill:!0,fillOpacity:!0,sampling:!0}),t&&A(t.prototype,{fill:!0,fillOpacity:!0,sampling:!0}),i){let e=i.prototype;delete e.buildKDTree,S(e,\"markerAttribs\",function(e){return!this.boosted&&e.apply(this,[].slice.call(arguments,1))})}o&&A(o.prototype,{fill:!0,sampling:!0}),n&&(n.prototype.fill=!0),[r,a].forEach(e=>{e&&S(e.prototype,\"drawPoints\",O)})}}return i},destroyGraphics:w,eachAsync:R,getPoint:N}}),i(t,\"Extensions/Boost/NamedColors.js\",[],function(){return{defaultHTMLColorMap:{aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dodgerblue:\"#1e90ff\",feldspar:\"#d19275\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslateblue:\"#8470ff\",lightslategray:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",violetred:\"#d02090\",wheat:\"#f5deb3\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\"}}}),i(t,\"Extensions/Boost/Boost.js\",[t[\"Extensions/Boost/BoostChart.js\"],t[\"Extensions/Boost/BoostSeries.js\"],t[\"Core/Globals.js\"],t[\"Extensions/Boost/NamedColors.js\"],t[\"Core/Utilities.js\"]],function(e,t,i,s,o){let{doc:r,win:n}=i,{addEvent:a,error:l}=o,h=[\"webgl\",\"experimental-webgl\",\"moz-webgl\",\"webkit-3d\"];function f(){let e;if(void 0!==n.WebGLRenderingContext){e=r.createElement(\"canvas\");for(let t=0;te.renderTarget).filter(Boolean)){let{horiz:i,pos:s}=this,o=i?\"scaleX\":\"scaleY\",r=i?\"translateX\":\"translateY\",n=t?.[o]??1,a=1,l=0,h=1,f=\"none\";this.isPanning&&(a=(e.scale??1)*n,l=(t?.[r]||0)-a*(e.move||0)+n*s-a*s,h=.7,f=\"blur(3px)\"),t?.attr({[o]:a,[r]:l}).css({transition:\"250ms filter, 250ms opacity\",filter:f,opacity:h})}})},hasWebGLSupport:f}}),i(t,\"masters/modules/boost.src.js\",[t[\"Core/Globals.js\"],t[\"Extensions/Boost/Boost.js\"]],function(e,t){return e.hasWebGLSupport=t.hasWebGLSupport,t.compose(e.Chart,e.Axis,e.Series,e.seriesTypes,e.Color),e})});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * ColorAxis module\n *\n * (c) 2012-2024 Pawel Potaczek\n *\n * License: www.highcharts.com/license\n */function(t){\"object\"==typeof module&&module.exports?(t.default=t,module.exports=t):\"function\"==typeof define&&define.amd?define(\"highcharts/modules/color-axis\",[\"highcharts\"],function(e){return t(e),t.Highcharts=e,t}):t(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(t){\"use strict\";var e=t?t._modules:{};function s(t,e,s,i){t.hasOwnProperty(e)||(t[e]=i.apply(null,s),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:e,module:t[e]}})))}s(e,\"Core/Axis/Color/ColorAxisComposition.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Utilities.js\"]],function(t,e){var s;let{parse:i}=t,{addEvent:o,extend:l,merge:r,pick:a,splat:n}=e;return function(t){let e;function s(){let{userOptions:t}=this;this.colorAxis=[],t.colorAxis&&(t.colorAxis=n(t.colorAxis),t.colorAxis.map(t=>new e(this,t)))}function h(t){let e=this.chart.colorAxis||[],s=e=>{let s=t.allItems.indexOf(e);-1!==s&&(this.destroyItem(t.allItems[s]),t.allItems.splice(s,1))},i=[],o,l;for(e.forEach(function(t){(o=t.options)&&o.showInLegend&&(o.dataClasses&&o.visible?i=i.concat(t.getDataClassLegendSymbols()):o.visible&&i.push(t),t.series.forEach(function(t){(!t.options.showInLegend||o.dataClasses)&&(\"point\"===t.options.legendType?t.points.forEach(function(t){s(t)}):s(t))}))}),l=i.length;l--;)t.allItems.unshift(i[l])}function d(t){t.visible&&t.item.legendColor&&t.item.legendItem.symbol.attr({fill:t.item.legendColor})}function c(t){this.chart.colorAxis?.forEach(e=>{e.update({},t.redraw)})}function p(){(this.chart.colorAxis&&this.chart.colorAxis.length||this.colorAttribs)&&this.translateColors()}function f(){let t=this.axisTypes;t?-1===t.indexOf(\"colorAxis\")&&t.push(\"colorAxis\"):this.axisTypes=[\"colorAxis\"]}function u(t){let e=this,s=t?\"show\":\"hide\";e.visible=e.options.visible=!!t,[\"graphic\",\"dataLabel\"].forEach(function(t){e[t]&&e[t][s]()}),this.series.buildKDTree()}function g(){let t=this,e=this.data.length?this.data:this.points,s=this.options.nullColor,i=this.colorAxis,o=this.colorKey;e.forEach(e=>{let l=e.getNestedProperty(o),r=e.options.color||(e.isNull||null===e.value?s:i&&void 0!==l?i.toColor(l,e):e.color||t.color);r&&e.color!==r&&(e.color=r,\"point\"===t.options.legendType&&e.legendItem&&e.legendItem.label&&t.chart.legend.colorizeItem(e,e.visible))})}function m(){this.elem.attr(\"fill\",i(this.start).tweenTo(i(this.end),this.pos),void 0,!0)}function x(){this.elem.attr(\"stroke\",i(this.start).tweenTo(i(this.end),this.pos),void 0,!0)}t.compose=function(t,i,n,C,y){let A=i.prototype,b=n.prototype,v=y.prototype;A.collectionsWithUpdate.includes(\"colorAxis\")||(e=t,A.collectionsWithUpdate.push(\"colorAxis\"),A.collectionsWithInit.colorAxis=[A.addColorAxis],o(i,\"afterGetAxes\",s),function(t){let s=t.prototype.createAxis;t.prototype.createAxis=function(t,i){if(\"colorAxis\"!==t)return s.apply(this,arguments);let o=new e(this,r(i.axis,{index:this[t].length,isX:!1}));return this.isDirtyLegend=!0,this.axes.forEach(t=>{t.series=[]}),this.series.forEach(t=>{t.bindAxes(),t.isDirtyData=!0}),a(i.redraw,!0)&&this.redraw(i.animation),o}}(i),b.fillSetter=m,b.strokeSetter=x,o(C,\"afterGetAllItems\",h),o(C,\"afterColorizeItem\",d),o(C,\"afterUpdate\",c),l(v,{optionalAxis:\"colorAxis\",translateColors:g}),l(v.pointClass.prototype,{setVisible:u}),o(y,\"afterTranslate\",p,{order:1}),o(y,\"bindAxes\",f))},t.pointSetVisible=u}(s||(s={})),s}),s(e,\"Core/Axis/Color/ColorAxisDefaults.js\",[],function(){return{lineWidth:0,minPadding:0,maxPadding:0,gridLineColor:\"#ffffff\",gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},width:.01,color:\"#999999\"},labels:{distance:8,overflow:\"justify\",rotation:0},minColor:\"#e6e9ff\",maxColor:\"#0022ff\",tickLength:5,showInLegend:!0}}),s(e,\"Core/Axis/Color/ColorAxisLike.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Utilities.js\"]],function(t,e){var s,i;let{parse:o}=t,{merge:l}=e;return(i=s||(s={})).initDataClasses=function(t){let e=this.chart,s=this.legendItem=this.legendItem||{},i=this.options,r=t.dataClasses||[],a,n,h=e.options.chart.colorCount,d=0,c;this.dataClasses=n=[],s.labels=[];for(let t=0,s=r.length;t=i)&&(void 0===o||t<=o)){l=r.color,e&&(e.dataClass=a,e.colorIndex=r.colorIndex);break}}else{for(s=this.normalizedValue(t),a=h.length;a--&&!(s>h[a][0]););i=h[a]||h[a+1],s=1-((o=h[a+1]||i)[0]-s)/(o[0]-i[0]||1),l=i.color.tweenTo(o.color,s)}return l},s}),s(e,\"Core/Axis/Color/ColorAxis.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Axis/Color/ColorAxisComposition.js\"],e[\"Core/Axis/Color/ColorAxisDefaults.js\"],e[\"Core/Axis/Color/ColorAxisLike.js\"],e[\"Core/Defaults.js\"],e[\"Core/Legend/LegendSymbol.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,s,i,o,l,r,a){let{defaultOptions:n}=o,{series:h}=r,{defined:d,extend:c,fireEvent:p,isArray:f,isNumber:u,merge:g,pick:m,relativeLength:x}=a;n.colorAxis=g(n.xAxis,s);class C extends t{static compose(t,s,i,o){e.compose(C,t,s,i,o)}constructor(t,e){super(t,e),this.coll=\"colorAxis\",this.visible=!0,this.init(t,e)}init(t,e){let s=t.options.legend||{},i=e.layout?\"vertical\"!==e.layout:\"vertical\"!==s.layout;this.side=e.side||i?2:1,this.reversed=e.reversed||!i,this.opposite=!i,super.init(t,e,\"colorAxis\"),this.userOptions=e,f(t.userOptions.colorAxis)&&(t.userOptions.colorAxis[this.index]=e),e.dataClasses&&this.initDataClasses(e),this.initStops(),this.horiz=i,this.zoomEnabled=!1}hasData(){return!!(this.tickPositions||[]).length}setTickPositions(){if(!this.dataClasses)return super.setTickPositions()}setOptions(t){let e=g(n.colorAxis,t,{showEmpty:!1,title:null,visible:this.chart.options.legend.enabled&&!1!==t.visible});super.setOptions(e),this.options.crosshair=this.options.marker}setAxisSize(){let t=this.chart,e=this.legendItem?.symbol,{width:s,height:i}=this.getSize();e&&(this.left=+e.attr(\"x\"),this.top=+e.attr(\"y\"),this.width=s=+e.attr(\"width\"),this.height=i=+e.attr(\"height\"),this.right=t.chartWidth-this.left-s,this.bottom=t.chartHeight-this.top-i,this.pos=this.horiz?this.left:this.top),this.len=(this.horiz?s:i)||C.defaultLegendLength}getOffset(){let t=this.legendItem?.group,e=this.chart.axisOffset[this.side];if(t){this.axisParent=t,super.getOffset();let s=this.chart.legend;s.allItems.forEach(function(t){t instanceof C&&t.drawLegendSymbol(s,t)}),s.render(),this.chart.getMargins(!0),this.added||(this.added=!0,this.labelLeft=0,this.labelRight=this.width),this.chart.axisOffset[this.side]=e}}setLegendColor(){let t=this.horiz,e=this.reversed,s=e?1:0,i=e?0:1,o=t?[s,0,i,0]:[0,i,0,s];this.legendColor={linearGradient:{x1:o[0],y1:o[1],x2:o[2],y2:o[3]},stops:this.stops}}drawLegendSymbol(t,e){let s=e.legendItem||{},i=t.padding,o=t.options,l=this.options.labels,r=m(o.itemDistance,10),a=this.horiz,{width:n,height:h}=this.getSize(),d=m(o.labelPadding,a?16:30);this.setLegendColor(),s.symbol||(s.symbol=this.chart.renderer.symbol(\"roundedRect\").attr({r:o.symbolRadius??3,zIndex:1}).add(s.group)),s.symbol.attr({x:0,y:(t.baseline||0)-11,width:n,height:h}),s.labelWidth=n+i+(a?r:m(l.x,l.distance)+(this.maxLabelLength||0)),s.labelHeight=h+i+(a?d:0)}setState(t){this.series.forEach(function(e){e.setState(t)})}setVisible(){}getSeriesExtremes(){let t=this.series,e,s,i,o,l,r,a=t.length,n,c;for(this.dataMin=1/0,this.dataMax=-1/0;a--;){if(s=(r=t[a]).colorKey=m(r.options.colorKey,r.colorKey,r.pointValKey,r.zoneAxis,\"y\"),o=r.pointArrayMap,l=r[s+\"Min\"]&&r[s+\"Max\"],r[s+\"Data\"])e=r[s+\"Data\"];else if(o){if(e=[],i=o.indexOf(s),n=r.yData,i>=0&&n)for(c=0;cr+a&&(s=r+a+2),e.plotX=s,e.plotY=this.len-s,super.drawCrosshair(t,e),e.plotX=o,e.plotY=l,this.cross&&!this.cross.addedToColorAxis&&i.group&&(this.cross.addClass(\"highcharts-coloraxis-marker\").add(i.group),this.cross.addedToColorAxis=!0,this.chart.styledMode||\"object\"!=typeof this.crosshair||this.cross.attr({fill:this.crosshair.color})))}getPlotLinePath(t){let e=this.left,s=t.translatedValue,i=this.top;return u(s)?this.horiz?[[\"M\",s-4,i-6],[\"L\",s+4,i-6],[\"L\",s,i],[\"Z\"]]:[[\"M\",e,s],[\"L\",e-6,s+6],[\"L\",e-6,s-6],[\"Z\"]]:super.getPlotLinePath(t)}update(t,e){let s=this.chart.legend;this.series.forEach(t=>{t.isDirtyData=!0}),(t.dataClasses&&s.allItems||this.dataClasses)&&this.destroyItems(),super.update(t,e),this.legendItem&&this.legendItem.label&&(this.setLegendColor(),s.colorizeItem(this,!0))}destroyItems(){let t=this.chart,e=this.legendItem||{};if(e.label)t.legend.destroyItem(this);else if(e.labels)for(let s of e.labels)t.legend.destroyItem(s);t.isDirtyLegend=!0}destroy(){this.chart.isDirtyLegend=!0,this.destroyItems(),super.destroy(...[].slice.call(arguments))}remove(t){this.destroyItems(),super.remove(t)}getDataClassLegendSymbols(){let t;let e=this,s=e.chart,i=e.legendItem&&e.legendItem.labels||[],o=s.options.legend,r=m(o.valueDecimals,-1),a=m(o.valueSuffix,\"\"),n=t=>e.series.reduce((e,s)=>(e.push(...s.points.filter(e=>e.dataClass===t)),e),[]);return i.length||e.dataClasses.forEach((o,h)=>{let d=o.from,f=o.to,{numberFormatter:u}=s,g=!0;t=\"\",void 0===d?t=\"< \":void 0===f&&(t=\"> \"),void 0!==d&&(t+=u(d,r)+a),void 0!==d&&void 0!==f&&(t+=\" - \"),void 0!==f&&(t+=u(f,r)+a),i.push(c({chart:s,name:t,options:{},drawLegendSymbol:l.rectangle,visible:!0,isDataClass:!0,setState:t=>{for(let e of n(h))e.setState(t)},setVisible:function(){this.visible=g=e.visible=!g;let t=[];for(let e of n(h))e.setVisible(g),e.hiddenInDataClass=!g,-1===t.indexOf(e.series)&&t.push(e.series);s.legend.colorizeItem(this,g),t.forEach(t=>{p(t,\"afterDataClassLegendClick\")})}},o))}),i}getSize(){let{chart:t,horiz:e}=this,{legend:s,height:i,width:o}=this.options;return{width:m(d(o)?x(o,t.chartWidth):void 0,s?.symbolWidth,e?C.defaultLegendLength:12),height:m(d(i)?x(i,t.chartHeight):void 0,s?.symbolHeight,e?12:C.defaultLegendLength)}}}return C.defaultLegendLength=200,C.keepProps=[\"legendItem\"],c(C.prototype,i),Array.prototype.push.apply(t.keepProps,C.keepProps),C}),s(e,\"masters/modules/coloraxis.src.js\",[e[\"Core/Globals.js\"],e[\"Core/Axis/Color/ColorAxis.js\"]],function(t,e){return t.ColorAxis=t.ColorAxis||e,t.ColorAxis.compose(t.Chart,t.Fx,t.Legend,t.Series),t})});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */function(t){\"object\"==typeof module&&module.exports?(t.default=t,module.exports=t):\"function\"==typeof define&&define.amd?define(\"highcharts/modules/series-label\",[\"highcharts\"],function(e){return t(e),t.Highcharts=e,t}):t(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(t){\"use strict\";var e=t?t._modules:{};function o(t,e,o,r){t.hasOwnProperty(e)||(t[e]=r.apply(null,o),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:e,module:t[e]}})))}o(e,\"Extensions/SeriesLabel/SeriesLabelDefaults.js\",[],function(){return{enabled:!0,connectorAllowed:!1,connectorNeighbourDistance:24,format:void 0,formatter:void 0,minFontSize:null,maxFontSize:null,onArea:null,style:{fontSize:\"0.8em\",fontWeight:\"bold\"},useHTML:!1,boxesToAvoid:[]}}),o(e,\"Extensions/SeriesLabel/SeriesLabelUtilities.js\",[],function(){function t(t,e,o,r,i,a){let n=(a-e)*(o-t)-(r-e)*(i-t);return n>0||!(n<0)}function e(e,o,r,i,a,n,s,l){return t(e,o,a,n,s,l)!==t(r,i,a,n,s,l)&&t(e,o,r,i,a,n)!==t(e,o,r,i,s,l)}return{boxIntersectLine:function(t,o,r,i,a,n,s,l){return e(t,o,t+r,o,a,n,s,l)||e(t+r,o,t+r,o+i,a,n,s,l)||e(t,o+i,t+r,o+i,a,n,s,l)||e(t,o,t,o+i,a,n,s,l)},intersectRect:function(t,e){return!(e.left>t.right||e.rightt.bottom||e.bottom=e-16&&d[S-1].chartX<=e+r.width+16){if(p(e,o,r.width,r.height,d[S-1].chartX,d[S-1].chartY,d[S].chartX,d[S].chartY))return!1;t===h&&!b&&i&&(b=p(e-16,o-16,r.width+32,r.height+32,d[S-1].chartX,d[S-1].chartY,d[S].chartX,d[S].chartY))}(l||b)&&(t!==h||s)&&(c=Math.min(c,(g=e+r.width/2-d[S].chartX)*g+(y=o+r.height/2-d[S].chartY)*y))}if(!s&&l&&t===h&&(i&&!b||c(t||0)+(e||0),0),e.labelSeriesMaxSum=Math.max(e.labelSeriesMaxSum||0,r.sum||0)),\"load\"===t.type&&(o=Math.max(o,s(r.options.animation).duration)),n&&(void 0!==n[0].plotX?a.animate({x:n[0].plotX+n[1],y:n[0].plotY+n[2]}):a.attr({opacity:0})))}),e.seriesLabelTimer=y(function(){e.series&&e.labelSeries&&function(t){t.boxesToAvoid=[];let e=t.labelSeries||[],o=t.boxesToAvoid;t.series.forEach(t=>(t.points||[]).forEach(e=>(e.dataLabels||[]).forEach(e=>{let{width:r,height:i}=e.getBBox(),a=(e.translateX||0)+(t.xAxis?t.xAxis.pos:t.chart.plotLeft),n=(e.translateY||0)+(t.yAxis?t.yAxis.pos:t.chart.plotTop);o.push({left:a,top:n,right:a+r,bottom:n+i})}))),e.forEach(function(t){let e=t.options.label||{};t.interpolatedPoints=function(t){let e,o,r,i,a;if(!t.xAxis&&!t.yAxis)return;let n=t.points,s=[],l=t.graph||t.area,h=l&&l.element,c=t.chart.inverted,p=t.xAxis,d=t.yAxis,u=c?d.pos:p.pos,f=c?p.pos:d.pos,x=c?p.len:d.len,g=c?d.len:p.len,y=m((t.options.label||{}).onArea,!!t.area),X=d.getThreshold(t.options.threshold),S={},M=c?\"chartCenterX\":\"chartCenterY\";function w(t){let e=Math.round((t.plotX||0)/8)+\",\"+Math.round((t.plotY||0)/8);S[e]||(S[e]=1,s.push(t))}if(t.getPointSpline&&h&&h.getPointAtLength&&!y&&n.length<(t.chart.plotSizeX||0)/16){let t=l.toD&&l.attr(\"d\");for(l.toD&&l.attr({d:l.toD}),r=h.getTotalLength(),e=0;e16)for(a=1,i=Math.ceil(o/16);ar&&t<=i-o.width&&e>=p&&e<=p+u-o.height}function j(){v&&(e.labelBySeries=v.destroy())}if(b&&!h&&(E=[e.xAxis.toPixels(y[0]),e.xAxis.toPixels(y[y.length-1])],T=Math.min.apply(Math,E),C=Math.max.apply(Math,E)),e.visible&&!e.boosted&&x){if(!v){let i=e.name;if(\"string\"==typeof o.format?i=l(o.format,e,t):o.formatter&&(i=o.formatter.call(e)),e.labelBySeries=v=t.renderer.label(i,0,0,\"connector\",0,0,o.useHTML).addClass(\"highcharts-series-label highcharts-series-label-\"+e.index+\" \"+(e.options.className||\"\")+\" \"+r),!t.renderer.styledMode){let r=\"string\"==typeof e.color?e.color:\"#666666\";v.css(f({color:b?t.renderer.getContrast(r):r},o.style||{})),v.attr({opacity:t.renderer.forExport?1:0,stroke:e.color,\"stroke-width\":1})}a&&n&&v.css({fontSize:a+(e.sum||0)/(e.chart.labelSeriesMaxSum||0)*(n-a)+\"px\"}),v.attr({padding:0,zIndex:3}).add()}for((S=v.getBBox()).width=Math.round(S.width),Y=x.length-1;Y>0;Y-=1)b?P(M=(x[Y].chartCenterX??x[Y].chartX)-S.width/2,w=(x[Y].chartCenterY??x[Y].chartY)-S.height/2,S)&&(L=X(e,M,w,S)):(P(M=x[Y].chartX+3,w=x[Y].chartY-S.height-3,S)&&(L=X(e,M,w,S,!0)),L&&g.push(L),P(M=x[Y].chartX+3,w=x[Y].chartY+3,S)&&(L=X(e,M,w,S,!0)),L&&g.push(L),P(M=x[Y].chartX-S.width-3,w=x[Y].chartY+3,S)&&(L=X(e,M,w,S,!0)),L&&g.push(L),P(M=x[Y].chartX-S.width-3,w=x[Y].chartY-S.height-3,S)&&(L=X(e,M,w,S,!0))),L&&g.push(L);if(o.connectorAllowed&&!g.length&&!b)for(M=c+d-S.width;M>=c;M-=16)for(w=p;we.weight-t.weight),L=g[0],(t.boxesToAvoid||[]).push({left:L.x,right:L.x+S.width,top:L.y,bottom:L.y+S.height});let o=Math.sqrt(Math.pow(Math.abs(L.x-(v.x||0)),2)+Math.pow(Math.abs(L.y-(v.y||0)),2));if(o&&e.labelBySeries){let r,a={opacity:t.renderer.forExport?1:0,x:L.x,y:L.y},n={opacity:1};o<=10&&(n={x:a.x,y:a.y},a={}),i&&(r=s(e.options.animation),r.duration*=.2),e.labelBySeries.attr(f(a,{anchorX:L.connectorPoint&&(L.connectorPoint.plotX||0)+c,anchorY:L.connectorPoint&&(L.connectorPoint.plotY||0)+p})).animate(n,r),e.options.kdNow=!0,e.buildKDTree();let l=e.searchPoint({chartX:L.x,chartY:L.y},!0);l&&(v.closest=[l,L.x-(l.plotX||0),L.y-(l.plotY||0)])}}else j()}else j()}),x(t,\"afterDrawSeriesLabels\")}(e)},e.renderer.forExport||!o?0:o)}}function M(t,e,o,r,i){let a=i&&i.anchorX,n=i&&i.anchorY,s,l,h=o/2;return b(a)&&b(n)&&(s=[[\"M\",a,n]],(l=e-n)<0&&(l=-r-l),le+r?s.push([\"L\",t+h,e+r]):nt+o&&s.push([\"L\",t+o,e+r/2])),s||[]}return{compose:function(t,e){g(c,\"SeriesLabel\")&&(u(t,\"load\",S),u(t,\"redraw\",S),e.prototype.symbols.connector=M,h({plotOptions:{series:{label:i}}}))}}}),o(e,\"masters/modules/series-label.src.js\",[e[\"Core/Globals.js\"],e[\"Extensions/SeriesLabel/SeriesLabel.js\"]],function(t,e){return e.compose(t.Chart,t.SVGRenderer),t})});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * (c) 2016-2024 Highsoft AS\n * Authors: Jon Arild Nygard\n *\n * License: www.highcharts.com/license\n */function(t){\"object\"==typeof module&&module.exports?(t.default=t,module.exports=t):\"function\"==typeof define&&define.amd?define(\"highcharts/modules/sunburst\",[\"highcharts\"],function(e){return t(e),t.Highcharts=e,t}):t(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(t){\"use strict\";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:e,module:t[e]}})))}i(e,\"Extensions/Breadcrumbs/BreadcrumbsDefaults.js\",[],function(){return{lang:{mainBreadcrumb:\"Main\"},options:{buttonTheme:{fill:\"none\",height:18,padding:2,\"stroke-width\":0,zIndex:7,states:{select:{fill:\"none\"}},style:{color:\"#334eff\"}},buttonSpacing:5,floating:!1,format:void 0,relativeTo:\"plotBox\",rtl:!1,position:{align:\"left\",verticalAlign:\"top\",x:0,y:void 0},separator:{text:\"/\",style:{color:\"#666666\",fontSize:\"0.8em\"}},showFullPath:!0,style:{},useHTML:!1,zIndex:7}}}),i(e,\"Extensions/Breadcrumbs/Breadcrumbs.js\",[e[\"Extensions/Breadcrumbs/BreadcrumbsDefaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{format:r}=e,{composed:o}=i,{addEvent:l,defined:a,extend:n,fireEvent:h,isString:d,merge:p,objectEach:u,pick:c,pushUnique:g}=s;function v(){if(this.breadcrumbs){let t=this.resetZoomButton&&this.resetZoomButton.getBBox(),e=this.breadcrumbs.options;t&&\"right\"===e.position.align&&\"plotBox\"===e.relativeTo&&this.breadcrumbs.alignBreadcrumbsGroup(-t.width-e.buttonSpacing)}}function b(){this.breadcrumbs&&(this.breadcrumbs.destroy(),this.breadcrumbs=void 0)}function m(){let t=this.breadcrumbs;if(t&&!t.options.floating&&t.level){let e=t.options,i=e.buttonTheme,s=(i.height||0)+2*(i.padding||0)+e.buttonSpacing,r=e.position.verticalAlign;\"bottom\"===r?(this.marginBottom=(this.marginBottom||0)+s,t.yOffset=s):\"middle\"!==r?(this.plotTop+=s,t.yOffset=-s):t.yOffset=void 0}}function f(){this.breadcrumbs&&this.breadcrumbs.redraw()}function y(t){!0===t.resetSelection&&this.breadcrumbs&&this.breadcrumbs.alignBreadcrumbsGroup()}class x{static compose(e,i){g(o,\"Breadcrumbs\")&&(l(e,\"destroy\",b),l(e,\"afterShowResetZoom\",v),l(e,\"getMargins\",m),l(e,\"redraw\",f),l(e,\"selection\",y),n(i.lang,t.lang))}constructor(t,e){this.elementList={},this.isDirty=!0,this.level=0,this.list=[];let i=p(t.options.drilldown&&t.options.drilldown.drillUpButton,x.defaultOptions,t.options.navigation&&t.options.navigation.breadcrumbs,e);this.chart=t,this.options=i||{}}updateProperties(t){this.setList(t),this.setLevel(),this.isDirty=!0}setList(t){this.list=t}setLevel(){this.level=this.list.length&&this.list.length-1}getLevel(){return this.level}getButtonText(t){let e=this.chart,i=this.options,s=e.options.lang,o=c(i.format,i.showFullPath?\"{level.name}\":\"← {level.name}\"),l=s&&c(s.drillUpText,s.mainBreadcrumb),n=i.formatter&&i.formatter(t)||r(o,{level:t.levelOptions},e)||\"\";return(d(n)&&!n.length||\"← \"===n)&&a(l)&&(n=i.showFullPath?l:\"← \"+l),n}redraw(){this.isDirty&&this.render(),this.group&&this.group.align(),this.isDirty=!1}render(){let t=this.chart,e=this.options;!this.group&&e&&(this.group=t.renderer.g(\"breadcrumbs-group\").addClass(\"highcharts-no-tooltip highcharts-breadcrumbs\").attr({zIndex:e.zIndex}).add()),e.showFullPath?this.renderFullPathButtons():this.renderSingleButton(),this.alignBreadcrumbsGroup()}renderFullPathButtons(){this.destroySingleButton(),this.resetElementListState(),this.updateListElements(),this.destroyListElements()}renderSingleButton(){let t=this.chart,e=this.list,i=this.options.buttonSpacing;this.destroyListElements();let s=this.group?this.group.getBBox().width:i,r=e[e.length-2];!t.drillUpButton&&this.level>0?t.drillUpButton=this.renderButton(r,s,i):t.drillUpButton&&(this.level>0?this.updateSingleButton():this.destroySingleButton())}alignBreadcrumbsGroup(t){if(this.group){let e=this.options,i=e.buttonTheme,s=e.position,r=\"chart\"===e.relativeTo||\"spacingBox\"===e.relativeTo?void 0:\"plotBox\",o=this.group.getBBox(),l=2*(i.padding||0)+e.buttonSpacing;s.width=o.width+l,s.height=o.height+l;let a=p(s);t&&(a.x+=t),this.options.rtl&&(a.x+=s.width),a.y=c(a.y,this.yOffset,0),this.group.align(a,!0,r)}}renderButton(t,e,i){let s=this,r=this.chart,o=s.options,l=p(o.buttonTheme),a=r.renderer.button(s.getButtonText(t),e,i,function(e){let i;let r=o.events&&o.events.click;r&&(i=r.call(s,e,t)),!1!==i&&(o.showFullPath?e.newLevel=t.level:e.newLevel=s.level-1,h(s,\"up\",e))},l).addClass(\"highcharts-breadcrumbs-button\").add(s.group);return r.styledMode||a.attr(o.style),a}renderSeparator(t,e){let i=this.chart,s=this.options.separator,r=i.renderer.label(s.text,t,e,void 0,void 0,void 0,!1).addClass(\"highcharts-breadcrumbs-separator\").add(this.group);return i.styledMode||r.css(s.style),r}update(t){p(!0,this.options,t),this.destroy(),this.isDirty=!0}updateSingleButton(){let t=this.chart,e=this.list[this.level-1];t.drillUpButton&&t.drillUpButton.attr({text:this.getButtonText(e)})}destroy(){this.destroySingleButton(),this.destroyListElements(!0),this.group&&this.group.destroy(),this.group=void 0}destroyListElements(t){let e=this.elementList;u(e,(i,s)=>{(t||!e[s].updated)&&((i=e[s]).button&&i.button.destroy(),i.separator&&i.separator.destroy(),delete i.button,delete i.separator,delete e[s])}),t&&(this.elementList={})}destroySingleButton(){this.chart.drillUpButton&&(this.chart.drillUpButton.destroy(),this.chart.drillUpButton=void 0)}resetElementListState(){u(this.elementList,t=>{t.updated=!1})}updateListElements(){let t=this.elementList,e=this.options.buttonSpacing,i=this.list,s=this.options.rtl,r=s?-1:1,o=function(t,e){return r*t.getBBox().width+r*e},l=function(t,e,i){t.translate(e-t.getBBox().width,i)},a=this.group?o(this.group,e):e,n,h;for(let d=0,p=i.length;d{t.graphic=a=a&&a.destroy(),\"function\"==typeof s&&s()};Object.keys(i).length?a.animate(i,void 0,()=>e()):e()}}}}),i(e,\"Series/Treemap/TreemapPoint.js\",[e[\"Series/DrawPointUtilities.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{pie:{prototype:{pointClass:s}},scatter:{prototype:{pointClass:r}}}=e.seriesTypes,{extend:o,isNumber:l,pick:a}=i;class n extends r{constructor(){super(...arguments),this.shapeType=\"rect\"}draw(e){t.draw(this,e)}getClassName(){let t=this.series,e=t.options,i=super.getClassName();return this.node.level<=t.nodeMap[t.rootNode].level?i+=\" highcharts-above-level\":this.node.isLeaf||a(e.interactByLeaf,!e.allowTraversingTree)?this.node.isLeaf||(i+=\" highcharts-internal-node\"):i+=\" highcharts-internal-node-interactive\",i}isValid(){return!!(this.id||l(this.value))}setState(t){super.setState.apply(this,arguments),this.graphic&&this.graphic.attr({zIndex:\"hover\"===t?1:0})}shouldDraw(){return l(this.plotY)&&null!==this.y}}return o(n.prototype,{setVisible:s.prototype.setVisible}),n}),i(e,\"Series/Treemap/TreemapSeriesDefaults.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{isString:i}=e;return{allowTraversingTree:!1,animationLimit:250,borderRadius:0,showInLegend:!1,marker:void 0,colorByPoint:!1,dataLabels:{defer:!1,enabled:!0,formatter:function(){let t=this&&this.point?this.point:{};return i(t.name)?t.name:\"\"},inside:!0,verticalAlign:\"middle\"},tooltip:{headerFormat:\"\",pointFormat:\"{point.name}: {point.value}
\"},ignoreHiddenPoint:!0,layoutAlgorithm:\"sliceAndDice\",layoutStartingDirection:\"vertical\",alternateStartingDirection:!1,levelIsConstant:!0,traverseUpButton:{position:{align:\"right\",x:-10,y:10}},borderColor:\"#e6e6e6\",borderWidth:1,colorKey:\"colorValue\",opacity:.15,states:{hover:{borderColor:\"#999999\",brightness:t.seriesTypes.heatmap?0:.1,halo:!1,opacity:.75,shadow:!1}},legendSymbol:\"rectangle\"}}),i(e,\"Series/Treemap/TreemapUtilities.js\",[],function(){var t;return(t||(t={})).recursive=function t(e,i,s){let r;!1!==(r=i.call(s||this,e))&&t(r,i,s)},t}),i(e,\"Series/TreeUtilities.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{extend:i,isArray:s,isNumber:r,isObject:o,merge:l,pick:a,relativeLength:n}=e;return{getColor:function(e,i){let s,r,o,l,n,h;let d=i.index,p=i.mapOptionsToLevel,u=i.parentColor,c=i.parentColorIndex,g=i.series,v=i.colors,b=i.siblings,m=g.points,f=g.chart.options.chart;return e&&(s=m[e.i],r=p[e.level]||{},s&&r.colorByPoint&&(l=s.index%(v?v.length:f.colorCount),o=v&&v[l]),g.chart.styledMode||(n=a(s&&s.options.color,r&&r.color,o,u&&(e=>{let i=r&&r.colorVariation;return i&&\"brightness\"===i.key&&d&&b?t.parse(e).brighten(i.to*(d/b)).get():e})(u),g.color)),h=a(s&&s.options.colorIndex,r&&r.colorIndex,l,c,i.colorIndex)),{color:n,colorIndex:h}},getLevelOptions:function(t){let e={},i,n,h,d,p,u;if(o(t))for(d=r(t.from)?t.from:1,u=t.levels,n={},i=o(t.defaults)?t.defaults:{},s(u)&&(n=u.reduce((t,e)=>{let s,n,h;return o(e)&&r(e.level)&&(n=a((h=l({},e)).levelIsConstant,i.levelIsConstant),delete h.levelIsConstant,delete h.level,o(t[s=e.level+(n?0:d-1)])?l(!0,t[s],h):t[s]=h),t},{})),p=r(t.to)?t.to:1,h=0;h<=p;h++)e[h]=l({},i,o(n[h])?n[h]:{});return e},getNodeWidth:function(t,e){let{chart:i,options:s}=t,{nodeDistance:r=0,nodeWidth:o=0}=s,{plotSizeX:l=1}=i;if(\"auto\"===o){if(\"string\"==typeof r&&/%$/.test(r))return l/(e+parseFloat(r)/100*(e-1));let t=Number(r);return(l+t)/(e||1)-t}return n(o,l)},setTreeValues:function t(e,s){let r=s.before,o=s.idRoot,l=s.mapIdToNode[o],n=!1!==s.levelIsConstant,h=s.points[e.i],d=h&&h.options||{},p=[],u=0;e.levelDynamic=e.level-(n?0:l.level),e.name=a(h&&h.name,\"\"),e.visible=o===e.id||!0===s.visible,\"function\"==typeof r&&(e=r(e,s)),e.children.forEach((r,o)=>{let l=i({},s);i(l,{index:o,siblings:e.children.length,visible:e.visible}),r=t(r,l),p.push(r),r.visible&&(u+=r.val)});let c=a(d.value,u);return e.visible=c>=0&&(u>0||e.visible),e.children=p,e.childrenTotal=u,e.isLeaf=e.visible&&!u,e.val=c,e},updateRootId:function(t){let e,i;return o(t)&&(i=o(t.options)?t.options:{},e=a(t.rootNode,i.rootId,\"\"),o(t.userOptions)&&(t.userOptions.rootId=e),t.rootNode=e),e}}}),i(e,\"Series/Treemap/TreemapSeries.js\",[e[\"Extensions/Breadcrumbs/Breadcrumbs.js\"],e[\"Core/Color/Color.js\"],e[\"Series/ColorMapComposition.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/Treemap/TreemapAlgorithmGroup.js\"],e[\"Series/Treemap/TreemapNode.js\"],e[\"Series/Treemap/TreemapPoint.js\"],e[\"Series/Treemap/TreemapSeriesDefaults.js\"],e[\"Series/Treemap/TreemapUtilities.js\"],e[\"Series/TreeUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,l,a,n,h,d,p){let{parse:u}=e,{composed:c,noop:g}=s,{column:v,scatter:b}=r.seriesTypes,{getColor:m,getLevelOptions:f,updateRootId:y}=d,{addEvent:x,correctFloat:T,defined:S,error:L,extend:P,fireEvent:w,isArray:A,isObject:C,isString:R,merge:B,pick:I,pushUnique:O,stableSort:M}=p,j=!1;function N(){let t;let e=this.xAxis,i=this.yAxis;e&&i&&(this.is(\"treemap\")?(t={endOnTick:!1,gridLineWidth:0,lineWidth:0,min:0,minPadding:0,max:100,maxPadding:0,startOnTick:!1,title:void 0,tickPositions:[]},P(i.options,t),P(e.options,t),j=!0):j&&(i.setOptions(i.userOptions),e.setOptions(e.userOptions),j=!1))}class D extends b{static compose(t){O(c,\"TreemapSeries\")&&x(t,\"afterBindAxes\",N)}algorithmCalcPoints(t,e,i,s){let r=i.plot,o=i.elArr.length-1,l,a,n,h,d=i.lW,p=i.lH,u,c=0;for(let t of(e?(d=i.nW,p=i.nH):u=i.elArr[o],i.elArr))(e||cn.lP.lR&&this.algorithmCalcPoints(t,!1,n,s,r),d===a&&this.algorithmCalcPoints(t,!0,n,s,r),++d;return s}alignDataLabel(t,e,i){let s=i.style;s&&!S(s.textOverflow)&&e.text&&e.getBBox().width>(e.text.textWidth||0)&&e.css({textOverflow:\"ellipsis\",width:s.width+=\"px\"}),v.prototype.alignDataLabel.apply(this,arguments),t.dataLabel&&t.dataLabel.attr({zIndex:(t.node.zIndex||0)+1})}calculateChildrenAreas(t,e){let i=this.options,s=this.mapOptionsToLevel[t.level+1],r=I(this[s&&s.layoutAlgorithm]&&s.layoutAlgorithm,i.layoutAlgorithm),o=i.alternateStartingDirection,l=t.children.filter(t=>!t.ignore),a=[];s&&s.layoutStartingDirection&&(e.direction=\"vertical\"===s.layoutStartingDirection?0:1),a=this[r](e,l);let n=-1;for(let t of l){let i=a[++n];t.values=B(i,{val:t.childrenTotal,direction:o?1-e.direction:e.direction}),t.pointValues=B(i,{x:i.x/this.axisRatio,y:100-i.y-i.height,width:i.width/this.axisRatio}),t.children.length&&this.calculateChildrenAreas(t,t.values)}}createList(t){let e=this.chart,i=e.breadcrumbs,s=[];if(i){let i=0;s.push({level:i,levelOptions:e.series[0]});let r=t.target.nodeMap[t.newRootId],o=[];for(;r.parent||\"\"===r.parent;)o.push(r),r=t.target.nodeMap[r.parent];for(let t of o.reverse())s.push({level:++i,levelOptions:t});s.length<=1&&(s.length=0)}return s}drawDataLabels(){let t,e;let i=this.mapOptionsToLevel;for(let s of this.points.filter(function(t){return t.node.visible}))e=i[s.node.level],t={style:{}},s.node.isLeaf||(t.enabled=!1),e&&e.dataLabels&&(t=B(t,e.dataLabels),this.hasDataLabels=()=>!0),s.shapeArgs&&(t.style.width=s.shapeArgs.width,s.dataLabel&&s.dataLabel.css({width:s.shapeArgs.width+\"px\"})),s.dlOptions=B(t,s.options.dataLabels);super.drawDataLabels()}drawPoints(t=this.points){let e=this.chart,i=e.renderer,s=e.styledMode,r=this.options,o=s?{}:r.shadow,l=r.borderRadius,a=e.pointCount{let e=t.userOptions;S(e.allowDrillToNode)&&!S(e.allowTraversingTree)&&(e.allowTraversingTree=e.allowDrillToNode,delete e.allowDrillToNode),S(e.drillUpButton)&&!S(e.traverseUpButton)&&(e.traverseUpButton=e.drillUpButton,delete e.drillUpButton)});super.init(e,i),delete s.opacity,s.eventsToUnbind.push(o),s.options.allowTraversingTree&&(s.eventsToUnbind.push(x(s,\"click\",s.onClickDrillToNode)),s.eventsToUnbind.push(x(s,\"setRootNode\",function(t){let e=s.chart;e.breadcrumbs&&e.breadcrumbs.updateProperties(s.createList(t))})),s.eventsToUnbind.push(x(s,\"update\",function(t,e){let i=this.chart.breadcrumbs;i&&t.options.breadcrumbs&&i.update(t.options.breadcrumbs)})),s.eventsToUnbind.push(x(s,\"destroy\",function(t){let e=this.chart;e.breadcrumbs&&!t.keepEventsForUpdate&&(e.breadcrumbs.destroy(),e.breadcrumbs=void 0)}))),e.breadcrumbs||(e.breadcrumbs=new t(e,r)),s.eventsToUnbind.push(x(e.breadcrumbs,\"up\",function(t){let e=this.level-t.newLevel;for(let t=0;tr?0:(t.pointAttribs(e)[\"stroke-width\"]||0)%2/2;for(let t of e){let{pointValues:e,visible:r}=t.node;if(e&&r){let{height:r,width:l,x:a,y:n}=e,h=o(t),d=Math.round(i.toPixels(a,!0))-h,p=Math.round(i.toPixels(a+l,!0))-h,u=Math.round(s.toPixels(n,!0))-h,c=Math.round(s.toPixels(n+r,!0))-h,g={x:Math.min(d,p),y:Math.min(u,c),width:Math.abs(p-d),height:Math.abs(c-u)};t.plotX=g.x+g.width/2,t.plotY=g.y+g.height/2,t.shapeArgs=g}else delete t.plotX,delete t.plotY}}setRootNode(t,e,i){w(this,\"setRootNode\",P({newRootId:t,previousRootId:this.rootNode,redraw:I(e,!0),series:this},i),function(t){let e=t.series;e.idPreviousRoot=t.previousRootId,e.rootNode=t.newRootId,e.isDirty=!0,t.redraw&&e.chart.redraw()})}setState(t){this.options.inactiveOtherPoints=!0,super.setState(t,!1),this.options.inactiveOtherPoints=!1}setTreeValues(t){let e=this.options,i=this.rootNode,s=this.nodeMap[i],r=\"boolean\"!=typeof e.levelIsConstant||e.levelIsConstant,o=[],l=this.points[t.i],a=0;for(let e of t.children)e=this.setTreeValues(e),o.push(e),e.ignore||(a+=e.val);M(o,(t,e)=>(t.sortIndex||0)-(e.sortIndex||0));let n=I(l&&l.options.value,a);return l&&(l.value=n),P(t,{children:o,childrenTotal:a,ignore:!(I(l&&l.visible,!0)&&n>0),isLeaf:t.visible&&!a,levelDynamic:t.level-(r?0:s.level),name:I(l&&l.name,\"\"),sortIndex:I(l&&l.sortIndex,-n),val:n}),t}sliceAndDice(t,e){return this.algorithmFill(!0,t,e)}squarified(t,e){return this.algorithmLowAspectRatio(!0,t,e)}strip(t,e){return this.algorithmLowAspectRatio(!1,t,e)}stripes(t,e){return this.algorithmFill(!1,t,e)}translate(){let t=this,e=t.options,i=y(t),s,r,o,l;super.translate();let a=t.tree=t.getTree();s=t.nodeMap[i],\"\"===i||s&&s.children.length||(t.setRootNode(\"\",!1),i=t.rootNode,s=t.nodeMap[i]),t.mapOptionsToLevel=f({from:s.level+1,levels:e.levels,to:a.height,defaults:{levelIsConstant:t.options.levelIsConstant,colorByPoint:e.colorByPoint}}),h.recursive(t.nodeMap[t.rootNode],e=>{let i=e.parent,s=!1;return e.visible=!0,(i||\"\"===i)&&(s=t.nodeMap[i]),s}),h.recursive(t.nodeMap[t.rootNode].children,t=>{let e=!1;for(let i of t)i.visible=!0,i.children.length&&(e=(e||[]).concat(i.children));return e}),t.setTreeValues(a),t.axisRatio=t.xAxis.len/t.yAxis.len,t.nodeMap[\"\"].pointValues=r={x:0,y:0,width:100,height:100},t.nodeMap[\"\"].values=o=B(r,{width:r.width*t.axisRatio,direction:\"vertical\"===e.layoutStartingDirection?0:1,val:a.val}),t.calculateChildrenAreas(a,o),t.colorAxis||e.colorByPoint||t.setColorRecursive(t.tree),e.allowTraversingTree&&(l=s.pointValues,t.xAxis.setExtremes(l.x,l.x+l.width,!1),t.yAxis.setExtremes(l.y,l.y+l.height,!1),t.xAxis.setScale(),t.yAxis.setScale()),t.setPointValues()}}return D.defaultOptions=B(b.defaultOptions,n),P(D.prototype,{buildKDTree:g,colorAttribs:i.seriesMembers.colorAttribs,colorKey:\"colorValue\",directTouch:!0,getExtremesFromAll:!0,getSymbol:g,optionalAxis:\"colorAxis\",parallelArrays:[\"x\",\"y\",\"value\",\"colorValue\"],pointArrayMap:[\"value\"],pointClass:a,NodeClass:l,trackerGroups:[\"group\",\"dataLabelsGroup\"],utils:h}),i.compose(D),r.registerSeriesType(\"treemap\",D),D}),i(e,\"Series/Sunburst/SunburstPoint.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{series:{prototype:{pointClass:i}},seriesTypes:{treemap:{prototype:{pointClass:s}}}}=t,{correctFloat:r,extend:o,pInt:l}=e;class a extends s{getDataLabelPath(t){let e=this.series.chart.renderer,i=this.shapeExisting,s=i.r+l(t.options?.distance||0),o=i.start,a=i.end,n=o+(a-o)/2,h=n<0&&n>-Math.PI||n>Math.PI,d;return o===-Math.PI/2&&r(a)===r(1.5*Math.PI)&&(o=-Math.PI+Math.PI/360,a=-Math.PI/360,h=!0),a-o>Math.PI&&(h=!1,d=!0,a-o>2*Math.PI-.01&&(o+=.01,a-=.01)),this.dataLabelPath&&(this.dataLabelPath=this.dataLabelPath.destroy()),this.dataLabelPath=e.arc({open:!0,longArc:d?1:0}).attr({start:h?o:a,end:h?a:o,clockwise:+h,x:i.x,y:i.y,r:(s+i.innerR)/2}).add(e.defs),this.dataLabelPath}isValid(){return!0}}return o(a.prototype,{getClassName:i.prototype.getClassName,haloPath:i.prototype.haloPath,setState:i.prototype.setState}),a}),i(e,\"Series/Sunburst/SunburstUtilities.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{seriesTypes:{treemap:i}}=t,{isNumber:s,isObject:r,merge:o}=e;function l(t,e){let i=[];if(s(t)&&s(e)&&t<=e)for(let s=t;s<=e;s++)i.push(s);return i}return{calculateLevelSizes:function(t,e){let i=r(e)?e:{},a,n=0,h,d,p,u;if(r(t)){for(let e of(a=o({},t),d=l(s(i.from)?i.from:0,s(i.to)?i.to:0),p=Object.keys(a).filter(t=>-1===d.indexOf(+t)),h=u=s(i.diffRadius)?i.diffRadius:0,d)){let t=a[e],i=t.levelSize.unit,s=t.levelSize.value;\"weight\"===i?n+=s:\"percentage\"===i?(t.levelSize={unit:\"pixels\",value:s/100*h},u-=t.levelSize.value):\"pixels\"===i&&(u-=s)}for(let t of d){let e=a[t];if(\"weight\"===e.levelSize.unit){let i=e.levelSize.value;a[t].levelSize={unit:\"pixels\",value:i/n*u}}}for(let t of p)a[t].levelSize={value:0,unit:\"pixels\"}}return a},getLevelFromAndTo:function({level:t,height:e}){return{from:t>0?t:1,to:t+e}},range:l,recursive:i.prototype.utils.recursive}}),i(e,\"Series/Sunburst/SunburstNode.js\",[e[\"Series/Treemap/TreemapNode.js\"]],function(t){return class extends t{}}),i(e,\"Series/Sunburst/SunburstSeriesDefaults.js\",[],function(){return{center:[\"50%\",\"50%\"],clip:!1,colorByPoint:!1,opacity:1,dataLabels:{allowOverlap:!0,defer:!0,rotationMode:\"circular\",style:{textOverflow:\"ellipsis\"}},rootId:void 0,levelIsConstant:!0,levelSize:{value:1,unit:\"weight\"},slicedOffset:10}}),i(e,\"Series/Sunburst/SunburstSeries.js\",[e[\"Series/CenteredUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/Sunburst/SunburstPoint.js\"],e[\"Series/Sunburst/SunburstUtilities.js\"],e[\"Series/TreeUtilities.js\"],e[\"Core/Utilities.js\"],e[\"Series/Sunburst/SunburstNode.js\"],e[\"Series/Sunburst/SunburstSeriesDefaults.js\"]],function(t,e,i,s,r,o,l,a,n){let{getCenter:h,getStartAndEndRadians:d}=t,{noop:p}=e,{column:u,treemap:c}=i.seriesTypes,{getColor:g,getLevelOptions:v,setTreeValues:b,updateRootId:m}=o,{defined:f,error:y,extend:x,fireEvent:T,isNumber:S,isObject:L,isString:P,merge:w,splat:A}=l,C=180/Math.PI,R=function(t,e,i,s){return{x:t+Math.cos(i)*s,y:e+Math.sin(i)*s}};function B(t,e){let i=e.mapIdToNode,s=t.parent,r=s?i[s]:void 0,o=e.series,l=o.chart,a=o.points[t.i],n=g(t,{colors:o.options.colors||l&&l.options.colors,colorIndex:o.colorIndex,index:e.index,mapOptionsToLevel:e.mapOptionsToLevel,parentColor:r&&r.color,parentColorIndex:r&&r.colorIndex,series:e.series,siblings:e.siblings});return t.color=n.color,t.colorIndex=n.colorIndex,a&&(a.color=t.color,a.colorIndex=t.colorIndex,t.sliced=t.id!==e.idRoot&&a.sliced),t}class I extends c{alignDataLabel(t,e,i){if(!i.textPath||!i.textPath.enabled)return super.alignDataLabel.apply(this,arguments)}animate(t){let e;let i=this.chart,s=[i.plotWidth/2,i.plotHeight/2],r=i.plotLeft,o=i.plotTop,l=this.group;t?(e={translateX:s[0]+r,translateY:s[1]+o,scaleX:.001,scaleY:.001,rotation:10,opacity:.01},l.attr(e)):(e={translateX:r,translateY:o,scaleX:1,scaleY:1,rotation:0,opacity:1},l.animate(e,this.options.animation))}drawPoints(){let t=this,e=t.mapOptionsToLevel,i=t.shapeRoot,s=t.group,r=t.hasRendered,o=t.rootNode,l=t.idPreviousRoot,a=t.nodeMap,n=a[l],h=n&&n.shapeArgs,d=t.points,p=t.startAndEndRadians,c=t.chart,g=c&&c.options&&c.options.chart||{},v=\"boolean\"!=typeof g.animation||g.animation,b=t.center,m={x:b[0],y:b[1]},y=b[3]/2,T=t.chart.renderer,P=!!(v&&r&&o!==l&&t.dataLabelsGroup),R,B=!1,I=!1;for(let n of(P&&(t.dataLabelsGroup.attr({opacity:0}),R=function(){B=!0,t.dataLabelsGroup&&t.dataLabelsGroup.animate({opacity:1,visibility:\"inherit\"})}),d)){let d,u;let g=n.node,b=e[g.level],P=n.shapeExisting||{},B=g.shapeArgs||{},O=!!(g.visible&&g.shapeArgs);B.borderRadius=t.options.borderRadius,d=r&&v?function(t,e){let i=e.point,s=e.radians,r=e.innerR,o=e.idRoot,l=e.idPreviousRoot,a=e.shapeExisting,n=e.shapeRoot,h=e.shapePreviousRoot,d=e.visible,p={},u={end:t.end,start:t.start,innerR:t.innerR,r:t.r,x:t.x,y:t.y};return d?!i.graphic&&h&&((p=o===i.id?{start:s.start,end:s.end}:h.end<=t.start?{start:s.end,end:s.end}:{start:s.start,end:s.start}).innerR=p.r=r):i.graphic&&(l===i.id?u={innerR:r,r:r}:n&&(u=n.end<=a.start?{innerR:r,r:r,start:s.end,end:s.end}:{innerR:r,r:r,start:s.start,end:s.start})),{from:p,to:u}}(B,{center:m,point:n,radians:p,innerR:y,idRoot:o,idPreviousRoot:l,shapeExisting:P,shapeRoot:i,shapePreviousRoot:h,visible:O}):{to:B,from:{}},x(n,{shapeExisting:B,tooltipPos:[B.plotX,B.plotY],drillId:function(t,e,i){let s;return t.node.isLeaf||(s=e===t.id?i[e].parent:t.id),s}(n,o,a),name:\"\"+(n.name||n.id||n.index),plotX:B.plotX,plotY:B.plotY,value:g.val,isInside:O,isNull:!O}),n.dlOptions=function(t){let e=t.point,i=L(t.shapeArgs)?t.shapeArgs:{},s=L(t.optionsPoint)?t.optionsPoint.dataLabels:{},r=w({style:{}},A(L(t.level)?t.level.dataLabels:{})[0],s),o,l,a=r.rotationMode;return S(r.rotation)||((\"auto\"===a||\"circular\"===a)&&(r.useHTML&&\"circular\"===a&&(a=\"auto\"),e.innerArcLength<1&&e.outerArcLength>i.radius?(o=0,e.dataLabelPath&&\"circular\"===a&&(r.textPath={enabled:!0})):e.innerArcLength>1&&e.outerArcLength>1.5*i.radius?\"circular\"===a?r.textPath={enabled:!0,attributes:{dy:5}}:a=\"parallel\":(e.dataLabel&&e.dataLabel.textPath&&\"circular\"===a&&(r.textPath={enabled:!1}),a=\"perpendicular\")),\"auto\"!==a&&\"circular\"!==a&&(e.dataLabel&&e.dataLabel.textPath&&(r.textPath={enabled:!1}),o=i.end-(i.end-i.start)/2),\"parallel\"===a?r.style.width=Math.min(2.5*i.radius,(e.outerArcLength+e.innerArcLength)/2):!f(r.style.width)&&i.radius&&(r.style.width=1===e.node.level?2*i.radius:i.radius),\"perpendicular\"===a&&e.outerArcLength<16&&(r.style.width=1),r.style.width=Math.max(r.style.width-2*(r.padding||0),1),l=o*C%180,\"parallel\"===a&&(l-=90),l>90?l-=180:l<-90&&(l+=180),r.rotation=l),r.textPath&&(0===e.shapeExisting.innerR&&r.textPath.enabled?(r.rotation=0,r.textPath.enabled=!1,r.style.width=Math.max(2*e.shapeExisting.r-2*(r.padding||0),1)):e.dlOptions&&e.dlOptions.textPath&&!e.dlOptions.textPath.enabled&&\"circular\"===a&&(r.textPath.enabled=!0),r.textPath.enabled&&(r.rotation=0,r.style.width=Math.max((e.outerArcLength+e.innerArcLength)/2-2*(r.padding||0),1))),r}({point:n,level:b,optionsPoint:n.options,shapeArgs:B}),!I&&O&&(I=!0,u=R),n.draw({animatableAttribs:d.to,attribs:x(d.from,!c.styledMode&&t.pointAttribs(n,n.selected&&\"select\")),onComplete:u,group:s,renderer:T,shapeType:\"arc\",shapeArgs:B})}P&&I?(t.hasRendered=!1,t.options.dataLabels.defer=!0,u.prototype.drawDataLabels.call(t),t.hasRendered=!0,B&&R()):u.prototype.drawDataLabels.call(t),t.idPreviousRoot=o}layoutAlgorithm(t,e,i){let s=t.start,r=t.end-s,o=t.val,l=t.x,a=t.y,n=i&&L(i.levelSize)&&S(i.levelSize.value)?i.levelSize.value:0,h=t.r,d=h+n,p=i&&S(i.slicedOffset)?i.slicedOffset:0;return(e||[]).reduce((t,e)=>{let i=1/o*e.val*r,u=R(l,a,s+i/2,p),c={x:e.sliced?u.x:l,y:e.sliced?u.y:a,innerR:h,r:d,radius:n,start:s,end:s+i};return t.push(c),s=c.end,t},[])}setRootNode(t,e,i){if(1===this.nodeMap[t].level&&1===this.nodeList.filter(t=>1===t.level).length){if(\"\"===this.idPreviousRoot)return;t=\"\"}super.setRootNode(t,e,i)}setShapeArgs(t,e,i){let s=i[t.level+1],r=t.children.filter(function(t){return t.visible}),o=[];o=this.layoutAlgorithm(e,r,s);let l=-1;for(let t of r){let e=o[++l],s=e.start+(e.end-e.start)/2,r=e.innerR+(e.r-e.innerR)/2,a=e.end-e.start,n=0===e.innerR&&a>6.28?{x:e.x,y:e.y}:R(e.x,e.y,s,r),h=t.val?t.childrenTotal>t.val?t.childrenTotal:t.val:t.childrenTotal;this.points[t.i]&&(this.points[t.i].innerArcLength=a*e.innerR,this.points[t.i].outerArcLength=a*e.r),t.shapeArgs=w(e,{plotX:n.x,plotY:n.y}),t.values=w(e,{val:h}),t.children.length&&this.setShapeArgs(t,t.values,i)}}translate(){let t=this.options,e=this.center=this.getCenter(),i=this.startAndEndRadians=d(t.startAngle,t.endAngle),s=e[3]/2,o=e[2]/2,l=m(this),a=this.nodeMap,n,h=a&&a[l],p={};this.shapeRoot=h&&h.shapeArgs,this.processedXData||this.processData(),this.generatePoints(),T(this,\"afterTranslate\");let u=this.tree=this.getTree(),c=P((h=(a=this.nodeMap)[l]).parent)?h.parent:\"\",g=a[c],{from:f,to:x}=r.getLevelFromAndTo(h);n=v({from:f,levels:this.options.levels,to:x,defaults:{colorByPoint:t.colorByPoint,dataLabels:t.dataLabels,levelIsConstant:t.levelIsConstant,levelSize:t.levelSize,slicedOffset:t.slicedOffset}}),n=r.calculateLevelSizes(n,{diffRadius:o-s,from:f,to:x}),b(u,{before:B,idRoot:l,levelIsConstant:t.levelIsConstant,mapOptionsToLevel:n,mapIdToNode:a,points:this.points,series:this});let S=a[\"\"].shapeArgs={end:i.end,r:s,start:i.start,val:h.val,x:e[0],y:e[1]};for(let t of(this.setShapeArgs(g,S,n),this.mapOptionsToLevel=n,this.points))p[t.id]&&y(31,!1,this.chart),p[t.id]=!0}}return I.defaultOptions=w(c.defaultOptions,n),x(I.prototype,{axisTypes:[],drawDataLabels:p,getCenter:h,isCartesian:!1,onPointSupported:!0,pointAttribs:u.prototype.pointAttribs,pointClass:s,NodeClass:a,utils:r}),i.registerSeriesType(\"sunburst\",I),I}),i(e,\"masters/modules/sunburst.src.js\",[e[\"Core/Globals.js\"],e[\"Extensions/Breadcrumbs/Breadcrumbs.js\"]],function(t,e){return t.Breadcrumbs=t.Breadcrumbs||e,t.Breadcrumbs.compose(t.Chart,t.defaultOptions),t})});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * (c) 2014-2024 Highsoft AS\n * Authors: Jon Arild Nygard / Oystein Moseng\n *\n * License: www.highcharts.com/license\n */function(t){\"object\"==typeof module&&module.exports?(t.default=t,module.exports=t):\"function\"==typeof define&&define.amd?define(\"highcharts/modules/treemap\",[\"highcharts\"],function(e){return t(e),t.Highcharts=e,t}):t(\"undefined\"!=typeof Highcharts?Highcharts:void 0)}(function(t){\"use strict\";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),\"function\"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:e,module:t[e]}})))}i(e,\"Extensions/Breadcrumbs/BreadcrumbsDefaults.js\",[],function(){return{lang:{mainBreadcrumb:\"Main\"},options:{buttonTheme:{fill:\"none\",height:18,padding:2,\"stroke-width\":0,zIndex:7,states:{select:{fill:\"none\"}},style:{color:\"#334eff\"}},buttonSpacing:5,floating:!1,format:void 0,relativeTo:\"plotBox\",rtl:!1,position:{align:\"left\",verticalAlign:\"top\",x:0,y:void 0},separator:{text:\"/\",style:{color:\"#666666\",fontSize:\"0.8em\"}},showFullPath:!0,style:{},useHTML:!1,zIndex:7}}}),i(e,\"Extensions/Breadcrumbs/Breadcrumbs.js\",[e[\"Extensions/Breadcrumbs/BreadcrumbsDefaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{format:r}=e,{composed:o}=i,{addEvent:l,defined:n,extend:a,fireEvent:h,isString:d,merge:p,objectEach:u,pick:c,pushUnique:g}=s;function m(){if(this.breadcrumbs){let t=this.resetZoomButton&&this.resetZoomButton.getBBox(),e=this.breadcrumbs.options;t&&\"right\"===e.position.align&&\"plotBox\"===e.relativeTo&&this.breadcrumbs.alignBreadcrumbsGroup(-t.width-e.buttonSpacing)}}function v(){this.breadcrumbs&&(this.breadcrumbs.destroy(),this.breadcrumbs=void 0)}function b(){let t=this.breadcrumbs;if(t&&!t.options.floating&&t.level){let e=t.options,i=e.buttonTheme,s=(i.height||0)+2*(i.padding||0)+e.buttonSpacing,r=e.position.verticalAlign;\"bottom\"===r?(this.marginBottom=(this.marginBottom||0)+s,t.yOffset=s):\"middle\"!==r?(this.plotTop+=s,t.yOffset=-s):t.yOffset=void 0}}function f(){this.breadcrumbs&&this.breadcrumbs.redraw()}function y(t){!0===t.resetSelection&&this.breadcrumbs&&this.breadcrumbs.alignBreadcrumbsGroup()}class x{static compose(e,i){g(o,\"Breadcrumbs\")&&(l(e,\"destroy\",v),l(e,\"afterShowResetZoom\",m),l(e,\"getMargins\",b),l(e,\"redraw\",f),l(e,\"selection\",y),a(i.lang,t.lang))}constructor(t,e){this.elementList={},this.isDirty=!0,this.level=0,this.list=[];let i=p(t.options.drilldown&&t.options.drilldown.drillUpButton,x.defaultOptions,t.options.navigation&&t.options.navigation.breadcrumbs,e);this.chart=t,this.options=i||{}}updateProperties(t){this.setList(t),this.setLevel(),this.isDirty=!0}setList(t){this.list=t}setLevel(){this.level=this.list.length&&this.list.length-1}getLevel(){return this.level}getButtonText(t){let e=this.chart,i=this.options,s=e.options.lang,o=c(i.format,i.showFullPath?\"{level.name}\":\"← {level.name}\"),l=s&&c(s.drillUpText,s.mainBreadcrumb),a=i.formatter&&i.formatter(t)||r(o,{level:t.levelOptions},e)||\"\";return(d(a)&&!a.length||\"← \"===a)&&n(l)&&(a=i.showFullPath?l:\"← \"+l),a}redraw(){this.isDirty&&this.render(),this.group&&this.group.align(),this.isDirty=!1}render(){let t=this.chart,e=this.options;!this.group&&e&&(this.group=t.renderer.g(\"breadcrumbs-group\").addClass(\"highcharts-no-tooltip highcharts-breadcrumbs\").attr({zIndex:e.zIndex}).add()),e.showFullPath?this.renderFullPathButtons():this.renderSingleButton(),this.alignBreadcrumbsGroup()}renderFullPathButtons(){this.destroySingleButton(),this.resetElementListState(),this.updateListElements(),this.destroyListElements()}renderSingleButton(){let t=this.chart,e=this.list,i=this.options.buttonSpacing;this.destroyListElements();let s=this.group?this.group.getBBox().width:i,r=e[e.length-2];!t.drillUpButton&&this.level>0?t.drillUpButton=this.renderButton(r,s,i):t.drillUpButton&&(this.level>0?this.updateSingleButton():this.destroySingleButton())}alignBreadcrumbsGroup(t){if(this.group){let e=this.options,i=e.buttonTheme,s=e.position,r=\"chart\"===e.relativeTo||\"spacingBox\"===e.relativeTo?void 0:\"plotBox\",o=this.group.getBBox(),l=2*(i.padding||0)+e.buttonSpacing;s.width=o.width+l,s.height=o.height+l;let n=p(s);t&&(n.x+=t),this.options.rtl&&(n.x+=s.width),n.y=c(n.y,this.yOffset,0),this.group.align(n,!0,r)}}renderButton(t,e,i){let s=this,r=this.chart,o=s.options,l=p(o.buttonTheme),n=r.renderer.button(s.getButtonText(t),e,i,function(e){let i;let r=o.events&&o.events.click;r&&(i=r.call(s,e,t)),!1!==i&&(o.showFullPath?e.newLevel=t.level:e.newLevel=s.level-1,h(s,\"up\",e))},l).addClass(\"highcharts-breadcrumbs-button\").add(s.group);return r.styledMode||n.attr(o.style),n}renderSeparator(t,e){let i=this.chart,s=this.options.separator,r=i.renderer.label(s.text,t,e,void 0,void 0,void 0,!1).addClass(\"highcharts-breadcrumbs-separator\").add(this.group);return i.styledMode||r.css(s.style),r}update(t){p(!0,this.options,t),this.destroy(),this.isDirty=!0}updateSingleButton(){let t=this.chart,e=this.list[this.level-1];t.drillUpButton&&t.drillUpButton.attr({text:this.getButtonText(e)})}destroy(){this.destroySingleButton(),this.destroyListElements(!0),this.group&&this.group.destroy(),this.group=void 0}destroyListElements(t){let e=this.elementList;u(e,(i,s)=>{(t||!e[s].updated)&&((i=e[s]).button&&i.button.destroy(),i.separator&&i.separator.destroy(),delete i.button,delete i.separator,delete e[s])}),t&&(this.elementList={})}destroySingleButton(){this.chart.drillUpButton&&(this.chart.drillUpButton.destroy(),this.chart.drillUpButton=void 0)}resetElementListState(){u(this.elementList,t=>{t.updated=!1})}updateListElements(){let t=this.elementList,e=this.options.buttonSpacing,i=this.list,s=this.options.rtl,r=s?-1:1,o=function(t,e){return r*t.getBBox().width+r*e},l=function(t,e,i){t.translate(e-t.getBBox().width,i)},n=this.group?o(this.group,e):e,a,h;for(let d=0,p=i.length;d{t.graphic=n=n&&n.destroy(),\"function\"==typeof s&&s()};Object.keys(i).length?n.animate(i,void 0,()=>e()):e()}}}}),i(e,\"Series/Treemap/TreemapPoint.js\",[e[\"Series/DrawPointUtilities.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{pie:{prototype:{pointClass:s}},scatter:{prototype:{pointClass:r}}}=e.seriesTypes,{extend:o,isNumber:l,pick:n}=i;class a extends r{constructor(){super(...arguments),this.shapeType=\"rect\"}draw(e){t.draw(this,e)}getClassName(){let t=this.series,e=t.options,i=super.getClassName();return this.node.level<=t.nodeMap[t.rootNode].level?i+=\" highcharts-above-level\":this.node.isLeaf||n(e.interactByLeaf,!e.allowTraversingTree)?this.node.isLeaf||(i+=\" highcharts-internal-node\"):i+=\" highcharts-internal-node-interactive\",i}isValid(){return!!(this.id||l(this.value))}setState(t){super.setState.apply(this,arguments),this.graphic&&this.graphic.attr({zIndex:\"hover\"===t?1:0})}shouldDraw(){return l(this.plotY)&&null!==this.y}}return o(a.prototype,{setVisible:s.prototype.setVisible}),a}),i(e,\"Series/Treemap/TreemapSeriesDefaults.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{isString:i}=e;return{allowTraversingTree:!1,animationLimit:250,borderRadius:0,showInLegend:!1,marker:void 0,colorByPoint:!1,dataLabels:{defer:!1,enabled:!0,formatter:function(){let t=this&&this.point?this.point:{};return i(t.name)?t.name:\"\"},inside:!0,verticalAlign:\"middle\"},tooltip:{headerFormat:\"\",pointFormat:\"{point.name}: {point.value}
\"},ignoreHiddenPoint:!0,layoutAlgorithm:\"sliceAndDice\",layoutStartingDirection:\"vertical\",alternateStartingDirection:!1,levelIsConstant:!0,traverseUpButton:{position:{align:\"right\",x:-10,y:10}},borderColor:\"#e6e6e6\",borderWidth:1,colorKey:\"colorValue\",opacity:.15,states:{hover:{borderColor:\"#999999\",brightness:t.seriesTypes.heatmap?0:.1,halo:!1,opacity:.75,shadow:!1}},legendSymbol:\"rectangle\"}}),i(e,\"Series/Treemap/TreemapUtilities.js\",[],function(){var t;return(t||(t={})).recursive=function t(e,i,s){let r;!1!==(r=i.call(s||this,e))&&t(r,i,s)},t}),i(e,\"Series/TreeUtilities.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{extend:i,isArray:s,isNumber:r,isObject:o,merge:l,pick:n,relativeLength:a}=e;return{getColor:function(e,i){let s,r,o,l,a,h;let d=i.index,p=i.mapOptionsToLevel,u=i.parentColor,c=i.parentColorIndex,g=i.series,m=i.colors,v=i.siblings,b=g.points,f=g.chart.options.chart;return e&&(s=b[e.i],r=p[e.level]||{},s&&r.colorByPoint&&(l=s.index%(m?m.length:f.colorCount),o=m&&m[l]),g.chart.styledMode||(a=n(s&&s.options.color,r&&r.color,o,u&&(e=>{let i=r&&r.colorVariation;return i&&\"brightness\"===i.key&&d&&v?t.parse(e).brighten(i.to*(d/v)).get():e})(u),g.color)),h=n(s&&s.options.colorIndex,r&&r.colorIndex,l,c,i.colorIndex)),{color:a,colorIndex:h}},getLevelOptions:function(t){let e={},i,a,h,d,p,u;if(o(t))for(d=r(t.from)?t.from:1,u=t.levels,a={},i=o(t.defaults)?t.defaults:{},s(u)&&(a=u.reduce((t,e)=>{let s,a,h;return o(e)&&r(e.level)&&(a=n((h=l({},e)).levelIsConstant,i.levelIsConstant),delete h.levelIsConstant,delete h.level,o(t[s=e.level+(a?0:d-1)])?l(!0,t[s],h):t[s]=h),t},{})),p=r(t.to)?t.to:1,h=0;h<=p;h++)e[h]=l({},i,o(a[h])?a[h]:{});return e},getNodeWidth:function(t,e){let{chart:i,options:s}=t,{nodeDistance:r=0,nodeWidth:o=0}=s,{plotSizeX:l=1}=i;if(\"auto\"===o){if(\"string\"==typeof r&&/%$/.test(r))return l/(e+parseFloat(r)/100*(e-1));let t=Number(r);return(l+t)/(e||1)-t}return a(o,l)},setTreeValues:function t(e,s){let r=s.before,o=s.idRoot,l=s.mapIdToNode[o],a=!1!==s.levelIsConstant,h=s.points[e.i],d=h&&h.options||{},p=[],u=0;e.levelDynamic=e.level-(a?0:l.level),e.name=n(h&&h.name,\"\"),e.visible=o===e.id||!0===s.visible,\"function\"==typeof r&&(e=r(e,s)),e.children.forEach((r,o)=>{let l=i({},s);i(l,{index:o,siblings:e.children.length,visible:e.visible}),r=t(r,l),p.push(r),r.visible&&(u+=r.val)});let c=n(d.value,u);return e.visible=c>=0&&(u>0||e.visible),e.children=p,e.childrenTotal=u,e.isLeaf=e.visible&&!u,e.val=c,e},updateRootId:function(t){let e,i;return o(t)&&(i=o(t.options)?t.options:{},e=n(t.rootNode,i.rootId,\"\"),o(t.userOptions)&&(t.userOptions.rootId=e),t.rootNode=e),e}}}),i(e,\"Series/Treemap/TreemapSeries.js\",[e[\"Extensions/Breadcrumbs/Breadcrumbs.js\"],e[\"Core/Color/Color.js\"],e[\"Series/ColorMapComposition.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/Treemap/TreemapAlgorithmGroup.js\"],e[\"Series/Treemap/TreemapNode.js\"],e[\"Series/Treemap/TreemapPoint.js\"],e[\"Series/Treemap/TreemapSeriesDefaults.js\"],e[\"Series/Treemap/TreemapUtilities.js\"],e[\"Series/TreeUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,l,n,a,h,d,p){let{parse:u}=e,{composed:c,noop:g}=s,{column:m,scatter:v}=r.seriesTypes,{getColor:b,getLevelOptions:f,updateRootId:y}=d,{addEvent:x,correctFloat:T,defined:w,error:B,extend:S,fireEvent:C,isArray:L,isObject:P,isString:A,merge:O,pick:R,pushUnique:D,stableSort:I}=p,M=!1;function N(){let t;let e=this.xAxis,i=this.yAxis;e&&i&&(this.is(\"treemap\")?(t={endOnTick:!1,gridLineWidth:0,lineWidth:0,min:0,minPadding:0,max:100,maxPadding:0,startOnTick:!1,title:void 0,tickPositions:[]},S(i.options,t),S(e.options,t),M=!0):M&&(i.setOptions(i.userOptions),e.setOptions(e.userOptions),M=!1))}class j extends v{static compose(t){D(c,\"TreemapSeries\")&&x(t,\"afterBindAxes\",N)}algorithmCalcPoints(t,e,i,s){let r=i.plot,o=i.elArr.length-1,l,n,a,h,d=i.lW,p=i.lH,u,c=0;for(let t of(e?(d=i.nW,p=i.nH):u=i.elArr[o],i.elArr))(e||ca.lP.lR&&this.algorithmCalcPoints(t,!1,a,s,r),d===n&&this.algorithmCalcPoints(t,!0,a,s,r),++d;return s}alignDataLabel(t,e,i){let s=i.style;s&&!w(s.textOverflow)&&e.text&&e.getBBox().width>(e.text.textWidth||0)&&e.css({textOverflow:\"ellipsis\",width:s.width+=\"px\"}),m.prototype.alignDataLabel.apply(this,arguments),t.dataLabel&&t.dataLabel.attr({zIndex:(t.node.zIndex||0)+1})}calculateChildrenAreas(t,e){let i=this.options,s=this.mapOptionsToLevel[t.level+1],r=R(this[s&&s.layoutAlgorithm]&&s.layoutAlgorithm,i.layoutAlgorithm),o=i.alternateStartingDirection,l=t.children.filter(t=>!t.ignore),n=[];s&&s.layoutStartingDirection&&(e.direction=\"vertical\"===s.layoutStartingDirection?0:1),n=this[r](e,l);let a=-1;for(let t of l){let i=n[++a];t.values=O(i,{val:t.childrenTotal,direction:o?1-e.direction:e.direction}),t.pointValues=O(i,{x:i.x/this.axisRatio,y:100-i.y-i.height,width:i.width/this.axisRatio}),t.children.length&&this.calculateChildrenAreas(t,t.values)}}createList(t){let e=this.chart,i=e.breadcrumbs,s=[];if(i){let i=0;s.push({level:i,levelOptions:e.series[0]});let r=t.target.nodeMap[t.newRootId],o=[];for(;r.parent||\"\"===r.parent;)o.push(r),r=t.target.nodeMap[r.parent];for(let t of o.reverse())s.push({level:++i,levelOptions:t});s.length<=1&&(s.length=0)}return s}drawDataLabels(){let t,e;let i=this.mapOptionsToLevel;for(let s of this.points.filter(function(t){return t.node.visible}))e=i[s.node.level],t={style:{}},s.node.isLeaf||(t.enabled=!1),e&&e.dataLabels&&(t=O(t,e.dataLabels),this.hasDataLabels=()=>!0),s.shapeArgs&&(t.style.width=s.shapeArgs.width,s.dataLabel&&s.dataLabel.css({width:s.shapeArgs.width+\"px\"})),s.dlOptions=O(t,s.options.dataLabels);super.drawDataLabels()}drawPoints(t=this.points){let e=this.chart,i=e.renderer,s=e.styledMode,r=this.options,o=s?{}:r.shadow,l=r.borderRadius,n=e.pointCount{let e=t.userOptions;w(e.allowDrillToNode)&&!w(e.allowTraversingTree)&&(e.allowTraversingTree=e.allowDrillToNode,delete e.allowDrillToNode),w(e.drillUpButton)&&!w(e.traverseUpButton)&&(e.traverseUpButton=e.drillUpButton,delete e.drillUpButton)});super.init(e,i),delete s.opacity,s.eventsToUnbind.push(o),s.options.allowTraversingTree&&(s.eventsToUnbind.push(x(s,\"click\",s.onClickDrillToNode)),s.eventsToUnbind.push(x(s,\"setRootNode\",function(t){let e=s.chart;e.breadcrumbs&&e.breadcrumbs.updateProperties(s.createList(t))})),s.eventsToUnbind.push(x(s,\"update\",function(t,e){let i=this.chart.breadcrumbs;i&&t.options.breadcrumbs&&i.update(t.options.breadcrumbs)})),s.eventsToUnbind.push(x(s,\"destroy\",function(t){let e=this.chart;e.breadcrumbs&&!t.keepEventsForUpdate&&(e.breadcrumbs.destroy(),e.breadcrumbs=void 0)}))),e.breadcrumbs||(e.breadcrumbs=new t(e,r)),s.eventsToUnbind.push(x(e.breadcrumbs,\"up\",function(t){let e=this.level-t.newLevel;for(let t=0;tr?0:(t.pointAttribs(e)[\"stroke-width\"]||0)%2/2;for(let t of e){let{pointValues:e,visible:r}=t.node;if(e&&r){let{height:r,width:l,x:n,y:a}=e,h=o(t),d=Math.round(i.toPixels(n,!0))-h,p=Math.round(i.toPixels(n+l,!0))-h,u=Math.round(s.toPixels(a,!0))-h,c=Math.round(s.toPixels(a+r,!0))-h,g={x:Math.min(d,p),y:Math.min(u,c),width:Math.abs(p-d),height:Math.abs(c-u)};t.plotX=g.x+g.width/2,t.plotY=g.y+g.height/2,t.shapeArgs=g}else delete t.plotX,delete t.plotY}}setRootNode(t,e,i){C(this,\"setRootNode\",S({newRootId:t,previousRootId:this.rootNode,redraw:R(e,!0),series:this},i),function(t){let e=t.series;e.idPreviousRoot=t.previousRootId,e.rootNode=t.newRootId,e.isDirty=!0,t.redraw&&e.chart.redraw()})}setState(t){this.options.inactiveOtherPoints=!0,super.setState(t,!1),this.options.inactiveOtherPoints=!1}setTreeValues(t){let e=this.options,i=this.rootNode,s=this.nodeMap[i],r=\"boolean\"!=typeof e.levelIsConstant||e.levelIsConstant,o=[],l=this.points[t.i],n=0;for(let e of t.children)e=this.setTreeValues(e),o.push(e),e.ignore||(n+=e.val);I(o,(t,e)=>(t.sortIndex||0)-(e.sortIndex||0));let a=R(l&&l.options.value,n);return l&&(l.value=a),S(t,{children:o,childrenTotal:n,ignore:!(R(l&&l.visible,!0)&&a>0),isLeaf:t.visible&&!n,levelDynamic:t.level-(r?0:s.level),name:R(l&&l.name,\"\"),sortIndex:R(l&&l.sortIndex,-a),val:a}),t}sliceAndDice(t,e){return this.algorithmFill(!0,t,e)}squarified(t,e){return this.algorithmLowAspectRatio(!0,t,e)}strip(t,e){return this.algorithmLowAspectRatio(!1,t,e)}stripes(t,e){return this.algorithmFill(!1,t,e)}translate(){let t=this,e=t.options,i=y(t),s,r,o,l;super.translate();let n=t.tree=t.getTree();s=t.nodeMap[i],\"\"===i||s&&s.children.length||(t.setRootNode(\"\",!1),i=t.rootNode,s=t.nodeMap[i]),t.mapOptionsToLevel=f({from:s.level+1,levels:e.levels,to:n.height,defaults:{levelIsConstant:t.options.levelIsConstant,colorByPoint:e.colorByPoint}}),h.recursive(t.nodeMap[t.rootNode],e=>{let i=e.parent,s=!1;return e.visible=!0,(i||\"\"===i)&&(s=t.nodeMap[i]),s}),h.recursive(t.nodeMap[t.rootNode].children,t=>{let e=!1;for(let i of t)i.visible=!0,i.children.length&&(e=(e||[]).concat(i.children));return e}),t.setTreeValues(n),t.axisRatio=t.xAxis.len/t.yAxis.len,t.nodeMap[\"\"].pointValues=r={x:0,y:0,width:100,height:100},t.nodeMap[\"\"].values=o=O(r,{width:r.width*t.axisRatio,direction:\"vertical\"===e.layoutStartingDirection?0:1,val:n.val}),t.calculateChildrenAreas(n,o),t.colorAxis||e.colorByPoint||t.setColorRecursive(t.tree),e.allowTraversingTree&&(l=s.pointValues,t.xAxis.setExtremes(l.x,l.x+l.width,!1),t.yAxis.setExtremes(l.y,l.y+l.height,!1),t.xAxis.setScale(),t.yAxis.setScale()),t.setPointValues()}}return j.defaultOptions=O(v.defaultOptions,a),S(j.prototype,{buildKDTree:g,colorAttribs:i.seriesMembers.colorAttribs,colorKey:\"colorValue\",directTouch:!0,getExtremesFromAll:!0,getSymbol:g,optionalAxis:\"colorAxis\",parallelArrays:[\"x\",\"y\",\"value\",\"colorValue\"],pointArrayMap:[\"value\"],pointClass:n,NodeClass:l,trackerGroups:[\"group\",\"dataLabelsGroup\"],utils:h}),i.compose(j),r.registerSeriesType(\"treemap\",j),j}),i(e,\"masters/modules/treemap.src.js\",[e[\"Core/Globals.js\"],e[\"Extensions/Breadcrumbs/Breadcrumbs.js\"],e[\"Series/Treemap/TreemapSeries.js\"]],function(t,e,i){return t.Breadcrumbs=t.Breadcrumbs||e,t.Breadcrumbs.compose(t.Chart,t.defaultOptions),i.compose(t.Series),t})});","!/**\n * Highcharts JS v11.4.0 (2024-03-04)\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */function(t,e){\"object\"==typeof module&&module.exports?(e.default=e,module.exports=t&&t.document?e(t):e):\"function\"==typeof define&&define.amd?define(\"highcharts/highcharts\",function(){return e(t)}):(t.Highcharts&&t.Highcharts.error(16,!0),t.Highcharts=e(t))}(\"undefined\"!=typeof window?window:this,function(t){\"use strict\";var e={};function i(e,i,s,r){e.hasOwnProperty(i)||(e[i]=r.apply(null,s),\"function\"==typeof CustomEvent&&t.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\",{detail:{path:i,module:e[i]}})))}return i(e,\"Core/Globals.js\",[],function(){var e,i;return(i=e||(e={})).SVG_NS=\"http://www.w3.org/2000/svg\",i.product=\"Highcharts\",i.version=\"11.4.0\",i.win=void 0!==t?t:{},i.doc=i.win.document,i.svg=i.doc&&i.doc.createElementNS&&!!i.doc.createElementNS(i.SVG_NS,\"svg\").createSVGRect,i.userAgent=i.win.navigator&&i.win.navigator.userAgent||\"\",i.isChrome=-1!==i.userAgent.indexOf(\"Chrome\"),i.isFirefox=-1!==i.userAgent.indexOf(\"Firefox\"),i.isMS=/(edge|msie|trident)/i.test(i.userAgent)&&!i.win.opera,i.isSafari=!i.isChrome&&-1!==i.userAgent.indexOf(\"Safari\"),i.isTouchDevice=/(Mobile|Android|Windows Phone)/.test(i.userAgent),i.isWebKit=-1!==i.userAgent.indexOf(\"AppleWebKit\"),i.deg2rad=2*Math.PI/360,i.hasBidiBug=i.isFirefox&&4>parseInt(i.userAgent.split(\"Firefox/\")[1],10),i.marginNames=[\"plotTop\",\"marginRight\",\"marginBottom\",\"plotLeft\"],i.noop=function(){},i.supportsPassiveEvents=function(){let t=!1;if(!i.isMS){let e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});i.win.addEventListener&&i.win.removeEventListener&&(i.win.addEventListener(\"testPassive\",i.noop,e),i.win.removeEventListener(\"testPassive\",i.noop,e))}return t}(),i.charts=[],i.composed=[],i.dateFormats={},i.seriesTypes={},i.symbolSizes={},i.chartCount=0,e}),i(e,\"Core/Utilities.js\",[e[\"Core/Globals.js\"]],function(t){let e;let{charts:i,doc:s,win:r}=t;function o(e,i,s,a){let n=i?\"Highcharts error\":\"Highcharts warning\";32===e&&(e=`${n}: Deprecated member`);let h=p(e),l=h?`${n} #${e}: www.highcharts.com/errors/${e}/`:e.toString();if(void 0!==a){let t=\"\";h&&(l+=\"?\"),k(a,function(e,i){t+=`\n - ${i}: ${e}`,h&&(l+=encodeURI(i)+\"=\"+encodeURI(e))}),l+=t}M(t,\"displayError\",{chart:s,code:e,message:l,params:a},function(){if(i)throw Error(l);r.console&&-1===o.messages.indexOf(l)&&console.warn(l)}),o.messages.push(l)}function a(t,e){return parseInt(t,e||10)}function n(t){return\"string\"==typeof t}function h(t){let e=Object.prototype.toString.call(t);return\"[object Array]\"===e||\"[object Array Iterator]\"===e}function l(t,e){return!!t&&\"object\"==typeof t&&(!e||!h(t))}function d(t){return l(t)&&\"number\"==typeof t.nodeType}function c(t){let e=t&&t.constructor;return!!(l(t,!0)&&!d(t)&&e&&e.name&&\"Object\"!==e.name)}function p(t){return\"number\"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function u(t){return null!=t}function g(t,e,i){let s;let r=n(e)&&!u(i),o=(e,i)=>{u(e)?t.setAttribute(i,e):r?(s=t.getAttribute(i))||\"class\"!==i||(s=t.getAttribute(i+\"Name\")):t.removeAttribute(i)};return n(e)?o(i,e):k(e,o),s}function f(t){return h(t)?t:[t]}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function x(){let t=arguments,e=t.length;for(let i=0;i1e14?t:parseFloat(t.toPrecision(e||14))}(o||(o={})).messages=[],Math.easeInOutSine=function(t){return -.5*(Math.cos(Math.PI*t)-1)};let S=Array.prototype.find?function(t,e){return t.find(e)}:function(t,e){let i;let s=t.length;for(i=0;it.order-e.order),t.forEach(t=>{!1===t.fn.call(e,r)&&r.preventDefault()})}o&&!r.defaultPrevented&&o.call(e,r)}k({map:\"map\",each:\"forEach\",grep:\"filter\",reduce:\"reduce\",some:\"some\"},function(e,i){t[i]=function(t){return o(32,!1,void 0,{[`Highcharts.${i}`]:`use Array.${e}`}),Array.prototype[e].apply(t,[].slice.call(arguments,1))}});let w=function(){let t=Math.random().toString(36).substring(2,9)+\"-\",i=0;return function(){return\"highcharts-\"+(e?\"\":t)+i++}}();return r.jQuery&&(r.jQuery.fn.highcharts=function(){let e=[].slice.call(arguments);if(this[0])return e[0]?(new t[n(e[0])?e.shift():\"Chart\"](this[0],e[0],e[1]),this):i[g(this[0],\"data-highcharts-chart\")]}),{addEvent:function(e,i,s,r={}){let o=\"function\"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(o,\"hcEvents\")||(o.hcEvents={});let a=o.hcEvents;t.Point&&e instanceof t.Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let n=e.addEventListener;n&&n.call(e,i,s,!!t.supportsPassiveEvents&&{passive:void 0===r.passive?-1!==i.indexOf(\"touch\"):r.passive,capture:!1}),a[i]||(a[i]=[]);let h={fn:s,order:\"number\"==typeof r.order?r.order:1/0};return a[i].push(h),a[i].sort((t,e)=>t.order-e.order),function(){C(e,i,s)}},arrayMax:function(t){let e=t.length,i=t[0];for(;e--;)t[e]>i&&(i=t[e]);return i},arrayMin:function(t){let e=t.length,i=t[0];for(;e--;)t[e]e?t-1&&r[d]){i=f(i),o[d]=[];for(let e=0;e{if(t.length>1)for(o=s=t.length-1;o>0;o--)(r=t[o]-t[o-1])<0&&!a?(e?.(),e=void 0):r&&(void 0===i||r=i-1&&(i=Math.floor(s)),Math.max(0,i-(t(e,\"padding-left\",!0)||0)-(t(e,\"padding-right\",!0)||0))}if(\"height\"===i)return Math.max(0,Math.min(e.offsetHeight,e.scrollHeight)-(t(e,\"padding-top\",!0)||0)-(t(e,\"padding-bottom\",!0)||0));let n=r.getComputedStyle(e,void 0);return n&&(o=n.getPropertyValue(i),x(s,\"opacity\"!==i)&&(o=a(o))),o},inArray:function(t,e,i){return o(32,!1,void 0,{\"Highcharts.inArray\":\"use Array.indexOf\"}),e.indexOf(t,i)},insertItem:function(t,e){let i;let s=t.options.index,r=e.length;for(i=t.options.isInternal?r:0;i=t))&&(r||!(n<=(e[o]+(e[o+1]||e[o]))/2)));o++);return v(a*i,-Math.round(Math.log(.001)/Math.LN10))},objectEach:k,offset:function(t){let e=s.documentElement,i=t.parentElement||t.parentNode?t.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:i.top+(r.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(r.pageXOffset||e.scrollLeft)-(e.clientLeft||0),width:i.width,height:i.height}},pad:function(t,e,i){return Array((e||2)+1-String(t).replace(\"-\",\"\").length).join(i||\"0\")+t},pick:x,pInt:a,pushUnique:function(t,e){return 0>t.indexOf(e)&&!!t.push(e)},relativeLength:function(t,e,i){return/%$/.test(t)?e*parseFloat(t)/100+(i||0):parseFloat(t)},removeEvent:C,replaceNested:function(t,...e){let i,s;do for(s of(i=t,e))t=t.replace(s[0],s[1]);while(t!==i);return t},splat:f,stableSort:function(t,e){let i,s;let r=t.length;for(s=0;s0?setTimeout(t,e,i):(t.call(0,i),-1)},timeUnits:{millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5,month:24192e5,year:314496e5},uniqueKey:w,useSerialIds:function(t){return e=x(t,e)},wrap:function(t,e,i){let s=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return s.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}}}),i(e,\"Core/Chart/ChartDefaults.js\",[],function(){return{alignThresholds:!1,panning:{enabled:!1,type:\"x\"},styledMode:!1,borderRadius:0,colorCount:10,allowMutatingData:!0,ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{},position:{}},reflow:!0,type:\"line\",zooming:{singleTouch:!1,resetButton:{theme:{zIndex:6},position:{align:\"right\",x:-10,y:10}}},width:null,height:null,borderColor:\"#334eff\",backgroundColor:\"#ffffff\",plotBorderColor:\"#cccccc\"}}),i(e,\"Core/Color/Palettes.js\",[],function(){return{colors:[\"#2caffe\",\"#544fc5\",\"#00e272\",\"#fe6a35\",\"#6b8abc\",\"#d568fb\",\"#2ee0ca\",\"#fa4b42\",\"#feb56a\",\"#91e8e1\"]}}),i(e,\"Core/Time.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{win:i}=t,{defined:s,error:r,extend:o,isNumber:a,isObject:n,merge:h,objectEach:l,pad:d,pick:c,splat:p,timeUnits:u}=e,g=t.isSafari&&i.Intl&&i.Intl.DateTimeFormat.prototype.formatRange,f=t.isSafari&&i.Intl&&!i.Intl.DateTimeFormat.prototype.formatRange;class m{constructor(t){this.options={},this.useUTC=!1,this.variableTimezone=!1,this.Date=i.Date,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.update(t)}get(t,e){if(this.variableTimezone||this.timezoneOffset){let i=e.getTime(),s=i-this.getTimezoneOffset(e);e.setTime(s);let r=e[\"getUTC\"+t]();return e.setTime(i),r}return this.useUTC?e[\"getUTC\"+t]():e[\"get\"+t]()}set(t,e,i){if(this.variableTimezone||this.timezoneOffset){if(\"Milliseconds\"===t||\"Seconds\"===t||\"Minutes\"===t&&this.getTimezoneOffset(e)%36e5==0)return e[\"setUTC\"+t](i);let s=this.getTimezoneOffset(e),r=e.getTime()-s;e.setTime(r),e[\"setUTC\"+t](i);let o=this.getTimezoneOffset(e);return r=e.getTime()+o,e.setTime(r)}return this.useUTC||g&&\"FullYear\"===t?e[\"setUTC\"+t](i):e[\"set\"+t](i)}update(t={}){let e=c(t.useUTC,!0);this.options=t=h(!0,this.options,t),this.Date=t.Date||i.Date||Date,this.useUTC=e,this.timezoneOffset=e&&t.timezoneOffset||void 0,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.variableTimezone=e&&!!(t.getTimezoneOffset||t.timezone)}makeTime(t,e,i,s,r,o){let a,n,h;return this.useUTC?(a=this.Date.UTC.apply(0,arguments),n=this.getTimezoneOffset(a),a+=n,n!==(h=this.getTimezoneOffset(a))?a+=h-n:n-36e5!==this.getTimezoneOffset(a-36e5)||f||(a-=36e5)):a=new this.Date(t,e,c(i,1),c(s,0),c(r,0),c(o,0)).getTime(),a}timezoneOffsetFunction(){let t=this,e=this.options,i=e.getTimezoneOffset;return this.useUTC?e.timezone?t=>{try{let i=`shortOffset,${e.timezone||\"\"}`,[s,r,o,n,h=0]=(m.formatCache[i]=m.formatCache[i]||Intl.DateTimeFormat(\"en\",{timeZone:e.timezone,timeZoneName:\"shortOffset\"})).format(t).split(/(GMT|:)/).map(Number),l=-(36e5*(o+h/60));if(a(l))return l}catch(t){r(34)}return 0}:this.useUTC&&i?t=>6e4*i(t.valueOf()):()=>6e4*(t.timezoneOffset||0):t=>6e4*new Date(t.toString()).getTimezoneOffset()}dateFormat(e,i,r){if(!s(i)||isNaN(i))return t.defaultOptions.lang&&t.defaultOptions.lang.invalidDate||\"\";e=c(e,\"%Y-%m-%d %H:%M:%S\");let a=this,n=new this.Date(i),h=this.get(\"Hours\",n),p=this.get(\"Day\",n),u=this.get(\"Date\",n),g=this.get(\"Month\",n),f=this.get(\"FullYear\",n),m=t.defaultOptions.lang,x=m&&m.weekdays,y=m&&m.shortWeekdays;return l(o({a:y?y[p]:x[p].substr(0,3),A:x[p],d:d(u),e:d(u,2,\" \"),w:p,b:m.shortMonths[g],B:m.months[g],m:d(g+1),o:g+1,y:f.toString().substr(2,2),Y:f,H:d(h),k:h,I:d(h%12||12),l:h%12||12,M:d(this.get(\"Minutes\",n)),p:h<12?\"AM\":\"PM\",P:h<12?\"am\":\"pm\",S:d(this.get(\"Seconds\",n)),L:d(Math.floor(i%1e3),3)},t.dateFormats),function(t,s){for(;-1!==e.indexOf(\"%\"+s);)e=e.replace(\"%\"+s,\"function\"==typeof t?t.call(a,i):t)}),r?e.substr(0,1).toUpperCase()+e.substr(1):e}resolveDTLFormat(t){return n(t,!0)?t:{main:(t=p(t))[0],from:t[1],to:t[2]}}getTimeTicks(t,e,i,r){let a,n,h,l;let d=this,p=d.Date,g=[],f={},m=new p(e),x=t.unitRange,y=t.count||1;if(r=c(r,1),s(e)){d.set(\"Milliseconds\",m,x>=u.second?0:y*Math.floor(d.get(\"Milliseconds\",m)/y)),x>=u.second&&d.set(\"Seconds\",m,x>=u.minute?0:y*Math.floor(d.get(\"Seconds\",m)/y)),x>=u.minute&&d.set(\"Minutes\",m,x>=u.hour?0:y*Math.floor(d.get(\"Minutes\",m)/y)),x>=u.hour&&d.set(\"Hours\",m,x>=u.day?0:y*Math.floor(d.get(\"Hours\",m)/y)),x>=u.day&&d.set(\"Date\",m,x>=u.month?1:Math.max(1,y*Math.floor(d.get(\"Date\",m)/y))),x>=u.month&&(d.set(\"Month\",m,x>=u.year?0:y*Math.floor(d.get(\"Month\",m)/y)),n=d.get(\"FullYear\",m)),x>=u.year&&(n-=n%y,d.set(\"FullYear\",m,n)),x===u.week&&(l=d.get(\"Day\",m),d.set(\"Date\",m,d.get(\"Date\",m)-l+r+(l4*u.month||d.getTimezoneOffset(e)!==d.getTimezoneOffset(i));let p=m.getTime();for(a=1;p1?p=d.makeTime(n,t,o,c+a*y):p+=x*y,a++;g.push(p),x<=u.hour&&g.length<1e4&&g.forEach(function(t){t%18e5==0&&\"000000000\"===d.dateFormat(\"%H%M%S%L\",t)&&(f[t]=\"day\")})}return g.info=o(t,{higherRanks:f,totalRange:x*y}),g}getDateFormat(t,e,i,s){let r=this.dateFormat(\"%m-%d %H:%M:%S.%L\",e),o=\"01-01 00:00:00.000\",a={millisecond:15,second:12,minute:9,hour:6,day:3},n=\"millisecond\",h=n;for(n in u){if(t===u.week&&+this.dateFormat(\"%w\",e)===i&&r.substr(6)===o.substr(6)){n=\"week\";break}if(u[n]>t){n=h;break}if(a[n]&&r.substr(a[n])!==o.substr(a[n]))break;\"week\"!==n&&(h=n)}return this.resolveDTLFormat(s[n]).main}}return m.formatCache={},m}),i(e,\"Core/Defaults.js\",[e[\"Core/Chart/ChartDefaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palettes.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r){let{isTouchDevice:o,svg:a}=e,{merge:n}=r,h={colors:i.colors,symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],weekdays:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],decimalPoint:\".\",numericSymbols:[\"k\",\"M\",\"G\",\"T\",\"P\",\"E\"],resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\" \"},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:t,title:{style:{color:\"#333333\",fontWeight:\"bold\"},text:\"Chart title\",align:\"center\",margin:15,widthAdjust:-44},subtitle:{style:{color:\"#666666\",fontSize:\"0.8em\"},text:\"\",align:\"center\",widthAdjust:-44},caption:{margin:15,style:{color:\"#666666\",fontSize:\"0.8em\"},text:\"\",align:\"left\",verticalAlign:\"bottom\"},plotOptions:{},legend:{enabled:!0,align:\"center\",alignColumns:!0,className:\"highcharts-no-tooltip\",layout:\"horizontal\",itemMarginBottom:2,itemMarginTop:2,labelFormatter:function(){return this.name},borderColor:\"#999999\",borderRadius:0,navigation:{style:{fontSize:\"0.8em\"},activeColor:\"#0022ff\",inactiveColor:\"#cccccc\"},itemStyle:{color:\"#333333\",cursor:\"pointer\",fontSize:\"0.8em\",textDecoration:\"none\",textOverflow:\"ellipsis\"},itemHoverStyle:{color:\"#000000\"},itemHiddenStyle:{color:\"#666666\",textDecoration:\"line-through\"},shadow:!1,itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},squareSymbol:!0,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontSize:\"0.8em\",fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"45%\"},style:{position:\"absolute\",backgroundColor:\"#ffffff\",opacity:.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:a,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %e %b, %H:%M:%S.%L\",second:\"%A, %e %b, %H:%M:%S\",minute:\"%A, %e %b, %H:%M\",hour:\"%A, %e %b, %H:%M\",day:\"%A, %e %b %Y\",week:\"Week from %A, %e %b %Y\",month:\"%B %Y\",year:\"%Y\"},footerFormat:\"\",headerShape:\"callout\",hideDelay:500,padding:8,shape:\"callout\",shared:!1,snap:o?25:10,headerFormat:'{point.key}
',pointFormat:' {series.name}: {point.y}
',backgroundColor:\"#ffffff\",borderWidth:void 0,shadow:!0,stickOnContact:!1,style:{color:\"#333333\",cursor:\"default\",fontSize:\"0.8em\"},useHTML:!1},credits:{enabled:!0,href:\"https://www.highcharts.com?credits\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#999999\",fontSize:\"0.6em\"},text:\"Highcharts.com\"}};h.chart.styledMode=!1;let l=new s(h.time);return{defaultOptions:h,defaultTime:l,getOptions:function(){return h},setOptions:function(t){return n(!0,h,t),(t.time||t.global)&&(e.time?e.time.update(n(h.global,h.time,t.global,t.time)):e.time=l),h}}}),i(e,\"Core/Color/Color.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{isNumber:i,merge:s,pInt:r}=e;class o{static parse(t){return t?new o(t):o.None}constructor(e){let i,s,r,a;this.rgba=[NaN,NaN,NaN,NaN],this.input=e;let n=t.Color;if(n&&n!==o)return new n(e);if(\"object\"==typeof e&&void 0!==e.stops)this.stops=e.stops.map(t=>new o(t[1]));else if(\"string\"==typeof e){if(this.input=e=o.names[e.toLowerCase()]||e,\"#\"===e.charAt(0)){let t=e.length,i=parseInt(e.substr(1),16);7===t?s=[(16711680&i)>>16,(65280&i)>>8,255&i,1]:4===t&&(s=[(3840&i)>>4|(3840&i)>>8,(240&i)>>4|240&i,(15&i)<<4|15&i,1])}if(!s)for(r=o.parsers.length;r--&&!s;)(i=(a=o.parsers[r]).regex.exec(e))&&(s=a.parse(i))}s&&(this.rgba=s)}get(t){let e=this.input,r=this.rgba;if(\"object\"==typeof e&&void 0!==this.stops){let i=s(e);return i.stops=[].slice.call(i.stops),this.stops.forEach((e,s)=>{i.stops[s]=[i.stops[s][0],e.get(t)]}),i}return r&&i(r[0])?\"rgb\"!==t&&(t||1!==r[3])?\"a\"===t?`${r[3]}`:\"rgba(\"+r.join(\",\")+\")\":\"rgb(\"+r[0]+\",\"+r[1]+\",\"+r[2]+\")\":e}brighten(t){let e=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(t)});else if(i(t)&&0!==t)for(let i=0;i<3;i++)e[i]+=r(255*t),e[i]<0&&(e[i]=0),e[i]>255&&(e[i]=255);return this}setOpacity(t){return this.rgba[3]=t,this}tweenTo(t,e){let s=this.rgba,r=t.rgba;if(!i(s[0])||!i(r[0]))return t.input||\"none\";let o=1!==r[3]||1!==s[3];return(o?\"rgba(\":\"rgb(\")+Math.round(r[0]+(s[0]-r[0])*(1-e))+\",\"+Math.round(r[1]+(s[1]-r[1])*(1-e))+\",\"+Math.round(r[2]+(s[2]-r[2])*(1-e))+(o?\",\"+(r[3]+(s[3]-r[3])*(1-e)):\"\")+\")\"}}return o.names={white:\"#ffffff\",black:\"#000000\"},o.parsers=[{regex:/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),parseFloat(t[4],10)]}},{regex:/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),1]}}],o.None=new o(\"\"),o}),i(e,\"Core/Animation/Fx.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{parse:s}=t,{win:r}=e,{isNumber:o,objectEach:a}=i;class n{constructor(t,e,i){this.pos=NaN,this.options=e,this.elem=t,this.prop=i}dSetter(){let t=this.paths,e=t&&t[0],i=t&&t[1],s=this.now||0,r=[];if(1!==s&&e&&i){if(e.length===i.length&&s<1)for(let t=0;t=h+this.startTime?(this.now=this.end,this.pos=1,this.update(),l[this.prop]=!0,i=!0,a(l,function(t){!0!==t&&(i=!1)}),i&&n&&n.call(o),e=!1):(this.pos=r.easing((s-this.startTime)/h),this.now=this.start+(this.end-this.start)*this.pos,this.update(),e=!0),e}initPath(t,e,i){let s=t.startX,r=t.endX,a=i.slice(),n=t.isArea,h=n?2:1,l,d,c,p,u=e&&e.slice();if(!u)return[a,a];function g(t,e){for(;t.length{let s=d(t.options.animation);n=a(e)&&i(e.defer)?r.defer:Math.max(n,s.duration+s.defer),h=Math.min(r.duration,s.duration)}),t.renderer.forExport&&(n=0),{defer:Math.max(0,n-h),duration:Math.min(n,h)}},setAnimation:function(t,e){e.renderer.globalAnimation=l(t,e.options.chart.animation,!0)},stop:c}}),i(e,\"Core/Renderer/HTML/AST.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{SVG_NS:i,win:s}=t,{attr:r,createElement:o,css:a,error:n,isFunction:h,isString:l,objectEach:d,splat:c}=e,{trustedTypes:p}=s,u=p&&h(p.createPolicy)&&p.createPolicy(\"highcharts\",{createHTML:t=>t}),g=u?u.createHTML(\"\"):\"\",f=function(){try{return!!new DOMParser().parseFromString(g,\"text/html\")}catch(t){return!1}}();class m{static filterUserAttributes(t){return d(t,(e,i)=>{let s=!0;-1===m.allowedAttributes.indexOf(i)&&(s=!1),-1!==[\"background\",\"dynsrc\",\"href\",\"lowsrc\",\"src\"].indexOf(i)&&(s=l(e)&&m.allowedReferences.some(t=>0===e.indexOf(t))),s||(n(33,!1,void 0,{\"Invalid attribute in config\":`${i}`}),delete t[i]),l(e)&&t[i]&&(t[i]=e.replace(/{let i=e.split(\":\").map(t=>t.trim()),s=i.shift();return s&&i.length&&(t[s.replace(/-([a-z])/g,t=>t[1].toUpperCase())]=i.join(\":\")),t},{})}static setElementHTML(t,e){t.innerHTML=m.emptyHTML,e&&new m(e).addToDOM(t)}constructor(t){this.nodes=\"string\"==typeof t?this.parseMarkup(t):t}addToDOM(e){return function e(s,o){let h;return c(s).forEach(function(s){let l;let c=s.tagName,p=s.textContent?t.doc.createTextNode(s.textContent):void 0,u=m.bypassHTMLFiltering;if(c){if(\"#text\"===c)l=p;else if(-1!==m.allowedTags.indexOf(c)||u){let n=\"svg\"===c?i:o.namespaceURI||i,h=t.doc.createElementNS(n,c),g=s.attributes||{};d(s,function(t,e){\"tagName\"!==e&&\"attributes\"!==e&&\"children\"!==e&&\"style\"!==e&&\"textContent\"!==e&&(g[e]=t)}),r(h,u?g:m.filterUserAttributes(g)),s.style&&a(h,s.style),p&&h.appendChild(p),e(s.children||[],h),l=h}else n(33,!1,void 0,{\"Invalid tagName in config\":c})}l&&o.appendChild(l),h=l}),h}(this.nodes,e)}parseMarkup(t){let e;let i=[];if(t=t.trim().replace(/ style=([\"'])/g,\" data-style=$1\"),f)e=new DOMParser().parseFromString(u?u.createHTML(t):t,\"text/html\");else{let i=o(\"div\");i.innerHTML=t,e={body:i}}let s=(t,e)=>{let i=t.nodeName.toLowerCase(),r={tagName:i};\"#text\"===i&&(r.textContent=t.textContent||\"\");let o=t.attributes;if(o){let t={};[].forEach.call(o,e=>{\"data-style\"===e.name?r.style=m.parseStyle(e.value):t[e.name]=e.value}),r.attributes=t}if(t.childNodes.length){let e=[];[].forEach.call(t.childNodes,t=>{s(t,e)}),e.length&&(r.children=e)}e.push(r)};return[].forEach.call(e.body.childNodes,t=>s(t,i)),i}}return m.allowedAttributes=[\"alt\",\"aria-controls\",\"aria-describedby\",\"aria-expanded\",\"aria-haspopup\",\"aria-hidden\",\"aria-label\",\"aria-labelledby\",\"aria-live\",\"aria-pressed\",\"aria-readonly\",\"aria-roledescription\",\"aria-selected\",\"class\",\"clip-path\",\"color\",\"colspan\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"disabled\",\"fill\",\"filterUnits\",\"flood-color\",\"flood-opacity\",\"height\",\"href\",\"id\",\"in\",\"markerHeight\",\"markerWidth\",\"offset\",\"opacity\",\"orient\",\"padding\",\"paddingLeft\",\"paddingRight\",\"patternUnits\",\"r\",\"refX\",\"refY\",\"role\",\"scope\",\"slope\",\"src\",\"startOffset\",\"stdDeviation\",\"stroke\",\"stroke-linecap\",\"stroke-width\",\"style\",\"tableValues\",\"result\",\"rowspan\",\"summary\",\"target\",\"tabindex\",\"text-align\",\"text-anchor\",\"textAnchor\",\"textLength\",\"title\",\"type\",\"valign\",\"width\",\"x\",\"x1\",\"x2\",\"xlink:href\",\"y\",\"y1\",\"y2\",\"zIndex\"],m.allowedReferences=[\"https://\",\"http://\",\"mailto:\",\"/\",\"../\",\"./\",\"#\"],m.allowedTags=[\"a\",\"abbr\",\"b\",\"br\",\"button\",\"caption\",\"circle\",\"clipPath\",\"code\",\"dd\",\"defs\",\"div\",\"dl\",\"dt\",\"em\",\"feComponentTransfer\",\"feDropShadow\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feOffset\",\"feMerge\",\"feMergeNode\",\"filter\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"i\",\"img\",\"li\",\"linearGradient\",\"marker\",\"ol\",\"p\",\"path\",\"pattern\",\"pre\",\"rect\",\"small\",\"span\",\"stop\",\"strong\",\"style\",\"sub\",\"sup\",\"svg\",\"table\",\"text\",\"textPath\",\"thead\",\"title\",\"tbody\",\"tspan\",\"td\",\"th\",\"tr\",\"u\",\"ul\",\"#text\"],m.emptyHTML=g,m.bypassHTMLFiltering=!1,m}),i(e,\"Core/Templating.js\",[e[\"Core/Defaults.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{defaultOptions:i,defaultTime:s}=t,{extend:r,getNestedProperty:o,isArray:a,isNumber:n,isObject:h,pick:l,pInt:d}=e,c={add:(t,e)=>t+e,divide:(t,e)=>0!==e?t/e:\"\",eq:(t,e)=>t==e,each:function(t){let e=arguments[arguments.length-1];return!!a(t)&&t.map((i,s)=>p(e.body,r(h(i)?i:{\"@this\":i},{\"@index\":s,\"@first\":0===s,\"@last\":s===t.length-1}))).join(\"\")},ge:(t,e)=>t>=e,gt:(t,e)=>t>e,if:t=>!!t,le:(t,e)=>t<=e,lt:(t,e)=>tt*e,ne:(t,e)=>t!=e,subtract:(t,e)=>t-e,unless:t=>!t};function p(t=\"\",e,r){let a=/\\{([a-zA-Z0-9\\:\\.\\,;\\-\\/<>%_@\"'= #\\(\\)]+)\\}/g,n=/\\(([a-zA-Z0-9\\:\\.\\,;\\-\\/<>%_@\"'= ]+)\\)/g,h=[],d=/f$/,g=/\\.([0-9])/,f=i.lang,m=r&&r.time||s,x=r&&r.numberFormatter||u,y=(t=\"\")=>{let i;return\"true\"===t||\"false\"!==t&&((i=Number(t)).toString()===t?i:o(t,e))},b,v,S=0,k;for(;null!==(b=a.exec(t));){let i=n.exec(b[1]);i&&(b=i,k=!0),v&&v.isBlock||(v={ctx:e,expression:b[1],find:b[0],isBlock:\"#\"===b[1].charAt(0),start:b.index,startInner:b.index+b[0].length,length:b[0].length});let s=b[1].split(\" \")[0].replace(\"#\",\"\");c[s]&&(v.isBlock&&s===v.fn&&S++,v.fn||(v.fn=s));let r=\"else\"===b[1];if(v.isBlock&&v.fn&&(b[1]===`/${v.fn}`||r)){if(S)!r&&S--;else{let e=v.startInner,i=t.substr(e,b.index-e);void 0===v.body?(v.body=i,v.startInner=b.index+b[0].length):v.elseBody=i,v.find+=i+b[0],r||(h.push(v),v=void 0)}}else v.isBlock||h.push(v);if(i&&!v?.isBlock)break}return h.forEach(i=>{let s,r;let{body:o,elseBody:a,expression:n,fn:h}=i;if(h){let t=[i],l=n.split(\" \");for(r=c[h].length;r--;)t.unshift(y(l[r+1]));s=c[h].apply(e,t),i.isBlock&&\"boolean\"==typeof s&&(s=p(s?o:a,e))}else{let t=n.split(\":\");if(s=y(t.shift()||\"\"),t.length&&\"number\"==typeof s){let e=t.join(\":\");if(d.test(e)){let t=parseInt((e.match(g)||[\"\",\"-1\"])[1],10);null!==s&&(s=x(s,t,f.decimalPoint,e.indexOf(\",\")>-1?f.thousandsSep:\"\"))}else s=m.dateFormat(e,s)}}t=t.replace(i.find,l(s,\"\"))}),k?p(t,e,r):t}function u(t,e,s,r){let o,a;t=+t||0,e=+e;let h=i.lang,c=(t.toString().split(\".\")[1]||\"\").split(\"e\")[0].length,p=t.toString().split(\"e\"),u=e;-1===e?e=Math.min(c,20):n(e)?e&&p[1]&&p[1]<0&&((a=e+ +p[1])>=0?(p[0]=(+p[0]).toExponential(a).split(\"e\")[0],e=a):(p[0]=p[0].split(\".\")[0]||0,t=e<20?(p[0]*Math.pow(10,p[1])).toFixed(e):0,p[1]=0)):e=2;let g=(Math.abs(p[1]?p[0]:t)+Math.pow(10,-Math.max(e,c)-1)).toFixed(e),f=String(d(g)),m=f.length>3?f.length%3:0;return s=l(s,h.decimalPoint),r=l(r,h.thousandsSep),o=(t<0?\"-\":\"\")+(m?f.substr(0,m)+r:\"\"),0>+p[1]&&!u?o=\"0\":o+=f.substr(m).replace(/(\\d{3})(?=\\d)/g,\"$1\"+r),e&&(o+=s+g.slice(-e)),p[1]&&0!=+o&&(o+=\"e\"+p[1]),o}return{dateFormat:function(t,e,i){return s.dateFormat(t,e,i)},format:p,helpers:c,numberFormat:u}}),i(e,\"Core/Renderer/RendererRegistry.js\",[e[\"Core/Globals.js\"]],function(t){var e,i;let s;return(i=e||(e={})).rendererTypes={},i.getRendererType=function(t=s){return i.rendererTypes[t]||i.rendererTypes[s]},i.registerRendererType=function(e,r,o){i.rendererTypes[e]=r,(!s||o)&&(s=e,t.Renderer=r)},e}),i(e,\"Core/Renderer/RendererUtilities.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{clamp:i,pick:s,pushUnique:r,stableSort:o}=t;return(e||(e={})).distribute=function t(e,a,n){let h=e,l=h.reducedLen||a,d=(t,e)=>t.target-e.target,c=[],p=e.length,u=[],g=c.push,f,m,x,y=!0,b,v,S=0,k;for(f=p;f--;)S+=e[f].size;if(S>l){for(o(e,(t,e)=>(e.rank||0)-(t.rank||0)),x=(k=e[0].rank===e[e.length-1].rank)?p/2:-1,m=k?x:p-1;x&&S>l;)b=e[f=Math.floor(m)],r(u,f)&&(S-=b.size),m+=x,k&&m>=e.length&&(x/=2,m=x);u.sort((t,e)=>e-t).forEach(t=>g.apply(c,e.splice(t,1)))}for(o(e,d),e=e.map(t=>({size:t.size,targets:[t.target],align:s(t.align,.5)}));y;){for(f=e.length;f--;)b=e[f],v=(Math.min.apply(0,b.targets)+Math.max.apply(0,b.targets))/2,b.pos=i(v-b.size*b.align,0,a-b.size);for(f=e.length,y=!1;f--;)f>0&&e[f-1].pos+e[f-1].size>e[f].pos&&(e[f-1].size+=e[f].size,e[f-1].targets=e[f-1].targets.concat(e[f].targets),e[f-1].align=.5,e[f-1].pos+e[f-1].size>a&&(e[f-1].pos=a-e[f-1].size),e.splice(f,1),y=!0)}return g.apply(h,c),f=0,e.some(e=>{let i=0;return(e.targets||[]).some(()=>(h[f].pos=e.pos+i,void 0!==n&&Math.abs(h[f].pos-h[f].target)>n)?(h.slice(0,f+1).forEach(t=>delete t.pos),h.reducedLen=(h.reducedLen||a)-.1*a,h.reducedLen>.1*a&&t(h,a,n),!0):(i+=h[f].size,f++,!1))}),o(h,d),h},e}),i(e,\"Core/Renderer/SVG/SVGElement.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{animate:r,animObject:o,stop:a}=t,{deg2rad:n,doc:h,svg:l,SVG_NS:d,win:c}=i,{addEvent:p,attr:u,createElement:g,css:f,defined:m,erase:x,extend:y,fireEvent:b,isArray:v,isFunction:S,isObject:k,isString:C,merge:M,objectEach:w,pick:T,pInt:A,replaceNested:P,syncTimeout:L,uniqueKey:O}=s;class D{_defaultGetter(t){let e=T(this[t+\"Value\"],this[t],this.element?this.element.getAttribute(t):null,0);return/^[\\-0-9\\.]+$/.test(e)&&(e=parseFloat(e)),e}_defaultSetter(t,e,i){i.setAttribute(e,t)}add(t){let e;let i=this.renderer,s=this.element;return t&&(this.parentGroup=t),void 0!==this.textStr&&\"text\"===this.element.nodeName&&i.buildText(this),this.added=!0,(!t||t.handleZ||this.zIndex)&&(e=this.zIndexSetter()),e||(t?t.element:i.box).appendChild(s),this.onAdd&&this.onAdd(),this}addClass(t,e){let i=e?\"\":this.attr(\"class\")||\"\";return(t=(t||\"\").split(/ /g).reduce(function(t,e){return -1===i.indexOf(e)&&t.push(e),t},i?[i]:[]).join(\" \"))!==i&&this.attr(\"class\",t),this}afterSetters(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)}align(t,e,i,s=!0){let r,o,a,n,h;let l={},d=this.renderer,c=d.alignedObjects;t?(this.alignOptions=t,this.alignByTranslate=e,(!i||C(i))&&(this.alignTo=a=i||\"renderer\",x(c,this),c.push(this),i=void 0)):(t=this.alignOptions,e=this.alignByTranslate,a=this.alignTo),i=T(i,d[a],d);let p=t.align,u=t.verticalAlign;return r=(i.x||0)+(t.x||0),o=(i.y||0)+(t.y||0),\"right\"===p?n=1:\"center\"===p&&(n=2),n&&(r+=(i.width-(t.width||0))/n),l[e?\"translateX\":\"x\"]=Math.round(r),\"bottom\"===u?h=1:\"middle\"===u&&(h=2),h&&(o+=(i.height-(t.height||0))/h),l[e?\"translateY\":\"y\"]=Math.round(o),s&&(this[this.placed?\"animate\":\"attr\"](l),this.placed=!0),this.alignAttr=l,this}alignSetter(t){let e={left:\"start\",center:\"middle\",right:\"end\"};e[t]&&(this.alignValue=t,this.element.setAttribute(\"text-anchor\",e[t]))}animate(t,e,i){let s=o(T(e,this.renderer.globalAnimation,!0)),a=s.defer;return h.hidden&&(s.duration=0),0!==s.duration?(i&&(s.complete=i),L(()=>{this.element&&r(this,t,s)},a)):(this.attr(t,void 0,i||s.complete),w(t,function(t,e){s.step&&s.step.call(this,t,{prop:e,pos:1,elem:this})},this)),this}applyTextOutline(t){let e=this.element;-1!==t.indexOf(\"contrast\")&&(t=t.replace(/contrast/g,this.renderer.getContrast(e.style.fill)));let s=t.split(\" \"),r=s[s.length-1],o=s[0];if(o&&\"none\"!==o&&i.svg){this.fakeTS=!0,o=o.replace(/(^[\\d\\.]+)(.*?)$/g,function(t,e,i){return 2*Number(e)+i}),this.removeTextOutline();let t=h.createElementNS(d,\"tspan\");u(t,{class:\"highcharts-text-outline\",fill:r,stroke:r,\"stroke-width\":o,\"stroke-linejoin\":\"round\"});let i=e.querySelector(\"textPath\")||e;[].forEach.call(i.childNodes,e=>{let i=e.cloneNode(!0);i.removeAttribute&&[\"fill\",\"stroke\",\"stroke-width\",\"stroke\"].forEach(t=>i.removeAttribute(t)),t.appendChild(i)});let s=0;[].forEach.call(i.querySelectorAll(\"text tspan\"),t=>{s+=Number(t.getAttribute(\"dy\"))});let a=h.createElementNS(d,\"tspan\");a.textContent=\"​\",u(a,{x:Number(e.getAttribute(\"x\")),dy:-s}),t.appendChild(a),i.insertBefore(t,i.firstChild)}}attr(t,e,i,s){let r=this.element,o=D.symbolCustomAttribs,n,h,l=this,d;return\"string\"==typeof t&&void 0!==e&&(n=t,(t={})[n]=e),\"string\"==typeof t?l=(this[t+\"Getter\"]||this._defaultGetter).call(this,t,r):(w(t,function(e,i){d=!1,s||a(this,i),this.symbolName&&-1!==o.indexOf(i)&&(h||(this.symbolAttr(t),h=!0),d=!0),this.rotation&&(\"x\"===i||\"y\"===i)&&(this.doTransform=!0),d||(this[i+\"Setter\"]||this._defaultSetter).call(this,e,i,r)},this),this.afterSetters()),i&&i.call(this),l}clip(t){if(t&&!t.clipPath){let e=O()+\"-\",i=this.renderer.createElement(\"clipPath\").attr({id:e}).add(this.renderer.defs);y(t,{clipPath:i,id:e,count:0}),t.add(i)}return this.attr(\"clip-path\",t?`url(${this.renderer.url}#${t.id})`:\"none\")}crisp(t,e){let i=Math.round(e=e||t.strokeWidth||0)%2/2;return t.x=Math.floor(t.x||this.x||0)+i,t.y=Math.floor(t.y||this.y||0)+i,t.width=Math.floor((t.width||this.width||0)-2*i),t.height=Math.floor((t.height||this.height||0)-2*i),m(t.strokeWidth)&&(t.strokeWidth=e),t}complexColor(t,i,s){let r=this.renderer,o,a,n,h,l,d,c,p,u,g,f=[],x;b(this.renderer,\"complexColor\",{args:arguments},function(){if(t.radialGradient?a=\"radialGradient\":t.linearGradient&&(a=\"linearGradient\"),a){if(n=t[a],l=r.gradients,d=t.stops,u=s.radialReference,v(n)&&(t[a]=n={x1:n[0],y1:n[1],x2:n[2],y2:n[3],gradientUnits:\"userSpaceOnUse\"}),\"radialGradient\"===a&&u&&!m(n.gradientUnits)&&(h=n,n=M(n,r.getRadialAttr(u,h),{gradientUnits:\"userSpaceOnUse\"})),w(n,function(t,e){\"id\"!==e&&f.push(e,t)}),w(d,function(t){f.push(t)}),l[f=f.join(\",\")])g=l[f].attr(\"id\");else{n.id=g=O();let t=l[f]=r.createElement(a).attr(n).add(r.defs);t.radAttr=h,t.stops=[],d.forEach(function(i){0===i[1].indexOf(\"rgba\")?(c=(o=e.parse(i[1])).get(\"rgb\"),p=o.get(\"a\")):(c=i[1],p=1);let s=r.createElement(\"stop\").attr({offset:i[0],\"stop-color\":c,\"stop-opacity\":p}).add(t);t.stops.push(s)})}x=\"url(\"+r.url+\"#\"+g+\")\",s.setAttribute(i,x),s.gradient=f,t.toString=function(){return x}}})}css(t){let e=this.styles,i={},s=this.element,r,o=!e;if(e&&w(t,function(t,s){e&&e[s]!==t&&(i[s]=t,o=!0)}),o){e&&(t=y(e,i)),null===t.width||\"auto\"===t.width?delete this.textWidth:\"text\"===s.nodeName.toLowerCase()&&t.width&&(r=this.textWidth=A(t.width)),y(this.styles,t),r&&!l&&this.renderer.forExport&&delete t.width;let o=M(t);s.namespaceURI===this.SVG_NS&&([\"textOutline\",\"textOverflow\",\"width\"].forEach(t=>o&&delete o[t]),o.color&&(o.fill=o.color)),f(s,o)}return this.added&&(\"text\"===this.element.nodeName&&this.renderer.buildText(this),t.textOutline&&this.applyTextOutline(t.textOutline)),this}dashstyleSetter(t){let e,i=this[\"stroke-width\"];if(\"inherit\"===i&&(i=1),t=t&&t.toLowerCase()){let s=t.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(e=s.length;e--;)s[e]=\"\"+A(s[e])*T(i,NaN);t=s.join(\",\").replace(/NaN/g,\"none\"),this.element.setAttribute(\"stroke-dasharray\",t)}}destroy(){let t=this,e=t.element||{},i=t.renderer,s=e.ownerSVGElement,r=\"SPAN\"===e.nodeName&&t.parentGroup||void 0,o,n;if(e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null,a(t),t.clipPath&&s){let e=t.clipPath;[].forEach.call(s.querySelectorAll(\"[clip-path],[CLIP-PATH]\"),function(t){t.getAttribute(\"clip-path\").indexOf(e.element.id)>-1&&t.removeAttribute(\"clip-path\")}),t.clipPath=e.destroy()}if(t.connector=t.connector?.destroy(),t.stops){for(n=0;ne&&e.join?(i?t+\" \":\"\")+e.join(\" \"):(e||\"\").toString(),\"\")),/(NaN| {2}|^$)/.test(t)&&(t=\"M 0 0\"),this[e]!==t&&(i.setAttribute(e,t),this[e]=t)}fillSetter(t,e,i){\"string\"==typeof t?i.setAttribute(e,t):t&&this.complexColor(t,e,i)}hrefSetter(t,e,i){i.setAttributeNS(\"http://www.w3.org/1999/xlink\",e,t)}getBBox(t,e){let i,s,r,o;let{alignValue:a,element:n,renderer:h,styles:l,textStr:d}=this,{cache:c,cacheKeys:p}=h,u=n.namespaceURI===this.SVG_NS,g=T(e,this.rotation,0),x=h.styledMode?n&&D.prototype.getStyle.call(n,\"font-size\"):l.fontSize;if(m(d)&&(-1===(o=d.toString()).indexOf(\"<\")&&(o=o.replace(/[0-9]/g,\"0\")),o+=[\"\",h.rootFontSize,x,g,this.textWidth,a,l.textOverflow,l.fontWeight].join(\",\")),o&&!t&&(i=c[o]),!i){if(u||h.forExport){try{r=this.fakeTS&&function(t){let e=n.querySelector(\".highcharts-text-outline\");e&&f(e,{display:t})},S(r)&&r(\"none\"),i=n.getBBox?y({},n.getBBox()):{width:n.offsetWidth,height:n.offsetHeight,x:0,y:0},S(r)&&r(\"\")}catch(t){}(!i||i.width<0)&&(i={x:0,y:0,width:0,height:0})}else i=this.htmlGetBBox();s=i.height,u&&(i.height=s=({\"11px,17\":14,\"13px,20\":16})[`${x||\"\"},${Math.round(s)}`]||s),g&&(i=this.getRotatedBox(i,g))}if(o&&(\"\"===d||i.height>0)){for(;p.length>250;)delete c[p.shift()];c[o]||p.push(o),c[o]=i}return i}getRotatedBox(t,e){let{x:i,y:s,width:r,height:o}=t,{alignValue:a,translateY:h,rotationOriginX:l=0,rotationOriginY:d=0}=this,c={right:1,center:.5}[a||0]||0,p=Number(this.element.getAttribute(\"y\")||0)-(h?0:s),u=e*n,g=(e-90)*n,f=Math.cos(u),m=Math.sin(u),x=r*f,y=r*m,b=Math.cos(g),v=Math.sin(g),[[S,k],[C,M]]=[l,d].map(t=>[t-t*f,t*m]),w=i+c*(r-x)+S+M+p*b,T=w+x,A=T-o*b,P=A-x,L=s+p-c*y-k+C+p*v,O=L+y,D=O-o*v,E=D-y,I=Math.min(w,T,A,P),j=Math.min(L,O,D,E),B=Math.max(w,T,A,P)-I,R=Math.max(L,O,D,E)-j;return{x:I,y:j,width:B,height:R}}getStyle(t){return c.getComputedStyle(this.element||this,\"\").getPropertyValue(t)}hasClass(t){return -1!==(\"\"+this.attr(\"class\")).split(\" \").indexOf(t)}hide(){return this.attr({visibility:\"hidden\"})}htmlGetBBox(){return{height:0,width:0,x:0,y:0}}constructor(t,e){this.onEvents={},this.opacity=1,this.SVG_NS=d,this.element=\"span\"===e||\"body\"===e?g(e):h.createElementNS(this.SVG_NS,e),this.renderer=t,this.styles={},b(this,\"afterInit\")}on(t,e){let{onEvents:i}=this;return i[t]&&i[t](),i[t]=p(this.element,t,e),this}opacitySetter(t,e,i){let s=Number(Number(t).toFixed(3));this.opacity=s,i.setAttribute(e,s)}removeClass(t){return this.attr(\"class\",(\"\"+this.attr(\"class\")).replace(C(t)?RegExp(`(^| )${t}( |$)`):t,\" \").replace(/ +/g,\" \").trim())}removeTextOutline(){let t=this.element.querySelector(\"tspan.highcharts-text-outline\");t&&this.safeRemoveChild(t)}safeRemoveChild(t){let e=t.parentNode;e&&e.removeChild(t)}setRadialReference(t){let e=this.element.gradient&&this.renderer.gradients[this.element.gradient];return this.element.radialReference=t,e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(t,e.radAttr)),this}setTextPath(t,e){e=M(!0,{enabled:!0,attributes:{dy:-5,startOffset:\"50%\",textAnchor:\"middle\"}},e);let i=this.renderer.url,s=this.text||this,r=s.textPath,{attributes:o,enabled:a}=e;if(t=t||r&&r.path,r&&r.undo(),t&&a){let e=p(s,\"afterModifyTree\",e=>{if(t&&a){let r=t.attr(\"id\");r||t.attr(\"id\",r=O());let a={x:0,y:0};m(o.dx)&&(a.dx=o.dx,delete o.dx),m(o.dy)&&(a.dy=o.dy,delete o.dy),s.attr(a),this.attr({transform:\"\"}),this.box&&(this.box=this.box.destroy());let n=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:\"textPath\",attributes:y(o,{\"text-anchor\":o.textAnchor,href:`${i}#${r}`}),children:n}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache=\"\",this.renderer.buildText(s)),this}shadow(t){let{renderer:e}=this,i=M(this.parentGroup?.rotation===90?{offsetX:-1,offsetY:-1}:{},k(t)?t:{}),s=e.shadowDefinition(i);return this.attr({filter:t?`url(${e.url}#${s})`:\"none\"})}show(t=!0){return this.attr({visibility:t?\"inherit\":\"visible\"})}\"stroke-widthSetter\"(t,e,i){this[e]=t,i.setAttribute(e,t)}strokeWidth(){if(!this.renderer.styledMode)return this[\"stroke-width\"]||0;let t=this.getStyle(\"stroke-width\"),e=0,i;return/px$/.test(t)?e=A(t):\"\"!==t&&(u(i=h.createElementNS(d,\"rect\"),{width:t,\"stroke-width\":0}),this.element.parentNode.appendChild(i),e=i.getBBox().width,i.parentNode.removeChild(i)),e}symbolAttr(t){let e=this;D.symbolCustomAttribs.forEach(function(i){e[i]=T(t[i],e[i])}),e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})}textSetter(t){t!==this.textStr&&(delete this.textPxLength,this.textStr=t,this.added&&this.renderer.buildText(this))}titleSetter(t){let e=this.element,i=e.getElementsByTagName(\"title\")[0]||h.createElementNS(this.SVG_NS,\"title\");e.insertBefore?e.insertBefore(i,e.firstChild):e.appendChild(i),i.textContent=P(T(t,\"\"),[/<[^>]*>/g,\"\"]).replace(/</g,\"<\").replace(/>/g,\">\")}toFront(){let t=this.element;return t.parentNode.appendChild(t),this}translate(t,e){return this.attr({translateX:t,translateY:e})}updateTransform(t=\"transform\"){let{element:e,matrix:i,rotation:s=0,rotationOriginX:r,rotationOriginY:o,scaleX:a,scaleY:n,translateX:h=0,translateY:l=0}=this,d=[\"translate(\"+h+\",\"+l+\")\"];m(i)&&d.push(\"matrix(\"+i.join(\",\")+\")\"),s&&(d.push(\"rotate(\"+s+\" \"+T(r,e.getAttribute(\"x\"),0)+\" \"+T(o,e.getAttribute(\"y\")||0)+\")\"),this.text?.element.tagName===\"SPAN\"&&this.text.attr({rotation:s,rotationOriginX:(r||0)-this.padding,rotationOriginY:(o||0)-this.padding})),(m(a)||m(n))&&d.push(\"scale(\"+T(a,1)+\" \"+T(n,1)+\")\"),d.length&&!(this.text||this).textPath&&e.setAttribute(t,d.join(\" \"))}visibilitySetter(t,e,i){\"inherit\"===t?i.removeAttribute(e):this[e]!==t&&i.setAttribute(e,t),this[e]=t}xGetter(t){return\"circle\"===this.element.nodeName&&(\"x\"===t?t=\"cx\":\"y\"===t&&(t=\"cy\")),this._defaultGetter(t)}zIndexSetter(t,e){let i=this.renderer,s=this.parentGroup,r=(s||i).element||i.box,o=this.element,a=r===i.box,n,h,l,d=!1,c,p=this.added,u;if(m(t)?(o.setAttribute(\"data-z-index\",t),t=+t,this[e]===t&&(p=!1)):m(this[e])&&o.removeAttribute(\"data-z-index\"),this[e]=t,p){for((t=this.zIndex)&&s&&(s.handleZ=!0),u=(n=r.childNodes).length-1;u>=0&&!d;u--)c=!m(l=(h=n[u]).getAttribute(\"data-z-index\")),h!==o&&(t<0&&c&&!a&&!u?(r.insertBefore(o,n[u]),d=!0):(A(l)<=t||c&&(!m(t)||t>=0))&&(r.insertBefore(o,n[u+1]),d=!0));d||(r.insertBefore(o,n[a?3:0]),d=!0)}return d}}return D.symbolCustomAttribs=[\"anchorX\",\"anchorY\",\"clockwise\",\"end\",\"height\",\"innerR\",\"r\",\"start\",\"width\",\"x\",\"y\"],D.prototype.strokeSetter=D.prototype.fillSetter,D.prototype.yGetter=D.prototype.xGetter,D.prototype.matrixSetter=D.prototype.rotationOriginXSetter=D.prototype.rotationOriginYSetter=D.prototype.rotationSetter=D.prototype.scaleXSetter=D.prototype.scaleYSetter=D.prototype.translateXSetter=D.prototype.translateYSetter=D.prototype.verticalAlignSetter=function(t,e){this[e]=t,this.doTransform=!0},D}),i(e,\"Core/Renderer/SVG/SVGLabel.js\",[e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{defined:i,extend:s,isNumber:r,merge:o,pick:a,removeEvent:n}=e;class h extends t{constructor(t,e,i,s,r,o,a,n,l,d){let c;super(t,\"g\"),this.paddingLeftSetter=this.paddingSetter,this.paddingRightSetter=this.paddingSetter,this.textStr=e,this.x=i,this.y=s,this.anchorX=o,this.anchorY=a,this.baseline=l,this.className=d,this.addClass(\"button\"===d?\"highcharts-no-tooltip\":\"highcharts-label\"),d&&this.addClass(\"highcharts-\"+d),this.text=t.text(void 0,0,0,n).attr({zIndex:1}),\"string\"==typeof r&&((c=/^url\\((.*?)\\)$/.test(r))||this.renderer.symbols[r])&&(this.symbolKey=r),this.bBox=h.emptyBBox,this.padding=3,this.baselineOffset=0,this.needsBox=t.styledMode||c,this.deferredAttr={},this.alignFactor=0}alignSetter(t){let e={left:0,center:.5,right:1}[t];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&r(this.xSetting)&&this.attr({x:this.xSetting}))}anchorXSetter(t,e){this.anchorX=t,this.boxAttr(e,Math.round(t)-this.getCrispAdjust()-this.xSetting)}anchorYSetter(t,e){this.anchorY=t,this.boxAttr(e,t-this.ySetting)}boxAttr(t,e){this.box?this.box.attr(t,e):this.deferredAttr[t]=e}css(e){if(e){let t={};e=o(e),h.textProps.forEach(i=>{void 0!==e[i]&&(t[i]=e[i],delete e[i])}),this.text.css(t),\"fontSize\"in t||\"fontWeight\"in t?this.updateTextPadding():(\"width\"in t||\"textOverflow\"in t)&&this.updateBoxSize()}return t.prototype.css.call(this,e)}destroy(){n(this.element,\"mouseenter\"),n(this.element,\"mouseleave\"),this.text&&this.text.destroy(),this.box&&(this.box=this.box.destroy()),t.prototype.destroy.call(this)}fillSetter(t,e){t&&(this.needsBox=!0),this.fill=t,this.boxAttr(e,t)}getBBox(t,e){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();let{padding:i,height:s=0,translateX:r=0,translateY:o=0,width:n=0}=this,h=a(this.paddingLeft,i),l=e??(this.rotation||0),d={width:n,height:s,x:r+this.bBox.x-h,y:o+this.bBox.y-i+this.baselineOffset};return l&&(d=this.getRotatedBox(d,l)),d}getCrispAdjust(){return this.renderer.styledMode&&this.box?this.box.strokeWidth()%2/2:(this[\"stroke-width\"]?parseInt(this[\"stroke-width\"],10):0)%2/2}heightSetter(t){this.heightSetting=t}onAdd(){this.text.add(this),this.attr({text:a(this.textStr,\"\"),x:this.x||0,y:this.y||0}),this.box&&i(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})}paddingSetter(t,e){r(t)?t!==this[e]&&(this[e]=t,this.updateTextPadding()):this[e]=void 0}rSetter(t,e){this.boxAttr(e,t)}strokeSetter(t,e){this.stroke=t,this.boxAttr(e,t)}\"stroke-widthSetter\"(t,e){t&&(this.needsBox=!0),this[\"stroke-width\"]=t,this.boxAttr(e,t)}\"text-alignSetter\"(t){this.textAlign=t}textSetter(t){void 0!==t&&this.text.attr({text:t}),this.updateTextPadding()}updateBoxSize(){let t;let e=this.text,o={},a=this.padding,n=this.bBox=(!r(this.widthSetting)||!r(this.heightSetting)||this.textAlign)&&i(e.textStr)?e.getBBox(void 0,0):h.emptyBBox;this.width=this.getPaddedWidth(),this.height=(this.heightSetting||n.height||0)+2*a;let l=this.renderer.fontMetrics(e);if(this.baselineOffset=a+Math.min((this.text.firstLineMetrics||l).b,n.height||1/0),this.heightSetting&&(this.baselineOffset+=(this.heightSetting-l.h)/2),this.needsBox&&!e.textPath){if(!this.box){let t=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect();t.addClass((\"button\"===this.className?\"\":\"highcharts-label-box\")+(this.className?\" highcharts-\"+this.className+\"-box\":\"\")),t.add(this)}t=this.getCrispAdjust(),o.x=t,o.y=(this.baseline?-this.baselineOffset:0)+t,o.width=Math.round(this.width),o.height=Math.round(this.height),this.box.attr(s(o,this.deferredAttr)),this.deferredAttr={}}}updateTextPadding(){let t=this.text;if(!t.textPath){this.updateBoxSize();let e=this.baseline?0:this.baselineOffset,s=a(this.paddingLeft,this.padding);i(this.widthSetting)&&this.bBox&&(\"center\"===this.textAlign||\"right\"===this.textAlign)&&(s+=({center:.5,right:1})[this.textAlign]*(this.widthSetting-this.bBox.width)),(s!==t.x||e!==t.y)&&(t.attr(\"x\",s),t.hasBoxWidthChanged&&(this.bBox=t.getBBox(!0)),void 0!==e&&t.attr(\"y\",e)),t.x=s,t.y=e}}widthSetter(t){this.widthSetting=r(t)?t:void 0}getPaddedWidth(){let t=this.padding,e=a(this.paddingLeft,t),i=a(this.paddingRight,t);return(this.widthSetting||this.bBox.width||0)+e+i}xSetter(t){this.x=t,this.alignFactor&&(t-=this.alignFactor*this.getPaddedWidth(),this[\"forceAnimate:x\"]=!0),this.xSetting=Math.round(t),this.attr(\"translateX\",this.xSetting)}ySetter(t){this.ySetting=this.y=Math.round(t),this.attr(\"translateY\",this.ySetting)}}return h.emptyBBox={width:0,height:0,x:0,y:0},h.textProps=[\"color\",\"direction\",\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontWeight\",\"lineHeight\",\"textAlign\",\"textDecoration\",\"textOutline\",\"textOverflow\",\"whiteSpace\",\"width\"],h}),i(e,\"Core/Renderer/SVG/Symbols.js\",[e[\"Core/Utilities.js\"]],function(t){let{defined:e,isNumber:i,pick:s}=t;function r(t,i,r,o,a){let n=[];if(a){let h=a.start||0,l=s(a.r,r),d=s(a.r,o||r),c=.001>Math.abs((a.end||0)-h-2*Math.PI),p=(a.end||0)-.001,u=a.innerR,g=s(a.open,c),f=Math.cos(h),m=Math.sin(h),x=Math.cos(p),y=Math.sin(p),b=s(a.longArc,p-h-Math.PI<.001?0:1),v=[\"A\",l,d,0,b,s(a.clockwise,1),t+l*x,i+d*y];v.params={start:h,end:p,cx:t,cy:i},n.push([\"M\",t+l*f,i+d*m],v),e(u)&&((v=[\"A\",u,u,0,b,e(a.clockwise)?1-a.clockwise:0,t+u*f,i+u*m]).params={start:p,end:h,cx:t,cy:i},n.push(g?[\"M\",t+u*x,i+u*y]:[\"L\",t+u*x,i+u*y],v)),g||n.push([\"Z\"])}return n}function o(t,e,i,s,r){return r&&r.r?a(t,e,i,s,r):[[\"M\",t,e],[\"L\",t+i,e],[\"L\",t+i,e+s],[\"L\",t,e+s],[\"Z\"]]}function a(t,e,i,s,r){let o=r?.r||0;return[[\"M\",t+o,e],[\"L\",t+i-o,e],[\"A\",o,o,0,0,1,t+i,e+o],[\"L\",t+i,e+s-o],[\"A\",o,o,0,0,1,t+i-o,e+s],[\"L\",t+o,e+s],[\"A\",o,o,0,0,1,t,e+s-o],[\"L\",t,e+o],[\"A\",o,o,0,0,1,t+o,e],[\"Z\"]]}return{arc:r,callout:function(t,e,s,r,o){let n=Math.min(o&&o.r||0,s,r),h=n+6,l=o&&o.anchorX,d=o&&o.anchorY||0,c=a(t,e,s,r,{r:n});if(!i(l)||l0&&d0)return c;if(t+l>s-h){if(d>e+h&&de+h&&d0){let i=dr&&lh&&c.splice(1,1,[\"L\",l-6,e],[\"L\",l,e-6],[\"L\",l+6,e],[\"L\",s-n,e]);return c},circle:function(t,e,i,s){return r(t+i/2,e+s/2,i/2,s/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},diamond:function(t,e,i,s){return[[\"M\",t+i/2,e],[\"L\",t+i,e+s/2],[\"L\",t+i/2,e+s],[\"L\",t,e+s/2],[\"Z\"]]},rect:o,roundedRect:a,square:o,triangle:function(t,e,i,s){return[[\"M\",t+i/2,e],[\"L\",t+i,e+s],[\"L\",t,e+s],[\"Z\"]]},\"triangle-down\":function(t,e,i,s){return[[\"M\",t,e],[\"L\",t+i,e],[\"L\",t+i/2,e+s],[\"Z\"]]}}}),i(e,\"Core/Renderer/SVG/TextBuilder.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{doc:s,SVG_NS:r,win:o}=e,{attr:a,extend:n,fireEvent:h,isString:l,objectEach:d,pick:c}=i;return class{constructor(t){let e=t.styles;this.renderer=t.renderer,this.svgElement=t,this.width=t.textWidth,this.textLineHeight=e&&e.lineHeight,this.textOutline=e&&e.textOutline,this.ellipsis=!!(e&&\"ellipsis\"===e.textOverflow),this.noWrap=!!(e&&\"nowrap\"===e.whiteSpace)}buildSVG(){let e=this.svgElement,i=e.element,r=e.renderer,o=c(e.textStr,\"\").toString(),a=-1!==o.indexOf(\"<\"),n=i.childNodes,h=!e.added&&r.box,d=[o,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,e.getStyle(\"font-size\"),this.width].join(\",\");if(d!==e.textCache){e.textCache=d,delete e.actualWidth;for(let t=n.length;t--;)i.removeChild(n[t]);if(a||this.ellipsis||this.width||e.textPath||-1!==o.indexOf(\" \")&&(!this.noWrap||//g.test(o))){if(\"\"!==o){h&&h.appendChild(i);let s=new t(o);this.modifyTree(s.nodes),s.addToDOM(i),this.modifyDOM(),this.ellipsis&&-1!==(i.textContent||\"\").indexOf(\"…\")&&e.attr(\"title\",this.unescapeEntities(e.textStr||\"\",[\"<\",\">\"])),h&&h.removeChild(i)}}else i.appendChild(s.createTextNode(this.unescapeEntities(o)));l(this.textOutline)&&e.applyTextOutline&&e.applyTextOutline(this.textOutline)}}modifyDOM(){let t;let e=this.svgElement,i=a(e.element,\"x\");for(e.firstLineMetrics=void 0;t=e.element.firstChild;)if(/^[\\s\\u200B]*$/.test(t.textContent||\" \"))e.element.removeChild(t);else break;[].forEach.call(e.element.querySelectorAll(\"tspan.highcharts-br\"),(t,s)=>{t.nextSibling&&t.previousSibling&&(0===s&&1===t.previousSibling.nodeType&&(e.firstLineMetrics=e.renderer.fontMetrics(t.previousSibling)),a(t,{dy:this.getLineHeight(t.nextSibling),x:i}))});let n=this.width||0;if(!n)return;let h=(t,o)=>{let h=t.textContent||\"\",l=h.replace(/([^\\^])-/g,\"$1- \").split(\" \"),d=!this.noWrap&&(l.length>1||e.element.childNodes.length>1),c=this.getLineHeight(o),p=0,u=e.actualWidth;if(this.ellipsis)h&&this.truncate(t,h,void 0,0,Math.max(0,n-.8*c),(t,e)=>t.substring(0,e)+\"…\");else if(d){let h=[],d=[];for(;o.firstChild&&o.firstChild!==t;)d.push(o.firstChild),o.removeChild(o.firstChild);for(;l.length;)l.length&&!this.noWrap&&p>0&&(h.push(t.textContent||\"\"),t.textContent=l.join(\" \").replace(/- /g,\"-\")),this.truncate(t,void 0,l,0===p&&u||0,n,(t,e)=>l.slice(0,e).join(\" \").replace(/- /g,\"-\")),u=e.actualWidth,p++;d.forEach(e=>{o.insertBefore(e,t)}),h.forEach(e=>{o.insertBefore(s.createTextNode(e),t);let n=s.createElementNS(r,\"tspan\");n.textContent=\"​\",a(n,{dy:c,x:i}),o.insertBefore(n,t)})}},l=t=>{[].slice.call(t.childNodes).forEach(i=>{i.nodeType===o.Node.TEXT_NODE?h(i,t):(-1!==i.className.baseVal.indexOf(\"highcharts-br\")&&(e.actualWidth=0),l(i))})};l(e.element)}getLineHeight(t){let e=t.nodeType===o.Node.TEXT_NODE?t.parentElement:t;return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(e||this.svgElement.element).h}modifyTree(t){let e=(i,s)=>{let{attributes:r={},children:o,style:a={},tagName:h}=i,l=this.renderer.styledMode;if(\"b\"===h||\"strong\"===h?l?r.class=\"highcharts-strong\":a.fontWeight=\"bold\":(\"i\"===h||\"em\"===h)&&(l?r.class=\"highcharts-emphasized\":a.fontStyle=\"italic\"),a&&a.color&&(a.fill=a.color),\"br\"===h){r.class=\"highcharts-br\",i.textContent=\"​\";let e=t[s+1];e&&e.textContent&&(e.textContent=e.textContent.replace(/^ +/gm,\"\"))}else\"a\"===h&&o&&o.some(t=>\"#text\"===t.tagName)&&(i.children=[{children:o,tagName:\"tspan\"}]);\"#text\"!==h&&\"a\"!==h&&(i.tagName=\"tspan\"),n(i,{attributes:r,style:a}),o&&o.filter(t=>\"#text\"!==t.tagName).forEach(e)};t.forEach(e),h(this.svgElement,\"afterModifyTree\",{nodes:t})}truncate(t,e,i,s,r,o){let a,n;let h=this.svgElement,{rotation:l}=h,d=[],c=i?1:0,p=(e||i||\"\").length,u=p,g=function(e,r){let o=r||e,a=t.parentNode;if(a&&void 0===d[o]&&a.getSubStringLength)try{d[o]=s+a.getSubStringLength(0,i?o+1:o)}catch(t){}return d[o]};if(h.rotation=0,s+(n=g(t.textContent.length))>r){for(;c<=p;)u=Math.ceil((c+p)/2),i&&(a=o(i,u)),n=g(u,a&&a.length-1),c===p?c=p+1:n>r?p=u-1:c=u;0===p?t.textContent=\"\":e&&p===e.length-1||(t.textContent=a||o(e||i,u))}i&&i.splice(0,u),h.actualWidth=n,h.rotation=l}unescapeEntities(t,e){return d(this.renderer.escapes,function(i,s){e&&-1!==e.indexOf(i)||(t=t.toString().replace(RegExp(i,\"g\"),s))}),t}}}),i(e,\"Core/Renderer/SVG/SVGRenderer.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGLabel.js\"],e[\"Core/Renderer/SVG/Symbols.js\"],e[\"Core/Renderer/SVG/TextBuilder.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,a,n,h){let l;let{charts:d,deg2rad:c,doc:p,isFirefox:u,isMS:g,isWebKit:f,noop:m,SVG_NS:x,symbolSizes:y,win:b}=i,{addEvent:v,attr:S,createElement:k,css:C,defined:M,destroyObjectProperties:w,extend:T,isArray:A,isNumber:P,isObject:L,isString:O,merge:D,pick:E,pInt:I,replaceNested:j,uniqueKey:B}=h;class R{constructor(t,e,i,s,r,o,a){let n,h;let l=this.createElement(\"svg\").attr({version:\"1.1\",class:\"highcharts-root\"}),d=l.element;a||l.css(this.getStyle(s||{})),t.appendChild(d),S(t,\"dir\",\"ltr\"),-1===t.innerHTML.indexOf(\"xmlns\")&&S(d,\"xmlns\",this.SVG_NS),this.box=d,this.boxWrapper=l,this.alignedObjects=[],this.url=this.getReferenceURL(),this.createElement(\"desc\").add().element.appendChild(p.createTextNode(\"Created with Highcharts 11.4.0\")),this.defs=this.createElement(\"defs\").add(),this.allowHTML=o,this.forExport=r,this.styledMode=a,this.gradients={},this.cache={},this.cacheKeys=[],this.imgCount=0,this.rootFontSize=l.getStyle(\"font-size\"),this.setSize(e,i,!1),u&&t.getBoundingClientRect&&((n=function(){C(t,{left:0,top:0}),h=t.getBoundingClientRect(),C(t,{left:Math.ceil(h.left)-h.left+\"px\",top:Math.ceil(h.top)-h.top+\"px\"})})(),this.unSubPixelFix=v(b,\"resize\",n))}definition(e){return new t([e]).addToDOM(this.defs.element)}getReferenceURL(){if((u||f)&&p.getElementsByTagName(\"base\").length){if(!M(l)){let e=B(),i=new t([{tagName:\"svg\",attributes:{width:8,height:8},children:[{tagName:\"defs\",children:[{tagName:\"clipPath\",attributes:{id:e},children:[{tagName:\"rect\",attributes:{width:4,height:4}}]}]},{tagName:\"rect\",attributes:{id:\"hitme\",width:8,height:8,\"clip-path\":`url(#${e})`,fill:\"rgba(0,0,0,0.001)\"}}]}]).addToDOM(p.body);C(i,{position:\"fixed\",top:0,left:0,zIndex:9e5});let s=p.elementFromPoint(6,6);l=\"hitme\"===(s&&s.id),p.body.removeChild(i)}if(l)return j(b.location.href.split(\"#\")[0],[/<[^>]*>/g,\"\"],[/([\\('\\)])/g,\"\\\\$1\"],[/ /g,\"%20\"])}return\"\"}getStyle(t){return this.style=T({fontFamily:\"Helvetica, Arial, sans-serif\",fontSize:\"1rem\"},t),this.style}setStyle(t){this.boxWrapper.css(this.getStyle(t))}isHidden(){return!this.boxWrapper.getBBox().width}destroy(){let t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),w(this.gradients||{}),this.gradients=null,this.defs=t.destroy(),this.unSubPixelFix&&this.unSubPixelFix(),this.alignedObjects=null,null}createElement(t){return new this.Element(this,t)}getRadialAttr(t,e){return{cx:t[0]-t[2]/2+(e.cx||0)*t[2],cy:t[1]-t[2]/2+(e.cy||0)*t[2],r:(e.r||0)*t[2]}}shadowDefinition(t){let e=[`highcharts-drop-shadow-${this.chartIndex}`,...Object.keys(t).map(e=>`${e}-${t[e]}`)].join(\"-\").toLowerCase().replace(/[^a-z0-9\\-]/g,\"\"),i=D({color:\"#000000\",offsetX:1,offsetY:1,opacity:.15,width:5},t);return this.defs.element.querySelector(`#${e}`)||this.definition({tagName:\"filter\",attributes:{id:e,filterUnits:i.filterUnits},children:[{tagName:\"feDropShadow\",attributes:{dx:i.offsetX,dy:i.offsetY,\"flood-color\":i.color,\"flood-opacity\":Math.min(5*i.opacity,1),stdDeviation:i.width/2}}]}),e}buildText(t){new n(t).buildSVG()}getContrast(t){let i=e.parse(t).rgba.map(t=>{let e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}),s=.2126*i[0]+.7152*i[1]+.0722*i[2];return 1.05/(s+.05)>(s+.05)/.05?\"#FFFFFF\":\"#000000\"}button(e,i,s,r,o={},a,n,h,l,d){let c,p,u;let f=this.label(e,i,s,l,void 0,void 0,d,void 0,\"button\"),m=this.styledMode,x=o.states||{},y=0;o=D(o),delete o.states;let b=D({color:\"#333333\",cursor:\"pointer\",fontSize:\"0.8em\",fontWeight:\"normal\"},o.style);delete o.style;let S=t.filterUserAttributes(o);return f.attr(D({padding:8,r:2},S)),m||(S=D({fill:\"#f7f7f7\",stroke:\"#cccccc\",\"stroke-width\":1},S),c=(a=D(S,{fill:\"#e6e6e6\"},t.filterUserAttributes(a||x.hover||{}))).style,delete a.style,p=(n=D(S,{fill:\"#e6e9ff\",style:{color:\"#000000\",fontWeight:\"bold\"}},t.filterUserAttributes(n||x.select||{}))).style,delete n.style,u=(h=D(S,{style:{color:\"#cccccc\"}},t.filterUserAttributes(h||x.disabled||{}))).style,delete h.style),v(f.element,g?\"mouseover\":\"mouseenter\",function(){3!==y&&f.setState(1)}),v(f.element,g?\"mouseout\":\"mouseleave\",function(){3!==y&&f.setState(y)}),f.setState=function(t){if(1!==t&&(f.state=y=t),f.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\"+[\"normal\",\"hover\",\"pressed\",\"disabled\"][t||0]),!m){f.attr([S,a,n,h][t||0]);let e=[b,c,p,u][t||0];L(e)&&f.css(e)}},!m&&(f.attr(S).css(T({cursor:\"default\"},b)),d&&f.text.css({pointerEvents:\"none\"})),f.on(\"touchstart\",t=>t.stopPropagation()).on(\"click\",function(t){3!==y&&r.call(f,t)})}crispLine(t,e,i=\"round\"){let s=t[0],r=t[1];return M(s[1])&&s[1]===r[1]&&(s[1]=r[1]=Math[i](s[1])-e%2/2),M(s[2])&&s[2]===r[2]&&(s[2]=r[2]=Math[i](s[2])+e%2/2),t}path(t){let e=this.styledMode?{}:{fill:\"none\"};return A(t)?e.d=t:L(t)&&T(e,t),this.createElement(\"path\").attr(e)}circle(t,e,i){let s=L(t)?t:void 0===t?{}:{x:t,y:e,r:i},r=this.createElement(\"circle\");return r.xSetter=r.ySetter=function(t,e,i){i.setAttribute(\"c\"+e,t)},r.attr(s)}arc(t,e,i,s,r,o){let a;L(t)?(e=(a=t).y,i=a.r,s=a.innerR,r=a.start,o=a.end,t=a.x):a={innerR:s,start:r,end:o};let n=this.symbol(\"arc\",t,e,i,i,a);return n.r=i,n}rect(t,e,i,s,r,o){let a=L(t)?t:void 0===t?{}:{x:t,y:e,r,width:Math.max(i||0,0),height:Math.max(s||0,0)},n=this.createElement(\"rect\");return this.styledMode||(void 0!==o&&(a[\"stroke-width\"]=o,T(a,n.crisp(a))),a.fill=\"none\"),n.rSetter=function(t,e,i){n.r=t,S(i,{rx:t,ry:t})},n.rGetter=function(){return n.r||0},n.attr(a)}roundedRect(t){return this.symbol(\"roundedRect\").attr(t)}setSize(t,e,i){this.width=t,this.height=e,this.boxWrapper.animate({width:t,height:e},{step:function(){this.attr({viewBox:\"0 0 \"+this.attr(\"width\")+\" \"+this.attr(\"height\")})},duration:E(i,!0)?void 0:0}),this.alignElements()}g(t){let e=this.createElement(\"g\");return t?e.attr({class:\"highcharts-\"+t}):e}image(t,e,i,s,r,o){let a={preserveAspectRatio:\"none\"};P(e)&&(a.x=e),P(i)&&(a.y=i),P(s)&&(a.width=s),P(r)&&(a.height=r);let n=this.createElement(\"image\").attr(a),h=function(e){n.attr({href:t}),o.call(n,e)};if(o){n.attr({href:\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"});let e=new b.Image;v(e,\"load\",h),e.src=t,e.complete&&h({})}else n.attr({href:t});return n}symbol(t,e,i,s,r,o){let a,n,h,l;let c=this,u=/^url\\((.*?)\\)$/,g=u.test(t),f=!g&&(this.symbols[t]?t:\"circle\"),m=f&&this.symbols[f];if(m)\"number\"==typeof e&&(n=m.call(this.symbols,Math.round(e||0),Math.round(i||0),s||0,r||0,o)),a=this.path(n),c.styledMode||a.attr(\"fill\",\"none\"),T(a,{symbolName:f||void 0,x:e,y:i,width:s,height:r}),o&&T(a,o);else if(g){h=t.match(u)[1];let s=a=this.image(h);s.imgwidth=E(o&&o.width,y[h]&&y[h].width),s.imgheight=E(o&&o.height,y[h]&&y[h].height),l=t=>t.attr({width:t.width,height:t.height}),[\"width\",\"height\"].forEach(t=>{s[`${t}Setter`]=function(t,e){this[e]=t;let{alignByTranslate:i,element:s,width:r,height:a,imgwidth:n,imgheight:h}=this,l=\"width\"===e?n:h,d=1;o&&\"within\"===o.backgroundSize&&r&&a&&n&&h?(d=Math.min(r/n,a/h),S(s,{width:Math.round(n*d),height:Math.round(h*d)})):s&&l&&s.setAttribute(e,l),!i&&n&&h&&this.translate(((r||0)-n*d)/2,((a||0)-h*d)/2)}}),M(e)&&s.attr({x:e,y:i}),s.isImg=!0,M(s.imgwidth)&&M(s.imgheight)?l(s):(s.attr({width:0,height:0}),k(\"img\",{onload:function(){let t=d[c.chartIndex];0===this.width&&(C(this,{position:\"absolute\",top:\"-999em\"}),p.body.appendChild(this)),y[h]={width:this.width,height:this.height},s.imgwidth=this.width,s.imgheight=this.height,s.element&&l(s),this.parentNode&&this.parentNode.removeChild(this),c.imgCount--,c.imgCount||!t||t.hasLoaded||t.onload()},src:h}),this.imgCount++)}return a}clipRect(t,e,i,s){return this.rect(t,e,i,s,0)}text(t,e,i,s){let r={};if(s&&(this.allowHTML||!this.forExport))return this.html(t,e,i);r.x=Math.round(e||0),i&&(r.y=Math.round(i)),M(t)&&(r.text=t);let o=this.createElement(\"text\").attr(r);return s&&(!this.forExport||this.allowHTML)||(o.xSetter=function(t,e,i){let s=i.getElementsByTagName(\"tspan\"),r=i.getAttribute(e);for(let i=0,o;it.align())}}return T(R.prototype,{Element:r,SVG_NS:x,escapes:{\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},symbols:a,draw:m}),s.registerRendererType(\"svg\",R,!0),R}),i(e,\"Core/Renderer/HTML/HTMLElement.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{composed:r}=e,{attr:o,css:a,createElement:n,defined:h,extend:l,pInt:d,pushUnique:c}=s;function p(t,e,s){let r=this.div?.style||s.style;i.prototype[`${e}Setter`].call(this,t,e,s),r&&(r[e]=t)}let u=(t,e)=>{if(!t.div){let s=o(t.element,\"class\"),r=t.css,a=n(\"div\",s?{className:s}:void 0,{position:\"absolute\",left:`${t.translateX||0}px`,top:`${t.translateY||0}px`,...t.styles,display:t.display,opacity:t.opacity,visibility:t.visibility},t.parentGroup?.div||e);t.classSetter=(t,e,i)=>{i.setAttribute(\"class\",t),a.className=t},t.translateXSetter=t.translateYSetter=(e,i)=>{t[i]=e,a.style[\"translateX\"===i?\"left\":\"top\"]=`${e}px`,t.doTransform=!0},t.opacitySetter=t.visibilitySetter=p,t.css=e=>(r.call(t,e),e.cursor&&(a.style.cursor=e.cursor),e.pointerEvents&&(a.style.pointerEvents=e.pointerEvents),t),t.on=function(){return i.prototype.on.apply({element:a,onEvents:t.onEvents},arguments),t},t.div=a}return t.div};class g extends i{static compose(t){c(r,this.compose)&&(t.prototype.html=function(t,e,i){return new g(this,\"span\").attr({text:t,x:Math.round(e),y:Math.round(i)})})}constructor(t,e){super(t,e),this.css({position:\"absolute\",...t.styledMode?{}:{fontFamily:t.style.fontFamily,fontSize:t.style.fontSize}}),this.element.style.whiteSpace=\"nowrap\"}getSpanCorrection(t,e,i){this.xCorr=-t*i,this.yCorr=-e}css(t){let e;let{element:i}=this,s=\"SPAN\"===i.tagName&&t&&\"width\"in t,r=s&&t.width;return s&&(delete t.width,this.textWidth=d(r)||void 0,e=!0),t?.textOverflow===\"ellipsis\"&&(t.whiteSpace=\"nowrap\",t.overflow=\"hidden\"),l(this.styles,t),a(i,t),e&&this.updateTransform(),this}htmlGetBBox(){let{element:t}=this;return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}updateTransform(){if(!this.added){this.alignOnAdd=!0;return}let{element:t,renderer:e,rotation:i,rotationOriginX:s,rotationOriginY:r,styles:o,textAlign:n=\"left\",textWidth:l,translateX:d=0,translateY:c=0,x:p=0,y:u=0}=this,g=o.whiteSpace;if(a(t,{marginLeft:`${d}px`,marginTop:`${c}px`}),\"SPAN\"===t.tagName){let o=[i,n,t.innerHTML,l,this.textAlign].join(\",\"),d=-(this.parentGroup?.padding*1)||0,c,f=!1;if(l!==this.oldTextWidth){let e=this.textPxLength?this.textPxLength:(a(t,{width:\"\",whiteSpace:g||\"nowrap\"}),t.offsetWidth),s=l||0;(s>this.oldTextWidth||e>s)&&(/[ \\-]/.test(t.textContent||t.innerText)||\"ellipsis\"===t.style.textOverflow)&&(a(t,{width:e>s||i?l+\"px\":\"auto\",display:\"block\",whiteSpace:g||\"normal\"}),this.oldTextWidth=l,f=!0)}this.hasBoxWidthChanged=f,o!==this.cTT&&(c=e.fontMetrics(t).b,h(i)&&(i!==(this.oldRotation||0)||n!==this.oldAlign)&&this.setSpanRotation(i,d,d),this.getSpanCorrection(!h(i)&&this.textPxLength||t.offsetWidth,c,{left:0,center:.5,right:1}[n]));let{xCorr:m=0,yCorr:x=0}=this,y=(s??p)-m-p-d,b=(r??u)-x-u-d;a(t,{left:`${p+m}px`,top:`${u+x}px`,transformOrigin:`${y}px ${b}px`}),this.cTT=o,this.oldRotation=i,this.oldAlign=n}}setSpanRotation(t,e,i){a(this.element,{transform:`rotate(${t}deg)`,transformOrigin:`${e}% ${i}px`})}add(t){let e;let i=this.renderer.box.parentNode,s=[];if(this.parentGroup=t,t&&!(e=t.div)){let r=t;for(;r;)s.push(r),r=r.parentGroup;for(let t of s.reverse())e=u(t,i)}return(e||i).appendChild(this.element),this.added=!0,this.alignOnAdd&&this.updateTransform(),this}textSetter(e){e!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,t.setElementHTML(this.element,e??\"\"),this.textStr=e,this.doTransform=!0)}alignSetter(t){this.alignValue=this.textAlign=t,this.doTransform=!0}xSetter(t,e){this[e]=t,this.doTransform=!0}}let f=g.prototype;return f.visibilitySetter=f.opacitySetter=p,f.ySetter=f.rotationSetter=f.rotationOriginXSetter=f.rotationOriginYSetter=f.xSetter,g}),i(e,\"Core/Axis/AxisDefaults.js\",[],function(){var t,e;return(e=t||(t={})).xAxis={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:\"%H:%M:%S.%L\",range:!1},second:{main:\"%H:%M:%S\",range:!1},minute:{main:\"%H:%M\",range:!1},hour:{main:\"%H:%M\",range:!1},day:{main:\"%e %b\"},week:{main:\"%e %b\"},month:{main:\"%b '%y\"},year:{main:\"%Y\"}},endOnTick:!1,gridLineDashStyle:\"Solid\",gridZIndex:1,labels:{autoRotationLimit:80,distance:15,enabled:!0,indentation:10,overflow:\"justify\",padding:5,reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,zIndex:7,style:{color:\"#333333\",cursor:\"default\",fontSize:\"0.8em\"}},maxPadding:.01,minorGridLineDashStyle:\"Solid\",minorTickLength:2,minorTickPosition:\"outside\",minorTicksPerMajor:5,minPadding:.01,offset:void 0,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:\"between\",tickPosition:\"outside\",title:{align:\"middle\",useHTML:!1,x:0,y:0,style:{color:\"#666666\",fontSize:\"0.8em\"}},type:\"linear\",uniqueNames:!0,visible:!0,minorGridLineColor:\"#f2f2f2\",minorGridLineWidth:1,minorTickColor:\"#999999\",lineColor:\"#333333\",lineWidth:1,gridLineColor:\"#e6e6e6\",gridLineWidth:void 0,tickColor:\"#333333\"},e.yAxis={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:void 0},startOnTick:!0,title:{text:\"Values\"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:\"justify\",formatter:function(){let{numberFormatter:t}=this.axis.chart;return t(this.total||0,-1)},style:{color:\"#000000\",fontSize:\"0.7em\",fontWeight:\"bold\",textOutline:\"1px contrast\"}},gridLineWidth:1,lineWidth:0},t}),i(e,\"Core/Foundation.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{addEvent:i,isFunction:s,objectEach:r,removeEvent:o}=t;return(e||(e={})).registerEventOptions=function(t,e){t.eventOptions=t.eventOptions||{},r(e.events,function(e,r){t.eventOptions[r]!==e&&(t.eventOptions[r]&&(o(t,r,t.eventOptions[r]),delete t.eventOptions[r]),s(e)&&(t.eventOptions[r]=e,i(t,r,e,{order:0})))})},e}),i(e,\"Core/Axis/Tick.js\",[e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{deg2rad:s}=e,{clamp:r,correctFloat:o,defined:a,destroyObjectProperties:n,extend:h,fireEvent:l,isNumber:d,merge:c,objectEach:p,pick:u}=i;return class{constructor(t,e,i,s,r){this.isNew=!0,this.isNewLabel=!0,this.axis=t,this.pos=e,this.type=i||\"\",this.parameters=r||{},this.tickmarkOffset=this.parameters.tickmarkOffset,this.options=this.parameters.options,l(this,\"init\"),i||s||this.addLabel()}addLabel(){let e=this,i=e.axis,s=i.options,r=i.chart,n=i.categories,c=i.logarithmic,p=i.names,g=e.pos,f=u(e.options&&e.options.labels,s.labels),m=i.tickPositions,x=g===m[0],y=g===m[m.length-1],b=(!f.step||1===f.step)&&1===i.tickInterval,v=m.info,S=e.label,k,C,M,w=this.parameters.category||(n?u(n[g],p[g],g):g);c&&d(w)&&(w=o(c.lin2log(w))),i.dateTime&&(v?k=(C=r.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid&&v.higherRanks[g]||v.unitName])).main:d(w)&&(k=i.dateTime.getXDateFormat(w,s.dateTimeLabelFormats||{}))),e.isFirst=x,e.isLast=y;let T={axis:i,chart:r,dateTimeLabelFormat:k,isFirst:x,isLast:y,pos:g,tick:e,tickPositionInfo:v,value:w};l(this,\"labelFormat\",T);let A=e=>f.formatter?f.formatter.call(e,e):f.format?(e.text=i.defaultLabelFormatter.call(e),t.format(f.format,e,r)):i.defaultLabelFormatter.call(e),P=A.call(T,T),L=C&&C.list;L?e.shortenLabel=function(){for(M=0;M0&&r+c*p>h&&(v=Math.round((o-r)/Math.cos(d*s))):(y=r-c*p,b=r+(1-c)*p,yh&&(m=h-t.x+m*c,x=-1),(m=Math.min(g,m))m||e.autoRotation&&(l.styles||{}).width)&&(v=m)),v&&(this.shortenLabel?this.shortenLabel():(f.width=Math.floor(v)+\"px\",(i.style||{}).textOverflow||(f.textOverflow=\"ellipsis\"),l.css(f)))}moveLabel(t,e){let i=this,s=i.label,r=i.axis,o=!1,a;s&&s.textStr===t?(i.movedLabel=s,o=!0,delete i.label):p(r.ticks,function(e){o||e.isNew||e===i||!e.label||e.label.textStr!==t||(i.movedLabel=e.label,o=!0,e.labelPos=i.movedLabel.xy,delete e.label)}),!o&&(i.labelPos||s)&&(a=i.labelPos||s.xy,i.movedLabel=i.createLabel(t,e,a),i.movedLabel&&i.movedLabel.attr({opacity:0}))}render(t,e,i){let s=this.axis,r=s.horiz,a=this.pos,n=u(this.tickmarkOffset,s.tickmarkOffset),h=this.getPosition(r,a,n,e),d=h.x,c=h.y,p=s.pos,g=p+s.len,f=r&&d===g||!r&&c===p?-1:1,m=r?d:c;!s.chart.polar&&this.isNew&&(o(m)g)&&(i=0);let x=u(i,this.label&&this.label.newOpacity,1);i=u(i,1),this.isActive=!0,this.renderGridLine(e,i,f),this.renderMark(h,i,f),this.renderLabel(h,e,x,t),this.isNew=!1,l(this,\"afterRender\")}renderGridLine(t,e,i){let s=this.axis,r=s.options,o={},a=this.pos,n=this.type,h=u(this.tickmarkOffset,s.tickmarkOffset),l=s.chart.renderer,d=this.gridLine,c,p=r.gridLineWidth,g=r.gridLineColor,f=r.gridLineDashStyle;\"minor\"===this.type&&(p=r.minorGridLineWidth,g=r.minorGridLineColor,f=r.minorGridLineDashStyle),d||(s.chart.styledMode||(o.stroke=g,o[\"stroke-width\"]=p||0,o.dashstyle=f),n||(o.zIndex=1),t&&(e=0),this.gridLine=d=l.path().attr(o).addClass(\"highcharts-\"+(n?n+\"-\":\"\")+\"grid-line\").add(s.gridGroup)),d&&(c=s.getPlotLinePath({value:a+h,lineWidth:d.strokeWidth()*i,force:\"pass\",old:t,acrossPanes:!1}))&&d[t||this.isNew?\"attr\":\"animate\"]({d:c,opacity:e})}renderMark(t,e,i){let s=this.axis,r=s.options,o=s.chart.renderer,a=this.type,n=s.tickSize(a?a+\"Tick\":\"tick\"),h=t.x,l=t.y,d=u(r[\"minor\"!==a?\"tickWidth\":\"minorTickWidth\"],!a&&s.isXAxis?1:0),c=r[\"minor\"!==a?\"tickColor\":\"minorTickColor\"],p=this.mark,g=!p;n&&(s.opposite&&(n[0]=-n[0]),p||(this.mark=p=o.path().addClass(\"highcharts-\"+(a?a+\"-\":\"\")+\"tick\").add(s.axisGroup),s.chart.styledMode||p.attr({stroke:c,\"stroke-width\":d})),p[g?\"attr\":\"animate\"]({d:this.getMarkPath(h,l,n[0],p.strokeWidth()*i,s.horiz,o),opacity:e}))}renderLabel(t,e,i,s){let r=this.axis,o=r.horiz,a=r.options,n=this.label,h=a.labels,l=h.step,c=u(this.tickmarkOffset,r.tickmarkOffset),p=t.x,g=t.y,f=!0;n&&d(p)&&(n.xy=t=this.getLabelPosition(p,g,n,o,h,c,s,l),(!this.isFirst||this.isLast||a.showFirstLabel)&&(!this.isLast||this.isFirst||a.showLastLabel)?!o||h.step||h.rotation||e||0===i||this.handleOverflow(t):f=!1,l&&s%l&&(f=!1),f&&d(t.y)?(t.opacity=i,n[this.isNewLabel?\"attr\":\"animate\"](t).show(!0),this.isNewLabel=!1):(n.hide(),this.isNewLabel=!0))}replaceMovedLabel(){let t=this.label,e=this.axis;t&&!this.isNew&&(t.animate({opacity:0},void 0,t.destroy),delete this.label),e.isDirty=!0,this.label=this.movedLabel,delete this.movedLabel}}}),i(e,\"Core/Axis/Axis.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/AxisDefaults.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Defaults.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Axis/Tick.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,a,n){let{animObject:h}=t,{xAxis:l,yAxis:d}=e,{defaultOptions:c}=s,{registerEventOptions:p}=r,{deg2rad:u}=o,{arrayMax:g,arrayMin:f,clamp:m,correctFloat:x,defined:y,destroyObjectProperties:b,erase:v,error:S,extend:k,fireEvent:C,getClosestDistance:M,insertItem:w,isArray:T,isNumber:A,isString:P,merge:L,normalizeTickInterval:O,objectEach:D,pick:E,relativeLength:I,removeEvent:j,splat:B,syncTimeout:R}=n,z=(t,e)=>O(e,void 0,void 0,E(t.options.allowDecimals,e<.5||void 0!==t.tickAmount),!!t.tickAmount);k(c,{xAxis:l,yAxis:L(l,d)});class N{constructor(t,e,i){this.init(t,e,i)}init(t,e,i=this.coll){let s=\"xAxis\"===i,r=this.isZAxis||(t.inverted?!s:s);this.chart=t,this.horiz=r,this.isXAxis=s,this.coll=i,C(this,\"init\",{userOptions:e}),this.opposite=E(e.opposite,this.opposite),this.side=E(e.side,this.side,r?this.opposite?0:2:this.opposite?1:3),this.setOptions(e);let o=this.options,a=o.labels,n=o.type;this.userOptions=e,this.minPixelPadding=0,this.reversed=E(o.reversed,this.reversed),this.visible=o.visible,this.zoomEnabled=o.zoomEnabled,this.hasNames=\"category\"===n||!0===o.categories,this.categories=T(o.categories)&&o.categories||(this.hasNames?[]:void 0),this.names||(this.names=[],this.names.keys={}),this.plotLinesAndBandsGroups={},this.positiveValuesOnly=!!this.logarithmic,this.isLinked=y(o.linkedTo),this.ticks={},this.labelEdge=[],this.minorTicks={},this.plotLinesAndBands=[],this.alternateBands={},this.len=0,this.minRange=this.userMinRange=o.minRange||o.maxZoom,this.range=o.range,this.offset=o.offset||0,this.max=void 0,this.min=void 0;let h=E(o.crosshair,B(t.options.tooltip.crosshairs)[s?0:1]);this.crosshair=!0===h?{}:h,-1===t.axes.indexOf(this)&&(s?t.axes.splice(t.xAxis.length,0,this):t.axes.push(this),w(this,t[this.coll])),t.orderItems(this.coll),this.series=this.series||[],t.inverted&&!this.isZAxis&&s&&!y(this.reversed)&&(this.reversed=!0),this.labelRotation=A(a.rotation)?a.rotation:void 0,p(this,o),C(this,\"afterInit\")}setOptions(t){let e=this.horiz?{labels:{autoRotation:[-45]},margin:15}:{title:{rotation:90*this.side}};this.options=L(e,c[this.coll],t),C(this,\"afterSetOptions\",{userOptions:t})}defaultLabelFormatter(){let t=this.axis,{numberFormatter:e}=this.chart,i=A(this.value)?this.value:NaN,s=t.chart.time,r=t.categories,o=this.dateTimeLabelFormat,a=c.lang,n=a.numericSymbols,h=a.numericSymbolMagnitude||1e3,l=t.logarithmic?Math.abs(i):t.tickInterval,d=n&&n.length,p,u;if(r)u=`${this.value}`;else if(o)u=s.dateFormat(o,i);else if(d&&n&&l>=1e3)for(;d--&&void 0===u;)l>=(p=Math.pow(h,d+1))&&10*i%p==0&&null!==n[d]&&0!==i&&(u=e(i/p,-1)+n[d]);return void 0===u&&(u=Math.abs(i)>=1e4?e(i,-1):e(i,-1,void 0,\"\")),u}getSeriesExtremes(){let t;let e=this;C(this,\"getSeriesExtremes\",null,function(){e.hasVisibleSeries=!1,e.dataMin=e.dataMax=e.threshold=void 0,e.softThreshold=!e.isXAxis,e.series.forEach(i=>{if(i.reserveSpace()){let s=i.options,r,o=s.threshold,a,n;if(e.hasVisibleSeries=!0,e.positiveValuesOnly&&0>=(o||0)&&(o=void 0),e.isXAxis)(r=i.xData)&&r.length&&(r=e.logarithmic?r.filter(t=>t>0):r,a=(t=i.getXExtremes(r)).min,n=t.max,A(a)||a instanceof Date||(r=r.filter(A),a=(t=i.getXExtremes(r)).min,n=t.max),r.length&&(e.dataMin=Math.min(E(e.dataMin,a),a),e.dataMax=Math.max(E(e.dataMax,n),n)));else{let t=i.applyExtremes();A(t.dataMin)&&(a=t.dataMin,e.dataMin=Math.min(E(e.dataMin,a),a)),A(t.dataMax)&&(n=t.dataMax,e.dataMax=Math.max(E(e.dataMax,n),n)),y(o)&&(e.threshold=o),(!s.softThreshold||e.positiveValuesOnly)&&(e.softThreshold=!1)}}})}),C(this,\"afterGetSeriesExtremes\")}translate(t,e,i,s,r,o){let a=this.linkedParent||this,n=s&&a.old?a.old.min:a.min;if(!A(n))return NaN;let h=a.minPixelPadding,l=(a.isOrdinal||a.brokenAxis?.hasBreaks||a.logarithmic&&r)&&a.lin2val,d=1,c=0,p=s&&a.old?a.old.transA:a.transA,u=0;if(p||(p=a.transA),i&&(d*=-1,c=a.len),a.reversed&&(d*=-1,c-=d*(a.sector||a.len)),e)u=(t=t*d+c-h)/p+n,l&&(u=a.lin2val(u));else{l&&(t=a.val2lin(t));let e=d*(t-n)*p;u=(a.isRadial?e:x(e))+c+d*h+(A(o)?p*o:0)}return u}toPixels(t,e){return this.translate(t,!1,!this.horiz,void 0,!0)+(e?0:this.pos)}toValue(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,void 0,!0)}getPlotLinePath(t){let e=this,i=e.chart,s=e.left,r=e.top,o=t.old,a=t.value,n=t.lineWidth,h=o&&i.oldChartHeight||i.chartHeight,l=o&&i.oldChartWidth||i.chartWidth,d=e.transB,c=t.translatedValue,p=t.force,u,g,f,x,y;function b(t,e,i){return\"pass\"!==p&&(ti)&&(p?t=m(t,e,i):y=!0),t}let v={value:a,lineWidth:n,old:o,force:p,acrossPanes:t.acrossPanes,translatedValue:c};return C(this,\"getPlotLinePath\",v,function(t){u=f=Math.round((c=m(c=E(c,e.translate(a,void 0,void 0,o)),-1e5,1e5))+d),g=x=Math.round(h-c-d),A(c)?e.horiz?(g=r,x=h-e.bottom+(i.scrollablePixelsY||0),u=f=b(u,s,s+e.width)):(u=s,f=l-e.right+(i.scrollablePixelsX||0),g=x=b(g,r,r+e.height)):(y=!0,p=!1),t.path=y&&!p?void 0:i.renderer.crispLine([[\"M\",u,g],[\"L\",f,x]],n||1)}),v.path}getLinearTickPositions(t,e,i){let s,r,o;let a=x(Math.floor(e/t)*t),n=x(Math.ceil(i/t)*t),h=[];if(x(a+t)===a&&(o=20),this.single)return[e];for(s=a;s<=n&&(h.push(s),(s=x(s+t,o))!==r);)r=s;return h}getMinorTickInterval(){let{minorTicks:t,minorTickInterval:e}=this.options;return!0===t?E(e,\"auto\"):!1!==t?e:void 0}getMinorTickPositions(){let t=this.options,e=this.tickPositions,i=this.minorTickInterval,s=this.pointRangePadding||0,r=(this.min||0)-s,o=(this.max||0)+s,a=o-r,n=[],h;if(a&&a/i(t.xIncrement?t.xData?.slice(0,2):t.xData)||[]))||0),this.dataMax-this.dataMin)),A(i)&&A(s)&&A(r)&&i-s=r,o=(r-i+s)/2,n=[s-o,E(t.min,s-o)],a&&(n[2]=e?e.log2lin(this.dataMin):this.dataMin),h=[(s=g(n))+r,E(t.max,s+r)],a&&(h[2]=e?e.log2lin(this.dataMax):this.dataMax),(i=f(h))-st-e),t=M([i]))}return t&&e?Math.min(t,e):t||e}nameToX(t){let e=T(this.options.categories),i=e?this.categories:this.names,s=t.options.x,r;return t.series.requireSorting=!1,y(s)||(s=this.options.uniqueNames&&i?e?i.indexOf(t.name):E(i.keys[t.name],-1):t.series.autoIncrement()),-1===s?!e&&i&&(r=i.length):r=s,void 0!==r?(this.names[r]=t.name,this.names.keys[t.name]=r):t.x&&(r=t.x),r}updateNames(){let t=this,e=this.names;e.length>0&&(Object.keys(e.keys).forEach(function(t){delete e.keys[t]}),e.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(e=>{e.xIncrement=null,(!e.points||e.isDirtyData)&&(t.max=Math.max(t.max,e.xData.length-1),e.processData(),e.generatePoints()),e.data.forEach(function(i,s){let r;i?.options&&void 0!==i.name&&void 0!==(r=t.nameToX(i))&&r!==i.x&&(i.x=r,e.xData[s]=r)})}))}setAxisTranslation(){let t=this,e=t.max-t.min,i=t.linkedParent,s=!!t.categories,r=t.isXAxis,o=t.axisPointRange||0,a,n=0,h=0,l,d=t.transA;(r||s||o)&&(a=t.getClosest(),i?(n=i.minPointOffset,h=i.pointRangePadding):t.series.forEach(function(e){let i=s?1:r?E(e.options.pointRange,a,0):t.axisPointRange||0,l=e.options.pointPlacement;if(o=Math.max(o,i),!t.single||s){let t=e.is(\"xrange\")?!r:r;n=Math.max(n,t&&P(l)?0:i/2),h=Math.max(h,t&&\"on\"===l?0:i)}}),l=t.ordinal&&t.ordinal.slope&&a?t.ordinal.slope/a:1,t.minPointOffset=n*=l,t.pointRangePadding=h*=l,t.pointRange=Math.min(o,t.single&&s?1:e),r&&a&&(t.closestPointRange=a)),t.translationSlope=t.transA=d=t.staticScale||t.len/(e+h||1),t.transB=t.horiz?t.left:t.bottom,t.minPixelPadding=d*n,C(this,\"afterSetAxisTranslation\")}minFromRange(){let{max:t,min:e}=this;return A(t)&&A(e)&&t-e||void 0}setTickInterval(t){let{categories:e,chart:i,dataMax:s,dataMin:r,dateTime:o,isXAxis:a,logarithmic:n,options:h,softThreshold:l}=this,d=A(this.threshold)?this.threshold:void 0,c=this.minRange||0,{ceiling:p,floor:u,linkedTo:g,softMax:f,softMin:m}=h,b=A(g)&&i[this.coll]?.[g],v=h.tickPixelInterval,k=h.maxPadding,M=h.minPadding,w=0,T,P=A(h.tickInterval)&&h.tickInterval>=0?h.tickInterval:void 0,L,O,D,I;if(o||e||b||this.getTickAmount(),D=E(this.userMin,h.min),I=E(this.userMax,h.max),b?(this.linkedParent=b,T=b.getExtremes(),this.min=E(T.min,T.dataMin),this.max=E(T.max,T.dataMax),h.type!==b.options.type&&S(11,!0,i)):(l&&y(d)&&A(s)&&A(r)&&(r>=d?(L=d,M=0):s<=d&&(O=d,k=0)),this.min=E(D,L,r),this.max=E(I,O,s)),A(this.max)&&A(this.min)&&(n&&(this.positiveValuesOnly&&!t&&0>=Math.min(this.min,E(r,this.min))&&S(10,!0,i),this.min=x(n.log2lin(this.min),16),this.max=x(n.log2lin(this.max),16)),this.range&&A(r)&&(this.userMin=this.min=D=Math.max(r,this.minFromRange()||0),this.userMax=I=this.max,this.range=void 0)),C(this,\"foundExtremes\"),this.adjustForMinRange(),A(this.min)&&A(this.max)){if(!A(this.userMin)&&A(m)&&mthis.max&&(this.max=I=f),e||this.axisPointRange||this.stacking?.usePercentage||b||!(w=this.max-this.min)||(!y(D)&&M&&(this.min-=w*M),y(I)||!k||(this.max+=w*k)),!A(this.userMin)&&A(u)&&(this.min=Math.max(this.min,u)),!A(this.userMax)&&A(p)&&(this.max=Math.min(this.max,p)),l&&A(r)&&A(s)){let t=d||0;!y(D)&&this.min=t?this.min=h.minRange?Math.min(t,this.max-c):t:!y(I)&&this.max>t&&s<=t&&(this.max=h.minRange?Math.max(t,this.min+c):t)}!i.polar&&this.min>this.max&&(y(h.min)?this.max=this.min:y(h.max)&&(this.min=this.max)),w=this.max-this.min}if(this.min!==this.max&&A(this.min)&&A(this.max)?b&&!P&&v===b.options.tickPixelInterval?this.tickInterval=P=b.tickInterval:this.tickInterval=E(P,this.tickAmount?w/Math.max(this.tickAmount-1,1):void 0,e?1:w*v/Math.max(this.len,v)):this.tickInterval=1,a&&!t){let t=this.min!==this.old?.min||this.max!==this.old?.max;this.series.forEach(function(e){e.forceCrop=e.forceCropping?.(),e.processData(t)}),C(this,\"postProcessData\",{hasExtremesChanged:t})}this.setAxisTranslation(),C(this,\"initialAxisTranslation\"),this.pointRange&&!P&&(this.tickInterval=Math.max(this.pointRange,this.tickInterval));let j=E(h.minTickInterval,o&&!this.series.some(t=>t.noSharedTooltip)?this.closestPointRange:0);!P&&this.tickIntervalMath.max(2*this.len,200))n=[this.min,this.max],S(19,!1,this.chart);else if(this.dateTime)n=this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,t.units),this.min,this.max,t.startOfWeek,this.ordinal?.positions,this.closestPointRange,!0);else if(this.logarithmic)n=this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max);else{let t=this.tickInterval,e=t;for(;e<=2*t;)if(n=this.getLinearTickPositions(this.tickInterval,this.min,this.max),this.tickAmount&&n.length>this.tickAmount)this.tickInterval=z(this,e*=1.1);else break}n.length>this.len&&(n=[n[0],n[n.length-1]])[0]===n[1]&&(n.length=1),i&&(this.tickPositions=n,(h=i.apply(this,[this.min,this.max]))&&(n=h))}this.tickPositions=n,this.paddedTicks=n.slice(0),this.trimTicks(n,o,a),!this.isLinked&&A(this.min)&&A(this.max)&&(this.single&&n.length<2&&!this.categories&&!this.series.some(t=>t.is(\"heatmap\")&&\"between\"===t.options.pointPlacement)&&(this.min-=.5,this.max+=.5),e||h||this.adjustTickAmount()),C(this,\"afterSetTickPositions\")}trimTicks(t,e,i){let s=t[0],r=t[t.length-1],o=!this.isOrdinal&&this.minPointOffset||0;if(C(this,\"trimTicks\"),!this.isLinked){if(e&&s!==-1/0)this.min=s;else for(;this.min-o>t[0];)t.shift();if(i)this.max=r;else for(;this.max+o{let{horiz:e,options:i}=t;return[e?i.left:i.top,i.width,i.height,i.pane].join(\",\")},o=r(this);i[this.coll].forEach(function(i){let{series:a}=i;a.length&&a.some(t=>t.visible)&&i!==e&&r(i)===o&&(t=!0,s.push(i))})}if(t&&a){s.forEach(t=>{let i=t.getThresholdAlignment(e);A(i)&&n.push(i)});let t=n.length>1?n.reduce((t,e)=>t+=e,0)/n.length:void 0;s.forEach(e=>{e.thresholdAlignment=t})}return t}getThresholdAlignment(t){if((!A(this.dataMin)||this!==t&&this.series.some(t=>t.isDirty||t.isDirtyData))&&this.getSeriesExtremes(),A(this.threshold)){let t=m((this.threshold-(this.dataMin||0))/((this.dataMax||0)-(this.dataMin||0)),0,1);return this.options.reversed&&(t=1-t),t}}getTickAmount(){let t=this.options,e=t.tickPixelInterval,i=t.tickAmount;y(t.tickInterval)||i||!(this.leno.push(x(o[o.length-1]+p)),f=()=>o.unshift(x(o[0]-p));if(A(n)&&(u=n<.5?Math.ceil(n*(a-1)):Math.floor(n*(a-1)),r.reversed&&(u=a-1-u)),t.hasData()&&A(s)&&A(i)){let n=()=>{t.transA*=(h-1)/(a-1),t.min=r.startOnTick?o[0]:Math.min(s,o[0]),t.max=r.endOnTick?o[o.length-1]:Math.max(i,o[o.length-1])};if(A(u)&&A(t.threshold)){for(;o[u]!==l||o.length!==a||o[0]>s||o[o.length-1]t.threshold?f():g();if(p>8*t.tickInterval)break;p*=2}n()}else if(h0&&c{i=i||t.isDirtyData||t.isDirty,s=s||t.xAxis&&t.xAxis.isDirty||!1}),this.setAxisSize();let r=this.len!==(this.old&&this.old.len);r||i||s||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(e&&\"yAxis\"===t&&e.buildStacks(),this.forceRedraw=!1,this.userMinRange||(this.minRange=void 0),this.getSeriesExtremes(),this.setTickInterval(),e&&\"xAxis\"===t&&e.buildStacks(),this.isDirty||(this.isDirty=r||this.min!==this.old?.min||this.max!==this.old?.max)):e&&e.cleanStacks(),i&&delete this.allExtremes,C(this,\"afterSetScale\")}setExtremes(t,e,i=!0,s,r){this.series.forEach(t=>{delete t.kdTree}),C(this,\"setExtremes\",r=k(r,{min:t,max:e}),t=>{this.userMin=t.min,this.userMax=t.max,this.eventArgs=t,i&&this.chart.redraw(s)})}setAxisSize(){let t=this.chart,e=this.options,i=e.offsets||[0,0,0,0],s=this.horiz,r=this.width=Math.round(I(E(e.width,t.plotWidth-i[3]+i[1]),t.plotWidth)),o=this.height=Math.round(I(E(e.height,t.plotHeight-i[0]+i[2]),t.plotHeight)),a=this.top=Math.round(I(E(e.top,t.plotTop+i[0]),t.plotHeight,t.plotTop)),n=this.left=Math.round(I(E(e.left,t.plotLeft+i[3]),t.plotWidth,t.plotLeft));this.bottom=t.chartHeight-o-a,this.right=t.chartWidth-r-n,this.len=Math.max(s?r:o,0),this.pos=s?n:a}getExtremes(){let t=this.logarithmic;return{min:t?x(t.lin2log(this.min)):this.min,max:t?x(t.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}getThreshold(t){let e=this.logarithmic,i=e?e.lin2log(this.min):this.min,s=e?e.lin2log(this.max):this.max;return null===t||t===-1/0?t=i:t===1/0?t=s:i>t?t=i:s15&&e<165?t.align=\"right\":e>195&&e<345&&(t.align=\"left\")}),i.align}tickSize(t){let e=this.options,i=E(e[\"tick\"===t?\"tickWidth\":\"minorTickWidth\"],\"tick\"===t&&this.isXAxis&&!this.categories?1:0),s=e[\"tick\"===t?\"tickLength\":\"minorTickLength\"],r;i&&s&&(\"inside\"===e[t+\"Position\"]&&(s=-s),r=[s,i]);let o={tickSize:r};return C(this,\"afterTickSize\",o),o.tickSize}labelMetrics(){let t=this.chart.renderer,e=this.ticks,i=e[Object.keys(e)[0]]||{};return this.chart.renderer.fontMetrics(i.label||i.movedLabel||t.box)}unsquish(){let t=this.options.labels,e=this.horiz,i=this.tickInterval,s=this.len/(((this.categories?1:0)+this.max-this.min)/i),r=t.rotation,o=this.labelMetrics().h,a=Math.max(this.max-this.min,0),n=function(t){let e=t/(s||1);return(e=e>1?Math.ceil(e):1)*i>a&&t!==1/0&&s!==1/0&&a&&(e=Math.ceil(a/i)),x(e*i)},h=i,l,d=Number.MAX_VALUE,c;if(e){if(!t.staggerLines&&(A(r)?c=[r]:s=-90&&i<=90)&&(e=(t=n(Math.abs(o/Math.sin(u*i))))+Math.abs(i/360))g&&(g=e.label.textPxLength)}),this.maxLabelLength=g,this.autoRotation)g>h&&g>d.h?l.rotation=this.labelRotation:this.labelRotation=0;else if(n&&(p=h,!c))for(u=\"clip\",m=i.length;!a&&m--;)(f=s[i[m]].label)&&(\"ellipsis\"===f.styles.textOverflow?f.css({textOverflow:\"clip\"}):f.textPxLength>n&&f.css({width:n+\"px\"}),f.getBBox().height>this.len/i.length-(d.h-d.f)&&(f.specificTextOverflow=\"ellipsis\"));l.rotation&&(p=g>.5*t.chartHeight?.33*t.chartHeight:g,c||(u=\"ellipsis\")),this.labelAlign=r.align||this.autoLabelAlign(this.labelRotation),this.labelAlign&&(l.align=this.labelAlign),i.forEach(function(t){let e=s[t],i=e&&e.label,r=o.width,a={};i&&(i.attr(l),e.shortenLabel?e.shortenLabel():p&&!r&&\"nowrap\"!==o.whiteSpace&&(pr.g(e).attr({zIndex:a}).addClass(`highcharts-${i.toLowerCase()}${o} `+(this.isRadial?`highcharts-radial-axis${o} `:\"\")+(s.className||\"\")).add(t);this.axisGroup||(this.gridGroup=o(\"grid\",\"-grid\",s.gridZIndex),this.axisGroup=o(\"axis\",\"\",s.zIndex),this.labelGroup=o(\"axis-labels\",\"-labels\",s.labels.zIndex))}getOffset(){let t=this,{chart:e,horiz:i,options:s,side:r,ticks:o,tickPositions:a,coll:n}=t,h=e.inverted&&!t.isZAxis?[1,0,3,2][r]:r,l=t.hasData(),d=s.title,c=s.labels,p=A(s.crossing),u=e.axisOffset,g=e.clipOffset,f=[-1,1,1,-1][r],m,x=0,b,v=0,S=0,k,M;if(t.showAxis=m=l||s.showEmpty,t.staggerLines=t.horiz&&c.staggerLines||void 0,t.createGroups(),l||t.isLinked?(a.forEach(function(e){t.generateTick(e)}),t.renderUnsquish(),t.reserveSpaceDefault=0===r||2===r||({1:\"left\",3:\"right\"})[r]===t.labelAlign,E(c.reserveSpace,!p&&null,\"center\"===t.labelAlign||null,t.reserveSpaceDefault)&&a.forEach(function(t){S=Math.max(o[t].getLabelSize(),S)}),t.staggerLines&&(S*=t.staggerLines),t.labelOffset=S*(t.opposite?-1:1)):D(o,function(t,e){t.destroy(),delete o[e]}),d?.text&&!1!==d.enabled&&(t.addTitle(m),m&&!p&&!1!==d.reserveSpace&&(t.titleOffset=x=t.axisTitle.getBBox()[i?\"height\":\"width\"],v=y(b=d.offset)?0:E(d.margin,i?5:10))),t.renderLine(),t.offset=f*E(s.offset,u[r]?u[r]+(s.margin||0):0),t.tickRotCorr=t.tickRotCorr||{x:0,y:0},M=0===r?-t.labelMetrics().h:2===r?t.tickRotCorr.y:0,k=Math.abs(S)+v,S&&(k-=M,k+=f*(i?E(c.y,t.tickRotCorr.y+f*c.distance):E(c.x,f*c.distance))),t.axisTitleMargin=E(b,k),t.getMaxLabelDimensions&&(t.maxLabelDimensions=t.getMaxLabelDimensions(o,a)),\"colorAxis\"!==n){let e=this.tickSize(\"tick\");u[r]=Math.max(u[r],(t.axisTitleMargin||0)+x+f*t.offset,k,a&&a.length&&e?e[0]+f*t.offset:0);let i=!t.axisLine||s.offset?0:2*Math.floor(t.axisLine.strokeWidth()/2);g[h]=Math.max(g[h],i)}C(this,\"afterGetOffset\")}getLinePath(t){let e=this.chart,i=this.opposite,s=this.offset,r=this.horiz,o=this.left+(i?this.width:0)+s,a=e.chartHeight-this.bottom-(i?this.height:0)+s;return i&&(t*=-1),e.renderer.crispLine([[\"M\",r?this.left:o,r?a:this.top],[\"L\",r?e.chartWidth-this.right:o,r?a:e.chartHeight-this.bottom]],t)}renderLine(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,\"stroke-width\":this.options.lineWidth,zIndex:7}))}getTitlePosition(t){let e=this.horiz,i=this.left,s=this.top,r=this.len,o=this.options.title,a=e?i:s,n=this.opposite,h=this.offset,l=o.x,d=o.y,c=this.chart.renderer.fontMetrics(t),p=t?Math.max(t.getBBox(!1,0).height-c.h-1,0):0,u={low:a+(e?0:r),middle:a+r/2,high:a+(e?r:0)}[o.align],g=(e?s+this.height:i)+(e?1:-1)*(n?-1:1)*(this.axisTitleMargin||0)+[-p,p,c.f,-p][this.side],f={x:e?u+l:g+(n?this.width:0)+h+l,y:e?g+d-(n?this.height:0)+h:u+d};return C(this,\"afterGetTitlePosition\",{titlePosition:f}),f}renderMinorTick(t,e){let i=this.minorTicks;i[t]||(i[t]=new a(this,t,\"minor\")),e&&i[t].isNew&&i[t].render(null,!0),i[t].render(null,!1,1)}renderTick(t,e,i){let s=this.isLinked,r=this.ticks;(!s||t>=this.min&&t<=this.max||this.grid&&this.grid.isColumn)&&(r[t]||(r[t]=new a(this,t)),i&&r[t].isNew&&r[t].render(e,!0,-1),r[t].render(e))}render(){let t,e;let i=this,s=i.chart,r=i.logarithmic,n=s.renderer,l=i.options,d=i.isLinked,c=i.tickPositions,p=i.axisTitle,u=i.ticks,g=i.minorTicks,f=i.alternateBands,m=l.stackLabels,x=l.alternateGridColor,y=l.crossing,b=i.tickmarkOffset,v=i.axisLine,S=i.showAxis,k=h(n.globalAnimation);if(i.labelEdge.length=0,i.overlap=!1,[u,g,f].forEach(function(t){D(t,function(t){t.isActive=!1})}),A(y)){let t=this.isXAxis?s.yAxis[0]:s.xAxis[0],e=[1,-1,-1,1][this.side];if(t){let s=t.toPixels(y,!0);i.horiz&&(s=t.len-s),i.offset=e*s}}if(i.hasData()||d){let n=i.chart.hasRendered&&i.old&&A(i.old.min);i.minorTickInterval&&!i.categories&&i.getMinorTickPositions().forEach(function(t){i.renderMinorTick(t,n)}),c.length&&(c.forEach(function(t,e){i.renderTick(t,e,n)}),b&&(0===i.min||i.single)&&(u[-1]||(u[-1]=new a(i,-1,null,!0)),u[-1].render(-1))),x&&c.forEach(function(a,n){e=void 0!==c[n+1]?c[n+1]+b:i.max-b,n%2==0&&a=.5)t=Math.round(t),l=a.getLinearTickPositions(t,e,i);else if(t>=.08){let s,r,a,n,h,d,c;let p=Math.floor(e);for(s=t>.3?[1,2,4]:t>.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9],r=p;re&&(!o||d<=i)&&void 0!==d&&l.push(d),d>i&&(c=!0),d=h}else{let d=this.lin2log(e),c=this.lin2log(i),p=o?a.getMinorTickInterval():h.tickInterval,u=h.tickPixelInterval/(o?5:1),g=o?n/a.tickPositions.length:n;t=s(t=r(\"auto\"===p?null:p,this.minorAutoInterval,(c-d)*u/(g||1))),l=a.getLinearTickPositions(t,d,c).map(this.log2lin),o||(this.minorAutoInterval=t/5)}return o||(a.tickInterval=t),l}lin2log(t){return Math.pow(10,t)}log2lin(t){return Math.log(t)/Math.LN10}}t.Additions=a}(e||(e={})),e}),i(e,\"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{erase:i,extend:s,isNumber:r}=t;return function(t){let e;function o(t){return this.addPlotBandOrLine(t,\"plotBands\")}function a(t,i){let s=this.userOptions,r=new e(this,t);if(this.visible&&(r=r.render()),r){if(this._addedPlotLB||(this._addedPlotLB=!0,(s.plotLines||[]).concat(s.plotBands||[]).forEach(t=>{this.addPlotBandOrLine(t)})),i){let e=s[i]||[];e.push(t),s[i]=e}this.plotLinesAndBands.push(r)}return r}function n(t){return this.addPlotBandOrLine(t,\"plotLines\")}function h(t,e,i){i=i||this.options;let s=this.getPlotLinePath({value:e,force:!0,acrossPanes:i.acrossPanes}),o=[],a=this.horiz,n=!r(this.min)||!r(this.max)||tthis.max&&e>this.max,h=this.getPlotLinePath({value:t,force:!0,acrossPanes:i.acrossPanes}),l,d=1,c;if(h&&s)for(n&&(c=h.toString()===s.toString(),d=0),l=0;l{v?.on(e,t=>{a[e].apply(this,[t])})}),this.eventsAdded=!0),(w||!v.d)&&S?.length?v.attr({d:S}):v&&(S?(v.show(),v.animate({d:S})):v.d&&(v.hide(),b&&(this.label=b=b.destroy()))),y&&(r(y.text)||r(y.formatter))&&S?.length&&t.width>0&&t.height>0&&!S.isFlat?(y=h({align:i&&C&&\"center\",x:i?!C&&4:10,verticalAlign:!i&&C&&\"middle\",y:i?C?16:10:C?6:-4,rotation:i&&!C&&90},y),this.renderLabel(y,S,C,c)):b&&b.hide(),this}renderLabel(t,e,r,o){let a=this.axis,n=a.chart.renderer,l=this.label;l||(this.label=l=n.text(this.getLabelText(t),0,0,t.useHTML).attr({align:t.textAlign||t.align,rotation:t.rotation,class:\"highcharts-plot-\"+(r?\"band\":\"line\")+\"-label\"+(t.className||\"\"),zIndex:o}),a.chart.styledMode||l.css(h({fontSize:\"0.8em\",textOverflow:\"ellipsis\"},t.style)),l.add());let d=e.xBounds||[e[0][1],e[1][1],r?e[2][1]:e[0][1]],c=e.yBounds||[e[0][2],e[1][2],r?e[2][2]:e[0][2]],p=s(d),u=s(c);if(l.align(t,!1,{x:p,y:u,width:i(d)-p,height:i(c)-u}),!l.alignValue||\"left\"===l.alignValue){let e=t.clip?a.width:a.chart.chartWidth;l.css({width:(90===l.rotation?a.height-(l.alignAttr.y-a.top):e-(l.alignAttr.x-a.left))+\"px\"})}l.show(!0)}getLabelText(t){return r(t.formatter)?t.formatter.call(this):t.text}destroy(){a(this.axis.plotLinesAndBands,this),delete this.axis,o(this)}}return c}),i(e,\"Core/Tooltip.js\",[e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r){var o;let{format:a}=t,{composed:n,doc:h,isSafari:l}=e,{distribute:d}=i,{addEvent:c,clamp:p,css:u,discardElement:g,extend:f,fireEvent:m,isArray:x,isNumber:y,isString:b,merge:v,pick:S,pushUnique:k,splat:C,syncTimeout:M}=r;class w{constructor(t,e,i){this.allowShared=!0,this.crosshairs=[],this.distance=0,this.isHidden=!0,this.isSticky=!1,this.now={},this.options={},this.outside=!1,this.chart=t,this.init(t,e),this.pointer=i}bodyFormatter(t){return t.map(function(t){let e=t.series.tooltipOptions;return(e[(t.point.formatPrefix||\"point\")+\"Formatter\"]||t.point.tooltipFormatter).call(t.point,e[(t.point.formatPrefix||\"point\")+\"Format\"]||\"\")})}cleanSplit(t){this.chart.series.forEach(function(e){let i=e&&e.tt;i&&(!i.isActive||t?e.tt=i.destroy():i.isActive=!1)})}defaultFormatter(t){let e;let i=this.points||C(this);return(e=(e=[t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0],!0)),e}destroy(){this.label&&(this.label=this.label.destroy()),this.split&&(this.cleanSplit(!0),this.tt&&(this.tt=this.tt.destroy())),this.renderer&&(this.renderer=this.renderer.destroy(),g(this.container)),r.clearTimeout(this.hideTimer),r.clearTimeout(this.tooltipTimeout)}getAnchor(t,e){let i;let{chart:s,pointer:r}=this,o=s.inverted,a=s.plotTop,n=s.plotLeft;if((t=C(t))[0].series&&t[0].series.yAxis&&!t[0].series.yAxis.options.reversedStacks&&(t=t.slice().reverse()),this.followPointer&&e)void 0===e.chartX&&(e=r.normalize(e)),i=[e.chartX-n,e.chartY-a];else if(t[0].tooltipPos)i=t[0].tooltipPos;else{let s=0,r=0;t.forEach(function(t){let e=t.pos(!0);e&&(s+=e[0],r+=e[1])}),s/=t.length,r/=t.length,this.shared&&t.length>1&&e&&(o?s=e.chartX:r=e.chartY),i=[s-n,r-a]}return i.map(Math.round)}getClassName(t,e,i){let s=this.options,r=t.series,o=r.options;return[s.className,\"highcharts-label\",i&&\"highcharts-tooltip-header\",e?\"highcharts-tooltip-box\":\"highcharts-tooltip\",!i&&\"highcharts-color-\"+S(t.colorIndex,r.colorIndex),o&&o.className].filter(b).join(\" \")}getLabel(){let t=this,i=this.chart.styledMode,r=this.options,o=this.split&&this.allowShared,a=this.container,n=this.chart.renderer;if(this.label){let t=!this.label.hasClass(\"highcharts-label\");(!o&&t||o&&!t)&&this.destroy()}if(!this.label){if(this.outside){let t=this.chart.options.chart.style,i=s.getRendererType();this.container=a=e.doc.createElement(\"div\"),a.className=\"highcharts-tooltip-container\",u(a,{position:\"absolute\",top:\"1px\",pointerEvents:\"none\",zIndex:Math.max(this.options.style.zIndex||0,(t&&t.zIndex||0)+3)}),this.renderer=n=new i(a,0,0,t,void 0,void 0,n.styledMode)}if(o?this.label=n.g(\"tooltip\"):(this.label=n.label(\"\",0,0,r.shape,void 0,void 0,r.useHTML,void 0,\"tooltip\").attr({padding:r.padding,r:r.borderRadius}),i||this.label.attr({fill:r.backgroundColor,\"stroke-width\":r.borderWidth||0}).css(r.style).css({pointerEvents:r.style.pointerEvents||(this.shouldStickOnContact()?\"auto\":\"none\")})),t.outside){let e=this.label,{xSetter:i,ySetter:s}=e;e.xSetter=function(s){i.call(e,t.distance),a&&(a.style.left=s+\"px\")},e.ySetter=function(i){s.call(e,t.distance),a&&(a.style.top=i+\"px\")}}this.label.attr({zIndex:8}).shadow(r.shadow).add()}return a&&!a.parentElement&&e.doc.body.appendChild(a),this.label}getPlayingField(){let{body:t,documentElement:e}=h,{chart:i,distance:s,outside:r}=this;return{width:r?Math.max(t.scrollWidth,e.scrollWidth,t.offsetWidth,e.offsetWidth,e.clientWidth)-2*s:i.chartWidth,height:r?Math.max(t.scrollHeight,e.scrollHeight,t.offsetHeight,e.offsetHeight,e.clientHeight):i.chartHeight}}getPosition(t,e,i){let{distance:s,chart:r,outside:o,pointer:a}=this,{inverted:n,plotLeft:h,plotTop:l,polar:d}=r,{plotX:c=0,plotY:p=0}=i,u={},g=n&&i.h||0,{height:f,width:m}=this.getPlayingField(),x=a.getChartPosition(),y=t=>t*x.scaleX,b=t=>t*x.scaleY,v=i=>{let a=\"x\"===i;return[i,a?m:f,a?t:e].concat(o?[a?y(t):b(e),a?x.left-s+y(c+h):x.top-s+b(p+l),0,a?m:f]:[a?t:e,a?c+h:p+l,a?h:l,a?h+r.plotWidth:l+r.plotHeight])},k=v(\"y\"),C=v(\"x\"),M,w=!!i.negative;!d&&r.hoverSeries?.yAxis?.reversed&&(w=!w);let T=!this.followPointer&&S(i.ttBelow,!d&&!n===w),A=function(t,e,i,r,a,n,h){let l=o?\"y\"===t?b(s):y(s):s,d=(i-r)/2,c=re?m:m+g)}},P=function(t,e,i,r,o){if(oe-s)return!1;oe-r/2?u[t]=e-r-2:u[t]=o-i/2},L=function(t){[k,C]=[C,k],M=t},O=()=>{!1!==A.apply(0,k)?!1!==P.apply(0,C)||M||(L(!0),O()):M?u.x=u.y=0:(L(!0),O())};return(n&&!d||this.len>1)&&L(),O(),u}hide(t){let e=this;r.clearTimeout(this.hideTimer),t=S(t,this.options.hideDelay),this.isHidden||(this.hideTimer=M(function(){let i=e.getLabel();e.getLabel().animate({opacity:0},{duration:t?150:t,complete:()=>{i.hide(),e.container&&e.container.remove()}}),e.isHidden=!0},t))}init(t,e){this.chart=t,this.options=e,this.crosshairs=[],this.now={x:0,y:0},this.isHidden=!0,this.split=e.split&&!t.inverted&&!t.polar,this.shared=e.shared||this.split,this.outside=S(e.outside,!!(t.scrollablePixelsX||t.scrollablePixelsY))}shouldStickOnContact(t){return!!(!this.followPointer&&this.options.stickOnContact&&(!t||this.pointer.inClass(t.target,\"highcharts-tooltip\")))}move(t,e,i,s){let o=this,a=o.now,n=!1!==o.options.animation&&!o.isHidden&&(Math.abs(t-a.x)>1||Math.abs(e-a.y)>1),h=o.followPointer||o.len>1;f(a,{x:n?(2*a.x+t)/3:t,y:n?(a.y+e)/2:e,anchorX:h?void 0:n?(2*a.anchorX+i)/3:i,anchorY:h?void 0:n?(a.anchorY+s)/2:s}),o.getLabel().attr(a),o.drawTracker(),n&&(r.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){o&&o.move(t,e,i,s)},32))}refresh(t,e){let{chart:i,options:s,pointer:o,shared:n}=this,h=C(t),l=h[0],d=[],c=s.format,p=s.formatter||this.defaultFormatter,u=i.styledMode,g={};if(!s.enabled||!l.series)return;r.clearTimeout(this.hideTimer),this.allowShared=!(!x(t)&&t.series&&t.series.noSharedTooltip),this.followPointer=!this.split&&l.series.tooltipOptions.followPointer;let f=this.getAnchor(t,e),y=f[0],v=f[1];n&&this.allowShared?(o.applyInactiveState(h),h.forEach(function(t){t.setState(\"hover\"),d.push(t.getLabelConfig())}),(g=l.getLabelConfig()).points=d):g=l.getLabelConfig(),this.len=d.length;let k=b(c)?a(c,g,i):p.call(g,this),M=l.series;if(this.distance=S(M.tooltipOptions.distance,16),!1===k)this.hide();else{if(this.split&&this.allowShared)this.renderSplit(k,h);else{let t=y,r=v;if(e&&o.isDirectTouch&&(t=e.chartX-i.plotLeft,r=e.chartY-i.plotTop),i.polar||!1===M.options.clip||h.some(e=>o.isDirectTouch||e.series.shouldShowTooltip(t,r))){let t=this.getLabel();(!s.style.width||u)&&t.css({width:(this.outside?this.getPlayingField():i.spacingBox).width+\"px\"}),t.attr({text:k&&k.join?k.join(\"\"):k}),t.addClass(this.getClassName(l),!0),u||t.attr({stroke:s.borderColor||l.color||M.color||\"#666666\"}),this.updatePosition({plotX:y,plotY:v,negative:l.negative,ttBelow:l.ttBelow,h:f[2]||0})}else{this.hide();return}}this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1}m(this,\"refresh\")}renderSplit(t,e){let i=this,{chart:s,chart:{chartWidth:r,chartHeight:o,plotHeight:a,plotLeft:n,plotTop:c,scrollablePixelsY:u=0,scrollablePixelsX:g,styledMode:m},distance:x,options:y,options:{positioner:v},pointer:k}=i,{scrollLeft:C=0,scrollTop:M=0}=s.scrollablePlotArea?.scrollingContainer||{},w=i.outside&&\"number\"!=typeof g?h.documentElement.getBoundingClientRect():{left:C,right:C+r,top:M,bottom:M+o},T=i.getLabel(),A=this.renderer||s.renderer,P=!!(s.xAxis[0]&&s.xAxis[0].opposite),{left:L,top:O}=k.getChartPosition(),D=c+M,E=0,I=a-u;function j(t,e,s,r,o=!0){let a,n;return s?(a=P?0:I,n=p(t-r/2,w.left,w.right-r-(i.outside?L:0))):(a=e-D,n=p(n=o?t-r-x:t+x,o?n:w.left,w.right)),{x:n,y:a}}b(t)&&(t=[!1,t]);let B=t.slice(0,e.length+1).reduce(function(t,s,r){if(!1!==s&&\"\"!==s){let o=e[r-1]||{isHeader:!0,plotX:e[0].plotX,plotY:a,series:{}},h=o.isHeader,l=h?i:o.series,d=l.tt=function(t,e,s){let r=t,{isHeader:o,series:a}=e;if(!r){let t={padding:y.padding,r:y.borderRadius};m||(t.fill=y.backgroundColor,t[\"stroke-width\"]=y.borderWidth??1),r=A.label(\"\",0,0,y[o?\"headerShape\":\"shape\"],void 0,void 0,y.useHTML).addClass(i.getClassName(e,!0,o)).attr(t).add(T)}return r.isActive=!0,r.attr({text:s}),m||r.css(y.style).attr({stroke:y.borderColor||e.color||a.color||\"#333333\"}),r}(l.tt,o,s.toString()),u=d.getBBox(),g=u.width+d.strokeWidth();h&&(E=u.height,I+=E,P&&(D-=E));let{anchorX:f,anchorY:b}=function(t){let e,i;let{isHeader:s,plotX:r=0,plotY:o=0,series:h}=t;if(s)e=Math.max(n+r,n),i=c+a/2;else{let{xAxis:t,yAxis:s}=h;e=t.pos+p(r,-x,t.len+x),h.shouldShowTooltip(0,s.pos-c+o,{ignoreX:!0})&&(i=s.pos+o)}return{anchorX:e=p(e,w.left-x,w.right+x),anchorY:i}}(o);if(\"number\"==typeof b){let e=u.height+1,s=v?v.call(i,g,e,o):j(f,b,h,g);t.push({align:v?0:void 0,anchorX:f,anchorY:b,boxWidth:g,point:o,rank:S(s.rank,h?1:0),size:e,target:s.y,tt:d,x:s.x})}else d.isActive=!1}return t},[]);!v&&B.some(t=>{let{outside:e}=i,s=(e?L:0)+t.anchorX;return ss})&&(B=B.map(t=>{let{x:e,y:i}=j(t.anchorX,t.anchorY,t.point.isHeader,t.boxWidth,!1);return f(t,{target:i,x:e})})),i.cleanSplit(),d(B,I);let R={left:L,right:L};B.forEach(function(t){let{x:e,boxWidth:s,isHeader:r}=t;!r&&(i.outside&&L+eR.right&&(R.right=L+e))}),B.forEach(function(t){let{x:e,anchorX:s,anchorY:r,pos:o,point:{isHeader:a}}=t,n={visibility:void 0===o?\"hidden\":\"inherit\",x:e,y:(o||0)+D,anchorX:s,anchorY:r};if(i.outside&&e0&&(a||(n.x=e+t,n.anchorX=s+t),a&&(n.x=(R.right-R.left)/2,n.anchorX=s+t))}t.tt.attr(n)});let{container:z,outside:N,renderer:W}=i;if(N&&z&&W){let{width:t,height:e,x:i,y:s}=T.getBBox();W.setSize(t+i,e+s,!1),z.style.left=R.left+\"px\",z.style.top=O+\"px\"}l&&T.attr({opacity:1===T.opacity?.999:1})}drawTracker(){if(!this.shouldStickOnContact()){this.tracker&&(this.tracker=this.tracker.destroy());return}let t=this.chart,e=this.label,i=this.shared?t.hoverPoints:t.hoverPoint;if(!e||!i)return;let s={x:0,y:0,width:0,height:0},r=this.getAnchor(i),o=e.getBBox();r[0]+=t.plotLeft-(e.translateX||0),r[1]+=t.plotTop-(e.translateY||0),s.x=Math.min(0,r[0]),s.y=Math.min(0,r[1]),s.width=r[0]<0?Math.max(Math.abs(r[0]),o.width-r[0]):Math.max(Math.abs(r[0]),o.width),s.height=r[1]<0?Math.max(Math.abs(r[1]),o.height-Math.abs(r[1])):Math.max(Math.abs(r[1]),o.height),this.tracker?this.tracker.attr(s):(this.tracker=e.renderer.rect(s).addClass(\"highcharts-tracker\").add(e),t.styledMode||this.tracker.attr({fill:\"rgba(0,0,0,0)\"}))}styledModeFormat(t){return t.replace('style=\"font-size: 0.8em\"','class=\"highcharts-header\"').replace(/style=\"color:{(point|series)\\.color}\"/g,'class=\"highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}\"')}tooltipFooterHeaderFormatter(t,e){let i=t.series,s=i.tooltipOptions,r=i.xAxis,o=r&&r.dateTime,n={isFooter:e,labelConfig:t},h=s.xDateFormat,l=s[e?\"footerFormat\":\"headerFormat\"];return m(this,\"headerFormatter\",n,function(e){o&&!h&&y(t.key)&&(h=o.getXDateFormat(t.key,s.dateTimeLabelFormats)),o&&h&&(t.point&&t.point.tooltipDateKeys||[\"key\"]).forEach(function(t){l=l.replace(\"{point.\"+t+\"}\",\"{point.\"+t+\":\"+h+\"}\")}),i.chart.styledMode&&(l=this.styledModeFormat(l)),e.text=a(l,{point:t,series:i},this.chart)}),n.text}update(t){this.destroy(),this.init(this.chart,v(!0,this.options,t))}updatePosition(t){let{chart:e,container:i,distance:s,options:r,pointer:o,renderer:a}=this,{height:n=0,width:h=0}=this.getLabel(),{left:l,top:d,scaleX:c,scaleY:p}=o.getChartPosition(),g=(r.positioner||this.getPosition).call(this,h,n,t),f=(t.plotX||0)+e.plotLeft,m=(t.plotY||0)+e.plotTop,x;a&&i&&(r.positioner&&(g.x+=l-s,g.y+=d-s),x=(r.borderWidth||0)+2*s+2,a.setSize(h+x,n+x,!1),(1!==c||1!==p)&&(u(i,{transform:`scale(${c}, ${p})`}),f*=c,m*=p),f+=l-g.x,m+=d-g.y),this.move(Math.round(g.x),Math.round(g.y||0),f,m)}}return(o=w||(w={})).compose=function(t){k(n,\"Core.Tooltip\")&&c(t,\"afterInit\",function(){let t=this.chart;t.options.tooltip&&(t.tooltip=new o(t,t.options.tooltip,this))})},w}),i(e,\"Core/Series/Point.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r){let{animObject:o}=e,{defaultOptions:a}=i,{format:n}=s,{addEvent:h,erase:l,extend:d,fireEvent:c,getNestedProperty:p,isArray:u,isFunction:g,isNumber:f,isObject:m,pick:x,syncTimeout:y,removeEvent:b,uniqueKey:v}=r;class S{animateBeforeDestroy(){let t=this,e={x:t.startXPos,opacity:0},i=t.getGraphicalProps();i.singular.forEach(function(i){t[i]=t[i].animate(\"dataLabel\"===i?{x:t[i].startXPos,y:t[i].startYPos,opacity:0}:e)}),i.plural.forEach(function(e){t[e].forEach(function(e){e.element&&e.animate(d({x:t.startXPos},e.startYPos?{x:e.startXPos,y:e.startYPos}:{}))})})}applyOptions(t,e){let i=this.series,s=i.options.pointValKey||i.pointValKey;return d(this,t=S.prototype.optionsToObject.call(this,t)),this.options=this.options?d(this.options,t):t,t.group&&delete this.group,t.dataLabels&&delete this.dataLabels,s&&(this.y=S.prototype.getNestedProperty.call(this,s)),this.selected&&(this.state=\"select\"),\"name\"in this&&void 0===e&&i.xAxis&&i.xAxis.hasNames&&(this.x=i.xAxis.nameToX(this)),void 0===this.x&&i?void 0===e?this.x=i.autoIncrement():this.x=e:f(t.x)&&i.options.relativeXValue&&(this.x=i.autoIncrement(t.x)),this.isNull=this.isValid&&!this.isValid(),this.formatPrefix=this.isNull?\"null\":\"point\",this}destroy(){if(!this.destroyed){let t=this,e=t.series,i=e.chart,s=e.options.dataSorting,r=i.hoverPoints,a=o(t.series.chart.renderer.globalAnimation),n=()=>{for(let e in(t.graphic||t.graphics||t.dataLabel||t.dataLabels)&&(b(t),t.destroyElements()),t)delete t[e]};t.legendItem&&i.legend.destroyItem(t),r&&(t.setState(),l(r,t),r.length||(i.hoverPoints=null)),t===i.hoverPoint&&t.onMouseOut(),s&&s.enabled?(this.animateBeforeDestroy(),y(n,a.duration)):n(),i.pointCount--}this.destroyed=!0}destroyElements(t){let e=this,i=e.getGraphicalProps(t);i.singular.forEach(function(t){e[t]=e[t].destroy()}),i.plural.forEach(function(t){e[t].forEach(function(t){t&&t.element&&t.destroy()}),delete e[t]})}firePointEvent(t,e,i){let s=this,r=this.series.options;s.manageEvent(t),\"click\"===t&&r.allowPointSelect&&(i=function(t){!s.destroyed&&s.select&&s.select(null,t.ctrlKey||t.metaKey||t.shiftKey)}),c(s,t,e,i)}getClassName(){return\"highcharts-point\"+(this.selected?\" highcharts-point-select\":\"\")+(this.negative?\" highcharts-negative\":\"\")+(this.isNull?\" highcharts-null-point\":\"\")+(void 0!==this.colorIndex?\" highcharts-color-\"+this.colorIndex:\"\")+(this.options.className?\" \"+this.options.className:\"\")+(this.zone&&this.zone.className?\" \"+this.zone.className.replace(\"highcharts-negative\",\"\"):\"\")}getGraphicalProps(t){let e,i;let s=this,r=[],o={singular:[],plural:[]};for((t=t||{graphic:1,dataLabel:1}).graphic&&r.push(\"graphic\",\"connector\"),t.dataLabel&&r.push(\"dataLabel\",\"dataLabelPath\",\"dataLabelUpper\"),i=r.length;i--;)s[e=r[i]]&&o.singular.push(e);return[\"graphic\",\"dataLabel\"].forEach(function(e){let i=e+\"s\";t[e]&&s[i]&&o.plural.push(i)}),o}getLabelConfig(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}}getNestedProperty(t){return t?0===t.indexOf(\"custom.\")?p(t,this.options):this[t]:void 0}getZone(){let t=this.series,e=t.zones,i=t.zoneAxis||\"y\",s,r=0;for(s=e[0];this[i]>=s.value;)s=e[++r];return this.nonZonedColor||(this.nonZonedColor=this.color),s&&s.color&&!this.options.color?this.color=s.color:this.color=this.nonZonedColor,s}hasNewShapeType(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType}constructor(t,e,i){this.formatPrefix=\"point\",this.visible=!0,this.series=t,this.applyOptions(e,i),this.id??(this.id=v()),this.resolveColor(),t.chart.pointCount++,c(this,\"afterInit\")}isValid(){return(f(this.x)||this.x instanceof Date)&&f(this.y)}optionsToObject(t){let e=this.series,i=e.options.keys,s=i||e.pointArrayMap||[\"y\"],r=s.length,o={},a,n=0,h=0;if(f(t)||null===t)o[s[0]]=t;else if(u(t))for(!i&&t.length>r&&(\"string\"==(a=typeof t[0])?o.name=t[0]:\"number\"===a&&(o.x=t[0]),n++);h0?S.prototype.setNestedProperty(o,t[n],s[h]):o[s[h]]=t[n]),n++,h++;else\"object\"==typeof t&&(o=t,t.dataLabels&&(e.hasDataLabels=()=>!0),t.marker&&(e._hasPointMarkers=!0));return o}pos(t,e=this.plotY){if(!this.destroyed){let{plotX:i,series:s}=this,{chart:r,xAxis:o,yAxis:a}=s,n=0,h=0;if(f(i)&&f(e))return t&&(n=o?o.pos:r.plotLeft,h=a?a.pos:r.plotTop),r.inverted&&o&&a?[a.len-e+h,o.len-i+n]:[i+n,e+h]}}resolveColor(){let t=this.series,e=t.chart.options.chart,i=t.chart.styledMode,s,r,o=e.colorCount,a;delete this.nonZonedColor,t.options.colorByPoint?(i||(s=(r=t.options.colors||t.chart.options.colors)[t.colorCounter],o=r.length),a=t.colorCounter,t.colorCounter++,t.colorCounter===o&&(t.colorCounter=0)):(i||(s=t.color),a=t.colorIndex),this.colorIndex=x(this.options.colorIndex,a),this.color=x(this.options.color,s)}setNestedProperty(t,e,i){return i.split(\".\").reduce(function(t,i,s,r){let o=r.length-1===s;return t[i]=o?e:m(t[i],!0)?t[i]:{},t[i]},t),t}shouldDraw(){return!this.isNull}tooltipFormatter(t){let e=this.series,i=e.tooltipOptions,s=x(i.valueDecimals,\"\"),r=i.valuePrefix||\"\",o=i.valueSuffix||\"\";return e.chart.styledMode&&(t=e.chart.tooltip.styledModeFormat(t)),(e.pointArrayMap||[\"y\"]).forEach(function(e){e=\"{point.\"+e,(r||o)&&(t=t.replace(RegExp(e+\"}\",\"g\"),r+e+\"}\"+o)),t=t.replace(RegExp(e+\"}\",\"g\"),e+\":,.\"+s+\"f}\")}),n(t,{point:this,series:this.series},e.chart)}update(t,e,i,s){let r;let o=this,a=o.series,n=o.graphic,h=a.chart,l=a.options;function d(){o.applyOptions(t);let s=n&&o.hasMockGraphic,d=null===o.y?!s:s;n&&d&&(o.graphic=n.destroy(),delete o.hasMockGraphic),m(t,!0)&&(n&&n.element&&t&&t.marker&&void 0!==t.marker.symbol&&(o.graphic=n.destroy()),t?.dataLabels&&o.dataLabel&&(o.dataLabel=o.dataLabel.destroy())),r=o.index,a.updateParallelArrays(o,r),l.data[r]=m(l.data[r],!0)||m(t,!0)?o.options:x(t,l.data[r]),a.isDirty=a.isDirtyData=!0,!a.fixedBox&&a.hasCartesianSeries&&(h.isDirtyBox=!0),\"point\"===l.legendType&&(h.isDirtyLegend=!0),e&&h.redraw(i)}e=x(e,!0),!1===s?d():o.firePointEvent(\"update\",{options:t},d)}remove(t,e){this.series.removePoint(this.series.data.indexOf(this),t,e)}select(t,e){let i=this,s=i.series,r=s.chart;t=x(t,!i.selected),this.selectedStaging=t,i.firePointEvent(t?\"select\":\"unselect\",{accumulate:e},function(){i.selected=i.options.selected=t,s.options.data[s.data.indexOf(i)]=i.options,i.setState(t&&\"select\"),e||r.getSelectedPoints().forEach(function(t){let e=t.series;t.selected&&t!==i&&(t.selected=t.options.selected=!1,e.options.data[e.data.indexOf(t)]=t.options,t.setState(r.hoverPoints&&e.options.inactiveOtherPoints?\"inactive\":\"\"),t.firePointEvent(\"unselect\"))})}),delete this.selectedStaging}onMouseOver(t){let{inverted:e,pointer:i}=this.series.chart;i&&(t=t?i.normalize(t):i.getChartCoordinatesFromPoint(this,e),i.runPointActions(t,this))}onMouseOut(){let t=this.series.chart;this.firePointEvent(\"mouseOut\"),this.series.options.inactiveOtherPoints||(t.hoverPoints||[]).forEach(function(t){t.setState()}),t.hoverPoints=t.hoverPoint=null}manageEvent(t){let e=this.series.options.point||{},i=e.events?.[t];g(i)&&(!this.hcEvents?.[t]||this.hcEvents?.[t]?.map(t=>t.fn).indexOf(i)===-1)?(h(this,t,i),this.hasImportedEvents=!0):this.hasImportedEvents&&!i&&this.hcEvents?.[t]&&(b(this,t),delete this.hcEvents[t],Object.keys(this.hcEvents)||(this.hasImportedEvents=!1))}setState(e,i){let s=this.series,r=this.state,o=s.options.states[e||\"normal\"]||{},n=a.plotOptions[s.type].marker&&s.options.marker,h=n&&!1===n.enabled,l=n&&n.states&&n.states[e||\"normal\"]||{},p=!1===l.enabled,u=this.marker||{},g=s.chart,m=n&&s.markerAttribs,y=s.halo,b,v,S,k=s.stateMarkerGraphic,C;if((e=e||\"\")===this.state&&!i||this.selected&&\"select\"!==e||!1===o.enabled||e&&(p||h&&!1===l.enabled)||e&&u.states&&u.states[e]&&!1===u.states[e].enabled)return;if(this.state=e,m&&(b=s.markerAttribs(this,e)),this.graphic&&!this.hasMockGraphic){if(r&&this.graphic.removeClass(\"highcharts-point-\"+r),e&&this.graphic.addClass(\"highcharts-point-\"+e),!g.styledMode){v=s.pointAttribs(this,e),S=x(g.options.chart.animation,o.animation);let t=v.opacity;s.options.inactiveOtherPoints&&f(t)&&(this.dataLabels||[]).forEach(function(e){e&&!e.hasClass(\"highcharts-data-label-hidden\")&&(e.animate({opacity:t},S),e.connector&&e.connector.animate({opacity:t},S))}),this.graphic.animate(v,S)}b&&this.graphic.animate(b,x(g.options.chart.animation,l.animation,n.animation)),k&&k.hide()}else e&&l&&(C=u.symbol||s.symbol,k&&k.currentSymbol!==C&&(k=k.destroy()),b&&(k?k[i?\"animate\":\"attr\"]({x:b.x,y:b.y}):C&&(s.stateMarkerGraphic=k=g.renderer.symbol(C,b.x,b.y,b.width,b.height).add(s.markerGroup),k.currentSymbol=C)),!g.styledMode&&k&&\"inactive\"!==this.state&&k.attr(s.pointAttribs(this,e))),k&&(k[e&&this.isInside?\"show\":\"hide\"](),k.element.point=this,k.addClass(this.getClassName(),!0));let M=o.halo,w=this.graphic||k,T=w&&w.visibility||\"inherit\";M&&M.size&&w&&\"hidden\"!==T&&!this.isCluster?(y||(s.halo=y=g.renderer.path().add(w.parentGroup)),y.show()[i?\"animate\":\"attr\"]({d:this.haloPath(M.size)}),y.attr({class:\"highcharts-halo highcharts-color-\"+x(this.colorIndex,s.colorIndex)+(this.className?\" \"+this.className:\"\"),visibility:T,zIndex:-1}),y.point=this,g.styledMode||y.attr(d({fill:this.color||s.color,\"fill-opacity\":M.opacity},t.filterUserAttributes(M.attributes||{})))):y&&y.point&&y.point.haloPath&&y.animate({d:y.point.haloPath(0)},null,y.hide),c(this,\"afterSetState\",{state:e})}haloPath(t){let e=this.pos();return e?this.series.chart.renderer.symbols.circle(Math.floor(e[0])-t,e[1]-t,2*t,2*t):[]}}return S}),i(e,\"Core/Pointer.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s;let{parse:r}=t,{charts:o,composed:a}=e,{addEvent:n,attr:h,css:l,extend:d,find:c,fireEvent:p,isNumber:u,isObject:g,objectEach:f,offset:m,pick:x,pushUnique:y,splat:b}=i;class v{applyInactiveState(t){let e=[],i;(t||[]).forEach(function(t){i=t.series,e.push(i),i.linkedParent&&e.push(i.linkedParent),i.linkedSeries&&(e=e.concat(i.linkedSeries)),i.navigatorSeries&&e.push(i.navigatorSeries)}),this.chart.series.forEach(function(t){-1===e.indexOf(t)?t.setState(\"inactive\",!0):t.options.inactiveOtherPoints&&t.setAllPointsToState(\"inactive\")})}destroy(){let t=this;this.eventsToUnbind.forEach(t=>t()),this.eventsToUnbind=[],!e.chartCount&&(v.unbindDocumentMouseUp&&(v.unbindDocumentMouseUp=v.unbindDocumentMouseUp()),v.unbindDocumentTouchEnd&&(v.unbindDocumentTouchEnd=v.unbindDocumentTouchEnd())),clearInterval(t.tooltipTimeout),f(t,function(e,i){t[i]=void 0})}getSelectionMarkerAttrs(t,e){let i={args:{chartX:t,chartY:e},attrs:{},shapeType:\"rect\"};return p(this,\"getSelectionMarkerAttrs\",i,i=>{let s;let{chart:r,zoomHor:o,zoomVert:a}=this,{mouseDownX:n=0,mouseDownY:h=0}=r,l=i.attrs;l.x=r.plotLeft,l.y=r.plotTop,l.width=o?1:r.plotWidth,l.height=a?1:r.plotHeight,o&&(s=t-n,l.width=Math.max(1,Math.abs(s)),l.x=(s>0?0:s)+n),a&&(s=e-h,l.height=Math.max(1,Math.abs(s)),l.y=(s>0?0:s)+h)}),i}drag(t){let{chart:e}=this,{mouseDownX:i=0,mouseDownY:s=0}=e,{panning:o,panKey:a,selectionMarkerFill:n}=e.options.chart,h=e.plotLeft,l=e.plotTop,d=e.plotWidth,c=e.plotHeight,p=g(o)?o.enabled:o,u=a&&t[`${a}Key`],f=t.chartX,m=t.chartY,x,y=this.selectionMarker;if((!y||!y.touch)&&(fh+d&&(f=h+d),ml+c&&(m=l+c),this.hasDragged=Math.sqrt(Math.pow(i-f,2)+Math.pow(s-m,2)),this.hasDragged>10)){x=e.isInsidePlot(i-h,s-l,{visiblePlotOnly:!0});let{shapeType:a,attrs:d}=this.getSelectionMarkerAttrs(f,m);(e.hasCartesianSeries||e.mapView)&&this.hasZoom&&x&&!u&&!y&&(this.selectionMarker=y=e.renderer[a](),y.attr({class:\"highcharts-selection-marker\",zIndex:7}).add(),e.styledMode||y.attr({fill:n||r(\"#334eff\").setOpacity(.25).get()})),y&&y.attr(d),x&&!y&&p&&e.pan(t,o)}}dragStart(t){let e=this.chart;e.mouseIsDown=t.type,e.cancelClick=!1,e.mouseDownX=t.chartX,e.mouseDownY=t.chartY}getSelectionBox(t){let e={args:{marker:t},result:t.getBBox()};return p(this,\"getSelectionBox\",e),e.result}drop(t){let e;let{chart:i,selectionMarker:s}=this;for(let t of i.axes)t.isPanning&&(t.isPanning=!1,(t.options.startOnTick||t.options.endOnTick||t.series.some(t=>t.boosted))&&(t.forceRedraw=!0,t.setExtremes(t.userMin,t.userMax,!1),e=!0));if(e&&i.redraw(),s&&t){if(this.hasDragged){let e=this.getSelectionBox(s);i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(\"xAxis\"===t.coll&&this.zoomX||\"yAxis\"===t.coll&&this.zoomY)),selection:{originalEvent:t,xAxis:[],yAxis:[],...e},from:e})}u(i.index)&&(this.selectionMarker=s.destroy())}i&&u(i.index)&&(l(i.container,{cursor:i._cursor}),i.cancelClick=this.hasDragged>10,i.mouseIsDown=!1,this.hasDragged=0,this.pinchDown=[])}findNearestKDPoint(t,e,i){let s;return t.forEach(function(t){let r=!(t.noSharedTooltip&&e)&&0>t.options.findNearestPointBy.indexOf(\"y\"),o=t.searchPoint(i,r);g(o,!0)&&o.series&&(!g(s,!0)||function(t,i){let s=t.distX-i.distX,r=t.dist-i.dist,o=i.series.group?.zIndex-t.series.group?.zIndex;return 0!==s&&e?s:0!==r?r:0!==o?o:t.series.index>i.series.index?-1:1}(s,o)>0)&&(s=o)}),s}getChartCoordinatesFromPoint(t,e){let{xAxis:i,yAxis:s}=t.series,r=t.shapeArgs;if(i&&s){let o=t.clientX??t.plotX??0,a=t.plotY||0;return t.isNode&&r&&u(r.x)&&u(r.y)&&(o=r.x,a=r.y),e?{chartX:s.len+s.pos-a,chartY:i.len+i.pos-o}:{chartX:o+i.pos,chartY:a+s.pos}}if(r&&r.x&&r.y)return{chartX:r.x,chartY:r.y}}getChartPosition(){if(this.chartPosition)return this.chartPosition;let{container:t}=this.chart,e=m(t);this.chartPosition={left:e.left,top:e.top,scaleX:1,scaleY:1};let{offsetHeight:i,offsetWidth:s}=t;return s>2&&i>2&&(this.chartPosition.scaleX=e.width/s,this.chartPosition.scaleY=e.height/i),this.chartPosition}getCoordinates(t){let e={xAxis:[],yAxis:[]};for(let i of this.chart.axes)e[i.isXAxis?\"xAxis\":\"yAxis\"].push({axis:i,value:i.toValue(t[i.horiz?\"chartX\":\"chartY\"])});return e}getHoverData(t,e,i,s,r,o){let a=[],n=function(t){return t.visible&&!(!r&&t.directTouch)&&x(t.options.enableMouseTracking,!0)},h=e,l,d={chartX:o?o.chartX:void 0,chartY:o?o.chartY:void 0,shared:r};p(this,\"beforeGetHoverData\",d),l=h&&!h.stickyTracking?[h]:i.filter(t=>t.stickyTracking&&(d.filter||n)(t));let u=s&&t||!o?t:this.findNearestKDPoint(l,r,o);return h=u&&u.series,u&&(r&&!h.noSharedTooltip?(l=i.filter(function(t){return d.filter?d.filter(t):n(t)&&!t.noSharedTooltip})).forEach(function(t){let e=c(t.points,function(t){return t.x===u.x&&!t.isNull});g(e)&&(t.boosted&&t.boost&&(e=t.boost.getPoint(e)),a.push(e))}):a.push(u)),p(this,\"afterGetHoverData\",d={hoverPoint:u}),{hoverPoint:d.hoverPoint,hoverSeries:h,hoverPoints:a}}getPointFromEvent(t){let e=t.target,i;for(;e&&!i;)i=e.point,e=e.parentNode;return i}onTrackerMouseOut(t){let e=this.chart,i=t.relatedTarget,s=e.hoverSeries;this.isDirectTouch=!1,!s||!i||s.stickyTracking||this.inClass(i,\"highcharts-tooltip\")||this.inClass(i,\"highcharts-series-\"+s.index)&&this.inClass(i,\"highcharts-tracker\")||s.onMouseOut()}inClass(t,e){let i=t,s;for(;i;){if(s=h(i,\"class\")){if(-1!==s.indexOf(e))return!0;if(-1!==s.indexOf(\"highcharts-container\"))return!1}i=i.parentElement}}constructor(t,e){this.hasDragged=0,this.eventsToUnbind=[],this.options=e,this.chart=t,this.runChartClick=!!e.chart.events?.click,this.pinchDown=[],this.setDOMEvents(),p(this,\"afterInit\")}normalize(t,e){let i=t.touches,s=i?i.length?i.item(0):x(i.changedTouches,t.changedTouches)[0]:t;e||(e=this.getChartPosition());let r=s.pageX-e.left,o=s.pageY-e.top;return d(t,{chartX:Math.round(r/=e.scaleX),chartY:Math.round(o/=e.scaleY)})}onContainerClick(t){let e=this.chart,i=e.hoverPoint,s=this.normalize(t),r=e.plotLeft,o=e.plotTop;!e.cancelClick&&(i&&this.inClass(s.target,\"highcharts-tracker\")?(p(i.series,\"click\",d(s,{point:i})),e.hoverPoint&&i.firePointEvent(\"click\",s)):(d(s,this.getCoordinates(s)),e.isInsidePlot(s.chartX-r,s.chartY-o,{visiblePlotOnly:!0})&&p(e,\"click\",s)))}onContainerMouseDown(t){let i=(1&(t.buttons||t.button))==1;t=this.normalize(t),e.isFirefox&&0!==t.button&&this.onContainerMouseMove(t),(void 0===t.button||i)&&(this.zoomOption(t),i&&t.preventDefault?.(),this.dragStart(t))}onContainerMouseLeave(t){let{pointer:e}=o[x(v.hoverChartIndex,-1)]||{};t=this.normalize(t),this.onContainerMouseMove(t),e&&t.relatedTarget&&!this.inClass(t.relatedTarget,\"highcharts-tooltip\")&&(e.reset(),e.chartPosition=void 0)}onContainerMouseEnter(){delete this.chartPosition}onContainerMouseMove(t){let e=this.chart,i=e.tooltip,s=this.normalize(t);this.setHoverChartIndex(t),(\"mousedown\"===e.mouseIsDown||this.touchSelect(s))&&this.drag(s),!e.openMenu&&(this.inClass(s.target,\"highcharts-tracker\")||e.isInsidePlot(s.chartX-e.plotLeft,s.chartY-e.plotTop,{visiblePlotOnly:!0}))&&!(i&&i.shouldStickOnContact(s))&&(this.inClass(s.target,\"highcharts-no-tooltip\")?this.reset(!1,0):this.runPointActions(s))}onDocumentTouchEnd(t){this.onDocumentMouseUp(t)}onContainerTouchMove(t){this.touchSelect(t)?this.onContainerMouseMove(t):this.touch(t)}onContainerTouchStart(t){this.touchSelect(t)?this.onContainerMouseDown(t):(this.zoomOption(t),this.touch(t,!0))}onDocumentMouseMove(t){let e=this.chart,i=e.tooltip,s=this.chartPosition,r=this.normalize(t,s);!s||e.isInsidePlot(r.chartX-e.plotLeft,r.chartY-e.plotTop,{visiblePlotOnly:!0})||i&&i.shouldStickOnContact(r)||this.inClass(r.target,\"highcharts-tracker\")||this.reset()}onDocumentMouseUp(t){o[x(v.hoverChartIndex,-1)]?.pointer?.drop(t)}pinch(t){let e=this,{chart:i,hasZoom:s,lastTouches:r}=e,o=[].map.call(t.touches||[],t=>e.normalize(t)),a=o.length,n=1===a&&(e.inClass(t.target,\"highcharts-tracker\")&&i.runTrackerClick||e.runChartClick),h=i.tooltip,l=1===a&&x(h?.options.followTouchMove,!0);a>1?e.initiated=!0:l&&(e.initiated=!1),s&&e.initiated&&!n&&!1!==t.cancelable&&t.preventDefault(),\"touchstart\"===t.type?(e.pinchDown=o,e.res=!0):l?this.runPointActions(e.normalize(t)):r&&(p(i,\"touchpan\",{originalEvent:t,touches:o},()=>{let e=t=>{let e=t[0],i=t[1]||e;return{x:e.chartX,y:e.chartY,width:i.chartX-e.chartX,height:i.chartY-e.chartY}};i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(this.zoomHor&&t.horiz||this.zoomVert&&!t.horiz)),to:e(o),from:e(r),trigger:t.type})}),e.res&&(e.res=!1,this.reset(!1,0))),e.lastTouches=o}reset(t,e){let i=this.chart,s=i.hoverSeries,r=i.hoverPoint,o=i.hoverPoints,a=i.tooltip,n=a&&a.shared?o:r;t&&n&&b(n).forEach(function(e){e.series.isCartesian&&void 0===e.plotX&&(t=!1)}),t?a&&n&&b(n).length&&(a.refresh(n),a.shared&&o?o.forEach(function(t){t.setState(t.state,!0),t.series.isCartesian&&(t.series.xAxis.crosshair&&t.series.xAxis.drawCrosshair(null,t),t.series.yAxis.crosshair&&t.series.yAxis.drawCrosshair(null,t))}):r&&(r.setState(r.state,!0),i.axes.forEach(function(t){t.crosshair&&r.series[t.coll]===t&&t.drawCrosshair(null,r)}))):(r&&r.onMouseOut(),o&&o.forEach(function(t){t.setState()}),s&&s.onMouseOut(),a&&a.hide(e),this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove()),i.axes.forEach(function(t){t.hideCrosshair()}),i.hoverPoints=i.hoverPoint=void 0)}runPointActions(t,e,i){let s=this.chart,r=s.series,a=s.tooltip&&s.tooltip.options.enabled?s.tooltip:void 0,h=!!a&&a.shared,l=e||s.hoverPoint,d=l&&l.series||s.hoverSeries,p=(!t||\"touchmove\"!==t.type)&&(!!e||d&&d.directTouch&&this.isDirectTouch),u=this.getHoverData(l,d,r,p,h,t);l=u.hoverPoint,d=u.hoverSeries;let g=u.hoverPoints,f=d&&d.tooltipOptions.followPointer&&!d.tooltipOptions.split,m=h&&d&&!d.noSharedTooltip;if(l&&(i||l!==s.hoverPoint||a&&a.isHidden)){if((s.hoverPoints||[]).forEach(function(t){-1===g.indexOf(t)&&t.setState()}),s.hoverSeries!==d&&d.onMouseOver(),this.applyInactiveState(g),(g||[]).forEach(function(t){t.setState(\"hover\")}),s.hoverPoint&&s.hoverPoint.firePointEvent(\"mouseOut\"),!l.series)return;s.hoverPoints=g,s.hoverPoint=l,l.firePointEvent(\"mouseOver\",void 0,()=>{a&&l&&a.refresh(m?g:l,t)})}else if(f&&a&&!a.isHidden){let e=a.getAnchor([{}],t);s.isInsidePlot(e[0],e[1],{visiblePlotOnly:!0})&&a.updatePosition({plotX:e[0],plotY:e[1]})}this.unDocMouseMove||(this.unDocMouseMove=n(s.container.ownerDocument,\"mousemove\",t=>o[v.hoverChartIndex??-1]?.pointer?.onDocumentMouseMove(t)),this.eventsToUnbind.push(this.unDocMouseMove)),s.axes.forEach(function(e){let i;let r=x((e.crosshair||{}).snap,!0);!r||(i=s.hoverPoint)&&i.series[e.coll]===e||(i=c(g,t=>t.series&&t.series[e.coll]===e)),i||!r?e.drawCrosshair(t,i):e.hideCrosshair()})}setDOMEvents(){let t=this.chart.container,e=t.ownerDocument;t.onmousedown=this.onContainerMouseDown.bind(this),t.onmousemove=this.onContainerMouseMove.bind(this),t.onclick=this.onContainerClick.bind(this),this.eventsToUnbind.push(n(t,\"mouseenter\",this.onContainerMouseEnter.bind(this)),n(t,\"mouseleave\",this.onContainerMouseLeave.bind(this))),v.unbindDocumentMouseUp||(v.unbindDocumentMouseUp=n(e,\"mouseup\",this.onDocumentMouseUp.bind(this)));let i=this.chart.renderTo.parentElement;for(;i&&\"BODY\"!==i.tagName;)this.eventsToUnbind.push(n(i,\"scroll\",()=>{delete this.chartPosition})),i=i.parentElement;this.eventsToUnbind.push(n(t,\"touchstart\",this.onContainerTouchStart.bind(this),{passive:!1}),n(t,\"touchmove\",this.onContainerTouchMove.bind(this),{passive:!1})),v.unbindDocumentTouchEnd||(v.unbindDocumentTouchEnd=n(e,\"touchend\",this.onDocumentTouchEnd.bind(this),{passive:!1}))}setHoverChartIndex(t){let i=this.chart,s=e.charts[x(v.hoverChartIndex,-1)];s&&s!==i&&s.pointer?.onContainerMouseLeave(t||{relatedTarget:i.container}),s&&s.mouseIsDown||(v.hoverChartIndex=i.index)}touch(t,e){let i;let{chart:s,pinchDown:r=[]}=this;this.setHoverChartIndex(),1===t.touches.length?(t=this.normalize(t),s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop,{visiblePlotOnly:!0})&&!s.openMenu?(e&&this.runPointActions(t),\"touchmove\"===t.type&&(i=!!r[0]&&Math.pow(r[0].chartX-t.chartX,2)+Math.pow(r[0].chartY-t.chartY,2)>=16),x(i,!0)&&this.pinch(t)):e&&this.reset()):2===t.touches.length&&this.pinch(t)}touchSelect(t){return!!(this.chart.zooming.singleTouch&&t.touches&&1===t.touches.length)}zoomOption(t){let e=this.chart,i=e.inverted,s=e.zooming.type||\"\",r,o;/touch/.test(t.type)&&(s=x(e.zooming.pinchType,s)),this.zoomX=r=/x/.test(s),this.zoomY=o=/y/.test(s),this.zoomHor=r&&!i||o&&i,this.zoomVert=o&&!i||r&&i,this.hasZoom=r||o}}return(s=v||(v={})).compose=function(t){y(a,\"Core.Pointer\")&&n(t,\"beforeRender\",function(){this.pointer=new s(this,this.options)})},v}),i(e,\"Core/Legend/Legend.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Templating.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o){var a;let{animObject:n,setAnimation:h}=t,{format:l}=e,{composed:d,marginNames:c}=i,{distribute:p}=r,{addEvent:u,createElement:g,css:f,defined:m,discardElement:x,find:y,fireEvent:b,isNumber:v,merge:S,pick:k,pushUnique:C,relativeLength:M,stableSort:w,syncTimeout:T}=o;class A{constructor(t,e){this.allItems=[],this.initialItemY=0,this.itemHeight=0,this.itemMarginBottom=0,this.itemMarginTop=0,this.itemX=0,this.itemY=0,this.lastItemY=0,this.lastLineHeight=0,this.legendHeight=0,this.legendWidth=0,this.maxItemWidth=0,this.maxLegendWidth=0,this.offsetWidth=0,this.padding=0,this.pages=[],this.symbolHeight=0,this.symbolWidth=0,this.titleHeight=0,this.totalItemWidth=0,this.widthOption=0,this.chart=t,this.setOptions(e),e.enabled&&(this.render(),u(this.chart,\"endResize\",function(){this.legend.positionCheckboxes()})),u(this.chart,\"render\",()=>{this.options.enabled&&this.proximate&&(this.proximatePositions(),this.positionItems())})}setOptions(t){let e=k(t.padding,8);this.options=t,this.chart.styledMode||(this.itemStyle=t.itemStyle,this.itemHiddenStyle=S(this.itemStyle,t.itemHiddenStyle)),this.itemMarginTop=t.itemMarginTop,this.itemMarginBottom=t.itemMarginBottom,this.padding=e,this.initialItemY=e-5,this.symbolWidth=k(t.symbolWidth,16),this.pages=[],this.proximate=\"proximate\"===t.layout&&!this.chart.inverted,this.baseline=void 0}update(t,e){let i=this.chart;this.setOptions(S(!0,this.options,t)),this.destroy(),i.isDirtyLegend=i.isDirtyBox=!0,k(e,!0)&&i.redraw(),b(this,\"afterUpdate\",{redraw:e})}colorizeItem(t,e){let{area:i,group:s,label:r,line:o,symbol:a}=t.legendItem||{};if(s?.[e?\"removeClass\":\"addClass\"](\"highcharts-legend-item-hidden\"),!this.chart.styledMode){let{itemHiddenStyle:s={}}=this,n=s.color,{fillColor:h,fillOpacity:l,lineColor:d,marker:c}=t.options,p=t=>(!e&&(t.fill&&(t.fill=n),t.stroke&&(t.stroke=n)),t);r?.css(S(e?this.itemStyle:s)),o?.attr(p({stroke:d||t.color})),a&&a.attr(p(c&&a.isMarker?t.pointAttribs():{fill:t.color})),i?.attr(p({fill:h||t.color,\"fill-opacity\":h?1:l??.75}))}b(this,\"afterColorizeItem\",{item:t,visible:e})}positionItems(){this.allItems.forEach(this.positionItem,this),this.chart.isResizing||this.positionCheckboxes()}positionItem(t){let{group:e,x:i=0,y:s=0}=t.legendItem||{},r=this.options,o=r.symbolPadding,a=!r.rtl,n=t.checkbox;if(e&&e.element){let r={translateX:a?i:this.legendWidth-i-2*o-4,translateY:s};e[m(e.translateY)?\"animate\":\"attr\"](r,void 0,()=>{b(this,\"afterPositionItem\",{item:t})})}n&&(n.x=i,n.y=s)}destroyItem(t){let e=t.checkbox,i=t.legendItem||{};for(let t of[\"group\",\"label\",\"line\",\"symbol\"])i[t]&&(i[t]=i[t].destroy());e&&x(e),t.legendItem=void 0}destroy(){for(let t of this.getAllItems())this.destroyItem(t);for(let t of[\"clipRect\",\"up\",\"down\",\"pager\",\"nav\",\"box\",\"title\",\"group\"])this[t]&&(this[t]=this[t].destroy());this.display=null}positionCheckboxes(){let t;let e=this.group&&this.group.alignAttr,i=this.clipHeight||this.legendHeight,s=this.titleHeight;e&&(t=e.translateY,this.allItems.forEach(function(r){let o;let a=r.checkbox;a&&(o=t+s+a.y+(this.scrollOffset||0)+3,f(a,{left:e.translateX+r.checkboxOffset+a.x-20+\"px\",top:o+\"px\",display:this.proximate||o>t-6&&o1.5*C?v.height:C))}layoutItem(t){let e=this.options,i=this.padding,s=\"horizontal\"===e.layout,r=t.itemHeight,o=this.itemMarginBottom,a=this.itemMarginTop,n=s?k(e.itemDistance,20):0,h=this.maxLegendWidth,l=e.alignColumns&&this.totalItemWidth>h?this.maxItemWidth:t.itemWidth,d=t.legendItem||{};s&&this.itemX-i+l>h&&(this.itemX=i,this.lastLineHeight&&(this.itemY+=a+this.lastLineHeight+o),this.lastLineHeight=0),this.lastItemY=a+this.itemY+o,this.lastLineHeight=Math.max(r,this.lastLineHeight),d.x=this.itemX,d.y=this.itemY,s?this.itemX+=l:(this.itemY+=a+r+o,this.lastLineHeight=r),this.offsetWidth=this.widthOption||Math.max((s?this.itemX-i-(t.checkbox?0:n):l)+i,this.offsetWidth)}getAllItems(){let t=[];return this.chart.series.forEach(function(e){let i=e&&e.options;e&&k(i.showInLegend,!m(i.linkedTo)&&void 0,!0)&&(t=t.concat((e.legendItem||{}).labels||(\"point\"===i.legendType?e.data:e)))}),b(this,\"afterGetAllItems\",{allItems:t}),t}getAlignment(){let t=this.options;return this.proximate?t.align.charAt(0)+\"tv\":t.floating?\"\":t.align.charAt(0)+t.verticalAlign.charAt(0)+t.layout.charAt(0)}adjustMargins(t,e){let i=this.chart,s=this.options,r=this.getAlignment();r&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(o,a){o.test(r)&&!m(t[a])&&(i[c[a]]=Math.max(i[c[a]],i.legend[(a+1)%2?\"legendHeight\":\"legendWidth\"]+[1,-1,-1,1][a]*s[a%2?\"x\":\"y\"]+k(s.margin,12)+e[a]+(i.titleOffset[a]||0)))})}proximatePositions(){let t;let e=this.chart,i=[],s=\"left\"===this.options.align;for(let r of(this.allItems.forEach(function(t){let r,o,a=s,n,h;t.yAxis&&(t.xAxis.options.reversed&&(a=!a),t.points&&(r=y(a?t.points:t.points.slice(0).reverse(),function(t){return v(t.plotY)})),o=this.itemMarginTop+t.legendItem.label.getBBox().height+this.itemMarginBottom,h=t.yAxis.top-e.plotTop,n=t.visible?(r?r.plotY:t.yAxis.height)+(h-.3*o):h+t.yAxis.height,i.push({target:n,size:o,item:t}))},this),p(i,e.plotHeight)))t=r.item.legendItem||{},v(r.pos)&&(t.y=e.plotTop-e.spacing[0]+r.pos)}render(){let t=this.chart,e=t.renderer,i=this.options,s=this.padding,r=this.getAllItems(),o,a,n,h=this.group,l,d=this.box;this.itemX=s,this.itemY=this.initialItemY,this.offsetWidth=0,this.lastItemY=0,this.widthOption=M(i.width,t.spacingBox.width-s),l=t.spacingBox.width-2*s-i.x,[\"rm\",\"lm\"].indexOf(this.getAlignment().substring(0,2))>-1&&(l/=2),this.maxLegendWidth=this.widthOption||l,h||(this.group=h=e.g(\"legend\").addClass(i.className||\"\").attr({zIndex:7}).add(),this.contentGroup=e.g().attr({zIndex:1}).add(h),this.scrollGroup=e.g().add(this.contentGroup)),this.renderTitle(),w(r,(t,e)=>(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)),i.reversed&&r.reverse(),this.allItems=r,this.display=o=!!r.length,this.lastLineHeight=0,this.maxItemWidth=0,this.totalItemWidth=0,this.itemHeight=0,r.forEach(this.renderItem,this),r.forEach(this.layoutItem,this),a=(this.widthOption||this.offsetWidth)+s,n=this.lastItemY+this.lastLineHeight+this.titleHeight,n=this.handleOverflow(n)+s,d||(this.box=d=e.rect().addClass(\"highcharts-legend-box\").attr({r:i.borderRadius}).add(h)),t.styledMode||d.attr({stroke:i.borderColor,\"stroke-width\":i.borderWidth||0,fill:i.backgroundColor||\"none\"}).shadow(i.shadow),a>0&&n>0&&d[d.placed?\"animate\":\"attr\"](d.crisp.call({},{x:0,y:0,width:a,height:n},d.strokeWidth())),h[o?\"show\":\"hide\"](),t.styledMode&&\"none\"===h.getStyle(\"display\")&&(a=n=0),this.legendWidth=a,this.legendHeight=n,o&&this.align(),this.proximate||this.positionItems(),b(this,\"afterRender\")}align(t=this.chart.spacingBox){let e=this.chart,i=this.options,s=t.y;/(lth|ct|rth)/.test(this.getAlignment())&&e.titleOffset[0]>0?s+=e.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&e.titleOffset[2]>0&&(s-=e.titleOffset[2]),s!==t.y&&(t=S(t,{y:s})),e.hasRendered||(this.group.placed=!1),this.group.align(S(i,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?\"top\":i.verticalAlign}),!0,t)}handleOverflow(t){let e=this,i=this.chart,s=i.renderer,r=this.options,o=r.y,a=\"top\"===r.verticalAlign,n=this.padding,h=r.maxHeight,l=r.navigation,d=k(l.animation,!0),c=l.arrowSize||12,p=this.pages,u=this.allItems,g=function(t){\"number\"==typeof t?S.attr({height:t}):S&&(e.clipRect=S.destroy(),e.contentGroup.clip()),e.contentGroup.div&&(e.contentGroup.div.style.clip=t?\"rect(\"+n+\"px,9999px,\"+(n+t)+\"px,0)\":\"auto\")},f=function(t){return e[t]=s.circle(0,0,1.3*c).translate(c/2,c/2).add(v),i.styledMode||e[t].attr(\"fill\",\"rgba(0,0,0,0.0001)\"),e[t]},m,x,y,b=i.spacingBox.height+(a?-o:o)-n,v=this.nav,S=this.clipRect;return\"horizontal\"!==r.layout||\"middle\"===r.verticalAlign||r.floating||(b/=2),h&&(b=Math.min(b,h)),p.length=0,t&&b>0&&t>b&&!1!==l.enabled?(this.clipHeight=m=Math.max(b-20-this.titleHeight-n,0),this.currentPage=k(this.currentPage,1),this.fullHeight=t,u.forEach((t,e)=>{let i=(y=t.legendItem||{}).y||0,s=Math.round(y.label.getBBox().height),r=p.length;(!r||i-p[r-1]>m&&(x||i)!==p[r-1])&&(p.push(x||i),r++),y.pageIx=r-1,x&&((u[e-1].legendItem||{}).pageIx=r-1),e===u.length-1&&i+s-p[r-1]>m&&i>p[r-1]&&(p.push(i),y.pageIx=r),i!==x&&(x=i)}),S||(S=e.clipRect=s.clipRect(0,n-2,9999,0),e.contentGroup.clip(S)),g(m),v||(this.nav=v=s.g().attr({zIndex:1}).add(this.group),this.up=s.symbol(\"triangle\",0,0,c,c).add(v),f(\"upTracker\").on(\"click\",function(){e.scroll(-1,d)}),this.pager=s.text(\"\",15,10).addClass(\"highcharts-legend-navigation\"),!i.styledMode&&l.style&&this.pager.css(l.style),this.pager.add(v),this.down=s.symbol(\"triangle-down\",0,0,c,c).add(v),f(\"downTracker\").on(\"click\",function(){e.scroll(1,d)})),e.scroll(0),t=b):v&&(g(),this.nav=v.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0),t}scroll(t,e){let i=this.chart,s=this.pages,r=s.length,o=this.clipHeight,a=this.options.navigation,l=this.pager,d=this.padding,c=this.currentPage+t;c>r&&(c=r),c>0&&(void 0!==e&&h(e,i),this.nav.attr({translateX:d,translateY:o+this.padding+7+this.titleHeight,visibility:\"inherit\"}),[this.up,this.upTracker].forEach(function(t){t.attr({class:1===c?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})}),l.attr({text:c+\"/\"+r}),[this.down,this.downTracker].forEach(function(t){t.attr({x:18+this.pager.getBBox().width,class:c===r?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})},this),i.styledMode||(this.up.attr({fill:1===c?a.inactiveColor:a.activeColor}),this.upTracker.css({cursor:1===c?\"default\":\"pointer\"}),this.down.attr({fill:c===r?a.inactiveColor:a.activeColor}),this.downTracker.css({cursor:c===r?\"default\":\"pointer\"})),this.scrollOffset=-s[c-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=c,this.positionCheckboxes(),T(()=>{b(this,\"afterScroll\",{currentPage:c})},n(k(e,i.renderer.globalAnimation,!0)).duration))}setItemEvents(t,e,i){let r=this,o=t.legendItem||{},a=r.chart.renderer.boxWrapper,n=t instanceof s,h=\"highcharts-legend-\"+(n?\"point\":\"series\")+\"-active\",l=r.chart.styledMode,d=i?[e,o.symbol]:[o.group],c=e=>{r.allItems.forEach(i=>{t!==i&&[i].concat(i.linkedSeries||[]).forEach(t=>{t.setState(e,!n)})})};for(let i of d)i&&i.on(\"mouseover\",function(){t.visible&&c(\"inactive\"),t.setState(\"hover\"),t.visible&&a.addClass(h),l||e.css(r.options.itemHoverStyle)}).on(\"mouseout\",function(){r.chart.styledMode||e.css(S(t.visible?r.itemStyle:r.itemHiddenStyle)),c(\"\"),a.removeClass(h),t.setState()}).on(\"click\",function(e){let i=\"legendItemClick\",s=function(){t.setVisible&&t.setVisible(),c(t.visible?\"inactive\":\"\")};a.removeClass(h),e={browserEvent:e},t.firePointEvent?t.firePointEvent(i,e,s):b(t,i,e,s)})}createCheckboxForItem(t){t.checkbox=g(\"input\",{type:\"checkbox\",className:\"highcharts-legend-checkbox\",checked:t.selected,defaultChecked:t.selected},this.options.itemCheckboxStyle,this.chart.container),u(t.checkbox,\"click\",function(e){let i=e.target;b(t.series||t,\"checkboxClick\",{checked:i.checked,item:t},function(){t.select()})})}}return(a=A||(A={})).compose=function(t){C(d,\"Core.Legend\")&&u(t,\"beforeMargins\",function(){this.legend=new a(this,this.options.legend)})},A}),i(e,\"Core/Legend/LegendSymbol.js\",[e[\"Core/Utilities.js\"]],function(t){var e;let{extend:i,merge:s,pick:r}=t;return function(t){function e(t,e,o){let a=this.legendItem=this.legendItem||{},{chart:n,options:h}=this,{baseline:l=0,symbolWidth:d,symbolHeight:c}=t,p=this.symbol||\"circle\",u=c/2,g=n.renderer,f=a.group,m=l-Math.round(c*(o?.4:.3)),x={},y,b=h.marker,v=0;if(n.styledMode||(x[\"stroke-width\"]=Math.min(h.lineWidth||0,24),h.dashStyle?x.dashstyle=h.dashStyle:\"square\"===h.linecap||(x[\"stroke-linecap\"]=\"round\")),a.line=g.path().addClass(\"highcharts-graph\").attr(x).add(f),o&&(a.area=g.path().addClass(\"highcharts-area\").add(f)),x[\"stroke-linecap\"]&&(v=Math.min(a.line.strokeWidth(),d)/2),d){let t=[[\"M\",v,m],[\"L\",d-v,m]];a.line.attr({d:t}),a.area?.attr({d:[...t,[\"L\",d-v,l],[\"L\",v,l]]})}if(b&&!1!==b.enabled&&d){let t=Math.min(r(b.radius,u),u);0===p.indexOf(\"url\")&&(b=s(b,{width:c,height:c}),t=0),a.symbol=y=g.symbol(p,d/2-t,m-t,2*t,2*t,i({context:\"legend\"},b)).addClass(\"highcharts-point\").add(f),y.isMarker=!0}}t.areaMarker=function(t,i){e.call(this,t,i,!0)},t.lineMarker=e,t.rectangle=function(t,e){let i=e.legendItem||{},s=t.options,o=t.symbolHeight,a=s.squareSymbol,n=a?o:t.symbolWidth;i.symbol=this.chart.renderer.rect(a?(t.symbolWidth-o)/2:0,t.baseline-o+1,n,o,r(t.options.symbolRadius,o/2)).addClass(\"highcharts-point\").attr({zIndex:3}).add(i.group)}}(e||(e={})),e}),i(e,\"Core/Series/SeriesDefaults.js\",[],function(){return{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1e3},enableMouseTracking:!0,events:{},marker:{enabledThreshold:2,lineColor:\"#ffffff\",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:150},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:\"#cccccc\",lineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:\"center\",borderWidth:0,defer:!0,formatter:function(){let{numberFormatter:t}=this.series.chart;return\"number\"!=typeof this.y?\"\":t(this.y,-1)},padding:5,style:{fontSize:\"0.7em\",fontWeight:\"bold\",color:\"contrast\",textOutline:\"1px contrast\"},verticalAlign:\"bottom\",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:150},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:150},opacity:.2}},stickyTracking:!0,turboThreshold:1e3,findNearestPointBy:\"x\"}}),i(e,\"Core/Series/SeriesRegistry.js\",[e[\"Core/Globals.js\"],e[\"Core/Defaults.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var r;let{defaultOptions:o}=e,{extend:a,extendClass:n,merge:h}=s;return function(e){function s(t,s){let r=o.plotOptions||{},a=s.defaultOptions,n=s.prototype;return n.type=t,n.pointClass||(n.pointClass=i),!e.seriesTypes[t]&&(a&&(r[t]=a),e.seriesTypes[t]=s,!0)}e.seriesTypes=t.seriesTypes,e.registerSeriesType=s,e.seriesType=function(t,r,l,d,c){let p=o.plotOptions||{};if(r=r||\"\",p[t]=h(p[r],l),delete e.seriesTypes[t],s(t,n(e.seriesTypes[r]||function(){},d)),e.seriesTypes[t].prototype.type=t,c){class s extends i{}a(s.prototype,c),e.seriesTypes[t].prototype.pointClass=s}return e.seriesTypes[t]}}(r||(r={})),r}),i(e,\"Core/Series/Series.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Legend/LegendSymbol.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Series/SeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,a,n,h,l){let{animObject:d,setAnimation:c}=t,{defaultOptions:p}=e,{registerEventOptions:u}=i,{svg:g,win:f}=s,{seriesTypes:m}=n,{arrayMax:x,arrayMin:y,clamp:b,correctFloat:v,defined:S,destroyObjectProperties:k,diffObjects:C,erase:M,error:w,extend:T,find:A,fireEvent:P,getClosestDistance:L,getNestedProperty:O,insertItem:D,isArray:E,isNumber:I,isString:j,merge:B,objectEach:R,pick:z,removeEvent:N,splat:W,syncTimeout:G}=l;class H{constructor(){this.zoneAxis=\"y\"}init(t,e){let i;P(this,\"init\",{options:e});let s=this,r=t.series;this.eventsToUnbind=[],s.chart=t,s.options=s.setOptions(e);let o=s.options,a=!1!==o.visible;s.linkedSeries=[],s.bindAxes(),T(s,{name:o.name,state:\"\",visible:a,selected:!0===o.selected}),u(this,o);let n=o.events;(n&&n.click||o.point&&o.point.events&&o.point.events.click||o.allowPointSelect)&&(t.runTrackerClick=!0),s.getColor(),s.getSymbol(),s.parallelArrays.forEach(function(t){s[t+\"Data\"]||(s[t+\"Data\"]=[])}),s.isCartesian&&(t.hasCartesianSeries=!0),r.length&&(i=r[r.length-1]),s._i=z(i&&i._i,-1)+1,s.opacity=s.options.opacity,t.orderItems(\"series\",D(this,r)),o.dataSorting&&o.dataSorting.enabled?s.setDataSortingOptions():s.points||s.data||s.setData(o.data,!1),P(this,\"afterInit\")}is(t){return m[t]&&this instanceof m[t]}bindAxes(){let t;let e=this,i=e.options,s=e.chart;P(this,\"bindAxes\",null,function(){(e.axisTypes||[]).forEach(function(r){s[r].forEach(function(s){t=s.options,(z(i[r],0)===s.index||void 0!==i[r]&&i[r]===t.id)&&(D(e,s.series),e[r]=s,s.isDirty=!0)}),e[r]||e.optionalAxis===r||w(18,!0,s)})}),P(this,\"afterBindAxes\")}updateParallelArrays(t,e,i){let s=t.series,r=I(e)?function(i){let r=\"y\"===i&&s.toYData?s.toYData(t):t[i];s[i+\"Data\"][e]=r}:function(t){Array.prototype[e].apply(s[t+\"Data\"],i)};s.parallelArrays.forEach(r)}hasData(){return this.visible&&void 0!==this.dataMax&&void 0!==this.dataMin||this.visible&&this.yData&&this.yData.length>0}hasMarkerChanged(t,e){let i=t.marker,s=e.marker||{};return i&&(s.enabled&&!i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)}autoIncrement(t){let e=this.options,i=e.pointIntervalUnit,s=e.relativeXValue,r=this.chart.time,o=this.xIncrement,a,n;return(o=z(o,e.pointStart,0),this.pointInterval=n=z(this.pointInterval,e.pointInterval,1),s&&I(t)&&(n*=t),i&&(a=new r.Date(o),\"day\"===i?r.set(\"Date\",a,r.get(\"Date\",a)+n):\"month\"===i?r.set(\"Month\",a,r.get(\"Month\",a)+n):\"year\"===i&&r.set(\"FullYear\",a,r.get(\"FullYear\",a)+n),n=a.getTime()-o),s&&I(t))?o+n:(this.xIncrement=o+n,o)}setDataSortingOptions(){let t=this.options;T(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1}),S(t.pointRange)||(t.pointRange=1)}setOptions(t){let e;let i=this.chart,s=i.options.plotOptions,r=i.userOptions||{},o=B(t),a=i.styledMode,n={plotOptions:s,userOptions:o};P(this,\"setOptions\",n);let h=n.plotOptions[this.type],l=r.plotOptions||{},d=l.series||{},c=p.plotOptions[this.type]||{},u=l[this.type]||{};this.userOptions=n.userOptions;let g=B(h,s.series,u,o);this.tooltipOptions=B(p.tooltip,p.plotOptions.series?.tooltip,c?.tooltip,i.userOptions.tooltip,l.series?.tooltip,u.tooltip,o.tooltip),this.stickyTracking=z(o.stickyTracking,u.stickyTracking,d.stickyTracking,!!this.tooltipOptions.shared&&!this.noSharedTooltip||g.stickyTracking),null===h.marker&&delete g.marker,this.zoneAxis=g.zoneAxis||\"y\";let f=this.zones=(g.zones||[]).map(t=>({...t}));return(g.negativeColor||g.negativeFillColor)&&!g.zones&&(e={value:g[this.zoneAxis+\"Threshold\"]||g.threshold||0,className:\"highcharts-negative\"},a||(e.color=g.negativeColor,e.fillColor=g.negativeFillColor),f.push(e)),f.length&&S(f[f.length-1].value)&&f.push(a?{}:{color:this.color,fillColor:this.fillColor}),P(this,\"afterSetOptions\",{options:g}),g}getName(){return z(this.options.name,\"Series \"+(this.index+1))}getCyclic(t,e,i){let s,r;let o=this.chart,a=`${t}Index`,n=`${t}Counter`,h=i?.length||o.options.chart.colorCount;!e&&(S(r=z(\"color\"===t?this.options.colorIndex:void 0,this[a]))?s=r:(o.series.length||(o[n]=0),s=o[n]%h,o[n]+=1),i&&(e=i[s])),void 0!==s&&(this[a]=s),this[t]=e}getColor(){this.chart.styledMode?this.getCyclic(\"color\"):this.options.colorByPoint?this.color=\"#cccccc\":this.getCyclic(\"color\",this.options.color||p.plotOptions[this.type].color,this.chart.options.colors)}getPointsCollection(){return(this.hasGroupedData?this.points:this.data)||[]}getSymbol(){let t=this.options.marker;this.getCyclic(\"symbol\",t.symbol,this.chart.options.symbols)}findPointIndex(t,e){let i,s,r;let a=t.id,n=t.x,h=this.points,l=this.options.dataSorting;if(a){let t=this.chart.get(a);t instanceof o&&(i=t)}else if(this.linkedParent||this.enabledDataSorting||this.options.relativeXValue){let e=e=>!e.touched&&e.index===t.index;if(l&&l.matchByName?e=e=>!e.touched&&e.name===t.name:this.options.relativeXValue&&(e=e=>!e.touched&&e.options.x===t.x),!(i=A(h,e)))return}return i&&void 0!==(r=i&&i.index)&&(s=!0),void 0===r&&I(n)&&(r=this.xData.indexOf(n,e)),-1!==r&&void 0!==r&&this.cropped&&(r=r>=this.cropStart?r-this.cropStart:r),!s&&I(r)&&h[r]&&h[r].touched&&(r=void 0),r}updateData(t,e){let i=this.options,s=i.dataSorting,r=this.points,o=[],a=this.requireSorting,n=t.length===r.length,h,l,d,c,p=!0;if(this.xIncrement=null,t.forEach(function(t,e){let l;let d=S(t)&&this.pointClass.prototype.optionsToObject.call({series:this},t)||{},p=d.x;d.id||I(p)?(-1===(l=this.findPointIndex(d,c))||void 0===l?o.push(t):r[l]&&t!==i.data[l]?(r[l].update(t,!1,null,!1),r[l].touched=!0,a&&(c=l+1)):r[l]&&(r[l].touched=!0),(!n||e!==l||s&&s.enabled||this.hasDerivedData)&&(h=!0)):o.push(t)},this),h)for(l=r.length;l--;)(d=r[l])&&!d.touched&&d.remove&&d.remove(!1,e);else!n||s&&s.enabled?p=!1:(t.forEach(function(t,e){t===r[e].y||r[e].destroyed||r[e].update(t,!1,null,!1)}),o.length=0);return r.forEach(function(t){t&&(t.touched=!1)}),!!p&&(o.forEach(function(t){this.addPoint(t,!1,null,null,!1)},this),null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=x(this.xData),this.autoIncrement()),!0)}setData(t,e=!0,i,s){let r=this,o=r.points,a=o&&o.length||0,n=r.options,h=r.chart,l=n.dataSorting,d=r.xAxis,c=n.turboThreshold,p=this.xData,u=this.yData,g=r.pointArrayMap,f=g&&g.length,m=n.keys,x,y,b,v=0,S=1,k=null,C;h.options.chart.allowMutatingData||(n.data&&delete r.options.data,r.userOptions.data&&delete r.userOptions.data,C=B(!0,t));let M=(t=C||t||[]).length;if(l&&l.enabled&&(t=this.sortData(t)),h.options.chart.allowMutatingData&&!1!==s&&M&&a&&!r.cropped&&!r.hasGroupedData&&r.visible&&!r.boosted&&(b=this.updateData(t,i)),!b){if(r.xIncrement=null,r.colorCounter=0,this.parallelArrays.forEach(function(t){r[t+\"Data\"].length=0}),c&&M>c){if(I(k=r.getFirstValidPoint(t)))for(x=0;x=0?v:0,S=S>=0?S:1),1===k.length&&(S=0),v===S)for(x=0;x{let s=O(i,t),r=O(i,e);return rs?1:0}).forEach(function(t,e){t.x=e},this),e.linkedSeries&&e.linkedSeries.forEach(function(e){let i=e.options,r=i.data;i.dataSorting&&i.dataSorting.enabled||!r||(r.forEach(function(i,o){r[o]=s(e,i),t[o]&&(r[o].x=t[o].x,r[o].index=o)}),e.setData(r,!1))}),t}getProcessedData(t){let e=this,i=e.xAxis,s=e.options,r=s.cropThreshold,o=t||e.getExtremesFromAll||s.getExtremesFromAll,a=i?.logarithmic,n=e.isCartesian,h,l,d=0,c,p,u,g=e.xData,f=e.yData,m=!1,x=g.length;i&&(p=(c=i.getExtremes()).min,u=c.max,m=!!(i.categories&&!i.names.length)),n&&e.sorted&&!o&&(!r||x>r||e.forceCrop)&&(g[x-1]u?(g=[],f=[]):e.yData&&(g[0]u)&&(g=(h=this.cropData(e.xData,e.yData,p,u)).xData,f=h.yData,d=h.start,l=!0));let y=L([a?g.map(a.log2lin):g],()=>e.requireSorting&&!m&&w(15,!1,e.chart));return{xData:g,yData:f,cropped:l,cropStart:d,closestPointRange:y}}processData(t){let e=this.xAxis;if(this.isCartesian&&!this.isDirty&&!e.isDirty&&!this.yAxis.isDirty&&!t)return!1;let i=this.getProcessedData();this.cropped=i.cropped,this.cropStart=i.cropStart,this.processedXData=i.xData,this.processedYData=i.yData,this.closestPointRange=this.basePointRange=i.closestPointRange,P(this,\"afterProcessData\")}cropData(t,e,i,s){let r=t.length,o,a,n=0,h=r;for(o=0;o=i){n=Math.max(0,o-1);break}for(a=o;as){h=a+1;break}return{xData:t.slice(n,h),yData:e.slice(n,h),start:n,end:h}}generatePoints(){let t=this.options,e=this.processedData||t.data,i=this.processedXData,s=this.processedYData,r=this.pointClass,o=i.length,a=this.cropStart||0,n=this.hasGroupedData,h=t.keys,l=[],d=t.dataGrouping&&t.dataGrouping.groupAll?a:0,c,p,u,g,f=this.data;if(!f&&!n){let t=[];t.length=e.length,f=this.data=t}for(h&&n&&(this.options.keys=!1),g=0;g0:p.length)||!n),d=e||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!i||(r[u+a]||c)>=f&&(r[u-a]||c)<=m,l&&d){if(g=p.length)for(;g--;)I(p[g])&&(o[b++]=p[g]);else o[b++]=p}let S={activeYData:o,dataMin:y(o),dataMax:x(o)};return P(this,\"afterGetExtremes\",{dataExtremes:S}),S}applyExtremes(){let t=this.getExtremes();return this.dataMin=t.dataMin,this.dataMax=t.dataMax,t}getFirstValidPoint(t){let e=t.length,i=0,s=null;for(;null===s&&i1)&&(o.step=function(t,e){i&&i.apply(e,arguments),\"width\"===e.prop&&h?.element&&h.attr(r?\"height\":\"width\",t+99)}),n.addClass(\"highcharts-animating\").animate(t,o)}}afterAnimate(){this.setClip(),R(this.chart.sharedClips,(t,e,i)=>{t&&!this.chart.container.querySelector(`[clip-path=\"url(#${t.id})\"]`)&&(t.destroy(),delete i[e])}),this.finishedAnimating=!0,P(this,\"afterAnimate\")}drawPoints(t=this.points){let e,i,s,r,o,a,n;let h=this.chart,l=h.styledMode,{colorAxis:d,options:c}=this,p=c.marker,u=this[this.specialGroup||\"markerGroup\"],g=this.xAxis,f=z(p.enabled,!g||!!g.isRadial||null,this.closestPointRangePx>=p.enabledThreshold*p.radius);if(!1!==p.enabled||this._hasPointMarkers)for(e=0;e0||i.hasImage)&&(i.graphic=s=h.renderer.symbol(t,n.x,n.y,n.width,n.height,a?o:p).add(u),this.enabledDataSorting&&h.hasRendered&&(s.attr({x:i.startXPos}),r=\"animate\")),s&&\"animate\"===r&&s[e?\"show\":\"hide\"](e).animate(n),s){let t=this.pointAttribs(i,l||!i.selected?void 0:\"select\");l?d&&s.css({fill:t.fill}):s[r](t)}s&&s.addClass(i.getClassName(),!0)}else s&&(i.graphic=s.destroy())}markerAttribs(t,e){let i=this.options,s=i.marker,r=t.marker||{},o=r.symbol||s.symbol,a={},n,h,l=z(r.radius,s&&s.radius);e&&(n=s.states[e],l=z((h=r.states&&r.states[e])&&h.radius,n&&n.radius,l&&l+(n&&n.radiusPlus||0))),t.hasImage=o&&0===o.indexOf(\"url\"),t.hasImage&&(l=0);let d=t.pos();return I(l)&&d&&(a.x=d[0]-l,a.y=d[1]-l,i.crisp&&(a.x=Math.floor(a.x))),l&&(a.width=a.height=2*l),a}pointAttribs(t,e){let i=this.options.marker,s=t&&t.options,r=s&&s.marker||{},o=s&&s.color,a=t&&t.color,n=t&&t.zone&&t.zone.color,h,l,d=this.color,c,p,u=z(r.lineWidth,i.lineWidth),g=1;return d=o||n||a||d,c=r.fillColor||i.fillColor||d,p=r.lineColor||i.lineColor||d,e=e||\"normal\",h=i.states[e]||{},u=z((l=r.states&&r.states[e]||{}).lineWidth,h.lineWidth,u+z(l.lineWidthPlus,h.lineWidthPlus,0)),c=l.fillColor||h.fillColor||c,{stroke:p=l.lineColor||h.lineColor||p,\"stroke-width\":u,fill:c,opacity:g=z(l.opacity,h.opacity,g)}}destroy(t){let e,i,s;let r=this,o=r.chart,a=/AppleWebKit\\/533/.test(f.navigator.userAgent),n=r.data||[];for(P(r,\"destroy\",{keepEventsForUpdate:t}),this.removeEvents(t),(r.axisTypes||[]).forEach(function(t){(s=r[t])&&s.series&&(M(s.series,r),s.isDirty=s.forceRedraw=!0)}),r.legendItem&&r.chart.legend.destroyItem(r),e=n.length;e--;)(i=n[e])&&i.destroy&&i.destroy();for(let t of r.zones)k(t,void 0,!0);l.clearTimeout(r.animationTimeout),R(r,function(t,e){t instanceof h&&!t.survive&&t[a&&\"group\"===e?\"hide\":\"destroy\"]()}),o.hoverSeries===r&&(o.hoverSeries=void 0),M(o.series,r),o.orderItems(\"series\"),R(r,function(e,i){t&&\"hcEvents\"===i||delete r[i]})}applyZones(){let{area:t,chart:e,graph:i,zones:s,points:r,xAxis:o,yAxis:a,zoneAxis:n}=this,{inverted:h,renderer:l}=e,d=this[`${n}Axis`],{isXAxis:c,len:p=0}=d||{},u=(i?.strokeWidth()||0)/2+1,g=(t,e=0,i=0)=>{h&&(i=p-i);let{translated:s=0,lineClip:r}=t,o=i-s;r?.push([\"L\",e,Math.abs(o){t.forEach((e,i)=>{(\"M\"===e[0]||\"L\"===e[0])&&(t[i]=[e[0],c?p-e[1]:e[1],c?e[2]:p-e[2]])})};if(s.forEach(t=>{t.lineClip=[],t.translated=b(d.toPixels(z(t.value,e),!0)||0,0,p)}),i&&!this.showLine&&i.hide(),t&&t.hide(),\"y\"===n&&r.length{let s=e.lineClip||[],r=Math.round(e.translated||0);o.reversed&&s.reverse();let{clip:n,simpleClip:d}=e,p=0,g=0,x=o.len,y=a.len;c?(p=r,x=m):(g=r,y=m);let b=[[\"M\",p,g],[\"L\",x,g],[\"L\",x,y],[\"L\",p,y],[\"Z\"]],v=[b[0],...s,b[1],b[2],...f,b[3],b[4]];f=s.reverse(),m=r,h&&(u(v),t&&u(b)),n?(n.animate({d:v}),d?.animate({d:b})):(n=e.clip=l.path(v),t&&(d=e.simpleClip=l.path(b))),i&&e.graph?.clip(n),t&&e.area?.clip(d)})}else this.visible&&(i&&i.show(),t&&t.show())}plotGroup(t,e,i,s,r){let o=this[t],a=!o,n={visibility:i,zIndex:s||.1};return S(this.opacity)&&!this.chart.styledMode&&\"inactive\"!==this.state&&(n.opacity=this.opacity),o||(this[t]=o=this.chart.renderer.g().add(r)),o.addClass(\"highcharts-\"+e+\" highcharts-series-\"+this.index+\" highcharts-\"+this.type+\"-series \"+(S(this.colorIndex)?\"highcharts-color-\"+this.colorIndex+\" \":\"\")+(this.options.className||\"\")+(o.hasClass(\"highcharts-tracker\")?\" highcharts-tracker\":\"\"),!0),o.attr(n)[a?\"attr\":\"animate\"](this.getPlotBox(e)),o}getPlotBox(t){let e=this.xAxis,i=this.yAxis,s=this.chart,r=s.inverted&&!s.polar&&e&&this.invertible&&\"series\"===t;return s.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:s.plotLeft,translateY:i?i.top:s.plotTop,rotation:r?90:0,rotationOriginX:r?(e.len-i.len)/2:0,rotationOriginY:r?(e.len+i.len)/2:0,scaleX:r?-1:1,scaleY:1}}removeEvents(t){let{eventsToUnbind:e}=this;t||N(this),e.length&&(e.forEach(t=>{t()}),e.length=0)}render(){let t=this,{chart:e,options:i,hasRendered:s}=t,r=d(i.animation),o=t.visible?\"inherit\":\"hidden\",a=i.zIndex,n=e.seriesGroup,h=t.finishedAnimating?0:r.duration;P(this,\"render\"),t.plotGroup(\"group\",\"series\",o,a,n),t.markerGroup=t.plotGroup(\"markerGroup\",\"markers\",o,a,n),!1!==i.clip&&t.setClip(),h&&t.animate?.(!0),t.drawGraph&&(t.drawGraph(),t.applyZones()),t.visible&&t.drawPoints(),t.drawDataLabels?.(),t.redrawPoints?.(),i.enableMouseTracking&&t.drawTracker?.(),h&&t.animate?.(),s||(h&&r.defer&&(h+=r.defer),t.animationTimeout=G(()=>{t.afterAnimate()},h||0)),t.isDirty=!1,t.hasRendered=!0,P(t,\"afterRender\")}redraw(){let t=this.isDirty||this.isDirtyData;this.translate(),this.render(),t&&delete this.kdTree}reserveSpace(){return this.visible||!this.chart.options.chart.ignoreHiddenSeries}searchPoint(t,e){let{xAxis:i,yAxis:s}=this,r=this.chart.inverted;return this.searchKDTree({clientX:r?i.len-t.chartY+i.pos:t.chartX-i.pos,plotY:r?s.len-t.chartX+s.pos:t.chartY-s.pos},e,t)}buildKDTree(t){this.buildingKdTree=!0;let e=this,i=e.options.findNearestPointBy.indexOf(\"y\")>-1?2:1;delete e.kdTree,G(function(){e.kdTree=function t(i,s,r){let o,a;let n=i?.length;if(n)return o=e.kdAxisArray[s%r],i.sort((t,e)=>(t[o]||0)-(e[o]||0)),{point:i[a=Math.floor(n/2)],left:t(i.slice(0,a),s+1,r),right:t(i.slice(a+1),s+1,r)}}(e.getValidPoints(void 0,!e.directTouch),i,i),e.buildingKdTree=!1},e.options.kdNow||t?.type===\"touchstart\"?0:1)}searchKDTree(t,e,i){let s=this,[r,o]=this.kdAxisArray,a=e?\"distX\":\"dist\",n=(s.options.findNearestPointBy||\"\").indexOf(\"y\")>-1?2:1,h=!!s.isBubble;if(this.kdTree||this.buildingKdTree||this.buildKDTree(i),this.kdTree)return function t(e,i,n,l){let d=i.point,c=s.kdAxisArray[n%l],p,u,g=d;!function(t,e){let i=t[r],s=e[r],a=S(i)&&S(s)?i-s:null,n=t[o],l=e[o],d=S(n)&&S(l)?n-l:0,c=h&&e.marker?.radius||0;e.dist=Math.sqrt((a&&a*a||0)+d*d)-c,e.distX=S(a)?Math.abs(a)-c:Number.MAX_VALUE}(e,d);let f=(e[c]||0)-(d[c]||0)+(h&&d.marker?.radius||0),m=f<0?\"left\":\"right\",x=f<0?\"right\":\"left\";return i[m]&&(g=(p=t(e,i[m],n+1,l))[a]=0&&o<=(s?s.len:e.plotHeight)&&r>=0&&r<=(i?i.len:e.plotWidth)}drawTracker(){let t=this,e=t.options,i=e.trackByArea,s=[].concat((i?t.areaPath:t.graphPath)||[]),r=t.chart,o=r.pointer,a=r.renderer,n=r.options.tooltip?.snap||0,h=()=>{e.enableMouseTracking&&r.hoverSeries!==t&&t.onMouseOver()},l=\"rgba(192,192,192,\"+(g?1e-4:.002)+\")\",d=t.tracker;d?d.attr({d:s}):t.graph&&(t.tracker=d=a.path(s).attr({visibility:t.visible?\"inherit\":\"hidden\",zIndex:2}).addClass(i?\"highcharts-tracker-area\":\"highcharts-tracker-line\").add(t.group),r.styledMode||d.attr({\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",stroke:l,fill:i?l:\"none\",\"stroke-width\":t.graph.strokeWidth()+(i?0:2*n)}),[t.tracker,t.markerGroup,t.dataLabelsGroup].forEach(t=>{t&&(t.addClass(\"highcharts-tracker\").on(\"mouseover\",h).on(\"mouseout\",t=>{o?.onTrackerMouseOut(t)}),e.cursor&&!r.styledMode&&t.css({cursor:e.cursor}),t.on(\"touchstart\",h))})),P(this,\"afterDrawTracker\")}addPoint(t,e,i,s,r){let o,a;let n=this.options,h=this.data,l=this.chart,d=this.xAxis,c=d&&d.hasNames&&d.names,p=n.data,u=this.xData;e=z(e,!0);let g={series:this};this.pointClass.prototype.applyOptions.apply(g,[t]);let f=g.x;if(a=u.length,this.requireSorting&&ff;)a--;this.updateParallelArrays(g,\"splice\",[a,0,0]),this.updateParallelArrays(g,a),c&&g.name&&(c[f]=g.name),p.splice(a,0,t),(o||this.processedData)&&(this.data.splice(a,0,null),this.processData()),\"point\"===n.legendType&&this.generatePoints(),i&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(g,\"shift\"),p.shift())),!1!==r&&P(this,\"addPoint\",{point:g}),this.isDirty=!0,this.isDirtyData=!0,e&&l.redraw(s)}removePoint(t,e,i){let s=this,r=s.data,o=r[t],a=s.points,n=s.chart,h=function(){a&&a.length===r.length&&a.splice(t,1),r.splice(t,1),s.options.data.splice(t,1),s.updateParallelArrays(o||{series:s},\"splice\",[t,1]),o&&o.destroy(),s.isDirty=!0,s.isDirtyData=!0,e&&n.redraw()};c(i,n),e=z(e,!0),o?o.firePointEvent(\"remove\",null,h):h()}remove(t,e,i,s){let r=this,o=r.chart;function a(){r.destroy(s),o.isDirtyLegend=o.isDirtyBox=!0,o.linkSeries(s),z(t,!0)&&o.redraw(e)}!1!==i?P(r,\"remove\",null,a):a()}update(t,e){P(this,\"update\",{options:t=C(t,this.userOptions)});let i=this,s=i.chart,r=i.userOptions,o=i.initialType||i.type,a=s.options.plotOptions,n=m[o].prototype,h=i.finishedAnimating&&{animation:!1},l={},d,c,p=[\"colorIndex\",\"eventOptions\",\"navigatorSeries\",\"symbolIndex\",\"baseSeries\"],u=t.type||r.type||s.options.chart.type,g=!(this.hasDerivedData||u&&u!==this.type||void 0!==t.pointStart||void 0!==t.pointInterval||void 0!==t.relativeXValue||t.joinBy||t.mapData||[\"dataGrouping\",\"pointStart\",\"pointInterval\",\"pointIntervalUnit\",\"keys\"].some(t=>i.hasOptionChanged(t)));u=u||o,g&&(p.push(\"data\",\"isDirtyData\",\"isDirtyCanvas\",\"points\",\"processedData\",\"processedXData\",\"processedYData\",\"xIncrement\",\"cropped\",\"_hasPointMarkers\",\"hasDataLabels\",\"nodes\",\"layout\",\"level\",\"mapMap\",\"mapData\",\"minY\",\"maxY\",\"minX\",\"maxX\",\"transformGroups\"),!1!==t.visible&&p.push(\"area\",\"graph\"),i.parallelArrays.forEach(function(t){p.push(t+\"Data\")}),t.data&&(t.dataSorting&&T(i.options.dataSorting,t.dataSorting),this.setData(t.data,!1))),t=B(r,{index:void 0===r.index?i.index:r.index,pointStart:a?.series?.pointStart??r.pointStart??i.xData?.[0]},!g&&{data:i.options.data},t,h),g&&t.data&&(t.data=i.options.data),(p=[\"group\",\"markerGroup\",\"dataLabelsGroup\",\"transformGroup\"].concat(p)).forEach(function(t){p[t]=i[t],delete i[t]});let f=!1;if(m[u]){if(f=u!==i.type,i.remove(!1,!1,!1,!0),f){if(s.propFromSeries(),Object.setPrototypeOf)Object.setPrototypeOf(i,m[u].prototype);else{let t=Object.hasOwnProperty.call(i,\"hcEvents\")&&i.hcEvents;for(c in n)i[c]=void 0;T(i,m[u].prototype),t?i.hcEvents=t:delete i.hcEvents}}}else w(17,!0,s,{missingModuleFor:u});if(p.forEach(function(t){i[t]=p[t]}),i.init(s,t),g&&this.points)for(let t of(!1===(d=i.options).visible?(l.graphic=1,l.dataLabel=1):(this.hasMarkerChanged(d,r)&&(l.graphic=1),i.hasDataLabels?.()||(l.dataLabel=1)),this.points))t&&t.series&&(t.resolveColor(),Object.keys(l).length&&t.destroyElements(l),!1===d.showInLegend&&t.legendItem&&s.legend.destroyItem(t));i.initialType=o,s.linkSeries(),s.setSortedData(),f&&i.linkedSeries.length&&(i.isDirtyData=!0),P(this,\"afterUpdate\"),z(e,!0)&&s.redraw(!!g&&void 0)}setName(t){this.name=this.options.name=this.userOptions.name=t,this.chart.isDirtyLegend=!0}hasOptionChanged(t){let e=this.chart,i=this.options[t],s=e.options.plotOptions,r=this.userOptions[t],o=z(s?.[this.type]?.[t],s?.series?.[t]);return r&&!S(o)?i!==r:i!==z(o,i)}onMouseOver(){let t=this.chart,e=t.hoverSeries,i=t.pointer;i?.setHoverChartIndex(),e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&P(this,\"mouseOver\"),this.setState(\"hover\"),t.hoverSeries=this}onMouseOut(){let t=this.options,e=this.chart,i=e.tooltip,s=e.hoverPoint;e.hoverSeries=null,s&&s.onMouseOut(),this&&t.events.mouseOut&&P(this,\"mouseOut\"),i&&!this.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),e.series.forEach(function(t){t.setState(\"\",!0)})}setState(t,e){let i=this,s=i.options,r=i.graph,o=s.inactiveOtherPoints,a=s.states,n=z(a[t||\"normal\"]&&a[t||\"normal\"].animation,i.chart.options.chart.animation),h=s.lineWidth,l=s.opacity;if(t=t||\"\",i.state!==t&&([i.group,i.markerGroup,i.dataLabelsGroup].forEach(function(e){e&&(i.state&&e.removeClass(\"highcharts-series-\"+i.state),t&&e.addClass(\"highcharts-series-\"+t))}),i.state=t,!i.chart.styledMode)){if(a[t]&&!1===a[t].enabled)return;if(t&&(h=a[t].lineWidth||h+(a[t].lineWidthPlus||0),l=z(a[t].opacity,l)),r&&!r.dashstyle&&I(h))for(let t of[r,...this.zones.map(t=>t.graph)])t?.animate({\"stroke-width\":h},n);o||[i.group,i.markerGroup,i.dataLabelsGroup,i.labelBySeries].forEach(function(t){t&&t.animate({opacity:l},n)})}e&&o&&i.points&&i.setAllPointsToState(t||void 0)}setAllPointsToState(t){this.points.forEach(function(e){e.setState&&e.setState(t)})}setVisible(t,e){let i=this,s=i.chart,r=s.options.chart.ignoreHiddenSeries,o=i.visible;i.visible=t=i.options.visible=i.userOptions.visible=void 0===t?!o:t;let a=t?\"show\":\"hide\";[\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\",\"tt\"].forEach(t=>{i[t]?.[a]()}),(s.hoverSeries===i||s.hoverPoint?.series===i)&&i.onMouseOut(),i.legendItem&&s.legend.colorizeItem(i,t),i.isDirty=!0,i.options.stacking&&s.series.forEach(t=>{t.options.stacking&&t.visible&&(t.isDirty=!0)}),i.linkedSeries.forEach(e=>{e.setVisible(t,!1)}),r&&(s.isDirtyBox=!0),P(i,a),!1!==e&&s.redraw()}show(){this.setVisible(!0)}hide(){this.setVisible(!1)}select(t){this.selected=t=this.options.selected=void 0===t?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),P(this,t?\"select\":\"unselect\")}shouldShowTooltip(t,e,i={}){return i.series=this,i.visiblePlotOnly=!0,this.chart.isInsidePlot(t,e,i)}drawLegendSymbol(t,e){r[this.options.legendSymbol||\"rectangle\"]?.call(this,t,e)}}return H.defaultOptions=a,H.types=n.seriesTypes,H.registerType=n.registerSeriesType,T(H.prototype,{axisTypes:[\"xAxis\",\"yAxis\"],coll:\"series\",colorCounter:0,directTouch:!1,invertible:!0,isCartesian:!0,kdAxisArray:[\"clientX\",\"plotY\"],parallelArrays:[\"x\",\"y\"],pointClass:o,requireSorting:!0,sorted:!0}),n.series=H,H}),i(e,\"Core/Chart/Chart.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Defaults.js\"],e[\"Core/Templating.js\"],e[\"Core/Foundation.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Axis/Tick.js\"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u){let{animate:g,animObject:f,setAnimation:m}=t,{defaultOptions:x,defaultTime:y}=i,{numberFormat:b}=s,{registerEventOptions:v}=r,{charts:S,doc:k,marginNames:C,svg:M,win:w}=o,{seriesTypes:T}=h,{addEvent:A,attr:P,createElement:L,css:O,defined:D,diffObjects:E,discardElement:I,erase:j,error:B,extend:R,find:z,fireEvent:N,getStyle:W,isArray:G,isNumber:H,isObject:X,isString:F,merge:Y,objectEach:U,pick:V,pInt:$,relativeLength:Z,removeEvent:_,splat:q,syncTimeout:K,uniqueKey:J}=c;class Q{static chart(t,e,i){return new Q(t,e,i)}constructor(t,e,i){this.sharedClips={};let s=[...arguments];(F(t)||t.nodeName)&&(this.renderTo=s.shift()),this.init(s[0],s[1])}setZoomOptions(){let t=this.options.chart,e=t.zooming;this.zooming={...e,type:V(t.zoomType,e.type),key:V(t.zoomKey,e.key),pinchType:V(t.pinchType,e.pinchType),singleTouch:V(t.zoomBySingleTouch,e.singleTouch,!1),resetButton:Y(e.resetButton,t.resetZoomButton)}}init(t,e){N(this,\"init\",{args:arguments},function(){let i=Y(x,t),s=i.chart;this.userOptions=R({},t),this.margin=[],this.spacing=[],this.labelCollectors=[],this.callback=e,this.isResizing=0,this.options=i,this.axes=[],this.series=[],this.time=t.time&&Object.keys(t.time).length?new d(t.time):o.time,this.numberFormatter=s.numberFormatter||b,this.styledMode=s.styledMode,this.hasCartesianSeries=s.showAxes,this.index=S.length,S.push(this),o.chartCount++,v(this,s),this.xAxis=[],this.yAxis=[],this.pointCount=this.colorCounter=this.symbolCounter=0,this.setZoomOptions(),N(this,\"afterInit\"),this.firstRender()})}initSeries(t){let e=this.options.chart,i=t.type||e.type,s=T[i];s||B(17,!0,this,{missingModuleFor:i});let r=new s;return\"function\"==typeof r.init&&r.init(this,t),r}setSortedData(){this.getSeriesOrderByLinks().forEach(function(t){t.points||t.data||!t.enabledDataSorting||t.setData(t.options.data,!1)})}getSeriesOrderByLinks(){return this.series.concat().sort(function(t,e){return t.linkedSeries.length||e.linkedSeries.length?e.linkedSeries.length-t.linkedSeries.length:0})}orderItems(t,e=0){let i=this[t],s=this.options[t]=q(this.options[t]).slice(),r=this.userOptions[t]=this.userOptions[t]?q(this.userOptions[t]).slice():[];if(this.hasRendered&&(s.splice(e),r.splice(e)),i)for(let t=e,o=i.length;t=Math.max(h+o,t.pos)&&e<=Math.min(h+o+c.width,t.pos+t.len)||(g.isInsidePlot=!1)}if(!i.ignoreY&&g.isInsidePlot){let t=!s&&i.axis&&!i.axis.isXAxis&&i.axis||d&&(s?d.xAxis:d.yAxis)||{pos:a,len:1/0},e=i.paneCoordinates?t.pos+u:a+u;e>=Math.max(l+a,t.pos)&&e<=Math.min(l+a+c.height,t.pos+t.len)||(g.isInsidePlot=!1)}return N(this,\"afterIsInsidePlot\",g),g.isInsidePlot}redraw(t){N(this,\"beforeRedraw\");let e=this.hasCartesianSeries?this.axes:this.colorAxis||[],i=this.series,s=this.pointer,r=this.legend,o=this.userOptions.legend,a=this.renderer,n=a.isHidden(),h=[],l,d,c,p=this.isDirtyBox,u=this.isDirtyLegend,g;for(a.rootFontSize=a.boxWrapper.getStyle(\"font-size\"),this.setResponsive&&this.setResponsive(!1),m(!!this.hasRendered&&t,this),n&&this.temporaryDisplay(),this.layOutTitles(!1),c=i.length;c--;)if(((g=i[c]).options.stacking||g.options.centerInCategory)&&(d=!0,g.isDirty)){l=!0;break}if(l)for(c=i.length;c--;)(g=i[c]).options.stacking&&(g.isDirty=!0);i.forEach(function(t){t.isDirty&&(\"point\"===t.options.legendType?(\"function\"==typeof t.updateTotals&&t.updateTotals(),u=!0):o&&(o.labelFormatter||o.labelFormat)&&(u=!0)),t.isDirtyData&&N(t,\"updatedData\")}),u&&r&&r.options.enabled&&(r.render(),this.isDirtyLegend=!1),d&&this.getStacks(),e.forEach(function(t){t.updateNames(),t.setScale()}),this.getMargins(),e.forEach(function(t){t.isDirty&&(p=!0)}),e.forEach(function(t){let e=t.min+\",\"+t.max;t.extKey!==e&&(t.extKey=e,h.push(function(){N(t,\"afterSetExtremes\",R(t.eventArgs,t.getExtremes())),delete t.eventArgs})),(p||d)&&t.redraw()}),p&&this.drawChartBox(),N(this,\"predraw\"),i.forEach(function(t){(p||t.isDirty)&&t.visible&&t.redraw(),t.isDirtyData=!1}),s&&s.reset(!0),a.draw(),N(this,\"redraw\"),N(this,\"render\"),n&&this.temporaryDisplay(!0),h.forEach(function(t){t.call()})}get(t){let e=this.series;function i(e){return e.id===t||e.options&&e.options.id===t}let s=z(this.axes,i)||z(this.series,i);for(let t=0;!s&&t(e.getPointsCollection().forEach(e=>{V(e.selectedStaging,e.selected)&&t.push(e)}),t),[])}getSelectedSeries(){return this.series.filter(function(t){return t.selected})}setTitle(t,e,i){this.applyDescription(\"title\",t),this.applyDescription(\"subtitle\",e),this.applyDescription(\"caption\",void 0),this.layOutTitles(i)}applyDescription(t,e){let i=this,s=this.options[t]=Y(this.options[t],e),r=this[t];r&&e&&(this[t]=r=r.destroy()),s&&!r&&((r=this.renderer.text(s.text,0,0,s.useHTML).attr({align:s.align,class:\"highcharts-\"+t,zIndex:s.zIndex||4}).add()).update=function(e,s){i.applyDescription(t,e),i.layOutTitles(s)},this.styledMode||r.css(R(\"title\"===t?{fontSize:this.options.isStock?\"1em\":\"1.2em\"}:{},s.style)),this[t]=r)}layOutTitles(t=!0){let e=[0,0,0],i=this.renderer,s=this.spacingBox;[\"title\",\"subtitle\",\"caption\"].forEach(function(t){let r=this[t],o=this.options[t],a=o.verticalAlign||\"top\",n=\"title\"===t?\"top\"===a?-3:0:\"top\"===a?e[0]+2:0;if(r){r.css({width:(o.width||s.width+(o.widthAdjust||0))+\"px\"});let t=i.fontMetrics(r).b,h=Math.round(r.getBBox(o.useHTML).height);r.align(R({y:\"bottom\"===a?t:n+t,height:h},o),!1,\"spacingBox\"),o.floating||(\"top\"===a?e[0]=Math.ceil(e[0]+h):\"bottom\"===a&&(e[2]=Math.ceil(e[2]+h)))}},this),e[0]&&\"top\"===(this.options.title.verticalAlign||\"top\")&&(e[0]+=this.options.title.margin),e[2]&&\"bottom\"===this.options.caption.verticalAlign&&(e[2]+=this.options.caption.margin);let r=!this.titleOffset||this.titleOffset.join(\",\")!==e.join(\",\");this.titleOffset=e,N(this,\"afterLayOutTitles\"),!this.isDirtyBox&&r&&(this.isDirtyBox=this.isDirtyLegend=r,this.hasRendered&&t&&this.isDirtyBox&&this.redraw())}getContainerBox(){return{width:W(this.renderTo,\"width\",!0)||0,height:W(this.renderTo,\"height\",!0)||0}}getChartSize(){let t=this.options.chart,e=t.width,i=t.height,s=this.getContainerBox();this.chartWidth=Math.max(0,e||s.width||600),this.chartHeight=Math.max(0,Z(i,this.chartWidth)||(s.height>1?s.height:400)),this.containerBox=s}temporaryDisplay(t){let e=this.renderTo,i;if(t)for(;e&&e.style;)e.hcOrigStyle&&(O(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(k.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style&&(k.body.contains(e)||e.parentNode||(e.hcOrigDetached=!0,k.body.appendChild(e)),(\"none\"===W(e,\"display\",!1)||e.hcOricDetached)&&(e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},i={display:\"block\",overflow:\"hidden\"},e!==this.renderTo&&(i.height=0),O(e,i),e.offsetWidth||e.style.setProperty(\"display\",\"block\",\"important\")),(e=e.parentNode)!==k.body););}setClassName(t){this.container.className=\"highcharts-container \"+(t||\"\")}getContainer(){let t=this.options,e=t.chart,i=\"data-highcharts-chart\",s=J(),r,o=this.renderTo;o||(this.renderTo=o=e.renderTo),F(o)&&(this.renderTo=o=k.getElementById(o)),o||B(13,!0,this);let n=$(P(o,i));H(n)&&S[n]&&S[n].hasRendered&&S[n].destroy(),P(o,i,this.index),o.innerHTML=p.emptyHTML,e.skipClone||o.offsetWidth||this.temporaryDisplay(),this.getChartSize();let h=this.chartHeight,d=this.chartWidth;O(o,{overflow:\"hidden\"}),this.styledMode||(r=R({position:\"relative\",overflow:\"hidden\",width:d+\"px\",height:h+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\",userSelect:\"none\",\"touch-action\":\"manipulation\",outline:\"none\"},e.style||{}));let c=L(\"div\",{id:s},r,o);this.container=c,this.getChartSize(),d===this.chartWidth||(d=this.chartWidth,this.styledMode||O(c,{width:V(e.style?.width,d+\"px\")})),this.containerBox=this.getContainerBox(),this._cursor=c.style.cursor;let u=e.renderer||!M?a.getRendererType(e.renderer):l;if(this.renderer=new u(c,d,h,void 0,e.forExport,t.exporting&&t.exporting.allowHTML,this.styledMode),m(void 0,this),this.setClassName(e.className),this.styledMode)for(let e in t.defs)this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);this.renderer.chartIndex=this.index,N(this,\"afterGetContainer\")}getMargins(t){let{spacing:e,margin:i,titleOffset:s}=this;this.resetMargins(),s[0]&&!D(i[0])&&(this.plotTop=Math.max(this.plotTop,s[0]+e[0])),s[2]&&!D(i[2])&&(this.marginBottom=Math.max(this.marginBottom,s[2]+e[2])),this.legend&&this.legend.display&&this.legend.adjustMargins(i,e),N(this,\"getMargins\"),t||this.getAxisMargins()}getAxisMargins(){let t=this,e=t.axisOffset=[0,0,0,0],i=t.colorAxis,s=t.margin,r=function(t){t.forEach(function(t){t.visible&&t.getOffset()})};t.hasCartesianSeries?r(t.axes):i&&i.length&&r(i),C.forEach(function(i,r){D(s[r])||(t[i]+=e[r])}),t.setChartSize()}getOptions(){return E(this.userOptions,x)}reflow(t){let e=this,i=e.containerBox,s=e.getContainerBox();delete e.pointer?.chartPosition,!e.isPrinting&&!e.isResizing&&i&&s.width&&((s.width!==i.width||s.height!==i.height)&&(c.clearTimeout(e.reflowTimeout),e.reflowTimeout=K(function(){e.container&&e.setSize(void 0,void 0,!1)},t?100:0)),e.containerBox=s)}setReflow(){let t=this,e=e=>{t.options?.chart.reflow&&t.hasLoaded&&t.reflow(e)};if(\"function\"==typeof ResizeObserver)new ResizeObserver(e).observe(t.renderTo);else{let t=A(w,\"resize\",e);A(this,\"destroy\",t)}}setSize(t,e,i){let s=this,r=s.renderer;s.isResizing+=1,m(i,s);let o=r.globalAnimation;s.oldChartHeight=s.chartHeight,s.oldChartWidth=s.chartWidth,void 0!==t&&(s.options.chart.width=t),void 0!==e&&(s.options.chart.height=e),s.getChartSize();let{chartWidth:a,chartHeight:n,scrollablePixelsX:h=0,scrollablePixelsY:l=0}=s;(s.isDirtyBox||a!==s.oldChartWidth||n!==s.oldChartHeight)&&(s.styledMode||(o?g:O)(s.container,{width:`${a+h}px`,height:`${n+l}px`},o),s.setChartSize(!0),r.setSize(a,n,o),s.axes.forEach(function(t){t.isDirty=!0,t.setScale()}),s.isDirtyLegend=!0,s.isDirtyBox=!0,s.layOutTitles(),s.getMargins(),s.redraw(o),s.oldChartHeight=void 0,N(s,\"resize\"),setTimeout(()=>{s&&N(s,\"endResize\",void 0,()=>{s.isResizing-=1})},f(o).duration))}setChartSize(t){let e,i,s,r;let o=this.inverted,a=this.renderer,n=this.chartWidth,h=this.chartHeight,l=this.options.chart,d=this.spacing,c=this.clipOffset;this.plotLeft=e=Math.round(this.plotLeft),this.plotTop=i=Math.round(this.plotTop),this.plotWidth=s=Math.max(0,Math.round(n-e-this.marginRight)),this.plotHeight=r=Math.max(0,Math.round(h-i-this.marginBottom)),this.plotSizeX=o?r:s,this.plotSizeY=o?s:r,this.plotBorderWidth=l.plotBorderWidth||0,this.spacingBox=a.spacingBox={x:d[3],y:d[0],width:n-d[3]-d[1],height:h-d[0]-d[2]},this.plotBox=a.plotBox={x:e,y:i,width:s,height:r};let p=2*Math.floor(this.plotBorderWidth/2),u=Math.ceil(Math.max(p,c[3])/2),g=Math.ceil(Math.max(p,c[0])/2);this.clipBox={x:u,y:g,width:Math.floor(this.plotSizeX-Math.max(p,c[1])/2-u),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(p,c[2])/2-g))},t||(this.axes.forEach(function(t){t.setAxisSize(),t.setAxisTranslation()}),a.alignElements()),N(this,\"afterSetChartSize\",{skipAxes:t})}resetMargins(){N(this,\"resetMargins\");let t=this,e=t.options.chart;[\"margin\",\"spacing\"].forEach(function(i){let s=e[i],r=X(s)?s:[s,s,s,s];[\"Top\",\"Right\",\"Bottom\",\"Left\"].forEach(function(s,o){t[i][o]=V(e[i+s],r[o])})}),C.forEach(function(e,i){t[e]=V(t.margin[i],t.spacing[i])}),t.axisOffset=[0,0,0,0],t.clipOffset=[0,0,0,0]}drawChartBox(){let t=this.options.chart,e=this.renderer,i=this.chartWidth,s=this.chartHeight,r=this.styledMode,o=this.plotBGImage,a=t.backgroundColor,n=t.plotBackgroundColor,h=t.plotBackgroundImage,l=this.plotLeft,d=this.plotTop,c=this.plotWidth,p=this.plotHeight,u=this.plotBox,g=this.clipRect,f=this.clipBox,m=this.chartBackground,x=this.plotBackground,y=this.plotBorder,b,v,S,k=\"animate\";m||(this.chartBackground=m=e.rect().addClass(\"highcharts-background\").add(),k=\"attr\"),r?b=v=m.strokeWidth():(v=(b=t.borderWidth||0)+(t.shadow?8:0),S={fill:a||\"none\"},(b||m[\"stroke-width\"])&&(S.stroke=t.borderColor,S[\"stroke-width\"]=b),m.attr(S).shadow(t.shadow)),m[k]({x:v/2,y:v/2,width:i-v-b%2,height:s-v-b%2,r:t.borderRadius}),k=\"animate\",x||(k=\"attr\",this.plotBackground=x=e.rect().addClass(\"highcharts-plot-background\").add()),x[k](u),!r&&(x.attr({fill:n||\"none\"}).shadow(t.plotShadow),h&&(o?(h!==o.attr(\"href\")&&o.attr(\"href\",h),o.animate(u)):this.plotBGImage=e.image(h,l,d,c,p).add())),g?g.animate({width:f.width,height:f.height}):this.clipRect=e.clipRect(f),k=\"animate\",y||(k=\"attr\",this.plotBorder=y=e.rect().addClass(\"highcharts-plot-border\").attr({zIndex:1}).add()),r||y.attr({stroke:t.plotBorderColor,\"stroke-width\":t.plotBorderWidth||0,fill:\"none\"}),y[k](y.crisp({x:l,y:d,width:c,height:p},-y.strokeWidth())),this.isDirtyBox=!1,N(this,\"afterDrawChartBox\")}propFromSeries(){let t,e,i;let s=this,r=s.options.chart,o=s.options.series;[\"inverted\",\"angular\",\"polar\"].forEach(function(a){for(e=T[r.type],i=r[a]||e&&e.prototype[a],t=o&&o.length;!i&&t--;)(e=T[o[t].type])&&e.prototype[a]&&(i=!0);s[a]=i})}linkSeries(t){let e=this,i=e.series;i.forEach(function(t){t.linkedSeries.length=0}),i.forEach(function(t){let{linkedTo:i}=t.options;if(F(i)){let s;(s=\":previous\"===i?e.series[t.index-1]:e.get(i))&&s.linkedParent!==t&&(s.linkedSeries.push(t),t.linkedParent=s,s.enabledDataSorting&&t.setDataSortingOptions(),t.visible=V(t.options.visible,s.options.visible,t.visible))}}),N(this,\"afterLinkSeries\",{isUpdating:t})}renderSeries(){this.series.forEach(function(t){t.translate(),t.render()})}render(){let t=this.axes,e=this.colorAxis,i=this.renderer,s=this.options.chart.axisLayoutRuns||2,r=t=>{t.forEach(t=>{t.visible&&t.render()})},o=0,a=!0,n,h=0;for(let e of(this.setTitle(),N(this,\"beforeMargins\"),this.getStacks?.(),this.getMargins(!0),this.setChartSize(),t)){let{options:t}=e,{labels:i}=t;if(e.horiz&&e.visible&&i.enabled&&e.series.length&&\"colorAxis\"!==e.coll&&!this.polar){o=t.tickLength,e.createGroups();let s=new u(e,0,\"\",!0),r=s.createLabel(\"x\",i);if(s.destroy(),r&&V(i.reserveSpace,!H(t.crossing))&&(o=r.getBBox().height+i.distance+Math.max(t.offset||0,0)),o){r?.destroy();break}}}for(this.plotHeight=Math.max(this.plotHeight-o,0);(a||n||s>1)&&h(h?1:1.1),n=i/this.plotHeight>(h?1:1.05),h++}this.drawChartBox(),this.hasCartesianSeries?r(t):e&&e.length&&r(e),this.seriesGroup||(this.seriesGroup=i.g(\"series-group\").attr({zIndex:3}).shadow(this.options.chart.seriesGroupShadow).add()),this.renderSeries(),this.addCredits(),this.setResponsive&&this.setResponsive(),this.hasRendered=!0}addCredits(t){let e=this,i=Y(!0,this.options.credits,t);i.enabled&&!this.credits&&(this.credits=this.renderer.text(i.text+(this.mapCredits||\"\"),0,0).addClass(\"highcharts-credits\").on(\"click\",function(){i.href&&(w.location.href=i.href)}).attr({align:i.position.align,zIndex:8}),e.styledMode||this.credits.css(i.style),this.credits.add().align(i.position),this.credits.update=function(t){e.credits=e.credits.destroy(),e.addCredits(t)})}destroy(){let t;let e=this,i=e.axes,s=e.series,r=e.container,a=r&&r.parentNode;for(N(e,\"destroy\"),e.renderer.forExport?j(S,e):S[e.index]=void 0,o.chartCount--,e.renderTo.removeAttribute(\"data-highcharts-chart\"),_(e),t=i.length;t--;)i[t]=i[t].destroy();for(this.scroller&&this.scroller.destroy&&this.scroller.destroy(),t=s.length;t--;)s[t]=s[t].destroy();[\"title\",\"subtitle\",\"chartBackground\",\"plotBackground\",\"plotBGImage\",\"plotBorder\",\"seriesGroup\",\"clipRect\",\"credits\",\"pointer\",\"rangeSelector\",\"legend\",\"resetZoomButton\",\"tooltip\",\"renderer\"].forEach(function(t){let i=e[t];i&&i.destroy&&(e[t]=i.destroy())}),r&&(r.innerHTML=p.emptyHTML,_(r),a&&I(r)),U(e,function(t,i){delete e[i]})}firstRender(){let t=this,e=t.options;t.getContainer(),t.resetMargins(),t.setChartSize(),t.propFromSeries(),t.getAxes();let i=G(e.series)?e.series:[];e.series=[],i.forEach(function(e){t.initSeries(e)}),t.linkSeries(),t.setSortedData(),N(t,\"beforeRender\"),t.render(),t.pointer?.getChartPosition(),t.renderer.imgCount||t.hasLoaded||t.onload(),t.temporaryDisplay(!0)}onload(){this.callbacks.concat([this.callback]).forEach(function(t){t&&void 0!==this.index&&t.apply(this,[this])},this),N(this,\"load\"),N(this,\"render\"),D(this.index)&&this.setReflow(),this.warnIfA11yModuleNotLoaded(),this.hasLoaded=!0}warnIfA11yModuleNotLoaded(){let{options:t,title:e}=this;!t||this.accessibility||(this.renderer.boxWrapper.attr({role:\"img\",\"aria-label\":(e&&e.element.textContent||\"\").replace(/this.transform({reset:!0,trigger:\"zoom\"}))}pan(t,e){let i=this,s=\"object\"==typeof e?e:{enabled:e,type:\"x\"},r=s.type,o=r&&i[({x:\"xAxis\",xy:\"axes\",y:\"yAxis\"})[r]].filter(t=>t.options.panningEnabled&&!t.options.isInternal),a=i.options.chart;a?.panning&&(a.panning=s),N(this,\"pan\",{originalEvent:t},()=>{i.transform({axes:o,event:t,to:{x:t.chartX-(i.mouseDownX||0),y:t.chartY-(i.mouseDownY||0)},trigger:\"pan\"}),O(i.container,{cursor:\"move\"})})}transform(t){let{axes:e=this.axes,event:i,from:s={},reset:r,selection:o,to:a={},trigger:n}=t,{inverted:h,resetZoomButton:l}=this,d=!1,c;for(let t of(this.hoverPoints?.forEach(t=>t.setState()),e)){let{horiz:e,len:l,minPointOffset:p=0,options:u,reversed:g}=t,f=e?\"width\":\"height\",m=e?\"x\":\"y\",x=a[f]||t.len,y=s[f]||t.len,b=10>Math.abs(x)?1:x/y,v=(s[m]||0)+y/2-t.pos,S=v-((a[m]??t.pos)+x/2-t.pos)/b,k=g&&!h||!g&&h?-1:1;if(!r&&(v<0||v>t.len))continue;let C=t.toValue(S,!0)+p*k,M=t.toValue(S+l/b,!0)-(p*k||0),w=t.allExtremes;if(C>M&&([C,M]=[M,C]),1===b&&!r&&\"yAxis\"===t.coll&&!w){for(let e of t.series){let t=e.getExtremes(e.getProcessedData(!0).yData,!0);w??(w={dataMin:Number.MAX_VALUE,dataMax:-Number.MAX_VALUE}),H(t.dataMin)&&H(t.dataMax)&&(w.dataMin=Math.min(t.dataMin,w.dataMin),w.dataMax=Math.max(t.dataMax,w.dataMax))}t.allExtremes=w}let{dataMin:T,dataMax:A,min:P,max:L}=R(t.getExtremes(),w||{}),O=T??u.min,E=A??u.max,I=M-C,j=t.categories?0:Math.min(I,E-O),B=O-j*(D(u.min)?0:u.minPadding),z=E+j*(D(u.max)?0:u.maxPadding),N=t.allowZoomOutside||1===b||\"zoom\"!==n&&b>1,W=Math.min(u.min??B,B,N?P:B),G=Math.max(u.max??z,z,N?L:z);(!t.isOrdinal||1!==b||r)&&(C=1&&(M=C+I)),M>G&&(M=G,b>=1&&(C=M-I)),(r||t.series.length&&(C!==P||M!==L)&&C>=W&&M<=G)&&(o?o[t.coll].push({axis:t,min:C,max:M}):(t.isPanning=\"zoom\"!==n,t.setExtremes(r?void 0:C,r?void 0:M,!1,!1,{move:S,trigger:n,scale:b}),!r&&(C>W||M{delete t.selection,t.trigger=\"zoom\",this.transform(t)}):(c&&!l?this.showResetZoom():!c&&l&&(this.resetZoomButton=l.destroy()),this.redraw(\"zoom\"===n&&(this.options.chart.animation??this.pointCount<100)))),d}}return R(Q.prototype,{callbacks:[],collectionsWithInit:{xAxis:[Q.prototype.addAxis,[!0]],yAxis:[Q.prototype.addAxis,[!1]],series:[Q.prototype.addSeries]},collectionsWithUpdate:[\"xAxis\",\"yAxis\",\"series\"],propsRequireDirtyBox:[\"backgroundColor\",\"borderColor\",\"borderWidth\",\"borderRadius\",\"plotBackgroundColor\",\"plotBackgroundImage\",\"plotBorderColor\",\"plotBorderWidth\",\"plotShadow\",\"shadow\"],propsRequireReflow:[\"margin\",\"marginTop\",\"marginRight\",\"marginBottom\",\"marginLeft\",\"spacing\",\"spacingTop\",\"spacingRight\",\"spacingBottom\",\"spacingLeft\"],propsRequireUpdateSeries:[\"chart.inverted\",\"chart.polar\",\"chart.ignoreHiddenSeries\",\"chart.type\",\"colors\",\"plotOptions\",\"time\",\"tooltip\"]}),Q}),i(e,\"Extensions/ScrollablePlotArea.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){let{stop:r}=t,{composed:o}=e,{addEvent:a,createElement:n,css:h,defined:l,merge:d,pushUnique:c}=s;function p(){let t=this.scrollablePlotArea;(this.scrollablePixelsX||this.scrollablePixelsY)&&!t&&(this.scrollablePlotArea=t=new g(this)),t?.applyFixed()}function u(){this.chart.scrollablePlotArea&&(this.chart.scrollablePlotArea.isDirty=!0)}class g{static compose(t,e,i){c(o,this.compose)&&(a(t,\"afterInit\",u),a(e,\"afterSetChartSize\",t=>this.afterSetSize(t.target,t)),a(e,\"render\",p),a(i,\"show\",u))}static afterSetSize(t,e){let i,s,r;let{minWidth:o,minHeight:a}=t.options.chart.scrollablePlotArea||{},{clipBox:n,plotBox:h,inverted:c,renderer:p}=t;if(!p.forExport&&(o?(t.scrollablePixelsX=i=Math.max(0,o-t.chartWidth),i&&(t.scrollablePlotBox=d(t.plotBox),h.width=t.plotWidth+=i,n[c?\"height\":\"width\"]+=i,r=!0)):a&&(t.scrollablePixelsY=s=Math.max(0,a-t.chartHeight),l(s)&&(t.scrollablePlotBox=d(t.plotBox),h.height=t.plotHeight+=s,n[c?\"width\":\"height\"]+=s,r=!1)),l(r)&&!e.skipAxes))for(let e of t.axes)e.horiz===r&&(e.setAxisSize(),e.setAxisTranslation())}constructor(t){let e;let s=t.options.chart,r=i.getRendererType(),o=s.scrollablePlotArea||{},l=this.moveFixedElements.bind(this),d={WebkitOverflowScrolling:\"touch\",overflowX:\"hidden\",overflowY:\"hidden\"};t.scrollablePixelsX&&(d.overflowX=\"auto\"),t.scrollablePixelsY&&(d.overflowY=\"auto\"),this.chart=t;let c=this.parentDiv=n(\"div\",{className:\"highcharts-scrolling-parent\"},{position:\"relative\"},t.renderTo),p=this.scrollingContainer=n(\"div\",{className:\"highcharts-scrolling\"},d,c),u=this.innerContainer=n(\"div\",{className:\"highcharts-inner-container\"},void 0,p),g=this.fixedDiv=n(\"div\",{className:\"highcharts-fixed\"},{position:\"absolute\",overflow:\"hidden\",pointerEvents:\"none\",zIndex:(s.style?.zIndex||0)+2,top:0},void 0,!0),f=this.fixedRenderer=new r(g,t.chartWidth,t.chartHeight,s.style);this.mask=f.path().attr({fill:s.backgroundColor||\"#fff\",\"fill-opacity\":o.opacity??.85,zIndex:-1}).addClass(\"highcharts-scrollable-mask\").add(),p.parentNode.insertBefore(g,p),h(t.renderTo,{overflow:\"visible\"}),a(t,\"afterShowResetZoom\",l),a(t,\"afterApplyDrilldown\",l),a(t,\"afterLayOutTitles\",l),a(p,\"scroll\",()=>{let{pointer:i,hoverPoint:s}=t;i&&(delete i.chartPosition,s&&(e=s),i.runPointActions(void 0,e,!0))}),u.appendChild(t.container)}applyFixed(){let{chart:t,fixedRenderer:e,isDirty:i,scrollingContainer:s}=this,{axisOffset:o,chartWidth:a,chartHeight:n,container:d,plotHeight:c,plotLeft:p,plotTop:u,plotWidth:g,scrollablePixelsX:f=0,scrollablePixelsY:m=0}=t,{scrollPositionX:x=0,scrollPositionY:y=0}=t.options.chart.scrollablePlotArea||{},b=a+f,v=n+m;e.setSize(a,n),(i??!0)&&(this.isDirty=!1,this.moveFixedElements()),r(t.container),h(d,{width:`${b}px`,height:`${v}px`}),t.renderer.boxWrapper.attr({width:b,height:v,viewBox:[0,0,b,v].join(\" \")}),t.chartBackground?.attr({width:b,height:v}),h(s,{width:`${a}px`,height:`${n}px`}),l(i)||(s.scrollLeft=f*x,s.scrollTop=m*y);let S=u-o[0]-1,k=p-o[3]-1,C=u+c+o[2]+1,M=p+g+o[1]+1,w=p+g-f,T=u+c-m,A=[[\"M\",0,0]];f?A=[[\"M\",0,S],[\"L\",p-1,S],[\"L\",p-1,C],[\"L\",0,C],[\"Z\"],[\"M\",w,S],[\"L\",a,S],[\"L\",a,C],[\"L\",w,C],[\"Z\"]]:m&&(A=[[\"M\",k,0],[\"L\",k,u-1],[\"L\",M,u-1],[\"L\",M,0],[\"Z\"],[\"M\",k,T],[\"L\",k,n],[\"L\",M,n],[\"L\",M,T],[\"Z\"]]),\"adjustHeight\"!==t.redrawTrigger&&this.mask.attr({d:A})}moveFixedElements(){let t;let{container:e,inverted:i,scrollablePixelsX:s,scrollablePixelsY:r}=this.chart,o=this.fixedRenderer,a=[\".highcharts-breadcrumbs-group\",\".highcharts-contextbutton\",\".highcharts-caption\",\".highcharts-credits\",\".highcharts-legend\",\".highcharts-legend-checkbox\",\".highcharts-navigator-series\",\".highcharts-navigator-xaxis\",\".highcharts-navigator-yaxis\",\".highcharts-navigator\",\".highcharts-reset-zoom\",\".highcharts-drillup-button\",\".highcharts-scrollbar\",\".highcharts-subtitle\",\".highcharts-title\"];for(let n of(s&&!i?t=\".highcharts-yaxis\":s&&i?t=\".highcharts-xaxis\":r&&!i?t=\".highcharts-xaxis\":r&&i&&(t=\".highcharts-yaxis\"),t&&a.push(`${t}:not(.highcharts-radial-axis)`,`${t}-labels:not(.highcharts-radial-axis-labels)`),a))[].forEach.call(e.querySelectorAll(n),t=>{(t.namespaceURI===o.SVG_NS?o.box:o.box.parentNode).appendChild(t),t.style.pointerEvents=\"auto\"})}}return g}),i(e,\"Core/Axis/Stacking/StackItem.js\",[e[\"Core/Templating.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{format:s}=t,{series:r}=e,{destroyObjectProperties:o,fireEvent:a,isNumber:n,pick:h}=i;return class{constructor(t,e,i,s,r){let o=t.chart.inverted,a=t.reversed;this.axis=t;let n=this.isNegative=!!i!=!!a;this.options=e=e||{},this.x=s,this.total=null,this.cumulative=null,this.points={},this.hasValidPoints=!1,this.stack=r,this.leftCliff=0,this.rightCliff=0,this.alignOptions={align:e.align||(o?n?\"left\":\"right\":\"center\"),verticalAlign:e.verticalAlign||(o?\"middle\":n?\"bottom\":\"top\"),y:e.y,x:e.x},this.textAlign=e.textAlign||(o?n?\"right\":\"left\":\"center\")}destroy(){o(this,this.axis)}render(t){let e=this.axis.chart,i=this.options,r=i.format,o=r?s(r,this,e):i.formatter.call(this);if(this.label)this.label.attr({text:o,visibility:\"hidden\"});else{this.label=e.renderer.label(o,null,void 0,i.shape,void 0,void 0,i.useHTML,!1,\"stack-labels\");let s={r:i.borderRadius||0,text:o,padding:h(i.padding,5),visibility:\"hidden\"};e.styledMode||(s.fill=i.backgroundColor,s.stroke=i.borderColor,s[\"stroke-width\"]=i.borderWidth,this.label.css(i.style||{})),this.label.attr(s),this.label.added||this.label.add(t)}this.label.labelrank=e.plotSizeY,a(this,\"afterRender\")}setOffset(t,e,i,s,o,l){let{alignOptions:d,axis:c,label:p,options:u,textAlign:g}=this,f=c.chart,m=this.getStackBox({xOffset:t,width:e,boxBottom:i,boxTop:s,defaultX:o,xAxis:l}),{verticalAlign:x}=d;if(p&&m){let t=p.getBBox(void 0,0),e=p.padding,i=\"justify\"===h(u.overflow,\"justify\"),s;d.x=u.x||0,d.y=u.y||0;let{x:o,y:a}=this.adjustStackPosition({labelBox:t,verticalAlign:x,textAlign:g});m.x-=o,m.y-=a,p.align(d,!1,m),(s=f.isInsidePlot(p.alignAttr.x+d.x+o,p.alignAttr.y+d.y+a))||(i=!1),i&&r.prototype.justifyDataLabel.call(c,p,d,p.alignAttr,t,m),p.attr({x:p.alignAttr.x,y:p.alignAttr.y,rotation:u.rotation,rotationOriginX:t.width*({left:0,center:.5,right:1})[u.textAlign||\"center\"],rotationOriginY:t.height/2}),h(!i&&u.crop,!0)&&(s=n(p.x)&&n(p.y)&&f.isInsidePlot(p.x-e+(p.width||0),p.y)&&f.isInsidePlot(p.x+e,p.y)),p[s?\"show\":\"hide\"]()}a(this,\"afterSetOffset\",{xOffset:t,width:e})}adjustStackPosition({labelBox:t,verticalAlign:e,textAlign:i}){let s={bottom:0,middle:1,top:2,right:1,center:0,left:-1},r=s[e],o=s[i];return{x:t.width/2+t.width/2*o,y:t.height/2*r}}getStackBox(t){let e=this.axis,i=e.chart,{boxTop:s,defaultX:r,xOffset:o,width:a,boxBottom:l}=t,d=e.stacking.usePercentage?100:h(s,this.total,0),c=e.toPixels(d),p=t.xAxis||i.xAxis[0],u=h(r,p.translate(this.x))+o,g=Math.abs(c-e.toPixels(l||n(e.min)&&e.logarithmic&&e.logarithmic.lin2log(e.min)||0)),f=i.inverted,m=this.isNegative;return f?{x:(m?c:c-g)-i.plotLeft,y:p.height-u-a,width:g,height:a}:{x:u+p.transB-i.plotLeft,y:(m?c-g:c)-i.plotTop,width:a,height:g}}}}),i(e,\"Core/Axis/Stacking/StackingAxis.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r){var o;let{getDeferredAnimation:a}=t,{series:{prototype:n}}=i,{addEvent:h,correctFloat:l,defined:d,destroyObjectProperties:c,fireEvent:p,isArray:u,isNumber:g,objectEach:f,pick:m}=r;function x(){let t=this.inverted;this.axes.forEach(t=>{t.stacking&&t.stacking.stacks&&t.hasVisibleSeries&&(t.stacking.oldStacks=t.stacking.stacks)}),this.series.forEach(e=>{let i=e.xAxis&&e.xAxis.options||{};e.options.stacking&&e.reserveSpace()&&(e.stackKey=[e.type,m(e.options.stack,\"\"),t?i.top:i.left,t?i.height:i.width].join(\",\"))})}function y(){let t=this.stacking;if(t){let e=t.stacks;f(e,(t,i)=>{c(t),delete e[i]}),t.stackTotalGroup?.destroy()}}function b(){this.stacking||(this.stacking=new w(this))}function v(t,e,i,s){return!d(t)||t.x!==e||s&&t.stackKey!==s?t={x:e,index:0,key:s,stackKey:s}:t.index++,t.key=[i,e,t.index].join(\",\"),t}function S(){let t;let e=this,i=e.yAxis,s=e.stackKey||\"\",r=i.stacking.stacks,o=e.processedXData,a=e.options.stacking,n=e[a+\"Stacker\"];n&&[s,\"-\"+s].forEach(i=>{let s=o.length,a,h,l;for(;s--;)a=o[s],t=e.getStackIndicator(t,a,e.index,i),h=r[i]?.[a],(l=h?.points[t.key||\"\"])&&n.call(e,l,h,s)})}function k(t,e,i){let s=e.total?100/e.total:0;t[0]=l(t[0]*s),t[1]=l(t[1]*s),this.stackedYData[i]=t[1]}function C(t){(this.is(\"column\")||this.is(\"columnrange\"))&&(this.options.centerInCategory&&!this.options.stacking&&this.chart.series.length>1?n.setStackedPoints.call(this,t,\"group\"):t.stacking.resetStacks())}function M(t,e){let i,r,o,a,n,h,c,p,g;let f=e||this.options.stacking;if(!f||!this.reserveSpace()||(({group:\"xAxis\"})[f]||\"yAxis\")!==t.coll)return;let x=this.processedXData,y=this.processedYData,b=[],v=y.length,S=this.options,k=S.threshold||0,C=S.startFromThreshold?k:0,M=S.stack,w=e?`${this.type},${f}`:this.stackKey||\"\",T=\"-\"+w,A=this.negStacks,P=t.stacking,L=P.stacks,O=P.oldStacks;for(P.stacksTouched+=1,c=0;c0&&!1===this.singleStacks&&(o.points[h][0]=o.points[this.index+\",\"+p+\",0\"][0])):(delete o.points[h],delete o.points[this.index]);let e=o.total||0;\"percent\"===f?(a=r?w:T,e=A&&L[a]?.[p]?(a=L[a][p]).total=Math.max(a.total||0,e)+Math.abs(g)||0:l(e+(Math.abs(g)||0))):\"group\"===f?(u(g)&&(g=g[0]),null!==g&&e++):e=l(e+(g||0)),\"group\"===f?o.cumulative=(e||1)-1:o.cumulative=l(m(o.cumulative,C)+(g||0)),o.total=e,null!==g&&(o.points[h].push(o.cumulative),b[c]=o.cumulative,o.hasValidPoints=!0)}\"percent\"===f&&(P.usePercentage=!0),\"group\"!==f&&(this.stackedYData=b),P.oldStacks={}}class w{constructor(t){this.oldStacks={},this.stacks={},this.stacksTouched=0,this.axis=t}buildStacks(){let t,e;let i=this.axis,s=i.series,r=\"xAxis\"===i.coll,o=i.options.reversedStacks,a=s.length;for(this.resetStacks(),this.usePercentage=!1,e=a;e--;)t=s[o?e:a-e-1],r&&t.setGroupedPoints(i),t.setStackedPoints(i);if(!r)for(e=0;e{f(t,t=>{t.cumulative=t.total})}))}resetStacks(){f(this.stacks,t=>{f(t,(e,i)=>{g(e.touched)&&e.touched{f(t,t=>{t.render(o)})}),o.animate({opacity:1},r)}}return(o||(o={})).compose=function(t,e,i){let s=e.prototype,r=i.prototype;s.getStacks||(h(t,\"init\",b),h(t,\"destroy\",y),s.getStacks=x,r.getStackIndicator=v,r.modifyStacks=S,r.percentStacker=k,r.setGroupedPoints=C,r.setStackedPoints=M)},o}),i(e,\"Series/Line/LineSeries.js\",[e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{defined:s,merge:r,isObject:o}=i;class a extends t{drawGraph(){let t=this.options,e=(this.gappedPath||this.getGraphPath).call(this),i=this.chart.styledMode;[this,...this.zones].forEach((s,a)=>{let n,h=s.graph,l=h?\"animate\":\"attr\",d=s.dashStyle||t.dashStyle;h?(h.endX=this.preventGraphAnimation?null:e.xMap,h.animate({d:e})):e.length&&(s.graph=h=this.chart.renderer.path(e).addClass(\"highcharts-graph\"+(a?` highcharts-zone-graph-${a-1} `:\" \")+(a&&s.className||\"\")).attr({zIndex:1}).add(this.group)),h&&!i&&(n={stroke:!a&&t.lineColor||s.color||this.color||\"#cccccc\",\"stroke-width\":t.lineWidth||0,fill:this.fillGraph&&this.color||\"none\"},d?n.dashstyle=d:\"square\"!==t.linecap&&(n[\"stroke-linecap\"]=n[\"stroke-linejoin\"]=\"round\"),h[l](n).shadow(a<2&&t.shadow&&r({filterUnits:\"userSpaceOnUse\"},o(t.shadow)?t.shadow:{}))),h&&(h.startX=e.xMap,h.isArea=e.isArea)})}getGraphPath(t,e,i){let r=this,o=r.options,a=[],n=[],h,l=o.step,d=(t=t||r.points).reversed;return d&&t.reverse(),(l=({right:1,center:2})[l]||l&&3)&&d&&(l=4-l),(t=this.getValidPoints(t,!1,!(o.connectNulls&&!e&&!i))).forEach(function(d,c){let p;let u=d.plotX,g=d.plotY,f=t[c-1],m=d.isNull||\"number\"!=typeof g;(d.leftCliff||f&&f.rightCliff)&&!i&&(h=!0),m&&!s(e)&&c>0?h=!o.connectNulls:m&&!e?h=!0:(0===c||h?p=[[\"M\",d.plotX,d.plotY]]:r.getPointSpline?p=[r.getPointSpline(t,d,c)]:l?(p=1===l?[[\"L\",f.plotX,g]]:2===l?[[\"L\",(f.plotX+u)/2,f.plotY],[\"L\",(f.plotX+u)/2,g]]:[[\"L\",u,f.plotY]]).push([\"L\",u,g]):p=[[\"L\",u,g]],n.push(d.x),l&&(n.push(d.x),2===l&&n.push(d.x)),a.push.apply(a,p),h=!1)}),a.xMap=n,r.graphPath=a,a}}return a.defaultOptions=r(t.defaultOptions,{legendSymbol:\"lineMarker\"}),e.registerSeriesType(\"line\",a),a}),i(e,\"Series/Area/AreaSeries.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e){let{seriesTypes:{line:i}}=t,{extend:s,merge:r,objectEach:o,pick:a}=e;class n extends i{drawGraph(){this.areaPath=[],super.drawGraph.apply(this);let{areaPath:t,options:e}=this;[this,...this.zones].forEach((i,s)=>{let r={},o=i.fillColor||e.fillColor,a=i.area,n=a?\"animate\":\"attr\";a?(a.endX=this.preventGraphAnimation?null:t.xMap,a.animate({d:t})):(r.zIndex=0,(a=i.area=this.chart.renderer.path(t).addClass(\"highcharts-area\"+(s?` highcharts-zone-area-${s-1} `:\" \")+(s&&i.className||\"\")).add(this.group)).isArea=!0),this.chart.styledMode||(r.fill=o||i.color||this.color,r[\"fill-opacity\"]=o?1:e.fillOpacity??.75,a.css({pointerEvents:this.stickyTracking?\"none\":\"auto\"})),a[n](r),a.startX=t.xMap,a.shiftUnit=e.step?2:1})}getGraphPath(t){let e,s,r;let o=i.prototype.getGraphPath,n=this.options,h=n.stacking,l=this.yAxis,d=[],c=[],p=this.index,u=l.stacking.stacks[this.stackKey],g=n.threshold,f=Math.round(l.getThreshold(n.threshold)),m=a(n.connectNulls,\"percent\"===h),x=function(i,s,r){let o=t[i],a=h&&u[o.x].points[p],n=o[r+\"Null\"]||0,m=o[r+\"Cliff\"]||0,x,y,b=!0;m||n?(x=(n?a[0]:a[1])+m,y=a[0]+m,b=!!n):!h&&t[s]&&t[s].isNull&&(x=y=g),void 0!==x&&(c.push({plotX:e,plotY:null===x?f:l.getThreshold(x),isNull:b,isCliff:!0}),d.push({plotX:e,plotY:null===y?f:l.getThreshold(y),doCurve:!1}))};t=t||this.points,h&&(t=this.getStackPoints(t));for(let i=0,o=t.length;it.visible);s.forEach(function(t,o){let f=0,m,x;if(l[t]&&!l[t].isNull)i.push(l[t]),[-1,1].forEach(function(i){let r=1===i?\"rightNull\":\"leftNull\",a=h[s[o+i]],n=0;if(a){let i=u;for(;i>=0&&i=0&&ei&&o>l?(o=Math.max(i,l),n=2*l-o):op&&n>l?(n=Math.max(p,l),o=2*l-n):n=Math.abs(e)&&n>.5;return s=n-(e=Math.round(e)+a),h&&s&&(e-=1,s+=1),{x:t,y:e,width:i,height:s}}adjustForMissingColumns(t,e,i,s){if(!i.isNull&&s.columnCount>1){let r=this.xAxis.series.filter(t=>t.visible).map(t=>t.index),o=0,a=0;y(this.xAxis.stacking?.stacks,t=>{if(\"number\"==typeof i.x){let e=t[i.x.toString()];if(e&&g(e.points[this.index])){let t=Object.keys(e.points).filter(t=>!t.match(\",\")&&e.points[t]&&e.points[t].length>1).map(parseFloat).filter(t=>-1!==r.indexOf(t)).sort((t,e)=>e-t);o=t.indexOf(this.index),a=t.length}}}),o=this.xAxis.reversed?a-1-o:o;let n=(a-1)*s.paddedWidth+e;t=(i.plotX||0)+n/2-e-o*s.paddedWidth}return t}translate(){let t=this,e=t.chart,i=t.options,s=t.dense=t.closestPointRange*t.xAxis.transA<2,o=t.borderWidth=x(i.borderWidth,s?0:1),a=t.xAxis,n=t.yAxis,h=i.threshold,l=x(i.minPointLength,5),p=t.getColumnMetrics(),g=p.width,m=t.pointXOffset=p.offset,y=t.dataMin,b=t.dataMax,v=t.barW=Math.max(g,1+2*o),S=t.translatedThreshold=n.getThreshold(h);e.inverted&&(S-=.5),i.pointPadding&&(v=Math.ceil(v)),r.prototype.translate.apply(t),t.points.forEach(function(s){let r=x(s.yBottom,S),o=999+Math.abs(r),u=s.plotX||0,k=d(s.plotY,-o,n.len+o),C,M=Math.min(k,r),w=Math.max(k,r)-M,T=g,A=u+m,P=v;l&&Math.abs(w)l?r-l:S-(C?l:0)),c(s.options.pointWidth)&&(A-=Math.round(((T=P=Math.ceil(s.options.pointWidth))-g)/2)),i.centerInCategory&&!i.stacking&&(A=t.adjustForMissingColumns(A,T,s,p)),s.barX=A,s.pointWidth=T,s.tooltipPos=e.inverted?[d(n.len+n.pos-e.plotLeft-k,n.pos-e.plotLeft,n.len+n.pos-e.plotLeft),a.len+a.pos-e.plotTop-A-P/2,w]:[a.left-e.plotLeft+A+P/2,d(k+n.pos-e.plotTop,n.pos-e.plotTop,n.len+n.pos-e.plotTop),w],s.shapeType=t.pointClass.prototype.shapeType||\"roundedRect\",s.shapeArgs=t.crispCol(A,s.isNull?S:M,P,s.isNull?0:w)}),u(this,\"afterColumnTranslate\")}drawGraph(){this.group[this.dense?\"addClass\":\"removeClass\"](\"highcharts-dense-data\")}pointAttribs(t,e){let i=this.options,s=this.pointAttrToOptions||{},r=s.stroke||\"borderColor\",o=s[\"stroke-width\"]||\"borderWidth\",a,n,l,d=t&&t.color||this.color,c=t&&t[r]||i[r]||d,p=t&&t.options.dashStyle||i.dashStyle,u=t&&t[o]||i[o]||this[o]||0,g=x(t&&t.opacity,i.opacity,1);t&&this.zones.length&&(n=t.getZone(),d=t.options.color||n&&(n.color||t.nonZonedColor)||this.color,n&&(c=n.borderColor||c,p=n.dashStyle||p,u=n.borderWidth||u)),e&&t&&(l=(a=m(i.states[e],t.options.states&&t.options.states[e]||{})).brightness,d=a.color||void 0!==l&&h(d).brighten(a.brightness).get()||d,c=a[r]||c,u=a[o]||u,p=a.dashStyle||p,g=x(a.opacity,g));let f={fill:d,stroke:c,\"stroke-width\":u,opacity:g};return p&&(f.dashstyle=p),f}drawPoints(t=this.points){let e;let i=this,s=this.chart,r=i.options,o=s.renderer,a=r.animationLimit||250;t.forEach(function(t){let n=t.plotY,h=t.graphic,l=!!h,d=h&&s.pointCountt?.enabled)}function i(t,e,i,s,r){let o=this.chart,h=this.isCartesian&&o.inverted,l=this.enabledDataSorting,d=t.plotX,p=t.plotY,g=i.rotation||0,f=a(d)&&a(p)&&o.isInsidePlot(d,Math.round(p),{inverted:h,paneCoordinates:!0,series:this}),m=0===g&&\"justify\"===u(i.overflow,l?\"none\":\"justify\"),x=this.visible&&!1!==t.visible&&a(d)&&(t.series.forceDL||l&&!m||f||u(i.inside,!!this.options.stacking)&&s&&o.isInsidePlot(d,h?s.x+1:s.y+s.height-1,{inverted:h,paneCoordinates:!0,series:this})),y=t.pos();if(x&&y){var b;let a=e.getBBox(),h=e.getBBox(void 0,0),d={right:1,center:.5}[i.align||0]||0,p={bottom:1,middle:.5}[i.verticalAlign||0]||0;if(s=n({x:y[0],y:Math.round(y[1]),width:0,height:0},s||{}),n(i,{width:a.width,height:a.height}),b=s,l&&this.xAxis&&!m&&this.setDataLabelStartPos(t,e,r,f,b),e.align(c(i,{width:h.width,height:h.height}),!1,s,!1),e.alignAttr.x+=d*(h.width-a.width),e.alignAttr.y+=p*(h.height-a.height),e[e.placed?\"animate\":\"attr\"]({x:e.alignAttr.x+(a.width-h.width)/2,y:e.alignAttr.y+(a.height-h.height)/2,rotationOriginX:(e.width||0)/2,rotationOriginY:(e.height||0)/2}),m&&s.height>=0)this.justifyDataLabel(e,i,e.alignAttr,a,s,r);else if(u(i.crop,!0)){let{x:t,y:i}=e.alignAttr;x=o.isInsidePlot(t,i,{paneCoordinates:!0,series:this})&&o.isInsidePlot(t+a.width-1,i+a.height-1,{paneCoordinates:!0,series:this})}i.shape&&!g&&e[r?\"attr\":\"animate\"]({anchorX:y[0],anchorY:y[1]})}r&&l&&(e.placed=!1),x||l&&!m?(e.show(),e.placed=!0):(e.hide(),e.placed=!1)}function s(){return this.plotGroup(\"dataLabelsGroup\",\"data-labels\",this.hasRendered?\"inherit\":\"hidden\",this.options.dataLabels.zIndex||6)}function m(t){let e=this.hasRendered||0,i=this.initDataLabelsGroup().attr({opacity:+e});return!e&&i&&(this.visible&&i.show(),this.options.animation?i.animate({opacity:1},t):i.attr({opacity:1})),i}function x(t){let e;t=t||this.points;let i=this,s=i.chart,n=i.options,l=s.renderer,{backgroundColor:c,plotBackgroundColor:m}=s.options.chart,x=l.getContrast(d(m)&&m||d(c)&&c||\"#000000\"),y=v(i),{animation:S,defer:k}=y[0],C=k?r(s,S,i):{defer:0,duration:0};h(this,\"drawDataLabels\"),i.hasDataLabels?.()&&(e=this.initDataLabels(C),t.forEach(t=>{let r=t.dataLabels||[];f(b(y,t.dlOptions||t.options?.dataLabels)).forEach((h,c)=>{let f=h.enabled&&(t.visible||t.dataLabelOnHidden)&&(!t.isNull||t.dataLabelOnNull)&&function(t,e){let i=e.filter;if(i){let e=i.operator,s=t[i.property],r=i.value;return\">\"===e&&s>r||\"<\"===e&&s=\"===e&&s>=r||\"<=\"===e&&s<=r||\"==\"===e&&s==r||\"===\"===e&&s===r||\"!=\"===e&&s!=r||\"!==\"===e&&s!==r}return!0}(t,h),{backgroundColor:m,borderColor:y,distance:b,style:v={}}=h,S,k,C,M,w={},T=r[c],A=!T,P;if(f&&(k=u(h[t.formatPrefix+\"Format\"],h.format),S=t.getLabelConfig(),C=a(k)?o(k,S,s):(h[t.formatPrefix+\"Formatter\"]||h.formatter).call(S,h),M=h.rotation,!s.styledMode&&(v.color=u(h.color,v.color,d(i.color)?i.color:void 0,\"#000000\"),\"contrast\"===v.color?(\"none\"!==m&&(P=m),t.contrastColor=l.getContrast(\"auto\"!==P&&P||t.color||i.color),v.color=P||!a(b)&&h.inside||0>g(b||0)||n.stacking?t.contrastColor:x):delete t.contrastColor,n.cursor&&(v.cursor=n.cursor)),w={r:h.borderRadius||0,rotation:M,padding:h.padding,zIndex:1},s.styledMode||(w.fill=\"auto\"===m?t.color:m,w.stroke=\"auto\"===y?t.color:y,w[\"stroke-width\"]=h.borderWidth),p(w,(t,e)=>{void 0===t&&delete w[e]})),!T||f&&a(C)&&!!T.div==!!h.useHTML&&(T.rotation&&h.rotation||T.rotation===h.rotation)||(T=void 0,A=!0),f&&a(C)&&(T?w.text=C:(T=l.label(C,0,0,h.shape,void 0,void 0,h.useHTML,void 0,\"data-label\")).addClass(\" highcharts-data-label-color-\"+t.colorIndex+\" \"+(h.className||\"\")+(h.useHTML?\" highcharts-tracker\":\"\")),T)){T.options=h,T.attr(w),s.styledMode||T.css(v).shadow(h.shadow);let o=h[t.formatPrefix+\"TextPath\"]||h.textPath;o&&!h.useHTML&&(T.setTextPath(t.getDataLabelPath?.(T)||t.graphic,o),t.dataLabelPath&&!o.enabled&&(t.dataLabelPath=t.dataLabelPath.destroy())),T.added||T.add(e),i.alignDataLabel(t,T,h,void 0,A),T.isActive=!0,r[c]&&r[c]!==T&&r[c].destroy(),r[c]=T}});let h=r.length;for(;h--;)r[h]&&r[h].isActive?r[h].isActive=!1:(r[h]?.destroy(),r.splice(h,1));t.dataLabel=r[0],t.dataLabels=r})),h(this,\"afterDrawDataLabels\")}function y(t,e,i,s,r,o){let a=this.chart,n=e.align,h=e.verticalAlign,l=t.box?0:t.padding||0,{x:d=0,y:c=0}=e,p,u;return(p=(i.x||0)+l)<0&&(\"right\"===n&&d>=0?(e.align=\"left\",e.inside=!0):d-=p,u=!0),(p=(i.x||0)+s.width-l)>a.plotWidth&&(\"left\"===n&&d<=0?(e.align=\"right\",e.inside=!0):d+=a.plotWidth-p,u=!0),(p=i.y+l)<0&&(\"bottom\"===h&&c>=0?(e.verticalAlign=\"top\",e.inside=!0):c-=p,u=!0),(p=(i.y||0)+s.height-l)>a.plotHeight&&(\"top\"===h&&c<=0?(e.verticalAlign=\"bottom\",e.inside=!0):c+=a.plotHeight-p,u=!0),u&&(e.x=d,e.y=c,t.placed=!o,t.align(e,void 0,r)),u}function b(t,e){let i=[],s;if(l(t)&&!l(e))i=t.map(function(t){return c(t,e)});else if(l(e)&&!l(t))i=e.map(function(e){return c(t,e)});else if(l(t)||l(e)){if(l(t)&&l(e))for(s=Math.max(t.length,e.length);s--;)i[s]=c(t[s],e[s])}else i=c(t,e);return i}function v(t){let e=t.chart.options.plotOptions;return f(b(b(e?.series?.dataLabels,e?.[t.type]?.dataLabels),t.options.dataLabels))}function S(t,e,i,s,r){let o=this.chart,a=o.inverted,n=this.xAxis,h=n.reversed,l=((a?e.height:e.width)||0)/2,d=t.pointWidth,c=d?d/2:0;e.startXPos=a?r.x:h?-l-c:n.width-l+c,e.startYPos=a?h?this.yAxis.height-l+c:-l-c:r.y,s?\"hidden\"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0},void 0,e.hide),o.hasRendered&&(i&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)}t.compose=function(t){let r=t.prototype;r.initDataLabels||(r.initDataLabels=m,r.initDataLabelsGroup=s,r.alignDataLabel=i,r.drawDataLabels=x,r.justifyDataLabel=y,r.setDataLabelStartPos=S,r.hasDataLabels=e)}}(s||(s={})),s}),i(e,\"Series/Column/ColumnDataLabel.js\",[e[\"Core/Series/DataLabel.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s){var r;let{composed:o}=e,{series:a}=i,{merge:n,pick:h,pushUnique:l}=s;return function(e){function i(t,e,i,s,r){let o=this.chart.inverted,l=t.series,d=(l.xAxis?l.xAxis.len:this.chart.plotSizeX)||0,c=(l.yAxis?l.yAxis.len:this.chart.plotSizeY)||0,p=t.dlBox||t.shapeArgs,u=h(t.below,t.plotY>h(this.translatedThreshold,c)),g=h(i.inside,!!this.options.stacking);if(p){if(s=n(p),!(\"allow\"===i.overflow&&!1===i.crop)){s.y<0&&(s.height+=s.y,s.y=0);let t=s.y+s.height-c;t>0&&t {series.name}
',pointFormat:\"x: {point.x}
y: {point.y}
\"}}}),i(e,\"Series/Scatter/ScatterSeries.js\",[e[\"Series/Scatter/ScatterSeriesDefaults.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{column:s,line:r}=e.seriesTypes,{addEvent:o,extend:a,merge:n}=i;class h extends r{applyJitter(){let t=this,e=this.options.jitter,i=this.points.length;e&&this.points.forEach(function(s,r){[\"x\",\"y\"].forEach(function(o,a){let n,h=\"plot\"+o.toUpperCase(),l,d,c;e[o]&&!s.isNull&&(n=t[o+\"Axis\"],c=e[o]*n.transA,n&&!n.isLog&&(l=Math.max(0,s[h]-c),d=Math.min(n.len,s[h]+c),s[h]=l+(d-l)*function(t){let e=1e4*Math.sin(t);return e-Math.floor(e)}(r+a*i),\"x\"===o&&(s.clientX=s.plotX)))})})}drawGraph(){this.options.lineWidth?super.drawGraph():this.graph&&(this.graph=this.graph.destroy())}}return h.defaultOptions=n(r.defaultOptions,t),a(h.prototype,{drawTracker:s.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"]}),o(h,\"afterTranslate\",function(){this.applyJitter()}),e.registerSeriesType(\"scatter\",h),h}),i(e,\"Series/CenteredUtilities.js\",[e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){var s,r;let{deg2rad:o}=t,{fireEvent:a,isNumber:n,pick:h,relativeLength:l}=i;return(r=s||(s={})).getCenter=function(){let t=this.options,i=this.chart,s=2*(t.slicedOffset||0),r=i.plotWidth-2*s,o=i.plotHeight-2*s,d=t.center,c=Math.min(r,o),p=t.thickness,u,g=t.size,f=t.innerSize||0,m,x;\"string\"==typeof g&&(g=parseFloat(g)),\"string\"==typeof f&&(f=parseFloat(f));let y=[h(d[0],\"50%\"),h(d[1],\"50%\"),h(g&&g<0?void 0:t.size,\"100%\"),h(f&&f<0?void 0:t.innerSize||0,\"0%\")];for(!i.angular||this instanceof e||(y[3]=0),m=0;m<4;++m)x=y[m],u=m<2||2===m&&/%$/.test(x),y[m]=l(x,[r,o,c,y[2]][m])+(u?s:0);return y[3]>y[2]&&(y[3]=y[2]),n(p)&&2*p0&&(y[3]=y[2]-2*p),a(this,\"afterGetCenter\",{positions:y}),y},r.getStartAndEndRadians=function(t,e){let i=n(t)?t:0,s=n(e)&&e>i&&e-i<360?e:i+360;return{start:o*(i+-90),end:o*(s+-90)}},s}),i(e,\"Series/Pie/PiePoint.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{setAnimation:s}=t,{addEvent:r,defined:o,extend:a,isNumber:n,pick:h,relativeLength:l}=i;class d extends e{getConnectorPath(t){let e=t.dataLabelPosition,i=t.options||{},s=i.connectorShape,r=this.connectorShapes[s]||s;return e&&r.call(this,{...e.computed,alignment:e.alignment},e.connectorPosition,i)||[]}getTranslate(){return this.sliced&&this.slicedTranslation||{translateX:0,translateY:0}}haloPath(t){let e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+t,e.r+t,{innerR:e.r-1,start:e.start,end:e.end,borderRadius:e.borderRadius})}constructor(t,e,i){super(t,e,i),this.half=0,this.name??(this.name=\"Slice\");let s=t=>{this.slice(\"select\"===t.type)};r(this,\"select\",s),r(this,\"unselect\",s)}isValid(){return n(this.y)&&this.y>=0}setVisible(t,e=!0){t!==this.visible&&this.update({visible:t??!this.visible},e,void 0,!1)}slice(t,e,i){let r=this.series;s(i,r.chart),e=h(e,!0),this.sliced=this.options.sliced=t=o(t)?t:!this.sliced,r.options.data[r.data.indexOf(this)]=this.options,this.graphic&&this.graphic.animate(this.getTranslate())}}return a(d.prototype,{connectorShapes:{fixedOffset:function(t,e,i){let s=e.breakAt,r=e.touchingSliceAt,o=i.softConnector?[\"C\",t.x+(\"left\"===t.alignment?-5:5),t.y,2*s.x-r.x,2*s.y-r.y,s.x,s.y]:[\"L\",s.x,s.y];return[[\"M\",t.x,t.y],o,[\"L\",r.x,r.y]]},straight:function(t,e){let i=e.touchingSliceAt;return[[\"M\",t.x,t.y],[\"L\",i.x,i.y]]},crookedLine:function(t,e,i){let{breakAt:s,touchingSliceAt:r}=e,{series:o}=this,[a,n,h]=o.center,d=h/2,{plotLeft:c,plotWidth:p}=o.chart,u=\"left\"===t.alignment,{x:g,y:f}=t,m=s.x;if(i.crookDistance){let t=l(i.crookDistance,1);m=u?a+d+(p+c-a-d)*(1-t):c+(a-d)*t}else m=a+(n-f)*Math.tan((this.angle||0)-Math.PI/2);let x=[[\"M\",g,f]];return(u?m<=g&&m>=s.x:m>=g&&m<=s.x)&&x.push([\"L\",m,f]),x.push([\"L\",s.x,s.y],[\"L\",r.x,r.y]),x}}}),d}),i(e,\"Series/Pie/PieSeriesDefaults.js\",[],function(){return{borderRadius:3,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{connectorPadding:5,connectorShape:\"crookedLine\",crookDistance:void 0,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:\"#ffffff\",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}}}),i(e,\"Series/Pie/PieSeries.js\",[e[\"Series/CenteredUtilities.js\"],e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Globals.js\"],e[\"Series/Pie/PiePoint.js\"],e[\"Series/Pie/PieSeriesDefaults.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/Symbols.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r,o,a,n,h){let{getStartAndEndRadians:l}=t,{noop:d}=i,{clamp:c,extend:p,fireEvent:u,merge:g,pick:f}=h;class m extends o{animate(t){let e=this,i=e.points,s=e.startAngleRad;t||i.forEach(function(t){let i=t.graphic,r=t.shapeArgs;i&&r&&(i.attr({r:f(t.startR,e.center&&e.center[3]/2),start:s,end:s}),i.animate({r:r.r,start:r.start,end:r.end},e.options.animation))})}drawEmpty(){let t,e;let i=this.startAngleRad,s=this.endAngleRad,r=this.options;0===this.total&&this.center?(t=this.center[0],e=this.center[1],this.graph||(this.graph=this.chart.renderer.arc(t,e,this.center[1]/2,0,i,s).addClass(\"highcharts-empty-series\").add(this.group)),this.graph.attr({d:n.arc(t,e,this.center[2]/2,0,{start:i,end:s,innerR:this.center[3]/2})}),this.chart.styledMode||this.graph.attr({\"stroke-width\":r.borderWidth,fill:r.fillColor||\"none\",stroke:r.color||\"#cccccc\"})):this.graph&&(this.graph=this.graph.destroy())}drawPoints(){let t=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy()),e.graphic||(e.graphic=t[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})}generatePoints(){super.generatePoints(),this.updateTotals()}getX(t,e,i,s){let r=this.center,o=this.radii?this.radii[i.index]||0:r[2]/2,a=s.dataLabelPosition,n=a?.distance||0,h=Math.asin(c((t-r[1])/(o+n),-1,1));return r[0]+Math.cos(h)*(o+n)*(e?-1:1)+(n>0?(e?-1:1)*(s.padding||0):0)}hasData(){return!!this.processedXData.length}redrawPoints(){let t,e,i,s;let r=this,o=r.chart;this.drawEmpty(),r.group&&!o.styledMode&&r.group.shadow(r.options.shadow),r.points.forEach(function(a){let n={};e=a.graphic,!a.isNull&&e?(s=a.shapeArgs,t=a.getTranslate(),o.styledMode||(i=r.pointAttribs(a,a.selected&&\"select\")),a.delayedRendering?(e.setRadialReference(r.center).attr(s).attr(t),o.styledMode||e.attr(i).attr({\"stroke-linejoin\":\"round\"}),a.delayedRendering=!1):(e.setRadialReference(r.center),o.styledMode||g(!0,n,i),g(!0,n,s,t),e.animate(n)),e.attr({visibility:a.visible?\"inherit\":\"hidden\"}),e.addClass(a.getClassName(),!0)):e&&(a.graphic=e.destroy())})}sortByAngle(t,e){t.sort(function(t,i){return void 0!==t.angle&&(i.angle-t.angle)*e})}translate(t){u(this,\"translate\"),this.generatePoints();let e=this.options,i=e.slicedOffset,s=l(e.startAngle,e.endAngle),r=this.startAngleRad=s.start,o=(this.endAngleRad=s.end)-r,a=this.points,n=e.ignoreHiddenPoint,h=a.length,d,c,p,g,f,m,x,y=0;for(t||(this.center=t=this.getCenter()),m=0;m1.5*Math.PI?p-=2*Math.PI:p<-Math.PI/2&&(p+=2*Math.PI),x.slicedTranslation={translateX:Math.round(Math.cos(p)*i),translateY:Math.round(Math.sin(p)*i)},g=Math.cos(p)*t[2]/2,f=Math.sin(p)*t[2]/2,x.tooltipPos=[t[0]+.7*g,t[1]+.7*f],x.half=p<-Math.PI/2||p>Math.PI/2?1:0,x.angle=p}u(this,\"afterTranslate\")}updateTotals(){let t=this.points,e=t.length,i=this.options.ignoreHiddenPoint,s,r,o=0;for(s=0;s0&&(r.visible||!i)?r.y/o*100:0,r.total=o}}return m.defaultOptions=g(o.defaultOptions,r),p(m.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawTracker:e.prototype.drawTracker,getCenter:t.getCenter,getSymbol:d,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointAttribs:e.prototype.pointAttribs,pointClass:s,requireSorting:!1,searchPoint:d,trackerGroups:[\"group\",\"dataLabelsGroup\"]}),a.registerSeriesType(\"pie\",m),m}),i(e,\"Series/Pie/PieDataLabel.js\",[e[\"Core/Series/DataLabel.js\"],e[\"Core/Globals.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(t,e,i,s,r){var o;let{composed:a,noop:n}=e,{distribute:h}=i,{series:l}=s,{arrayMax:d,clamp:c,defined:p,pick:u,pushUnique:g,relativeLength:f}=r;return function(e){let i={radialDistributionY:function(t,e){return(e.dataLabelPosition?.top||0)+t.distributeBox.pos},radialDistributionX:function(t,e,i,s,r){let o=r.dataLabelPosition;return t.getX(i<(o?.top||0)+2||i>(o?.bottom||0)-2?s:i,e.half,e,r)},justify:function(t,e,i,s){return s[0]+(t.half?-1:1)*(i+(e.dataLabelPosition?.distance||0))},alignToPlotEdges:function(t,e,i,s){let r=t.getBBox().width;return e?r+s:i-r-s},alignToConnectors:function(t,e,i,s){let r=0,o;return t.forEach(function(t){(o=t.dataLabel.getBBox().width)>r&&(r=o)}),e?r+s:i-r-s}};function s(t,e){let{center:i,options:s}=this,r=i[2]/2,o=t.angle||0,a=Math.cos(o),n=Math.sin(o),h=i[0]+a*r,l=i[1]+n*r,d=Math.min((s.slicedOffset||0)+(s.borderWidth||0),e/5);return{natural:{x:h+a*e,y:l+n*e},computed:{},alignment:e<0?\"center\":t.half?\"right\":\"left\",connectorPosition:{breakAt:{x:h+a*d,y:l+n*d},touchingSliceAt:{x:h,y:l}},distance:e}}function r(){let t=this,e=t.points,i=t.chart,s=i.plotWidth,r=i.plotHeight,o=i.plotLeft,a=Math.round(i.chartWidth/3),n=t.center,c=n[2]/2,g=n[1],m=[[],[]],x=[0,0,0,0],y=t.dataLabelPositioners,b,v,S,k=0;t.visible&&t.hasDataLabels?.()&&(e.forEach(t=>{(t.dataLabels||[]).forEach(t=>{t.shortened&&(t.attr({width:\"auto\"}).css({width:\"auto\",textOverflow:\"clip\"}),t.shortened=!1)})}),l.prototype.drawDataLabels.apply(t),e.forEach(t=>{(t.dataLabels||[]).forEach((e,i)=>{let s=n[2]/2,r=e.options,o=f(r?.distance||0,s);0===i&&m[t.half].push(t),!p(r?.style?.width)&&e.getBBox().width>a&&(e.css({width:Math.round(.7*a)+\"px\"}),e.shortened=!0),e.dataLabelPosition=this.getDataLabelPosition(t,o),k=Math.max(k,o)})}),m.forEach((e,a)=>{let l=e.length,d=[],f,m,b=0,C;l&&(t.sortByAngle(e,a-.5),k>0&&(f=Math.max(0,g-c-k),m=Math.min(g+c+k,i.plotHeight),e.forEach(t=>{(t.dataLabels||[]).forEach(e=>{let s=e.dataLabelPosition;s&&s.distance>0&&(s.top=Math.max(0,g-c-s.distance),s.bottom=Math.min(g+c+s.distance,i.plotHeight),b=e.getBBox().height||21,t.distributeBox={target:(e.dataLabelPosition?.natural.y||0)-s.top+b/2,size:b,rank:t.y},d.push(t.distributeBox))})}),h(d,C=m+b-f,C/5)),e.forEach(i=>{(i.dataLabels||[]).forEach(h=>{let l=h.options||{},g=i.distributeBox,f=h.dataLabelPosition,m=f?.natural.y||0,b=l.connectorPadding||0,k=0,C=m,M=\"inherit\";if(f){if(d&&p(g)&&f.distance>0&&(void 0===g.pos?M=\"hidden\":(S=g.size,C=y.radialDistributionY(i,h))),l.justify)k=y.justify(i,h,c,n);else switch(l.alignTo){case\"connectors\":k=y.alignToConnectors(e,a,s,o);break;case\"plotEdges\":k=y.alignToPlotEdges(h,a,s,o);break;default:k=y.radialDistributionX(t,i,C,m,h)}if(f.attribs={visibility:M,align:f.alignment},f.posAttribs={x:k+(l.x||0)+(({left:b,right:-b})[f.alignment]||0),y:C+(l.y||0)-h.getBBox().height/2},f.computed.x=k,f.computed.y=C,u(l.crop,!0)){let t;k-(v=h.getBBox().width)s-b&&0===a&&(t=Math.round(k+v-s+b),x[1]=Math.max(t,x[1])),C-S/2<0?x[0]=Math.max(Math.round(-C+S/2),x[0]):C+S/2>r&&(x[2]=Math.max(Math.round(C+S/2-r),x[2])),f.sideOverflow=t}}})}))}),(0===d(x)||this.verifyDataLabelOverflow(x))&&(this.placeDataLabels(),this.points.forEach(e=>{(e.dataLabels||[]).forEach(s=>{let{connectorColor:r,connectorWidth:o=1}=s.options||{},a=s.dataLabelPosition;if(o){let n;b=s.connector,a&&a.distance>0?(n=!b,b||(s.connector=b=i.renderer.path().addClass(\"highcharts-data-label-connector highcharts-color-\"+e.colorIndex+(e.className?\" \"+e.className:\"\")).add(t.dataLabelsGroup)),i.styledMode||b.attr({\"stroke-width\":o,stroke:r||e.color||\"#666666\"}),b[n?\"attr\":\"animate\"]({d:e.getConnectorPath(s)}),b.attr({visibility:a.attribs?.visibility})):b&&(s.connector=b.destroy())}})})))}function o(){this.points.forEach(t=>{(t.dataLabels||[]).forEach(t=>{let e=t.dataLabelPosition;e?(e.sideOverflow&&(t.css({width:Math.max(t.getBBox().width-e.sideOverflow,0)+\"px\",textOverflow:(t.options?.style||{}).textOverflow||\"ellipsis\"}),t.shortened=!0),t.attr(e.attribs),t[t.moved?\"animate\":\"attr\"](e.posAttribs),t.moved=!0):t&&t.attr({y:-9999})}),delete t.distributeBox},this)}function m(t){let e=this.center,i=this.options,s=i.center,r=i.minSize||80,o=r,a=null!==i.size;return!a&&(null!==s[0]?o=Math.max(e[2]-Math.max(t[1],t[3]),r):(o=Math.max(e[2]-t[1]-t[3],r),e[0]+=(t[3]-t[1])/2),null!==s[1]?o=c(o,r,e[2]-Math.max(t[0],t[2])):(o=c(o,r,e[2]-t[0]-t[2]),e[1]+=(t[0]-t[2])/2),o!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y),r,o,n,h,l,d=!1;for(let i=0;i(e.labelrank||0)-(t.labelrank||0));for(let i=0;i{s(t,t=>{t.label&&e.push(t.label)})});for(let i of t.series||[])if(i.visible&&i.hasDataLabels?.()){let s=i=>{for(let s of i)s.visible&&(s.dataLabels||[]).forEach(i=>{let o=i.options||{};i.labelrank=r(o.labelrank,s.labelrank,s.shapeArgs?.height),o.allowOverlap??Number(o.distance)>0?(i.oldOpacity=i.opacity,i.newOpacity=1,a(i,t)):e.push(i)})};s(i.nodes||[]),s(i.points)}this.hideOverlappingLabels(e)}return{compose:function(t){let i=t.prototype;i.hideOverlappingLabels||(i.hideOverlappingLabels=o,e(t,\"render\",n))}}}),i(e,\"Extensions/BorderRadius.js\",[e[\"Core/Defaults.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(t,e,i){let{defaultOptions:s}=t,{noop:r}=e,{addEvent:o,extend:a,isObject:n,merge:h,relativeLength:l}=i,d={radius:0,scope:\"stack\",where:void 0},c=r,p=r;function u(t,e,i,s,r={}){let o=c(t,e,i,s,r),{innerR:a=0,r:n=i,start:h=0,end:d=0}=r;if(r.open||!r.borderRadius)return o;let p=d-h,u=Math.sin(p/2),g=Math.max(Math.min(l(r.borderRadius||0,n-a),(n-a)/2,n*u/(1+u)),0),f=Math.min(g,p/Math.PI*2*a),m=o.length-1;for(;m--;)!function(t,e,i){let s,r,o;let a=t[e],n=t[e+1];if(\"Z\"===n[0]&&(n=t[0]),(\"M\"===a[0]||\"L\"===a[0])&&\"A\"===n[0]?(s=a,r=n,o=!0):\"A\"===a[0]&&(\"M\"===n[0]||\"L\"===n[0])&&(s=n,r=a),s&&r&&r.params){let a=r[1],n=r[5],h=r.params,{start:l,end:d,cx:c,cy:p}=h,u=n?a-i:a+i,g=u?Math.asin(i/u):0,f=n?g:-g,m=Math.cos(g)*u;o?(h.start=l+f,s[1]=c+m*Math.cos(l),s[2]=p+m*Math.sin(l),t.splice(e+1,0,[\"A\",i,i,0,0,1,c+a*Math.cos(h.start),p+a*Math.sin(h.start)])):(h.end=d-f,r[6]=c+a*Math.cos(h.end),r[7]=p+a*Math.sin(h.end),t.splice(e+1,0,[\"A\",i,i,0,0,1,c+m*Math.cos(d),p+m*Math.sin(d)])),r[4]=Math.abs(h.end-h.start)1?f:g);return o}function g(){if(this.options.borderRadius&&!(this.chart.is3d&&this.chart.is3d())){let{options:t,yAxis:e}=this,i=\"percent\"===t.stacking,r=s.plotOptions?.[this.type]?.borderRadius,o=f(t.borderRadius,n(r)?r:{}),h=e.options.reversed;for(let s of this.points){let{shapeArgs:r}=s;if(\"roundedRect\"===s.shapeType&&r){let{width:n=0,height:d=0,y:c=0}=r,p=c,u=d;if(\"stack\"===o.scope&&s.stackTotal){let r=e.translate(i?100:s.stackTotal,!1,!0,!1,!0),o=e.translate(t.threshold||0,!1,!0,!1,!0),a=this.crispCol(0,Math.min(r,o),0,Math.abs(r-o));p=a.y,u=a.height}let g=(s.negative?-1:1)*(h?-1:1)==-1,f=o.where;!f&&this.is(\"waterfall\")&&Math.abs((s.yBottom||0)-(this.translatedThreshold||0))>this.borderWidth&&(f=\"all\"),f||(f=\"end\");let m=Math.min(l(o.radius,n),n/2,\"all\"===f?d/2:1/0)||0;\"end\"===f&&(g&&(p-=m),u+=m),a(r,{brBoxHeight:u,brBoxY:p,r:m})}}}}function f(t,e){return n(t)||(t={radius:t||0}),h(d,e,t)}function m(){let t=f(this.options.borderRadius);for(let e of this.points){let i=e.shapeArgs;i&&(i.borderRadius=l(t.radius,(i.r||0)-(i.innerR||0)))}}function x(t,e,i,s,r={}){let o=p(t,e,i,s,r),{r:a=0,brBoxHeight:n=s,brBoxY:h=e}=r,l=e-h,d=h+n-(e+s),c=l-a>-.1?0:a,u=d-a>-.1?0:a,g=Math.max(c&&l,0),f=Math.max(u&&d,0),m=[t+c,e],x=[t+i-c,e],y=[t+i,e+c],b=[t+i,e+s-u],v=[t+i-u,e+s],S=[t+u,e+s],k=[t,e+s-u],C=[t,e+c],M=(t,e)=>Math.sqrt(Math.pow(t,2)-Math.pow(e,2));if(g){let t=M(c,c-g);m[0]-=t,x[0]+=t,y[1]=C[1]=e+c-g}if(s=a(i.minWidth,0)&&this.chartHeight>=a(i.minHeight,0)}).call(this)&&e.push(t._id)}function h(t,e){let s=this.options.responsive,a=this.currentResponsive,h=[],l;!e&&s&&s.rules&&s.rules.forEach(t=>{void 0===t._id&&(t._id=n()),this.matchResponsiveRule(t,h)},this);let d=o(...h.map(t=>r((s||{}).rules||[],e=>e._id===t)).map(t=>t&&t.chartOptions));d.isResponsiveOptions=!0,h=h.toString()||void 0;let c=a&&a.ruleIds;h!==c&&(a&&this.update(a.undoOptions,t,!0),h?((l=i(d,this.options,!0,this.collectionsWithUpdate)).isResponsiveOptions=!0,this.currentResponsive={ruleIds:h,mergedOptions:d,undoOptions:l},this.update(d,t,!0)):this.currentResponsive=void 0)}t.compose=function(t){let i=t.prototype;return i.matchResponsiveRule||s(i,{matchResponsiveRule:e,setResponsive:h}),t}}(e||(e={})),e}),i(e,\"masters/highcharts.src.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"],e[\"Core/Defaults.js\"],e[\"Core/Animation/Fx.js\"],e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Templating.js\"],e[\"Core/Renderer/RendererRegistry.js\"],e[\"Core/Renderer/RendererUtilities.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Renderer/HTML/HTMLElement.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Axis/DateTimeAxis.js\"],e[\"Core/Axis/LogarithmicAxis.js\"],e[\"Core/Axis/PlotLineOrBand/PlotLineOrBand.js\"],e[\"Core/Axis/Tick.js\"],e[\"Core/Tooltip.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Pointer.js\"],e[\"Core/Legend/Legend.js\"],e[\"Core/Legend/LegendSymbol.js\"],e[\"Core/Chart/Chart.js\"],e[\"Extensions/ScrollablePlotArea.js\"],e[\"Core/Axis/Stacking/StackingAxis.js\"],e[\"Core/Axis/Stacking/StackItem.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Series/Column/ColumnDataLabel.js\"],e[\"Series/Pie/PieDataLabel.js\"],e[\"Core/Series/DataLabel.js\"],e[\"Extensions/OverlappingDataLabels.js\"],e[\"Extensions/BorderRadius.js\"],e[\"Core/Responsive.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Time.js\"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u,g,f,m,x,y,b,v,S,k,C,M,w,T,A,P,L,O,D,E,I,j,B){return t.AST=o,t.Axis=p,t.Chart=k,t.Color=j,t.DataLabel=O,t.Fx=s,t.HTMLElement=c,t.Legend=v,t.LegendSymbol=S,t.OverlappingDataLabels=t.OverlappingDataLabels||D,t.PlotLineOrBand=f,t.Point=y,t.Pointer=b,t.RendererRegistry=n,t.Series=T,t.SeriesRegistry=A,t.StackItem=w,t.SVGElement=l,t.SVGRenderer=d,t.Templating=a,t.Tick=m,t.Time=B,t.Tooltip=x,t.animate=r.animate,t.animObject=r.animObject,t.chart=k.chart,t.color=j.parse,t.dateFormat=a.dateFormat,t.defaultOptions=i.defaultOptions,t.distribute=h.distribute,t.format=a.format,t.getDeferredAnimation=r.getDeferredAnimation,t.getOptions=i.getOptions,t.numberFormat=a.numberFormat,t.seriesType=A.seriesType,t.setAnimation=r.setAnimation,t.setOptions=i.setOptions,t.stop=r.stop,t.time=i.defaultTime,t.timers=s.timers,E.compose(t.Series,t.SVGElement,t.SVGRenderer),P.compose(t.Series.types.column),O.compose(t.Series),u.compose(t.Axis),c.compose(t.SVGRenderer),v.compose(t.Chart),g.compose(t.Axis),D.compose(t.Chart),L.compose(t.Series.types.pie),f.compose(t.Axis),b.compose(t.Chart),I.compose(t.Chart),C.compose(t.Axis,t.Chart,t.Series),M.compose(t.Axis,t.Chart,t.Series),x.compose(t.Pointer),e.extend(t,e),t}),e[\"masters/highcharts.src.js\"]._modules=e,e[\"masters/highcharts.src.js\"]});","import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef, useReducer, memo, cloneElement, forwardRef } from 'react';\nimport { createPortal, unstable_batchedUpdates } from 'react-dom';\nimport { useUniqueId, getEventCoordinates, getWindow, isDocument, isHTMLElement, isSVGElement, canUseDOM, isWindow, isNode, getOwnerDocument, add, isKeyboardEvent, subtract, useLazyMemo, useInterval, usePrevious, useLatestValue, useEvent, useIsomorphicLayoutEffect, useNodeRef, findFirstFocusableNode, CSS } from '@dnd-kit/utilities';\nimport { useAnnouncement, HiddenText, LiveRegion } from '@dnd-kit/accessibility';\n\nconst DndMonitorContext = /*#__PURE__*/createContext(null);\n\nfunction useDndMonitor(listener) {\n const registerListener = useContext(DndMonitorContext);\n useEffect(() => {\n if (!registerListener) {\n throw new Error('useDndMonitor must be used within a children of ');\n }\n\n const unsubscribe = registerListener(listener);\n return unsubscribe;\n }, [listener, registerListener]);\n}\n\nfunction useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n const registerListener = useCallback(listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }, [listeners]);\n const dispatch = useCallback(_ref => {\n let {\n type,\n event\n } = _ref;\n listeners.forEach(listener => {\n var _listener$type;\n\n return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event);\n });\n }, [listeners]);\n return [dispatch, registerListener];\n}\n\nconst defaultScreenReaderInstructions = {\n draggable: \"\\n To pick up a draggable item, press the space bar.\\n While dragging, use the arrow keys to move the item.\\n Press space again to drop the item in its new position, or press escape to cancel.\\n \"\n};\nconst defaultAnnouncements = {\n onDragStart(_ref) {\n let {\n active\n } = _ref;\n return \"Picked up draggable item \" + active.id + \".\";\n },\n\n onDragOver(_ref2) {\n let {\n active,\n over\n } = _ref2;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was moved over droppable area \" + over.id + \".\";\n }\n\n return \"Draggable item \" + active.id + \" is no longer over a droppable area.\";\n },\n\n onDragEnd(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was dropped over droppable area \" + over.id;\n }\n\n return \"Draggable item \" + active.id + \" was dropped.\";\n },\n\n onDragCancel(_ref4) {\n let {\n active\n } = _ref4;\n return \"Dragging was cancelled. Draggable item \" + active.id + \" was dropped.\";\n }\n\n};\n\nfunction Accessibility(_ref) {\n let {\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions\n } = _ref;\n const {\n announce,\n announcement\n } = useAnnouncement();\n const liveRegionId = useUniqueId(\"DndLiveRegion\");\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n useDndMonitor(useMemo(() => ({\n onDragStart(_ref2) {\n let {\n active\n } = _ref2;\n announce(announcements.onDragStart({\n active\n }));\n },\n\n onDragMove(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({\n active,\n over\n }));\n }\n },\n\n onDragOver(_ref4) {\n let {\n active,\n over\n } = _ref4;\n announce(announcements.onDragOver({\n active,\n over\n }));\n },\n\n onDragEnd(_ref5) {\n let {\n active,\n over\n } = _ref5;\n announce(announcements.onDragEnd({\n active,\n over\n }));\n },\n\n onDragCancel(_ref6) {\n let {\n active,\n over\n } = _ref6;\n announce(announcements.onDragCancel({\n active,\n over\n }));\n }\n\n }), [announce, announcements]));\n\n if (!mounted) {\n return null;\n }\n\n const markup = React.createElement(React.Fragment, null, React.createElement(HiddenText, {\n id: hiddenTextDescribedById,\n value: screenReaderInstructions.draggable\n }), React.createElement(LiveRegion, {\n id: liveRegionId,\n announcement: announcement\n }));\n return container ? createPortal(markup, container) : markup;\n}\n\nvar Action;\n\n(function (Action) {\n Action[\"DragStart\"] = \"dragStart\";\n Action[\"DragMove\"] = \"dragMove\";\n Action[\"DragEnd\"] = \"dragEnd\";\n Action[\"DragCancel\"] = \"dragCancel\";\n Action[\"DragOver\"] = \"dragOver\";\n Action[\"RegisterDroppable\"] = \"registerDroppable\";\n Action[\"SetDroppableDisabled\"] = \"setDroppableDisabled\";\n Action[\"UnregisterDroppable\"] = \"unregisterDroppable\";\n})(Action || (Action = {}));\n\nfunction noop() {}\n\nfunction useSensor(sensor, options) {\n return useMemo(() => ({\n sensor,\n options: options != null ? options : {}\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]);\n}\n\nfunction useSensors() {\n for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {\n sensors[_key] = arguments[_key];\n }\n\n return useMemo(() => [...sensors].filter(sensor => sensor != null), // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]);\n}\n\nconst defaultCoordinates = /*#__PURE__*/Object.freeze({\n x: 0,\n y: 0\n});\n\n/**\r\n * Returns the distance between two points\r\n */\nfunction distanceBetween(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\nfunction getRelativeTransformOrigin(event, rect) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: (eventCoordinates.x - rect.left) / rect.width * 100,\n y: (eventCoordinates.y - rect.top) / rect.height * 100\n };\n return transformOrigin.x + \"% \" + transformOrigin.y + \"%\";\n}\n\n/**\r\n * Sort collisions from smallest to greatest value\r\n */\nfunction sortCollisionsAsc(_ref, _ref2) {\n let {\n data: {\n value: a\n }\n } = _ref;\n let {\n data: {\n value: b\n }\n } = _ref2;\n return a - b;\n}\n/**\r\n * Sort collisions from greatest to smallest value\r\n */\n\nfunction sortCollisionsDesc(_ref3, _ref4) {\n let {\n data: {\n value: a\n }\n } = _ref3;\n let {\n data: {\n value: b\n }\n } = _ref4;\n return b - a;\n}\n/**\r\n * Returns the coordinates of the corners of a given rectangle:\r\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\r\n */\n\nfunction cornersOfRectangle(_ref5) {\n let {\n left,\n top,\n height,\n width\n } = _ref5;\n return [{\n x: left,\n y: top\n }, {\n x: left + width,\n y: top\n }, {\n x: left,\n y: top + height\n }, {\n x: left + width,\n y: top + height\n }];\n}\nfunction getFirstCollision(collisions, property) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n return property ? firstCollision[property] : firstCollision;\n}\n\n/**\r\n * Returns the coordinates of the center of a given ClientRect\r\n */\n\nfunction centerOfRectangle(rect, left, top) {\n if (left === void 0) {\n left = rect.left;\n }\n\n if (top === void 0) {\n top = rect.top;\n }\n\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5\n };\n}\n/**\r\n * Returns the closest rectangles from an array of rectangles to the center of a given\r\n * rectangle.\r\n */\n\n\nconst closestCenter = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: distBetween\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the closest rectangles from an array of rectangles to the corners of\r\n * another rectangle.\r\n */\n\nconst closestCorners = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const corners = cornersOfRectangle(collisionRect);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the intersecting rectangle area between two rectangles\r\n */\n\nfunction getIntersectionRatio(entry, target) {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea);\n return Number(intersectionRatio.toFixed(4));\n } // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n\n\n return 0;\n}\n/**\r\n * Returns the rectangles that has the greatest intersection area with a given\r\n * rectangle in an array of rectangles.\r\n */\n\nconst rectIntersection = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: intersectionRatio\n }\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n\n/**\r\n * Check if a given point is contained within a bounding rectangle\r\n */\n\nfunction isPointWithinRect(point, rect) {\n const {\n top,\n left,\n bottom,\n right\n } = rect;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n}\n/**\r\n * Returns the rectangles that the pointer is hovering over\r\n */\n\n\nconst pointerWithin = _ref => {\n let {\n droppableContainers,\n droppableRects,\n pointerCoordinates\n } = _ref;\n\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\r\n * with the pointer coordinates. In order to sort the\r\n * colliding rectangles, we measure the distance between\r\n * the pointer and the corners of the intersecting rectangle\r\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\nfunction adjustScale(transform, rect1, rect2) {\n return { ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1\n };\n}\n\nfunction getRectDelta(rect1, rect2) {\n return rect1 && rect2 ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top\n } : defaultCoordinates;\n}\n\nfunction createRectAdjustmentFn(modifier) {\n return function adjustClientRect(rect) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((acc, adjustment) => ({ ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x\n }), { ...rect\n });\n };\n}\nconst getAdjustedRect = /*#__PURE__*/createRectAdjustmentFn(1);\n\nfunction parseTransform(transform) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5]\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3]\n };\n }\n\n return null;\n}\n\nfunction inverseTransform(rect, transform, transformOrigin) {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {\n scaleX,\n scaleY,\n x: translateX,\n y: translateY\n } = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x\n };\n}\n\nconst defaultOptions = {\n ignoreTransform: false\n};\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n */\n\nfunction getClientRect(element, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n let rect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {\n transform,\n transformOrigin\n } = getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {\n top,\n left,\n width,\n height,\n bottom,\n right\n } = rect;\n return {\n top,\n left,\n width,\n height,\n bottom,\n right\n };\n}\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n *\r\n * @remarks\r\n * The ClientRect returned by this method does not take into account transforms\r\n * applied to the element it measures.\r\n *\r\n */\n\nfunction getTransformAgnosticClientRect(element) {\n return getClientRect(element, {\n ignoreTransform: true\n });\n}\n\nfunction getWindowClientRect(element) {\n const width = element.innerWidth;\n const height = element.innerHeight;\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height\n };\n}\n\nfunction isFixed(node, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(node).getComputedStyle(node);\n }\n\n return computedStyle.position === 'fixed';\n}\n\nfunction isScrollable(element, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(element).getComputedStyle(element);\n }\n\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n return properties.some(property => {\n const value = computedStyle[property];\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n\nfunction getScrollableAncestors(element, limit) {\n const scrollParents = [];\n\n function findScrollableAncestors(node) {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) {\n scrollParents.push(node.scrollingElement);\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\nfunction getFirstScrollableAncestor(node) {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n return firstScrollableAncestor != null ? firstScrollableAncestor : null;\n}\n\nfunction getScrollableElement(element) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n\nfunction getScrollXCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\nfunction getScrollYCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\nfunction getScrollCoordinates(element) {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element)\n };\n}\n\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n\nfunction isDocumentScrollingElement(element) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer) {\n const minScroll = {\n x: 0,\n y: 0\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer) ? {\n height: window.innerHeight,\n width: window.innerWidth\n } : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height\n };\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll\n };\n}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2\n};\nfunction getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) {\n let {\n top,\n left,\n right,\n bottom\n } = _ref;\n\n if (acceleration === void 0) {\n acceleration = 10;\n }\n\n if (thresholdPercentage === void 0) {\n thresholdPercentage = defaultThreshold;\n }\n\n const {\n isTop,\n isBottom,\n isLeft,\n isRight\n } = getScrollPosition(scrollContainer);\n const direction = {\n x: 0,\n y: 0\n };\n const speed = {\n x: 0,\n y: 0\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height);\n } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height);\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width);\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width);\n }\n\n return {\n direction,\n speed\n };\n}\n\nfunction getScrollElementRect(element) {\n if (element === document.scrollingElement) {\n const {\n innerWidth,\n innerHeight\n } = window;\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight\n };\n }\n\n const {\n top,\n left,\n right,\n bottom\n } = element.getBoundingClientRect();\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getScrollOffsets(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\nfunction getScrollXOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\nfunction getScrollYOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n\nfunction scrollIntoViewIfNeeded(element, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n if (!element) {\n return;\n }\n\n const {\n top,\n left,\n bottom,\n right\n } = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center'\n });\n }\n}\n\nconst properties = [['x', ['left', 'right'], getScrollXOffset], ['y', ['top', 'bottom'], getScrollYOffset]];\nclass Rect {\n constructor(rect, element) {\n this.rect = void 0;\n this.width = void 0;\n this.height = void 0;\n this.top = void 0;\n this.bottom = void 0;\n this.right = void 0;\n this.left = void 0;\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n this.rect = { ...rect\n };\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {\n enumerable: false\n });\n }\n\n}\n\nclass Listeners {\n constructor(target) {\n this.target = void 0;\n this.listeners = [];\n\n this.removeAll = () => {\n this.listeners.forEach(listener => {\n var _this$target;\n\n return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener);\n });\n };\n\n this.target = target;\n }\n\n add(eventName, handler, options) {\n var _this$target2;\n\n (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options);\n this.listeners.push([eventName, handler, options]);\n }\n\n}\n\nfunction getEventListenerTarget(target) {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n const {\n EventTarget\n } = getWindow(target);\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n\nfunction hasExceededDistance(delta, measurement) {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n\nvar EventName;\n\n(function (EventName) {\n EventName[\"Click\"] = \"click\";\n EventName[\"DragStart\"] = \"dragstart\";\n EventName[\"Keydown\"] = \"keydown\";\n EventName[\"ContextMenu\"] = \"contextmenu\";\n EventName[\"Resize\"] = \"resize\";\n EventName[\"SelectionChange\"] = \"selectionchange\";\n EventName[\"VisibilityChange\"] = \"visibilitychange\";\n})(EventName || (EventName = {}));\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n\nvar KeyboardCode;\n\n(function (KeyboardCode) {\n KeyboardCode[\"Space\"] = \"Space\";\n KeyboardCode[\"Down\"] = \"ArrowDown\";\n KeyboardCode[\"Right\"] = \"ArrowRight\";\n KeyboardCode[\"Left\"] = \"ArrowLeft\";\n KeyboardCode[\"Up\"] = \"ArrowUp\";\n KeyboardCode[\"Esc\"] = \"Escape\";\n KeyboardCode[\"Enter\"] = \"Enter\";\n})(KeyboardCode || (KeyboardCode = {}));\n\nconst defaultKeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter]\n};\nconst defaultKeyboardCoordinateGetter = (event, _ref) => {\n let {\n currentCoordinates\n } = _ref;\n\n switch (event.code) {\n case KeyboardCode.Right:\n return { ...currentCoordinates,\n x: currentCoordinates.x + 25\n };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates,\n x: currentCoordinates.x - 25\n };\n\n case KeyboardCode.Down:\n return { ...currentCoordinates,\n y: currentCoordinates.y + 25\n };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates,\n y: currentCoordinates.y - 25\n };\n }\n\n return undefined;\n};\n\nclass KeyboardSensor {\n constructor(props) {\n this.props = void 0;\n this.autoScrollEnabled = false;\n this.referenceCoordinates = void 0;\n this.listeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n const {\n event: {\n target\n }\n } = props;\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.attach();\n }\n\n attach() {\n this.handleStart();\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n handleStart() {\n const {\n activeNode,\n onStart\n } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n handleKeyDown(event) {\n if (isKeyboardEvent(event)) {\n const {\n active,\n context,\n options\n } = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth'\n } = options;\n const {\n code\n } = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {\n collisionRect\n } = context.current;\n const currentCoordinates = collisionRect ? {\n x: collisionRect.left,\n y: collisionRect.top\n } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates\n });\n\n if (newCoordinates) {\n const coordinatesDelta = subtract(newCoordinates, currentCoordinates);\n const scrollDelta = {\n x: 0,\n y: 0\n };\n const {\n scrollableAncestors\n } = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {\n isTop,\n isRight,\n isLeft,\n isBottom,\n maxScroll,\n minScroll\n } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n const clampedCoordinates = {\n x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)),\n y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y))\n };\n const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft;\n const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop;\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior\n });\n }\n\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior\n });\n }\n\n break;\n }\n }\n\n this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta));\n }\n }\n }\n\n handleMove(event, coordinates) {\n const {\n onMove\n } = this.props;\n event.preventDefault();\n onMove(coordinates);\n }\n\n handleEnd(event) {\n const {\n onEnd\n } = this.props;\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n handleCancel(event) {\n const {\n onCancel\n } = this.props;\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n}\nKeyboardSensor.activators = [{\n eventName: 'onKeyDown',\n handler: (event, _ref, _ref2) => {\n let {\n keyboardCodes = defaultKeyboardCodes,\n onActivation\n } = _ref;\n let {\n active\n } = _ref2;\n const {\n code\n } = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n onActivation == null ? void 0 : onActivation({\n event: event.nativeEvent\n });\n return true;\n }\n\n return false;\n }\n}];\n\nfunction isDistanceConstraint(constraint) {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(constraint) {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nclass AbstractPointerSensor {\n constructor(props, events, listenerTarget) {\n var _getEventCoordinates;\n\n if (listenerTarget === void 0) {\n listenerTarget = getEventListenerTarget(props.event.target);\n }\n\n this.props = void 0;\n this.events = void 0;\n this.autoScrollEnabled = true;\n this.document = void 0;\n this.activated = false;\n this.initialCoordinates = void 0;\n this.timeoutId = null;\n this.listeners = void 0;\n this.documentListeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n this.events = events;\n const {\n event\n } = props;\n const {\n target\n } = event;\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n this.attach();\n }\n\n attach() {\n const {\n events,\n props: {\n options: {\n activationConstraint\n }\n }\n } = this;\n this.listeners.add(events.move.name, this.handleMove, {\n passive: false\n });\n this.listeners.add(events.end.name, this.handleEnd);\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n return;\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay);\n return;\n }\n }\n\n this.handleStart();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll(); // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n handleStart() {\n const {\n initialCoordinates\n } = this;\n const {\n onStart\n } = this.props;\n\n if (initialCoordinates) {\n this.activated = true; // Stop propagation of click events once activation constraints are met\n\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true\n }); // Remove any text selection from the document\n\n this.removeTextSelection(); // Prevent further text selection while dragging\n\n this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection);\n onStart(initialCoordinates);\n }\n }\n\n handleMove(event) {\n var _getEventCoordinates2;\n\n const {\n activated,\n initialCoordinates,\n props\n } = this;\n const {\n onMove,\n options: {\n activationConstraint\n }\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates;\n const delta = subtract(initialCoordinates, coordinates);\n\n if (!activated && activationConstraint) {\n // Constraint validation\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n\n return;\n }\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n handleEnd() {\n const {\n onEnd\n } = this.props;\n this.detach();\n onEnd();\n }\n\n handleCancel() {\n const {\n onCancel\n } = this.props;\n this.detach();\n onCancel();\n }\n\n handleKeydown(event) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n removeTextSelection() {\n var _this$document$getSel;\n\n (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges();\n }\n\n}\n\nconst events = {\n move: {\n name: 'pointermove'\n },\n end: {\n name: 'pointerup'\n }\n};\nclass PointerSensor extends AbstractPointerSensor {\n constructor(props) {\n const {\n event\n } = props; // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n\n const listenerTarget = getOwnerDocument(event.target);\n super(props, events, listenerTarget);\n }\n\n}\nPointerSensor.activators = [{\n eventName: 'onPointerDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$1 = {\n move: {\n name: 'mousemove'\n },\n end: {\n name: 'mouseup'\n }\n};\nvar MouseButton;\n\n(function (MouseButton) {\n MouseButton[MouseButton[\"RightClick\"] = 2] = \"RightClick\";\n})(MouseButton || (MouseButton = {}));\n\nclass MouseSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$1, getOwnerDocument(props.event.target));\n }\n\n}\nMouseSensor.activators = [{\n eventName: 'onMouseDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$2 = {\n move: {\n name: 'touchmove'\n },\n end: {\n name: 'touchend'\n }\n};\nclass TouchSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$2);\n }\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events$2.move.name, noop, {\n capture: false,\n passive: false\n });\n return function teardown() {\n window.removeEventListener(events$2.move.name, noop);\n }; // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n\n function noop() {}\n }\n\n}\nTouchSensor.activators = [{\n eventName: 'onTouchStart',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n const {\n touches\n } = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nvar AutoScrollActivator;\n\n(function (AutoScrollActivator) {\n AutoScrollActivator[AutoScrollActivator[\"Pointer\"] = 0] = \"Pointer\";\n AutoScrollActivator[AutoScrollActivator[\"DraggableRect\"] = 1] = \"DraggableRect\";\n})(AutoScrollActivator || (AutoScrollActivator = {}));\n\nvar TraversalOrder;\n\n(function (TraversalOrder) {\n TraversalOrder[TraversalOrder[\"TreeOrder\"] = 0] = \"TreeOrder\";\n TraversalOrder[TraversalOrder[\"ReversedTreeOrder\"] = 1] = \"ReversedTreeOrder\";\n})(TraversalOrder || (TraversalOrder = {}));\n\nfunction useAutoScroller(_ref) {\n let {\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold\n } = _ref;\n const scrollIntent = useScrollIntent({\n delta,\n disabled: !enabled\n });\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({\n x: 0,\n y: 0\n });\n const scrollDirection = useRef({\n x: 0,\n y: 0\n });\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x\n } : null;\n\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);\n useEffect(() => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {\n direction,\n speed\n } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold);\n\n for (const axis of ['x', 'y']) {\n if (!scrollIntent[axis][direction[axis]]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n return;\n }\n }\n\n scrollSpeed.current = {\n x: 0,\n y: 0\n };\n scrollDirection.current = {\n x: 0,\n y: 0\n };\n clearAutoScrollInterval();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect), // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold)]);\n}\nconst defaultScrollIntent = {\n x: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n },\n y: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n }\n};\n\nfunction useScrollIntent(_ref2) {\n let {\n delta,\n disabled\n } = _ref2;\n const previousDelta = usePrevious(delta);\n return useLazyMemo(previousIntent => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y)\n }; // Keep track of the user intent to scroll in each direction for both axis\n\n return {\n x: {\n [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1\n },\n y: {\n [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1\n }\n };\n }, [disabled, delta, previousDelta]);\n}\n\nfunction useCachedNode(draggableNodes, id) {\n const draggableNode = id !== null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n return useLazyMemo(cachedNode => {\n var _ref;\n\n if (id === null) {\n return null;\n } // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n\n\n return (_ref = node != null ? node : cachedNode) != null ? _ref : null;\n }, [node, id]);\n}\n\nfunction useCombineActivators(sensors, getSyntheticHandler) {\n return useMemo(() => sensors.reduce((accumulator, sensor) => {\n const {\n sensor: Sensor\n } = sensor;\n const sensorActivators = Sensor.activators.map(activator => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor)\n }));\n return [...accumulator, ...sensorActivators];\n }, []), [sensors, getSyntheticHandler]);\n}\n\nvar MeasuringStrategy;\n\n(function (MeasuringStrategy) {\n MeasuringStrategy[MeasuringStrategy[\"Always\"] = 0] = \"Always\";\n MeasuringStrategy[MeasuringStrategy[\"BeforeDragging\"] = 1] = \"BeforeDragging\";\n MeasuringStrategy[MeasuringStrategy[\"WhileDragging\"] = 2] = \"WhileDragging\";\n})(MeasuringStrategy || (MeasuringStrategy = {}));\n\nvar MeasuringFrequency;\n\n(function (MeasuringFrequency) {\n MeasuringFrequency[\"Optimized\"] = \"optimized\";\n})(MeasuringFrequency || (MeasuringFrequency = {}));\n\nconst defaultValue = /*#__PURE__*/new Map();\nfunction useDroppableMeasuring(containers, _ref) {\n let {\n dragging,\n dependencies,\n config\n } = _ref;\n const [queue, setQueue] = useState(null);\n const {\n frequency,\n measure,\n strategy\n } = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(function (ids) {\n if (ids === void 0) {\n ids = [];\n }\n\n if (disabledRef.current) {\n return;\n }\n\n setQueue(value => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter(id => !value.includes(id)));\n });\n }, [disabledRef]);\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(previousValue => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) {\n const map = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n }, [containers, queue, dragging, disabled, measure]);\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]);\n useEffect(() => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]);\n useEffect(() => {\n if (disabled || typeof frequency !== 'number' || timeoutId.current !== null) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]);\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n\n default:\n return !dragging;\n }\n }\n}\n\nfunction useInitialValue(value, computeFn) {\n return useLazyMemo(previousValue => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n }, [computeFn, value]);\n}\n\nfunction useInitialRect(node, measure) {\n return useInitialValue(node, measure);\n}\n\n/**\r\n * Returns a new MutationObserver instance.\r\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useMutationObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.MutationObserver === 'undefined') {\n return undefined;\n }\n\n const {\n MutationObserver\n } = window;\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n useEffect(() => {\n return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }, [mutationObserver]);\n return mutationObserver;\n}\n\n/**\r\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\r\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useResizeObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const {\n ResizeObserver\n } = window;\n return new ResizeObserver(handleResize);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]);\n useEffect(() => {\n return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();\n }, [resizeObserver]);\n return resizeObserver;\n}\n\nfunction defaultMeasure(element) {\n return new Rect(getClientRect(element), element);\n}\n\nfunction useRect(element, measure, fallbackRect) {\n if (measure === void 0) {\n measure = defaultMeasure;\n }\n\n const [rect, measureRect] = useReducer(reducer, null);\n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {\n type,\n target\n } = record;\n\n if (type === 'childList' && target instanceof HTMLElement && target.contains(element)) {\n measureRect();\n break;\n }\n }\n }\n\n });\n const resizeObserver = useResizeObserver({\n callback: measureRect\n });\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver == null ? void 0 : resizeObserver.observe(element);\n mutationObserver == null ? void 0 : mutationObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }\n }, [element]);\n return rect;\n\n function reducer(currentRect) {\n if (!element) {\n return null;\n }\n\n if (element.isConnected === false) {\n var _ref;\n\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null;\n }\n\n const newRect = measure(element);\n\n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n\n return newRect;\n }\n}\n\nfunction useRectDelta(rect) {\n const initialRect = useInitialValue(rect);\n return getRectDelta(rect, initialRect);\n}\n\nconst defaultValue$1 = [];\nfunction useScrollableAncestors(node) {\n const previousNode = useRef(node);\n const ancestors = useLazyMemo(previousValue => {\n if (!node) {\n return defaultValue$1;\n }\n\n if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n }, [node]);\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n return ancestors;\n}\n\nfunction useScrollOffsets(elements) {\n const [scrollCoordinates, setScrollCoordinates] = useState(null);\n const prevElements = useRef(elements); // To-do: Throttle the handleScroll callback\n\n const handleScroll = useCallback(event => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates(scrollCoordinates => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(scrollingElement, getScrollCoordinates(scrollingElement));\n return new Map(scrollCoordinates);\n });\n }, []);\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n const entries = elements.map(element => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true\n });\n return [scrollableElement, getScrollCoordinates(scrollableElement)];\n }\n\n return null;\n }).filter(entry => entry != null);\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements) {\n elements.forEach(element => {\n const scrollableElement = getScrollableElement(element);\n scrollableElement == null ? void 0 : scrollableElement.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n\nfunction useScrollOffsetsDelta(scrollOffsets, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n const initialScrollOffsets = useRef(null);\n useEffect(() => {\n initialScrollOffsets.current = null;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies);\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;\n}\n\nfunction useSensorSetup(sensors) {\n useEffect(() => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(_ref => {\n let {\n sensor\n } = _ref;\n return sensor.setup == null ? void 0 : sensor.setup();\n });\n return () => {\n for (const teardown of teardownFns) {\n teardown == null ? void 0 : teardown();\n }\n };\n }, // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(_ref2 => {\n let {\n sensor\n } = _ref2;\n return sensor;\n }));\n}\n\nfunction useSyntheticListeners(listeners, id) {\n return useMemo(() => {\n return listeners.reduce((acc, _ref) => {\n let {\n eventName,\n handler\n } = _ref;\n\n acc[eventName] = event => {\n handler(event, id);\n };\n\n return acc;\n }, {});\n }, [listeners, id]);\n}\n\nfunction useWindowRect(element) {\n return useMemo(() => element ? getWindowClientRect(element) : null, [element]);\n}\n\nconst defaultValue$2 = [];\nfunction useRects(elements, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n const [firstElement] = elements;\n const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null);\n const [rects, measureRects] = useReducer(reducer, defaultValue$2);\n const resizeObserver = useResizeObserver({\n callback: measureRects\n });\n\n if (elements.length > 0 && rects === defaultValue$2) {\n measureRects();\n }\n\n useIsomorphicLayoutEffect(() => {\n if (elements.length) {\n elements.forEach(element => resizeObserver == null ? void 0 : resizeObserver.observe(element));\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n measureRects();\n }\n }, [elements]);\n return rects;\n\n function reducer() {\n if (!elements.length) {\n return defaultValue$2;\n }\n\n return elements.map(element => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element));\n }\n}\n\nfunction getMeasurableNode(node) {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n\n const firstChild = node.children[0];\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n\nfunction useDragOverlayMeasuring(_ref) {\n let {\n measure\n } = _ref;\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(entries => {\n for (const {\n target\n } of entries) {\n if (isHTMLElement(target)) {\n setRect(rect => {\n const newRect = measure(target);\n return rect ? { ...rect,\n width: newRect.width,\n height: newRect.height\n } : newRect;\n });\n break;\n }\n }\n }, [measure]);\n const resizeObserver = useResizeObserver({\n callback: handleResize\n });\n const handleNodeChange = useCallback(element => {\n const node = getMeasurableNode(element);\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n\n if (node) {\n resizeObserver == null ? void 0 : resizeObserver.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n }, [measure, resizeObserver]);\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n return useMemo(() => ({\n nodeRef,\n rect,\n setRef\n }), [rect, nodeRef, setRef]);\n}\n\nconst defaultSensors = [{\n sensor: PointerSensor,\n options: {}\n}, {\n sensor: KeyboardSensor,\n options: {}\n}];\nconst defaultData = {\n current: {}\n};\nconst defaultMeasuringConfiguration = {\n draggable: {\n measure: getTransformAgnosticClientRect\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized\n },\n dragOverlay: {\n measure: getClientRect\n }\n};\n\nclass DroppableContainersMap extends Map {\n get(id) {\n var _super$get;\n\n return id != null ? (_super$get = super.get(id)) != null ? _super$get : undefined : undefined;\n }\n\n toArray() {\n return Array.from(this.values());\n }\n\n getEnabled() {\n return this.toArray().filter(_ref => {\n let {\n disabled\n } = _ref;\n return !disabled;\n });\n }\n\n getNodeFor(id) {\n var _this$get$node$curren, _this$get;\n\n return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : undefined;\n }\n\n}\n\nconst defaultPublicContext = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: /*#__PURE__*/new Map(),\n droppableRects: /*#__PURE__*/new Map(),\n droppableContainers: /*#__PURE__*/new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null\n },\n rect: null,\n setRef: noop\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false\n};\nconst defaultInternalContext = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: ''\n },\n dispatch: noop,\n draggableNodes: /*#__PURE__*/new Map(),\n over: null,\n measureDroppableContainers: noop\n};\nconst InternalContext = /*#__PURE__*/createContext(defaultInternalContext);\nconst PublicContext = /*#__PURE__*/createContext(defaultPublicContext);\n\nfunction getInitialState() {\n return {\n draggable: {\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n nodes: new Map(),\n translate: {\n x: 0,\n y: 0\n }\n },\n droppable: {\n containers: new DroppableContainersMap()\n }\n };\n}\nfunction reducer(state, action) {\n switch (action.type) {\n case Action.DragStart:\n return { ...state,\n draggable: { ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active\n }\n };\n\n case Action.DragMove:\n if (!state.draggable.active) {\n return state;\n }\n\n return { ...state,\n draggable: { ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y\n }\n }\n };\n\n case Action.DragEnd:\n case Action.DragCancel:\n return { ...state,\n draggable: { ...state.draggable,\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n translate: {\n x: 0,\n y: 0\n }\n }\n };\n\n case Action.RegisterDroppable:\n {\n const {\n element\n } = action;\n const {\n id\n } = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.SetDroppableDisabled:\n {\n const {\n id,\n key,\n disabled\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, { ...element,\n disabled\n });\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.UnregisterDroppable:\n {\n const {\n id,\n key\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n default:\n {\n return state;\n }\n }\n}\n\nfunction RestoreFocus(_ref) {\n let {\n disabled\n } = _ref;\n const {\n active,\n activatorEvent,\n draggableNodes\n } = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active == null ? void 0 : active.id); // Restore keyboard focus on the activator node\n\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n activatorNode,\n node\n } = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]);\n return null;\n}\n\nfunction applyModifiers(modifiers, _ref) {\n let {\n transform,\n ...args\n } = _ref;\n return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args\n });\n }, transform) : transform;\n}\n\nfunction useMeasuringConfiguration(config) {\n return useMemo(() => ({\n draggable: { ...defaultMeasuringConfiguration.draggable,\n ...(config == null ? void 0 : config.draggable)\n },\n droppable: { ...defaultMeasuringConfiguration.droppable,\n ...(config == null ? void 0 : config.droppable)\n },\n dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay,\n ...(config == null ? void 0 : config.dragOverlay)\n }\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay]);\n}\n\nfunction useLayoutShiftScrollCompensation(_ref) {\n let {\n activeNode,\n measure,\n initialRect,\n config = true\n } = _ref;\n const initialized = useRef(false);\n const {\n x,\n y\n } = typeof config === 'boolean' ? {\n x: config,\n y: config\n } : config;\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n } // Get the most up to date node ref for the active draggable\n\n\n const node = activeNode == null ? void 0 : activeNode.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n } // Only perform layout shift scroll compensation once\n\n\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n\nconst ActiveDraggableContext = /*#__PURE__*/createContext({ ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1\n});\nvar Status;\n\n(function (Status) {\n Status[Status[\"Uninitialized\"] = 0] = \"Uninitialized\";\n Status[Status[\"Initializing\"] = 1] = \"Initializing\";\n Status[Status[\"Initialized\"] = 2] = \"Initialized\";\n})(Status || (Status = {}));\n\nconst DndContext = /*#__PURE__*/memo(function DndContext(_ref) {\n var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect;\n\n let {\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n } = _ref;\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {\n active: activeId,\n nodes: draggableNodes,\n translate\n },\n droppable: {\n containers: droppableContainers\n }\n } = state;\n const node = activeId ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null\n });\n const active = useMemo(() => {\n var _node$data;\n\n return activeId != null ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData,\n rect: activeRects\n } : null;\n }, [activeId, node]);\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(\"DndDescribedBy\", id);\n const enabledDroppableContainers = useMemo(() => droppableContainers.getEnabled(), [droppableContainers]);\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled\n } = useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);\n useLayoutShiftScrollCompensation({\n activeNode: activeId ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure\n });\n const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect);\n const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null);\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null\n });\n const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id);\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure\n }); // Use the rect of the drag overlay if it is mounted\n\n const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode;\n const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null;\n const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); // Get the window rect of the dragging node\n\n const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); // Get scrollable ancestors of the dragging node\n\n const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null);\n const scrollableAncestorRects = useRects(scrollableAncestors); // Apply modifiers\n\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n });\n const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null;\n const scrollOffsets = useScrollOffsets(scrollableAncestors); // Represents the scroll delta since dragging was initiated\n\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); // Represents the scroll delta since the last time the active node rect was measured\n\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]);\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null;\n const collisions = active && collisionRect ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates\n }) : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null); // When there is no drag overlay used, we need to account for the\n // window scroll delta\n\n const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta);\n const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);\n const instantiateSensor = useCallback((event, _ref2) => {\n let {\n sensor: Sensor,\n options\n } = _ref2;\n\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragStart\n } = latestProps.current;\n const event = {\n active: {\n id,\n data: draggableNode.data,\n rect: activeRects\n }\n };\n unstable_batchedUpdates(() => {\n onDragStart == null ? void 0 : onDragStart(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id\n });\n dispatchMonitorEvent({\n type: 'onDragStart',\n event\n });\n });\n },\n\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates\n });\n },\n\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel)\n });\n unstable_batchedUpdates(() => {\n setActiveSensor(sensorInstance);\n setActivatorEvent(event.nativeEvent);\n });\n\n function createHandler(type) {\n return async function handler() {\n const {\n active,\n collisions,\n over,\n scrollAdjustedTranslate\n } = sensorContext.current;\n let event = null;\n\n if (active && scrollAdjustedTranslate) {\n const {\n cancelDrop\n } = latestProps.current;\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n unstable_batchedUpdates(() => {\n dispatch({\n type\n });\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n const eventName = type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n handler == null ? void 0 : handler(event);\n dispatchMonitorEvent({\n type: eventName,\n event\n });\n }\n });\n };\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]);\n const bindActivatorToSensorInstantiator = useCallback((handler, sensor) => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if ( // Another sensor is already instantiating\n activeRef.current !== null || // No active draggable\n !activeDraggableNode || // Event has already been captured\n nativeEvent.dndKit || nativeEvent.defaultPrevented) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode\n };\n const shouldActivate = handler(event, sensor.options, activationContext);\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor\n };\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n }, [draggableNodes, instantiateSensor]);\n const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);\n useSensorSetup(sensors);\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n useEffect(() => {\n const {\n onDragMove\n } = latestProps.current;\n const {\n active,\n activatorEvent,\n collisions,\n over\n } = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n onDragMove == null ? void 0 : onDragMove(event);\n dispatchMonitorEvent({\n type: 'onDragMove',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n useEffect(() => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate\n } = sensorContext.current;\n\n if (!active || activeRef.current == null || !activatorEvent || !scrollAdjustedTranslate) {\n return;\n }\n\n const {\n onDragOver\n } = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over = overContainer && overContainer.rect.current ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled\n } : null;\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver == null ? void 0 : onDragOver(event);\n dispatchMonitorEvent({\n type: 'onDragOver',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]);\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate\n };\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect\n };\n }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]);\n useAutoScroller({ ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects\n });\n const publicContext = useMemo(() => {\n const context = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect\n };\n return context;\n }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]);\n const internalContext = useMemo(() => {\n const context = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers\n };\n return context;\n }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]);\n return React.createElement(DndMonitorContext.Provider, {\n value: registerMonitorListener\n }, React.createElement(InternalContext.Provider, {\n value: internalContext\n }, React.createElement(PublicContext.Provider, {\n value: publicContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: transform\n }, children)), React.createElement(RestoreFocus, {\n disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false\n })), React.createElement(Accessibility, { ...accessibility,\n hiddenTextDescribedById: draggableDescribedById\n }));\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false;\n const autoScrollGloballyDisabled = typeof autoScroll === 'object' ? autoScroll.enabled === false : autoScroll === false;\n const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return { ...autoScroll,\n enabled\n };\n }\n\n return {\n enabled\n };\n }\n});\n\nconst NullContext = /*#__PURE__*/createContext(null);\nconst defaultRole = 'button';\nconst ID_PREFIX = 'Droppable';\nfunction useDraggable(_ref) {\n let {\n id,\n data,\n disabled = false,\n attributes\n } = _ref;\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0\n } = attributes != null ? attributes : {};\n const isDragging = (active == null ? void 0 : active.id) === id;\n const transform = useContext(isDragging ? ActiveDraggableContext : NullContext);\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n useIsomorphicLayoutEffect(() => {\n draggableNodes.set(id, {\n id,\n key,\n node,\n activatorNode,\n data: dataRef\n });\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]);\n const memoizedAttributes = useMemo(() => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable\n }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]);\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform\n };\n}\n\nfunction useDndContext() {\n return useContext(PublicContext);\n}\n\nconst ID_PREFIX$1 = 'Droppable';\nconst defaultResizeObserverConfig = {\n timeout: 25\n};\nfunction useDroppable(_ref) {\n let {\n data,\n disabled = false,\n id,\n resizeObserverConfig\n } = _ref;\n const key = useUniqueId(ID_PREFIX$1);\n const {\n active,\n dispatch,\n over,\n measureDroppableContainers\n } = useContext(InternalContext);\n const previous = useRef({\n disabled\n });\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout\n } = { ...defaultResizeObserverConfig,\n ...resizeObserverConfig\n };\n const ids = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id);\n const handleResize = useCallback(() => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]);\n callbackId.current = null;\n }, resizeObserverTimeout);\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]);\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active\n });\n const handleNodeChange = useCallback((newElement, previousElement) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n }, [resizeObserver]);\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n useIsomorphicLayoutEffect(() => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef\n }\n });\n return () => dispatch({\n type: Action.UnregisterDroppable,\n key,\n id\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]);\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled\n });\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n return {\n active,\n rect,\n isOver: (over == null ? void 0 : over.id) === id,\n node: nodeRef,\n over,\n setNodeRef\n };\n}\n\nfunction AnimationManager(_ref) {\n let {\n animation,\n children\n } = _ref;\n const [clonedChildren, setClonedChildren] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren == null ? void 0 : clonedChildren.key;\n const id = clonedChildren == null ? void 0 : clonedChildren.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n return React.createElement(React.Fragment, null, children, clonedChildren ? cloneElement(clonedChildren, {\n ref: setElement\n }) : null);\n}\n\nconst defaultTransform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1\n};\nfunction NullifiedContextProvider(_ref) {\n let {\n children\n } = _ref;\n return React.createElement(InternalContext.Provider, {\n value: defaultInternalContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: defaultTransform\n }, children));\n}\n\nconst baseStyles = {\n position: 'fixed',\n touchAction: 'none'\n};\n\nconst defaultTransition = activatorEvent => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nconst PositionedOverlay = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition\n } = _ref;\n\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale ? transform : { ...transform,\n scaleX: 1,\n scaleY: 1\n };\n const styles = { ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin: adjustScale && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : undefined,\n transition: typeof transition === 'function' ? transition(activatorEvent) : transition,\n ...style\n };\n return React.createElement(as, {\n className,\n style: styles,\n ref\n }, children);\n});\n\nconst defaultDropAnimationSideEffects = options => _ref => {\n let {\n active,\n dragOverlay\n } = _ref;\n const originalStyles = {};\n const {\n styles,\n className\n } = options;\n\n if (styles != null && styles.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles != null && styles.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className != null && className.active) {\n active.node.classList.add(className.active);\n }\n\n if (className != null && className.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className != null && className.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver = _ref2 => {\n let {\n transform: {\n initial,\n final\n }\n } = _ref2;\n return [{\n transform: CSS.Transform.toString(initial)\n }, {\n transform: CSS.Transform.toString(final)\n }];\n};\n\nconst defaultDropAnimationConfiguration = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: /*#__PURE__*/defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0'\n }\n }\n })\n};\nfunction useDropAnimation(_ref3) {\n let {\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n } = _ref3;\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n\n const {\n transform\n } = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation = typeof config === 'function' ? config : createDefaultDropAnimation(config);\n scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure);\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode)\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode)\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform\n });\n });\n}\n\nfunction createDefaultDropAnimation(options) {\n const {\n duration,\n easing,\n sideEffects,\n keyframes\n } = { ...defaultDropAnimationConfiguration,\n ...options\n };\n return _ref4 => {\n let {\n active,\n dragOverlay,\n transform,\n ...rest\n } = _ref4;\n\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top\n };\n const scale = {\n scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1,\n scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale\n };\n const animationKeyframes = keyframes({ ...rest,\n active,\n dragOverlay,\n transform: {\n initial: transform,\n final: finalTransform\n }\n });\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects == null ? void 0 : sideEffects({\n active,\n dragOverlay,\n ...rest\n });\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards'\n });\n return new Promise(resolve => {\n animation.onfinish = () => {\n cleanup == null ? void 0 : cleanup();\n resolve();\n };\n });\n };\n}\n\nlet key = 0;\nfunction useKey(id) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n\nconst DragOverlay = /*#__PURE__*/React.memo(_ref => {\n let {\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999\n } = _ref;\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active == null ? void 0 : active.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n }); // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n\n const ref = initialRect ? dragOverlay.setRef : undefined;\n return React.createElement(NullifiedContextProvider, null, React.createElement(AnimationManager, {\n animation: dropAnimation\n }, active && key ? React.createElement(PositionedOverlay, {\n key: key,\n id: active.id,\n ref: ref,\n as: wrapperElement,\n activatorEvent: activatorEvent,\n adjustScale: adjustScale,\n className: className,\n transition: transition,\n rect: initialRect,\n style: {\n zIndex,\n ...style\n },\n transform: modifiedTransform\n }, children) : null));\n});\n\nexport { AutoScrollActivator, DndContext, DragOverlay, KeyboardCode, KeyboardSensor, MeasuringFrequency, MeasuringStrategy, MouseSensor, PointerSensor, TouchSensor, TraversalOrder, applyModifiers, closestCenter, closestCorners, defaultAnnouncements, defaultCoordinates, defaultDropAnimationConfiguration as defaultDropAnimation, defaultDropAnimationSideEffects, defaultScreenReaderInstructions, getClientRect, getFirstCollision, getScrollableAncestors, pointerWithin, rectIntersection, useDndContext, useDndMonitor, useDraggable, useDroppable, useSensor, useSensors };\n//# sourceMappingURL=core.esm.js.map\n","// ES6 Map\nvar map\ntry {\n map = Map\n} catch (_) { }\nvar set\n\n// ES6 Set\ntry {\n set = Set\n} catch (_) { }\n\nfunction baseClone (src, circulars, clones) {\n // Null/undefined/functions/etc\n if (!src || typeof src !== 'object' || typeof src === 'function') {\n return src\n }\n\n // DOM Node\n if (src.nodeType && 'cloneNode' in src) {\n return src.cloneNode(true)\n }\n\n // Date\n if (src instanceof Date) {\n return new Date(src.getTime())\n }\n\n // RegExp\n if (src instanceof RegExp) {\n return new RegExp(src)\n }\n\n // Arrays\n if (Array.isArray(src)) {\n return src.map(clone)\n }\n\n // ES6 Maps\n if (map && src instanceof map) {\n return new Map(Array.from(src.entries()))\n }\n\n // ES6 Sets\n if (set && src instanceof set) {\n return new Set(Array.from(src.values()))\n }\n\n // Object\n if (src instanceof Object) {\n circulars.push(src)\n var obj = Object.create(src)\n clones.push(obj)\n for (var key in src) {\n var idx = circulars.findIndex(function (i) {\n return i === src[key]\n })\n obj[key] = idx > -1 ? clones[idx] : baseClone(src[key], circulars, clones)\n }\n return obj\n }\n\n // ???\n return src\n}\n\nexport default function clone (src) {\n return baseClone(src, [], [])\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;\n }\n Object.freeze(obj);\n if (deep)\n Object.entries(obj).forEach(([key, value]) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches = immer.applyPatches.bind(immer);\nvar createDraft = immer.createDraft.bind(immer);\nvar finishDraft = immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3 listeners2.forEach((listener) => {\n if (!originalListeners2.has(listener)) {\n return;\n }\n const callback = this.frameworkOverrides ? () => this.frameworkOverrides.wrapIncoming(() => listener(event)) : () => listener(event);\n if (async) {\n this.dispatchAsync(callback);\n } else {\n callback();\n }\n });\n const originalListeners = this.getListeners(eventType, async, false) ?? /* @__PURE__ */ new Set();\n const listeners = new Set(originalListeners);\n if (listeners.size > 0) {\n processEventListeners(listeners, originalListeners);\n }\n const globalListeners = new Set(\n async ? this.globalAsyncListeners : this.globalSyncListeners\n );\n globalListeners.forEach((listener) => {\n const callback = this.frameworkOverrides ? () => this.frameworkOverrides.wrapIncoming(() => listener(eventType, event)) : () => listener(eventType, event);\n if (async) {\n this.dispatchAsync(callback);\n } else {\n callback();\n }\n });\n }\n // this gets called inside the grid's thread, for each event that it\n // wants to set async. the grid then batches the events into one setTimeout()\n // because setTimeout() is an expensive operation. ideally we would have\n // each event in it's own setTimeout(), but we batch for performance.\n dispatchAsync(func) {\n this.asyncFunctionsQueue.push(func);\n if (!this.scheduled) {\n const flush = () => {\n window.setTimeout(this.flushAsyncQueue.bind(this), 0);\n };\n this.frameworkOverrides ? this.frameworkOverrides.wrapIncoming(flush) : flush();\n this.scheduled = true;\n }\n }\n // this happens in the next VM turn only, and empties the queue of events\n flushAsyncQueue() {\n this.scheduled = false;\n const queueCopy = this.asyncFunctionsQueue.slice();\n this.asyncFunctionsQueue = [];\n queueCopy.forEach((func) => func());\n }\n};\n\n// community-modules/core/src/modules/moduleNames.ts\nvar ModuleNames = /* @__PURE__ */ ((ModuleNames2) => {\n ModuleNames2[\"CommunityCoreModule\"] = \"@ag-grid-community/core\";\n ModuleNames2[\"InfiniteRowModelModule\"] = \"@ag-grid-community/infinite-row-model\";\n ModuleNames2[\"ClientSideRowModelModule\"] = \"@ag-grid-community/client-side-row-model\";\n ModuleNames2[\"CsvExportModule\"] = \"@ag-grid-community/csv-export\";\n ModuleNames2[\"EnterpriseCoreModule\"] = \"@ag-grid-enterprise/core\";\n ModuleNames2[\"RowGroupingModule\"] = \"@ag-grid-enterprise/row-grouping\";\n ModuleNames2[\"ColumnsToolPanelModule\"] = \"@ag-grid-enterprise/column-tool-panel\";\n ModuleNames2[\"FiltersToolPanelModule\"] = \"@ag-grid-enterprise/filter-tool-panel\";\n ModuleNames2[\"MenuModule\"] = \"@ag-grid-enterprise/menu\";\n ModuleNames2[\"SetFilterModule\"] = \"@ag-grid-enterprise/set-filter\";\n ModuleNames2[\"MultiFilterModule\"] = \"@ag-grid-enterprise/multi-filter\";\n ModuleNames2[\"StatusBarModule\"] = \"@ag-grid-enterprise/status-bar\";\n ModuleNames2[\"SideBarModule\"] = \"@ag-grid-enterprise/side-bar\";\n ModuleNames2[\"RangeSelectionModule\"] = \"@ag-grid-enterprise/range-selection\";\n ModuleNames2[\"MasterDetailModule\"] = \"@ag-grid-enterprise/master-detail\";\n ModuleNames2[\"RichSelectModule\"] = \"@ag-grid-enterprise/rich-select\";\n ModuleNames2[\"GridChartsModule\"] = \"@ag-grid-enterprise/charts\";\n ModuleNames2[\"ViewportRowModelModule\"] = \"@ag-grid-enterprise/viewport-row-model\";\n ModuleNames2[\"ServerSideRowModelModule\"] = \"@ag-grid-enterprise/server-side-row-model\";\n ModuleNames2[\"ExcelExportModule\"] = \"@ag-grid-enterprise/excel-export\";\n ModuleNames2[\"ClipboardModule\"] = \"@ag-grid-enterprise/clipboard\";\n ModuleNames2[\"SparklinesModule\"] = \"@ag-grid-enterprise/sparklines\";\n ModuleNames2[\"AdvancedFilterModule\"] = \"@ag-grid-enterprise/advanced-filter\";\n ModuleNames2[\"AngularModule\"] = \"@ag-grid-community/angular\";\n ModuleNames2[\"ReactModule\"] = \"@ag-grid-community/react\";\n ModuleNames2[\"VueModule\"] = \"@ag-grid-community/vue\";\n return ModuleNames2;\n})(ModuleNames || {});\n\n// community-modules/core/src/utils/function.ts\nvar doOnceFlags = {};\nfunction _doOnce(func, key) {\n if (doOnceFlags[key]) {\n return;\n }\n func();\n doOnceFlags[key] = true;\n}\nfunction _log(message, ...args) {\n console.log(\"AG Grid: \" + message, ...args);\n}\nfunction _warnOnce(msg, ...args) {\n _doOnce(() => console.warn(\"AG Grid: \" + msg, ...args), msg + args?.join(\"\"));\n}\nfunction _errorOnce(msg, ...args) {\n _doOnce(() => console.error(\"AG Grid: \" + msg, ...args), msg + args?.join(\"\"));\n}\nfunction _isFunction(val) {\n return !!(val && val.constructor && val.call && val.apply);\n}\nfunction _executeInAWhile(funcs) {\n _executeAfter(funcs, 400);\n}\nvar executeNextVMTurnFuncs = [];\nvar executeNextVMTurnPending = false;\nfunction _executeNextVMTurn(func) {\n executeNextVMTurnFuncs.push(func);\n if (executeNextVMTurnPending) {\n return;\n }\n executeNextVMTurnPending = true;\n window.setTimeout(() => {\n const funcsCopy = executeNextVMTurnFuncs.slice();\n executeNextVMTurnFuncs.length = 0;\n executeNextVMTurnPending = false;\n funcsCopy.forEach((func2) => func2());\n }, 0);\n}\nfunction _executeAfter(funcs, milliseconds = 0) {\n if (funcs.length > 0) {\n window.setTimeout(() => funcs.forEach((func) => func()), milliseconds);\n }\n}\nfunction _debounce(func, delay) {\n let timeout;\n return function(...args) {\n const context = this;\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function() {\n func.apply(context, args);\n }, delay);\n };\n}\nfunction _throttle(func, wait) {\n let previousCall = 0;\n return function(...args) {\n const context = this;\n const currentCall = (/* @__PURE__ */ new Date()).getTime();\n if (currentCall - previousCall < wait) {\n return;\n }\n previousCall = currentCall;\n func.apply(context, args);\n };\n}\nfunction _waitUntil(condition, callback, timeout = 100, timeoutMessage) {\n const timeStamp = (/* @__PURE__ */ new Date()).getTime();\n let interval = null;\n let executed = false;\n const internalCallback = () => {\n const reachedTimeout = (/* @__PURE__ */ new Date()).getTime() - timeStamp > timeout;\n if (condition() || reachedTimeout) {\n callback();\n executed = true;\n if (interval != null) {\n window.clearInterval(interval);\n interval = null;\n }\n if (reachedTimeout && timeoutMessage) {\n _warnOnce(timeoutMessage);\n }\n }\n };\n internalCallback();\n if (!executed) {\n interval = window.setInterval(internalCallback, 10);\n }\n}\nfunction _compose(...fns) {\n return (arg) => fns.reduce((composed, f) => f(composed), arg);\n}\n\n// community-modules/core/src/utils/generic.ts\nfunction _makeNull(value) {\n if (value == null || value === \"\") {\n return null;\n }\n return value;\n}\nfunction _exists(value, allowEmptyString = false) {\n return value != null && (value !== \"\" || allowEmptyString);\n}\nfunction _missing(value) {\n return !_exists(value);\n}\nfunction _missingOrEmpty(value) {\n return value == null || value.length === 0;\n}\nfunction _toStringOrNull(value) {\n return value != null && typeof value.toString === \"function\" ? value.toString() : null;\n}\nfunction _attrToNumber(value) {\n if (value === void 0) {\n return;\n }\n if (value === null || value === \"\") {\n return null;\n }\n if (typeof value === \"number\") {\n return isNaN(value) ? void 0 : value;\n }\n const valueParsed = parseInt(value, 10);\n return isNaN(valueParsed) ? void 0 : valueParsed;\n}\nfunction _attrToBoolean(value) {\n if (value === void 0) {\n return;\n }\n if (value === null || value === \"\") {\n return false;\n }\n return toBoolean(value);\n}\nfunction toBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n return value.toUpperCase() === \"TRUE\" || value == \"\";\n }\n return false;\n}\nfunction _jsonEquals(val1, val2) {\n const val1Json = val1 ? JSON.stringify(val1) : null;\n const val2Json = val2 ? JSON.stringify(val2) : null;\n return val1Json === val2Json;\n}\nfunction _defaultComparator(valueA, valueB, accentedCompare = false) {\n const valueAMissing = valueA == null;\n const valueBMissing = valueB == null;\n if (valueA && valueA.toNumber) {\n valueA = valueA.toNumber();\n }\n if (valueB && valueB.toNumber) {\n valueB = valueB.toNumber();\n }\n if (valueAMissing && valueBMissing) {\n return 0;\n }\n if (valueAMissing) {\n return -1;\n }\n if (valueBMissing) {\n return 1;\n }\n function doQuickCompare(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n if (typeof valueA !== \"string\") {\n return doQuickCompare(valueA, valueB);\n }\n if (!accentedCompare) {\n return doQuickCompare(valueA, valueB);\n }\n try {\n return valueA.localeCompare(valueB);\n } catch (e) {\n return doQuickCompare(valueA, valueB);\n }\n}\nfunction _values(object) {\n if (object instanceof Set || object instanceof Map) {\n const arr = [];\n object.forEach((value) => arr.push(value));\n return arr;\n }\n return Object.values(object);\n}\n\n// community-modules/core/src/gridOptionsUtils.ts\nfunction isRowModelType(gos, rowModelType) {\n return gos.get(\"rowModelType\") === rowModelType;\n}\nfunction _isClientSideRowModel(gos) {\n return isRowModelType(gos, \"clientSide\");\n}\nfunction _isServerSideRowModel(gos) {\n return isRowModelType(gos, \"serverSide\");\n}\nfunction _isDomLayout(gos, domLayout) {\n return gos.get(\"domLayout\") === domLayout;\n}\nfunction _isRowSelection(gos) {\n return _getRowSelectionMode(gos) !== void 0;\n}\nfunction _useAsyncEvents(gos) {\n return !gos.get(\"suppressAsyncEvents\");\n}\nfunction _isGetRowHeightFunction(gos) {\n return typeof gos.get(\"getRowHeight\") === \"function\";\n}\nfunction _shouldMaintainColumnOrder(gos, isPivotColumns) {\n if (isPivotColumns) {\n return !gos.get(\"enableStrictPivotColumnOrder\");\n }\n return gos.get(\"maintainColumnOrder\");\n}\nfunction _getRowHeightForNode(gos, rowNode, allowEstimate = false, defaultRowHeight) {\n if (defaultRowHeight == null) {\n defaultRowHeight = gos.environment.getDefaultRowHeight();\n }\n if (_isGetRowHeightFunction(gos)) {\n if (allowEstimate) {\n return { height: defaultRowHeight, estimated: true };\n }\n const params = {\n node: rowNode,\n data: rowNode.data\n };\n const height = gos.getCallback(\"getRowHeight\")(params);\n if (isNumeric(height)) {\n if (height === 0) {\n _warnOnce(\n \"The return of `getRowHeight` cannot be zero. If the intention is to hide rows, use a filter instead.\"\n );\n }\n return { height: Math.max(1, height), estimated: false };\n }\n }\n if (rowNode.detail && gos.get(\"masterDetail\")) {\n return getMasterDetailRowHeight(gos);\n }\n const gridOptionsRowHeight = gos.get(\"rowHeight\");\n const rowHeight = gridOptionsRowHeight && isNumeric(gridOptionsRowHeight) ? gridOptionsRowHeight : defaultRowHeight;\n return { height: rowHeight, estimated: false };\n}\nfunction getMasterDetailRowHeight(gos) {\n if (gos.get(\"detailRowAutoHeight\")) {\n return { height: 1, estimated: false };\n }\n const defaultRowHeight = gos.get(\"detailRowHeight\");\n if (isNumeric(defaultRowHeight)) {\n return { height: defaultRowHeight, estimated: false };\n }\n return { height: 300, estimated: false };\n}\nfunction _getRowHeightAsNumber(gos) {\n const { environment } = gos;\n const gridOptionsRowHeight = gos.get(\"rowHeight\");\n if (!gridOptionsRowHeight || _missing(gridOptionsRowHeight)) {\n return environment.getDefaultRowHeight();\n }\n const rowHeight = environment.refreshRowHeightVariable();\n if (rowHeight !== -1) {\n return rowHeight;\n }\n _warnOnce(\"row height must be a number if not using standard row model\");\n return environment.getDefaultRowHeight();\n}\nfunction isNumeric(value) {\n return !isNaN(value) && typeof value === \"number\" && isFinite(value);\n}\nfunction _getDomData(gos, element, key) {\n const domData = element[gos.getDomDataKey()];\n return domData ? domData[key] : void 0;\n}\nfunction _setDomData(gos, element, key, value) {\n const domDataKey = gos.getDomDataKey();\n let domData = element[domDataKey];\n if (_missing(domData)) {\n domData = {};\n element[domDataKey] = domData;\n }\n domData[key] = value;\n}\nfunction _getDocument(gos) {\n let result = null;\n const gridOptionsGetDocument = gos.get(\"getDocument\");\n if (gridOptionsGetDocument && _exists(gridOptionsGetDocument)) {\n result = gridOptionsGetDocument();\n } else if (gos.eGridDiv) {\n result = gos.eGridDiv.ownerDocument;\n }\n if (result && _exists(result)) {\n return result;\n }\n return document;\n}\nfunction _getWindow(gos) {\n const eDocument = _getDocument(gos);\n return eDocument.defaultView || window;\n}\nfunction _getRootNode(gos) {\n return gos.eGridDiv.getRootNode();\n}\nfunction _getActiveDomElement(gos) {\n return _getRootNode(gos).activeElement;\n}\nfunction _isNothingFocused(gos) {\n const eDocument = _getDocument(gos);\n const activeEl = _getActiveDomElement(gos);\n return activeEl === null || activeEl === eDocument.body;\n}\nfunction _isAnimateRows(gos) {\n if (gos.get(\"ensureDomOrder\")) {\n return false;\n }\n return gos.get(\"animateRows\");\n}\nfunction _isGroupRowsSticky(gos) {\n if (gos.get(\"paginateChildRows\") || gos.get(\"groupHideOpenParents\") || _isDomLayout(gos, \"print\")) {\n return false;\n }\n return true;\n}\nfunction _isColumnsSortingCoupledToGroup(gos) {\n const autoGroupColumnDef = gos.get(\"autoGroupColumnDef\");\n return !autoGroupColumnDef?.comparator && !gos.get(\"treeData\");\n}\nfunction _getGroupAggFiltering(gos) {\n const userValue = gos.get(\"groupAggFiltering\");\n if (typeof userValue === \"function\") {\n return gos.getCallback(\"groupAggFiltering\");\n }\n if (userValue === true) {\n return () => true;\n }\n return void 0;\n}\nfunction _getGrandTotalRow(gos) {\n const userValue = gos.get(\"grandTotalRow\");\n if (userValue) {\n return userValue;\n }\n const legacyValue = gos.get(\"groupIncludeTotalFooter\");\n if (legacyValue) {\n return \"bottom\";\n }\n return void 0;\n}\nfunction _getGroupTotalRowCallback(gos) {\n const userValue = gos.get(\"groupTotalRow\");\n if (typeof userValue === \"function\") {\n return gos.getCallback(\"groupTotalRow\");\n }\n if (userValue) {\n return () => userValue;\n }\n const legacyValue = gos.get(\"groupIncludeFooter\");\n if (typeof legacyValue === \"function\") {\n const legacyCallback = gos.getCallback(\"groupIncludeFooter\");\n return (p) => {\n return legacyCallback(p) ? \"bottom\" : void 0;\n };\n }\n return () => legacyValue ? \"bottom\" : void 0;\n}\nfunction _isGroupMultiAutoColumn(gos) {\n if (gos.exists(\"groupDisplayType\")) {\n return gos.get(\"groupDisplayType\") === \"multipleColumns\";\n }\n return gos.get(\"groupHideOpenParents\");\n}\nfunction _isGroupUseEntireRow(gos, pivotMode) {\n if (pivotMode) {\n return false;\n }\n return gos.get(\"groupDisplayType\") === \"groupRows\";\n}\nfunction _getRowIdCallback(gos) {\n const getRowId = gos.getCallback(\"getRowId\");\n if (getRowId === void 0) {\n return getRowId;\n }\n return (params) => {\n let id = getRowId(params);\n if (typeof id !== \"string\") {\n _warnOnce(`The getRowId callback must return a string. The ID `, id, ` is being cast to a string.`);\n id = String(id);\n }\n return id;\n };\n}\nfunction _getCheckboxes(selection) {\n return selection?.checkboxes ?? true;\n}\nfunction _getHeaderCheckbox(selection) {\n return selection?.mode === \"multiRow\" && (selection.headerCheckbox ?? true);\n}\nfunction _getHideDisabledCheckboxes(selection) {\n return selection?.hideDisabledCheckboxes ?? false;\n}\nfunction _isUsingNewRowSelectionAPI(gos) {\n const rowSelection = gos.get(\"rowSelection\");\n return typeof rowSelection !== \"string\";\n}\nfunction _isUsingNewCellSelectionAPI(gos) {\n return gos.get(\"cellSelection\") !== void 0;\n}\nfunction _getSuppressMultiRanges(gos) {\n const selection = gos.get(\"cellSelection\");\n const useNewAPI = selection !== void 0;\n if (!useNewAPI) {\n return gos.get(\"suppressMultiRangeSelection\");\n }\n return typeof selection !== \"boolean\" ? selection?.suppressMultiRanges ?? false : false;\n}\nfunction _isCellSelectionEnabled(gos) {\n const selection = gos.get(\"cellSelection\");\n const useNewAPI = selection !== void 0;\n return useNewAPI ? !!selection : gos.get(\"enableRangeSelection\");\n}\nfunction _isRangeHandleEnabled(gos) {\n const selection = gos.get(\"cellSelection\");\n const useNewAPI = selection !== void 0;\n if (!useNewAPI) {\n return gos.get(\"enableRangeHandle\");\n }\n return typeof selection !== \"boolean\" ? selection.handle?.mode === \"range\" : false;\n}\nfunction _isFillHandleEnabled(gos) {\n const selection = gos.get(\"cellSelection\");\n const useNewAPI = selection !== void 0;\n if (!useNewAPI) {\n return gos.get(\"enableFillHandle\");\n }\n return typeof selection !== \"boolean\" ? selection.handle?.mode === \"fill\" : false;\n}\nfunction _getFillHandle(gos) {\n const selection = gos.get(\"cellSelection\");\n const useNewAPI = selection !== void 0;\n if (!useNewAPI) {\n return {\n mode: \"fill\",\n setFillValue: gos.get(\"fillOperation\"),\n direction: gos.get(\"fillHandleDirection\"),\n suppressClearOnFillReduction: gos.get(\"suppressClearOnFillReduction\")\n };\n }\n return typeof selection !== \"boolean\" && selection.handle?.mode === \"fill\" ? selection.handle : void 0;\n}\nfunction _getEnableClickSelection(gos) {\n const selection = gos.get(\"rowSelection\") ?? \"single\";\n if (typeof selection === \"string\") {\n const suppressRowClickSelection = gos.get(\"suppressRowClickSelection\");\n const suppressRowDeselection = gos.get(\"suppressRowDeselection\");\n if (suppressRowClickSelection && suppressRowDeselection) {\n return false;\n } else if (suppressRowClickSelection) {\n return \"enableDeselection\";\n } else if (suppressRowDeselection) {\n return \"enableSelection\";\n } else {\n return true;\n }\n }\n return selection.mode === \"singleRow\" || selection.mode === \"multiRow\" ? selection.enableClickSelection ?? false : false;\n}\nfunction _getEnableSelection(gos) {\n const enableClickSelection = _getEnableClickSelection(gos);\n return enableClickSelection === true || enableClickSelection === \"enableSelection\";\n}\nfunction _getEnableDeselection(gos) {\n const enableClickSelection = _getEnableClickSelection(gos);\n return enableClickSelection === true || enableClickSelection === \"enableDeselection\";\n}\nfunction _getIsRowSelectable(gos) {\n const selection = gos.get(\"rowSelection\");\n if (typeof selection === \"string\") {\n return gos.get(\"isRowSelectable\");\n }\n return selection?.isRowSelectable;\n}\nfunction _getRowSelectionMode(gos) {\n const selection = gos.get(\"rowSelection\");\n if (typeof selection === \"string\") {\n switch (selection) {\n case \"multiple\":\n return \"multiRow\";\n case \"single\":\n return \"singleRow\";\n default:\n return;\n }\n }\n return selection?.mode;\n}\nfunction _isMultiRowSelection(gos) {\n const mode = _getRowSelectionMode(gos);\n return mode === \"multiRow\";\n}\nfunction _getEnableSelectionWithoutKeys(gos) {\n const selection = gos.get(\"rowSelection\");\n if (typeof selection === \"string\") {\n return gos.get(\"rowMultiSelectWithClick\");\n }\n return selection?.enableSelectionWithoutKeys ?? false;\n}\nfunction _getGroupSelection(gos) {\n const selection = gos.get(\"rowSelection\");\n if (typeof selection === \"string\") {\n const groupSelectsChildren = gos.get(\"groupSelectsChildren\");\n const groupSelectsFiltered = gos.get(\"groupSelectsFiltered\");\n if (groupSelectsChildren && groupSelectsFiltered) {\n return \"filteredDescendants\";\n } else if (groupSelectsChildren) {\n return \"descendants\";\n } else {\n return \"self\";\n }\n }\n return selection?.mode === \"multiRow\" ? selection.groupSelects : void 0;\n}\nfunction _getGroupSelectsDescendants(gos) {\n const groupSelection = _getGroupSelection(gos);\n return groupSelection === \"descendants\" || groupSelection === \"filteredDescendants\";\n}\nfunction _isSetFilterByDefault(gos) {\n return gos.isModuleRegistered(\"@ag-grid-enterprise/set-filter\" /* SetFilterModule */) && !gos.get(\"suppressSetFilterByDefault\");\n}\n\n// community-modules/core/src/utils/array.ts\nfunction _existsAndNotEmpty(value) {\n return value != null && value.length > 0;\n}\nfunction _last(arr) {\n if (!arr || !arr.length) {\n return;\n }\n return arr[arr.length - 1];\n}\nfunction _areEqual(a, b, comparator) {\n if (a == null && b == null) {\n return true;\n }\n return a != null && b != null && a.length === b.length && a.every((value, index) => comparator ? comparator(value, b[index]) : b[index] === value);\n}\nfunction _shallowCompare(arr1, arr2) {\n return _areEqual(arr1, arr2);\n}\nfunction _sortNumerically(array) {\n return array.sort((a, b) => a - b);\n}\nfunction _removeRepeatsFromArray(array, object) {\n if (!array) {\n return;\n }\n for (let index = array.length - 2; index >= 0; index--) {\n const thisOneMatches = array[index] === object;\n const nextOneMatches = array[index + 1] === object;\n if (thisOneMatches && nextOneMatches) {\n array.splice(index + 1, 1);\n }\n }\n}\nfunction _removeFromUnorderedArray(array, object) {\n const index = array.indexOf(object);\n if (index >= 0) {\n array[index] = array[array.length - 1];\n array.pop();\n }\n}\nfunction _removeFromArray(array, object) {\n const index = array.indexOf(object);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\nfunction _removeAllFromUnorderedArray(array, toRemove) {\n for (let i = 0; i < toRemove.length; i++) {\n _removeFromUnorderedArray(array, toRemove[i]);\n }\n}\nfunction _removeAllFromArray(array, toRemove) {\n for (let i = 0; i < toRemove.length; i++) {\n _removeFromArray(array, toRemove[i]);\n }\n}\nfunction _insertIntoArray(array, object, toIndex) {\n array.splice(toIndex, 0, object);\n}\nfunction _insertArrayIntoArray(dest, src, toIndex) {\n if (dest == null || src == null) {\n return;\n }\n for (let i = src.length - 1; i >= 0; i--) {\n const item = src[i];\n _insertIntoArray(dest, item, toIndex);\n }\n}\nfunction _moveInArray(array, objectsToMove, toIndex) {\n _removeAllFromArray(array, objectsToMove);\n objectsToMove.slice().reverse().forEach((obj) => _insertIntoArray(array, obj, toIndex));\n}\nfunction _includes(array, value) {\n return array.indexOf(value) > -1;\n}\nfunction _flatten(arrayOfArrays) {\n return arrayOfArrays?.flatMap((t) => t) ?? [];\n}\nfunction _pushAll(target, source) {\n if (source == null || target == null) {\n return;\n }\n source.forEach((value) => target.push(value));\n}\nfunction _forEachReverse(list, action) {\n if (list == null) {\n return;\n }\n for (let i = list.length - 1; i >= 0; i--) {\n action(list[i], i);\n }\n}\n\n// community-modules/core/src/utils/event.ts\nvar AG_GRID_STOP_PROPAGATION = \"__ag_Grid_Stop_Propagation\";\nvar PASSIVE_EVENTS = [\"touchstart\", \"touchend\", \"touchmove\", \"touchcancel\", \"scroll\"];\nvar supports = {};\nfunction _stopPropagationForAgGrid(event) {\n event[AG_GRID_STOP_PROPAGATION] = true;\n}\nfunction _isStopPropagationForAgGrid(event) {\n return event[AG_GRID_STOP_PROPAGATION] === true;\n}\nvar _isEventSupported = /* @__PURE__ */ (() => {\n const tags = {\n select: \"input\",\n change: \"input\",\n submit: \"form\",\n reset: \"form\",\n error: \"img\",\n load: \"img\",\n abort: \"img\"\n };\n const eventChecker = (eventName) => {\n if (typeof supports[eventName] === \"boolean\") {\n return supports[eventName];\n }\n const el = document.createElement(tags[eventName] || \"div\");\n eventName = \"on\" + eventName;\n return supports[eventName] = eventName in el;\n };\n return eventChecker;\n})();\nfunction _getCtrlForEventTarget(gos, eventTarget, type) {\n let sourceElement = eventTarget;\n while (sourceElement) {\n const renderedComp = _getDomData(gos, sourceElement, type);\n if (renderedComp) {\n return renderedComp;\n }\n sourceElement = sourceElement.parentElement;\n }\n return null;\n}\nfunction _isElementInEventPath(element, event) {\n if (!event || !element) {\n return false;\n }\n return _getEventPath(event).indexOf(element) >= 0;\n}\nfunction _createEventPath(event) {\n const res = [];\n let pointer = event.target;\n while (pointer) {\n res.push(pointer);\n pointer = pointer.parentElement;\n }\n return res;\n}\nfunction _getEventPath(event) {\n const eventNoType = event;\n if (eventNoType.path) {\n return eventNoType.path;\n }\n if (eventNoType.composedPath) {\n return eventNoType.composedPath();\n }\n return _createEventPath(eventNoType);\n}\nfunction _addSafePassiveEventListener(frameworkOverrides, eElement, event, listener) {\n const isPassive = _includes(PASSIVE_EVENTS, event);\n const options = isPassive ? { passive: true } : void 0;\n if (frameworkOverrides && frameworkOverrides.addEventListener) {\n frameworkOverrides.addEventListener(eElement, event, listener, options);\n }\n}\n\n// community-modules/core/src/context/beanStub.ts\nvar BeanStub = class {\n constructor() {\n // not named context to allow children to use 'context' as a variable name\n this.destroyFunctions = [];\n this.destroyed = false;\n // for vue 3 - prevents Vue from trying to make this (and obviously any sub classes) from being reactive\n // prevents vue from creating proxies for created objects and prevents identity related issues\n this.__v_skip = true;\n this.propertyListenerId = 0;\n // Enable multiple grid properties to be updated together by the user but only trigger shared logic once.\n // Closely related to logic in ComponentUtil.ts\n this.lastChangeSetIdLookup = {};\n this.isAlive = () => !this.destroyed;\n }\n preWireBeans(beans) {\n this.frameworkOverrides = beans.frameworkOverrides;\n this.stubContext = beans.context;\n this.eventService = beans.eventService;\n this.gos = beans.gos;\n this.localeService = beans.localeService;\n }\n // this was a test constructor niall built, when active, it prints after 5 seconds all beans/components that are\n // not destroyed. to use, create a new grid, then api.destroy() before 5 seconds. then anything that gets printed\n // points to a bean or component that was not properly disposed of.\n // constructor() {\n // setTimeout(()=> {\n // if (this.isAlive()) {\n // let prototype: any = Object.getPrototypeOf(this);\n // const constructor: any = prototype.constructor;\n // const constructorString = constructor.toString();\n // const beanName = constructorString.substring(9, constructorString.indexOf(\"(\"));\n // console.log('is alive ' + beanName);\n // }\n // }, 5000);\n // }\n // CellComp and GridComp and override this because they get the FrameworkOverrides from the Beans bean\n getFrameworkOverrides() {\n return this.frameworkOverrides;\n }\n destroy() {\n for (let i = 0; i < this.destroyFunctions.length; i++) {\n this.destroyFunctions[i]();\n }\n this.destroyFunctions.length = 0;\n this.destroyed = true;\n this.dispatchLocalEvent({ type: \"destroyed\" });\n }\n // The typing of AgEventListener is not ideal, but it's the best we can do at the moment to enable\n // eventService to have the best typing at the expense of BeanStub local events\n /** Add a local event listener against this BeanStub */\n addEventListener(eventType, listener, async) {\n if (!this.localEventService) {\n this.localEventService = new LocalEventService();\n }\n this.localEventService.addEventListener(eventType, listener, async);\n }\n /** Remove a local event listener from this BeanStub */\n removeEventListener(eventType, listener, async) {\n if (this.localEventService) {\n this.localEventService.removeEventListener(eventType, listener, async);\n }\n }\n dispatchLocalEvent(event) {\n if (this.localEventService) {\n this.localEventService.dispatchEvent(event);\n }\n }\n addManagedElementListeners(object, handlers) {\n return this._setupListeners(object, handlers);\n }\n addManagedEventListeners(handlers) {\n return this._setupListeners(this.eventService, handlers);\n }\n addManagedListeners(object, handlers) {\n return this._setupListeners(object, handlers);\n }\n _setupListeners(object, handlers) {\n const destroyFuncs = [];\n for (const k in handlers) {\n const handler = handlers[k];\n if (handler) {\n destroyFuncs.push(this._setupListener(object, k, handler));\n }\n }\n return destroyFuncs;\n }\n _setupListener(object, event, listener) {\n if (this.destroyed) {\n return () => null;\n }\n if (object instanceof HTMLElement) {\n _addSafePassiveEventListener(this.getFrameworkOverrides(), object, event, listener);\n } else {\n object.addEventListener(event, listener);\n }\n const destroyFunc = () => {\n object.removeEventListener(event, listener);\n return null;\n };\n this.destroyFunctions.push(destroyFunc);\n return () => {\n destroyFunc();\n this.destroyFunctions = this.destroyFunctions.filter((fn) => fn !== destroyFunc);\n return null;\n };\n }\n /**\n * Setup a managed property listener for the given GridOption property.\n * However, stores the destroy function in the beanStub so that if this bean\n * is a component the destroy function will be called when the component is destroyed\n * as opposed to being cleaned up only when the GridOptionsService is destroyed.\n */\n setupGridOptionListener(event, listener) {\n this.gos.addPropertyEventListener(event, listener);\n const destroyFunc = () => {\n this.gos.removePropertyEventListener(event, listener);\n return null;\n };\n this.destroyFunctions.push(destroyFunc);\n return () => {\n destroyFunc();\n this.destroyFunctions = this.destroyFunctions.filter((fn) => fn !== destroyFunc);\n return null;\n };\n }\n /**\n * Setup a managed property listener for the given GridOption property.\n * @param event GridOption property to listen to changes for.\n * @param listener Listener to run when property value changes\n */\n addManagedPropertyListener(event, listener) {\n if (this.destroyed) {\n return () => null;\n }\n return this.setupGridOptionListener(event, listener);\n }\n /**\n * Setup managed property listeners for the given set of GridOption properties.\n * The listener will be run if any of the property changes but will only run once if\n * multiple of the properties change within the same framework lifecycle event.\n * Works on the basis that GridOptionsService updates all properties *before* any property change events are fired.\n * @param events Array of GridOption properties to listen for changes too.\n * @param listener Shared listener to run if any of the properties change\n */\n addManagedPropertyListeners(events, listener) {\n if (this.destroyed) {\n return;\n }\n const eventsKey = events.join(\"-\") + this.propertyListenerId++;\n const wrappedListener = (event) => {\n if (event.changeSet) {\n if (event.changeSet && event.changeSet.id === this.lastChangeSetIdLookup[eventsKey]) {\n return;\n }\n this.lastChangeSetIdLookup[eventsKey] = event.changeSet.id;\n }\n const propertiesChangeEvent = {\n type: \"gridPropertyChanged\",\n changeSet: event.changeSet,\n source: event.source\n };\n listener(propertiesChangeEvent);\n };\n events.forEach((event) => this.setupGridOptionListener(event, wrappedListener));\n }\n addDestroyFunc(func) {\n if (this.isAlive()) {\n this.destroyFunctions.push(func);\n } else {\n func();\n }\n }\n createManagedBean(bean, context) {\n const res = this.createBean(bean, context);\n this.addDestroyFunc(this.destroyBean.bind(this, bean, context));\n return res;\n }\n createBean(bean, context, afterPreCreateCallback) {\n return (context || this.stubContext).createBean(bean, afterPreCreateCallback);\n }\n /**\n * Destroys a bean and returns undefined to support destruction and clean up in a single line.\n * this.dateComp = this.context.destroyBean(this.dateComp);\n */\n destroyBean(bean, context) {\n return (context || this.stubContext).destroyBean(bean);\n }\n /**\n * Destroys an array of beans and returns an empty array to support destruction and clean up in a single line.\n * this.dateComps = this.context.destroyBeans(this.dateComps);\n */\n destroyBeans(beans, context) {\n return (context || this.stubContext).destroyBeans(beans);\n }\n};\n\n// community-modules/core/src/entities/agProvidedColumnGroup.ts\nfunction isProvidedColumnGroup(col) {\n return col instanceof AgProvidedColumnGroup;\n}\nvar AgProvidedColumnGroup = class extends BeanStub {\n constructor(colGroupDef, groupId, padding, level) {\n super();\n this.isColumn = false;\n this.expandable = false;\n // used by React (and possibly other frameworks) as key for rendering. also used to\n // identify old vs new columns for destroying cols when no longer used.\n this.instanceId = getNextColInstanceId();\n this.expandableListenerRemoveCallback = null;\n this.colGroupDef = colGroupDef;\n this.groupId = groupId;\n this.expanded = !!colGroupDef && !!colGroupDef.openByDefault;\n this.padding = padding;\n this.level = level;\n }\n destroy() {\n if (this.expandableListenerRemoveCallback) {\n this.reset(null, void 0);\n }\n super.destroy();\n }\n reset(colGroupDef, level) {\n this.colGroupDef = colGroupDef;\n this.level = level;\n this.originalParent = null;\n if (this.expandableListenerRemoveCallback) {\n this.expandableListenerRemoveCallback();\n }\n this.children = void 0;\n this.expandable = void 0;\n }\n getInstanceId() {\n return this.instanceId;\n }\n setOriginalParent(originalParent) {\n this.originalParent = originalParent;\n }\n getOriginalParent() {\n return this.originalParent;\n }\n getLevel() {\n return this.level;\n }\n isVisible() {\n if (this.children) {\n return this.children.some((child) => child.isVisible());\n }\n return false;\n }\n isPadding() {\n return this.padding;\n }\n setExpanded(expanded) {\n this.expanded = expanded === void 0 ? false : expanded;\n this.dispatchLocalEvent({ type: \"expandedChanged\" });\n }\n isExpandable() {\n return this.expandable;\n }\n isExpanded() {\n return this.expanded;\n }\n getGroupId() {\n return this.groupId;\n }\n getId() {\n return this.getGroupId();\n }\n setChildren(children) {\n this.children = children;\n }\n getChildren() {\n return this.children;\n }\n getColGroupDef() {\n return this.colGroupDef;\n }\n getLeafColumns() {\n const result = [];\n this.addLeafColumns(result);\n return result;\n }\n addLeafColumns(leafColumns) {\n if (!this.children) {\n return;\n }\n this.children.forEach((child) => {\n if (isColumn(child)) {\n leafColumns.push(child);\n } else if (isProvidedColumnGroup(child)) {\n child.addLeafColumns(leafColumns);\n }\n });\n }\n getColumnGroupShow() {\n const colGroupDef = this.colGroupDef;\n if (!colGroupDef) {\n return;\n }\n return colGroupDef.columnGroupShow;\n }\n // need to check that this group has at least one col showing when both expanded and contracted.\n // if not, then we don't allow expanding and contracting on this group\n setupExpandable() {\n this.setExpandable();\n if (this.expandableListenerRemoveCallback) {\n this.expandableListenerRemoveCallback();\n }\n const listener = this.onColumnVisibilityChanged.bind(this);\n this.getLeafColumns().forEach((col) => col.addEventListener(\"visibleChanged\", listener));\n this.expandableListenerRemoveCallback = () => {\n this.getLeafColumns().forEach((col) => col.removeEventListener(\"visibleChanged\", listener));\n this.expandableListenerRemoveCallback = null;\n };\n }\n setExpandable() {\n if (this.isPadding()) {\n return;\n }\n let atLeastOneShowingWhenOpen = false;\n let atLeastOneShowingWhenClosed = false;\n let atLeastOneChangeable = false;\n const children = this.findChildrenRemovingPadding();\n for (let i = 0, j = children.length; i < j; i++) {\n const abstractColumn = children[i];\n if (!abstractColumn.isVisible()) {\n continue;\n }\n const headerGroupShow = abstractColumn.getColumnGroupShow();\n if (headerGroupShow === \"open\") {\n atLeastOneShowingWhenOpen = true;\n atLeastOneChangeable = true;\n } else if (headerGroupShow === \"closed\") {\n atLeastOneShowingWhenClosed = true;\n atLeastOneChangeable = true;\n } else {\n atLeastOneShowingWhenOpen = true;\n atLeastOneShowingWhenClosed = true;\n }\n }\n const expandable = atLeastOneShowingWhenOpen && atLeastOneShowingWhenClosed && atLeastOneChangeable;\n if (this.expandable !== expandable) {\n this.expandable = expandable;\n this.dispatchLocalEvent({ type: \"expandableChanged\" });\n }\n }\n findChildrenRemovingPadding() {\n const res = [];\n const process = (items) => {\n items.forEach((item) => {\n const skipBecausePadding = isProvidedColumnGroup(item) && item.isPadding();\n if (skipBecausePadding) {\n process(item.children);\n } else {\n res.push(item);\n }\n });\n };\n process(this.children);\n return res;\n }\n onColumnVisibilityChanged() {\n this.setExpandable();\n }\n};\n\n// community-modules/core/src/columns/controlsColService.ts\nvar CONTROLS_COLUMN_ID_PREFIX = \"ag-Grid-ControlsColumn\";\nvar ControlsColService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"controlsColService\";\n }\n createControlsCols() {\n const { gos } = this;\n const so = gos.get(\"rowSelection\");\n if (!so || typeof so !== \"object\") {\n return [];\n }\n const checkboxes = _getCheckboxes(so);\n const headerCheckbox = _getHeaderCheckbox(so);\n if (checkboxes || headerCheckbox) {\n const selectionColumnDef = gos.get(\"selectionColumnDef\");\n const enableRTL = gos.get(\"enableRtl\");\n const colDef = {\n // overridable properties\n maxWidth: 50,\n resizable: false,\n suppressHeaderMenuButton: true,\n sortable: false,\n suppressMovable: true,\n lockPosition: enableRTL ? \"right\" : \"left\",\n comparator(valueA, valueB, nodeA, nodeB) {\n const aSelected = nodeA.isSelected();\n const bSelected = nodeB.isSelected();\n return aSelected && bSelected ? 0 : aSelected ? 1 : -1;\n },\n editable: false,\n suppressFillHandle: true,\n // overrides\n ...selectionColumnDef,\n // non-overridable properties\n colId: `${CONTROLS_COLUMN_ID_PREFIX}`\n };\n const col = new AgColumn(colDef, null, colDef.colId, false);\n this.createBean(col);\n return [col];\n }\n return [];\n }\n};\n\n// community-modules/core/src/columns/columnUtils.ts\nvar GROUP_AUTO_COLUMN_ID = \"ag-Grid-AutoColumn\";\nfunction getColumnsFromTree(rootColumns) {\n const result = [];\n const recursiveFindColumns = (childColumns) => {\n for (let i = 0; i < childColumns.length; i++) {\n const child = childColumns[i];\n if (isColumn(child)) {\n result.push(child);\n } else if (isProvidedColumnGroup(child)) {\n recursiveFindColumns(child.getChildren());\n }\n }\n };\n recursiveFindColumns(rootColumns);\n return result;\n}\nfunction getWidthOfColsInList(columnList) {\n return columnList.reduce((width, col) => width + col.getActualWidth(), 0);\n}\nfunction destroyColumnTree(context, oldTree, newTree) {\n const oldObjectsById = {};\n if (!oldTree) {\n return;\n }\n depthFirstOriginalTreeSearch(null, oldTree, (child) => {\n oldObjectsById[child.getInstanceId()] = child;\n });\n if (newTree) {\n depthFirstOriginalTreeSearch(null, newTree, (child) => {\n oldObjectsById[child.getInstanceId()] = null;\n });\n }\n const colsToDestroy = Object.values(oldObjectsById).filter((item) => item != null);\n context.destroyBeans(colsToDestroy);\n}\nfunction isColumnGroupAutoCol(col) {\n const colId = col.getId();\n return colId.startsWith(GROUP_AUTO_COLUMN_ID);\n}\nfunction isColumnControlsCol(col) {\n return col.getColId().startsWith(CONTROLS_COLUMN_ID_PREFIX);\n}\nfunction convertColumnTypes(type) {\n let typeKeys = [];\n if (type instanceof Array) {\n const invalidArray = type.some((a) => typeof a !== \"string\");\n if (invalidArray) {\n _warnOnce(\"if colDef.type is supplied an array it should be of type 'string[]'\");\n } else {\n typeKeys = type;\n }\n } else if (typeof type === \"string\") {\n typeKeys = type.split(\",\");\n } else {\n _warnOnce(\"colDef.type should be of type 'string' | 'string[]'\");\n }\n return typeKeys;\n}\n\n// community-modules/core/src/misc/frameworkEventListenerService.ts\nvar FrameworkEventListenerService = class {\n constructor(frameworkOverrides) {\n this.frameworkOverrides = frameworkOverrides;\n // Map from user listener to wrapped listener so we can remove listener provided by user\n this.wrappedListeners = /* @__PURE__ */ new Map();\n this.wrappedGlobalListeners = /* @__PURE__ */ new Map();\n }\n wrap(userListener) {\n let listener = userListener;\n if (this.frameworkOverrides.shouldWrapOutgoing) {\n listener = (event) => {\n this.frameworkOverrides.wrapOutgoing(() => userListener(event));\n };\n this.wrappedListeners.set(userListener, listener);\n }\n return listener;\n }\n wrapGlobal(userListener) {\n let listener = userListener;\n if (this.frameworkOverrides.shouldWrapOutgoing) {\n listener = (eventType, event) => {\n this.frameworkOverrides.wrapOutgoing(() => userListener(eventType, event));\n };\n this.wrappedGlobalListeners.set(userListener, listener);\n }\n return listener;\n }\n unwrap(userListener) {\n return this.wrappedListeners.get(userListener) ?? userListener;\n }\n unwrapGlobal(userListener) {\n return this.wrappedGlobalListeners.get(userListener) ?? userListener;\n }\n};\n\n// community-modules/core/src/utils/object.ts\nvar SKIP_JS_BUILTINS = /* @__PURE__ */ new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nfunction _iterateObject(object, callback) {\n if (object == null) {\n return;\n }\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; i++) {\n callback(i.toString(), object[i]);\n }\n return;\n }\n for (const [key, value] of Object.entries(object)) {\n callback(key, value);\n }\n}\nfunction _cloneObject(object) {\n const copy = {};\n const keys = Object.keys(object);\n for (let i = 0; i < keys.length; i++) {\n if (SKIP_JS_BUILTINS.has(keys[i])) {\n continue;\n }\n const key = keys[i];\n const value = object[key];\n copy[key] = value;\n }\n return copy;\n}\nfunction _deepCloneDefinition(object, keysToSkip) {\n if (!object) {\n return;\n }\n const obj = object;\n const res = {};\n Object.keys(obj).forEach((key) => {\n if (keysToSkip && keysToSkip.indexOf(key) >= 0 || SKIP_JS_BUILTINS.has(key)) {\n return;\n }\n const value = obj[key];\n const sourceIsSimpleObject = _isNonNullObject(value) && value.constructor === Object;\n if (sourceIsSimpleObject) {\n res[key] = _deepCloneDefinition(value);\n } else {\n res[key] = value;\n }\n });\n return res;\n}\nfunction _getAllValuesInObject(obj) {\n if (!obj) {\n return [];\n }\n const anyObject = Object;\n if (typeof anyObject.values === \"function\") {\n return anyObject.values(obj);\n }\n const ret = [];\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj.propertyIsEnumerable(key)) {\n ret.push(obj[key]);\n }\n }\n return ret;\n}\nfunction _mergeDeep(dest, source, copyUndefined = true, makeCopyOfSimpleObjects = false) {\n if (!_exists(source)) {\n return;\n }\n _iterateObject(source, (key, sourceValue) => {\n if (SKIP_JS_BUILTINS.has(key)) {\n return;\n }\n let destValue = dest[key];\n if (destValue === sourceValue) {\n return;\n }\n if (makeCopyOfSimpleObjects) {\n const objectIsDueToBeCopied = destValue == null && sourceValue != null;\n if (objectIsDueToBeCopied) {\n const sourceIsSimpleObject = typeof sourceValue === \"object\" && sourceValue.constructor === Object;\n const dontCopy = sourceIsSimpleObject;\n if (dontCopy) {\n destValue = {};\n dest[key] = destValue;\n }\n }\n }\n if (_isNonNullObject(sourceValue) && _isNonNullObject(destValue) && !Array.isArray(destValue)) {\n _mergeDeep(destValue, sourceValue, copyUndefined, makeCopyOfSimpleObjects);\n } else if (copyUndefined || sourceValue !== void 0) {\n dest[key] = sourceValue;\n }\n });\n}\nfunction _getValueUsingField(data, field, fieldContainsDots) {\n if (!field || !data) {\n return;\n }\n if (!fieldContainsDots) {\n return data[field];\n }\n const fields = field.split(\".\");\n let currentObject = data;\n for (let i = 0; i < fields.length; i++) {\n if (currentObject == null) {\n return void 0;\n }\n currentObject = currentObject[fields[i]];\n }\n return currentObject;\n}\nfunction _isNonNullObject(value) {\n return typeof value === \"object\" && value !== null;\n}\n\n// community-modules/core/src/entities/agColumn.ts\nvar COL_DEF_DEFAULTS = {\n resizable: true,\n sortable: true\n};\nvar instanceIdSequence = 0;\nfunction getNextColInstanceId() {\n return instanceIdSequence++;\n}\nfunction isColumn(col) {\n return col instanceof AgColumn;\n}\nvar AgColumn = class extends BeanStub {\n constructor(colDef, userProvidedColDef, colId, primary) {\n super();\n this.isColumn = true;\n // used by React (and possibly other frameworks) as key for rendering. also used to\n // identify old vs new columns for destroying cols when no longer used.\n this.instanceId = getNextColInstanceId();\n // The measured height of this column's header when autoHeaderHeight is enabled\n this.autoHeaderHeight = null;\n this.moving = false;\n this.menuVisible = false;\n this.lastLeftPinned = false;\n this.firstRightPinned = false;\n this.filterActive = false;\n this.columnEventService = new LocalEventService();\n this.tooltipEnabled = false;\n this.rowGroupActive = false;\n this.pivotActive = false;\n this.aggregationActive = false;\n this.colDef = colDef;\n this.userProvidedColDef = userProvidedColDef;\n this.colId = colId;\n this.primary = primary;\n this.setState(colDef);\n }\n wireBeans(beans) {\n this.columnHoverService = beans.columnHoverService;\n }\n getInstanceId() {\n return this.instanceId;\n }\n setState(colDef) {\n if (colDef.sort !== void 0) {\n if (colDef.sort === \"asc\" || colDef.sort === \"desc\") {\n this.sort = colDef.sort;\n }\n } else {\n if (colDef.initialSort === \"asc\" || colDef.initialSort === \"desc\") {\n this.sort = colDef.initialSort;\n }\n }\n const sortIndex = colDef.sortIndex;\n const initialSortIndex = colDef.initialSortIndex;\n if (sortIndex !== void 0) {\n if (sortIndex !== null) {\n this.sortIndex = sortIndex;\n }\n } else {\n if (initialSortIndex !== null) {\n this.sortIndex = initialSortIndex;\n }\n }\n const hide = colDef.hide;\n const initialHide = colDef.initialHide;\n if (hide !== void 0) {\n this.visible = !hide;\n } else {\n this.visible = !initialHide;\n }\n if (colDef.pinned !== void 0) {\n this.setPinned(colDef.pinned);\n } else {\n this.setPinned(colDef.initialPinned);\n }\n const flex = colDef.flex;\n const initialFlex = colDef.initialFlex;\n if (flex !== void 0) {\n this.flex = flex;\n } else if (initialFlex !== void 0) {\n this.flex = initialFlex;\n }\n }\n // gets called when user provides an alternative colDef, eg\n setColDef(colDef, userProvidedColDef, source) {\n this.colDef = colDef;\n this.userProvidedColDef = userProvidedColDef;\n this.initMinAndMaxWidths();\n this.initDotNotation();\n this.initTooltip();\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"colDefChanged\", source));\n }\n getUserProvidedColDef() {\n return this.userProvidedColDef;\n }\n setParent(parent) {\n this.parent = parent;\n }\n getParent() {\n return this.parent;\n }\n setOriginalParent(originalParent) {\n this.originalParent = originalParent;\n }\n getOriginalParent() {\n return this.originalParent;\n }\n // this is done after constructor as it uses gridOptionsService\n postConstruct() {\n this.initMinAndMaxWidths();\n this.resetActualWidth(\"gridInitializing\");\n this.initDotNotation();\n this.initTooltip();\n }\n initDotNotation() {\n const suppressDotNotation = this.gos.get(\"suppressFieldDotNotation\");\n this.fieldContainsDots = _exists(this.colDef.field) && this.colDef.field.indexOf(\".\") >= 0 && !suppressDotNotation;\n this.tooltipFieldContainsDots = _exists(this.colDef.tooltipField) && this.colDef.tooltipField.indexOf(\".\") >= 0 && !suppressDotNotation;\n }\n initMinAndMaxWidths() {\n const colDef = this.colDef;\n this.minWidth = colDef.minWidth ?? this.gos.environment.getDefaultColumnMinWidth();\n this.maxWidth = colDef.maxWidth ?? Number.MAX_SAFE_INTEGER;\n }\n initTooltip() {\n this.tooltipEnabled = _exists(this.colDef.tooltipField) || _exists(this.colDef.tooltipValueGetter) || _exists(this.colDef.tooltipComponent);\n }\n resetActualWidth(source) {\n const initialWidth = this.calculateColInitialWidth(this.colDef);\n this.setActualWidth(initialWidth, source, true);\n }\n calculateColInitialWidth(colDef) {\n let width;\n const colDefWidth = _attrToNumber(colDef.width);\n const colDefInitialWidth = _attrToNumber(colDef.initialWidth);\n if (colDefWidth != null) {\n width = colDefWidth;\n } else if (colDefInitialWidth != null) {\n width = colDefInitialWidth;\n } else {\n width = 200;\n }\n return Math.max(Math.min(width, this.maxWidth), this.minWidth);\n }\n isEmptyGroup() {\n return false;\n }\n isRowGroupDisplayed(colId) {\n if (_missing(this.colDef) || _missing(this.colDef.showRowGroup)) {\n return false;\n }\n const showingAllGroups = this.colDef.showRowGroup === true;\n const showingThisGroup = this.colDef.showRowGroup === colId;\n return showingAllGroups || showingThisGroup;\n }\n isPrimary() {\n return this.primary;\n }\n isFilterAllowed() {\n const filterDefined = !!this.colDef.filter;\n return filterDefined;\n }\n isFieldContainsDots() {\n return this.fieldContainsDots;\n }\n isTooltipEnabled() {\n return this.tooltipEnabled;\n }\n isTooltipFieldContainsDots() {\n return this.tooltipFieldContainsDots;\n }\n getHighlighted() {\n return this.highlighted;\n }\n addEventListener(eventType, userListener) {\n if (this.frameworkOverrides.shouldWrapOutgoing && !this.frameworkEventListenerService) {\n this.columnEventService.setFrameworkOverrides(this.frameworkOverrides);\n this.frameworkEventListenerService = new FrameworkEventListenerService(this.frameworkOverrides);\n }\n const listener = this.frameworkEventListenerService?.wrap(userListener) ?? userListener;\n this.columnEventService.addEventListener(eventType, listener);\n }\n removeEventListener(eventType, userListener) {\n const listener = this.frameworkEventListenerService?.unwrap(userListener) ?? userListener;\n this.columnEventService.removeEventListener(eventType, listener);\n }\n createColumnFunctionCallbackParams(rowNode) {\n return this.gos.addGridCommonParams({\n node: rowNode,\n data: rowNode.data,\n column: this,\n colDef: this.colDef\n });\n }\n isSuppressNavigable(rowNode) {\n if (typeof this.colDef.suppressNavigable === \"boolean\") {\n return this.colDef.suppressNavigable;\n }\n if (typeof this.colDef.suppressNavigable === \"function\") {\n const params = this.createColumnFunctionCallbackParams(rowNode);\n const userFunc = this.colDef.suppressNavigable;\n return userFunc(params);\n }\n return false;\n }\n isCellEditable(rowNode) {\n if (rowNode.group) {\n if (this.gos.get(\"treeData\")) {\n if (!rowNode.data && !this.gos.get(\"enableGroupEdit\")) {\n return false;\n }\n } else {\n if (!this.gos.get(\"enableGroupEdit\")) {\n return false;\n }\n }\n }\n return this.isColumnFunc(rowNode, this.colDef.editable);\n }\n isSuppressFillHandle() {\n return !!this.colDef.suppressFillHandle;\n }\n isAutoHeight() {\n return !!this.colDef.autoHeight;\n }\n isAutoHeaderHeight() {\n return !!this.colDef.autoHeaderHeight;\n }\n isRowDrag(rowNode) {\n return this.isColumnFunc(rowNode, this.colDef.rowDrag);\n }\n isDndSource(rowNode) {\n return this.isColumnFunc(rowNode, this.colDef.dndSource);\n }\n isCellCheckboxSelection(rowNode) {\n const so = this.gos.get(\"rowSelection\");\n if (so && typeof so !== \"string\") {\n const checkbox = isColumnControlsCol(this) && _getCheckboxes(so);\n return this.isColumnFunc(rowNode, checkbox);\n } else {\n return this.isColumnFunc(rowNode, this.colDef.checkboxSelection);\n }\n }\n isSuppressPaste(rowNode) {\n return this.isColumnFunc(rowNode, this.colDef ? this.colDef.suppressPaste : null);\n }\n isResizable() {\n return !!this.getColDefValue(\"resizable\");\n }\n /** Get value from ColDef or default if it exists. */\n getColDefValue(key) {\n return this.colDef[key] ?? COL_DEF_DEFAULTS[key];\n }\n isColumnFunc(rowNode, value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"function\") {\n const params = this.createColumnFunctionCallbackParams(rowNode);\n const editableFunc = value;\n return editableFunc(params);\n }\n return false;\n }\n setHighlighted(highlighted) {\n if (this.highlighted === highlighted) {\n return;\n }\n this.highlighted = highlighted;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"headerHighlightChanged\", \"uiColumnMoved\"));\n }\n setMoving(moving, source) {\n this.moving = moving;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"movingChanged\", source));\n }\n createColumnEvent(type, source) {\n return this.gos.addGridCommonParams({\n type,\n column: this,\n columns: [this],\n source\n });\n }\n isMoving() {\n return this.moving;\n }\n getSort() {\n return this.sort;\n }\n setSort(sort, source) {\n if (this.sort !== sort) {\n this.sort = sort;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"sortChanged\", source));\n }\n this.dispatchStateUpdatedEvent(\"sort\");\n }\n isSortable() {\n return !!this.getColDefValue(\"sortable\");\n }\n /** @deprecated v32 use col.getSort() === 'asc */\n isSortAscending() {\n return this.sort === \"asc\";\n }\n /** @deprecated v32 use col.getSort() === 'desc */\n isSortDescending() {\n return this.sort === \"desc\";\n }\n /** @deprecated v32 use col.getSort() === undefined */\n isSortNone() {\n return _missing(this.sort);\n }\n /** @deprecated v32 use col.getSort() !== undefined */\n isSorting() {\n return _exists(this.sort);\n }\n getSortIndex() {\n return this.sortIndex;\n }\n setSortIndex(sortOrder) {\n this.sortIndex = sortOrder;\n this.dispatchStateUpdatedEvent(\"sortIndex\");\n }\n setMenuVisible(visible, source) {\n if (this.menuVisible !== visible) {\n this.menuVisible = visible;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"menuVisibleChanged\", source));\n }\n }\n isMenuVisible() {\n return this.menuVisible;\n }\n setAggFunc(aggFunc) {\n this.aggFunc = aggFunc;\n this.dispatchStateUpdatedEvent(\"aggFunc\");\n }\n getAggFunc() {\n return this.aggFunc;\n }\n getLeft() {\n return this.left;\n }\n getOldLeft() {\n return this.oldLeft;\n }\n getRight() {\n return this.left + this.actualWidth;\n }\n setLeft(left, source) {\n this.oldLeft = this.left;\n if (this.left !== left) {\n this.left = left;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"leftChanged\", source));\n }\n }\n isFilterActive() {\n return this.filterActive;\n }\n // additionalEventAttributes is used by provided simple floating filter, so it can add 'floatingFilter=true' to the event\n setFilterActive(active, source, additionalEventAttributes) {\n if (this.filterActive !== active) {\n this.filterActive = active;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"filterActiveChanged\", source));\n }\n const filterChangedEvent = this.createColumnEvent(\"filterChanged\", source);\n if (additionalEventAttributes) {\n _mergeDeep(filterChangedEvent, additionalEventAttributes);\n }\n this.columnEventService.dispatchEvent(filterChangedEvent);\n }\n isHovered() {\n return this.columnHoverService.isHovered(this);\n }\n setPinned(pinned) {\n if (pinned === true || pinned === \"left\") {\n this.pinned = \"left\";\n } else if (pinned === \"right\") {\n this.pinned = \"right\";\n } else {\n this.pinned = null;\n }\n this.dispatchStateUpdatedEvent(\"pinned\");\n }\n setFirstRightPinned(firstRightPinned, source) {\n if (this.firstRightPinned !== firstRightPinned) {\n this.firstRightPinned = firstRightPinned;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"firstRightPinnedChanged\", source));\n }\n }\n setLastLeftPinned(lastLeftPinned, source) {\n if (this.lastLeftPinned !== lastLeftPinned) {\n this.lastLeftPinned = lastLeftPinned;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"lastLeftPinnedChanged\", source));\n }\n }\n isFirstRightPinned() {\n return this.firstRightPinned;\n }\n isLastLeftPinned() {\n return this.lastLeftPinned;\n }\n isPinned() {\n return this.pinned === \"left\" || this.pinned === \"right\";\n }\n isPinnedLeft() {\n return this.pinned === \"left\";\n }\n isPinnedRight() {\n return this.pinned === \"right\";\n }\n getPinned() {\n return this.pinned;\n }\n setVisible(visible, source) {\n const newValue = visible === true;\n if (this.visible !== newValue) {\n this.visible = newValue;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"visibleChanged\", source));\n }\n this.dispatchStateUpdatedEvent(\"hide\");\n }\n isVisible() {\n return this.visible;\n }\n isSpanHeaderHeight() {\n const colDef = this.getColDef();\n return !colDef.suppressSpanHeaderHeight;\n }\n getColumnGroupPaddingInfo() {\n let parent = this.getParent();\n if (!parent || !parent.isPadding()) {\n return { numberOfParents: 0, isSpanningTotal: false };\n }\n const numberOfParents = parent.getPaddingLevel() + 1;\n let isSpanningTotal = true;\n while (parent) {\n if (!parent.isPadding()) {\n isSpanningTotal = false;\n break;\n }\n parent = parent.getParent();\n }\n return { numberOfParents, isSpanningTotal };\n }\n getColDef() {\n return this.colDef;\n }\n getDefinition() {\n return this.colDef;\n }\n getColumnGroupShow() {\n return this.colDef.columnGroupShow;\n }\n getColId() {\n return this.colId;\n }\n getId() {\n return this.colId;\n }\n getUniqueId() {\n return this.colId;\n }\n getActualWidth() {\n return this.actualWidth;\n }\n getAutoHeaderHeight() {\n return this.autoHeaderHeight;\n }\n /** Returns true if the header height has changed */\n setAutoHeaderHeight(height) {\n const changed = height !== this.autoHeaderHeight;\n this.autoHeaderHeight = height;\n return changed;\n }\n createBaseColDefParams(rowNode) {\n const params = this.gos.addGridCommonParams({\n node: rowNode,\n data: rowNode.data,\n colDef: this.colDef,\n column: this\n });\n return params;\n }\n getColSpan(rowNode) {\n if (_missing(this.colDef.colSpan)) {\n return 1;\n }\n const params = this.createBaseColDefParams(rowNode);\n const colSpan = this.colDef.colSpan(params);\n return Math.max(colSpan, 1);\n }\n getRowSpan(rowNode) {\n if (_missing(this.colDef.rowSpan)) {\n return 1;\n }\n const params = this.createBaseColDefParams(rowNode);\n const rowSpan = this.colDef.rowSpan(params);\n return Math.max(rowSpan, 1);\n }\n setActualWidth(actualWidth, source, silent = false) {\n actualWidth = Math.max(actualWidth, this.minWidth);\n actualWidth = Math.min(actualWidth, this.maxWidth);\n if (this.actualWidth !== actualWidth) {\n this.actualWidth = actualWidth;\n if (this.flex && source !== \"flex\" && source !== \"gridInitializing\") {\n this.flex = null;\n }\n if (!silent) {\n this.fireColumnWidthChangedEvent(source);\n }\n }\n this.dispatchStateUpdatedEvent(\"width\");\n }\n fireColumnWidthChangedEvent(source) {\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"widthChanged\", source));\n }\n isGreaterThanMax(width) {\n return width > this.maxWidth;\n }\n getMinWidth() {\n return this.minWidth;\n }\n getMaxWidth() {\n return this.maxWidth;\n }\n getFlex() {\n return this.flex || 0;\n }\n // this method should only be used by the columnModel to\n // change flex when required by the applyColumnState method.\n setFlex(flex) {\n if (this.flex !== flex) {\n this.flex = flex;\n }\n this.dispatchStateUpdatedEvent(\"flex\");\n }\n setMinimum(source) {\n this.setActualWidth(this.minWidth, source);\n }\n setRowGroupActive(rowGroup, source) {\n if (this.rowGroupActive !== rowGroup) {\n this.rowGroupActive = rowGroup;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnRowGroupChanged\", source));\n }\n this.dispatchStateUpdatedEvent(\"rowGroup\");\n }\n isRowGroupActive() {\n return this.rowGroupActive;\n }\n setPivotActive(pivot, source) {\n if (this.pivotActive !== pivot) {\n this.pivotActive = pivot;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnPivotChanged\", source));\n }\n this.dispatchStateUpdatedEvent(\"pivot\");\n }\n isPivotActive() {\n return this.pivotActive;\n }\n isAnyFunctionActive() {\n return this.isPivotActive() || this.isRowGroupActive() || this.isValueActive();\n }\n isAnyFunctionAllowed() {\n return this.isAllowPivot() || this.isAllowRowGroup() || this.isAllowValue();\n }\n setValueActive(value, source) {\n if (this.aggregationActive !== value) {\n this.aggregationActive = value;\n this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnValueChanged\", source));\n }\n }\n isValueActive() {\n return this.aggregationActive;\n }\n isAllowPivot() {\n return this.colDef.enablePivot === true;\n }\n isAllowValue() {\n return this.colDef.enableValue === true;\n }\n isAllowRowGroup() {\n return this.colDef.enableRowGroup === true;\n }\n dispatchStateUpdatedEvent(key) {\n this.columnEventService.dispatchEvent({\n type: \"columnStateUpdated\",\n key\n });\n }\n};\n\n// community-modules/core/src/entities/defaultColumnTypes.ts\nvar DefaultColumnTypes = {\n numericColumn: {\n headerClass: \"ag-right-aligned-header\",\n cellClass: \"ag-right-aligned-cell\"\n },\n rightAligned: {\n headerClass: \"ag-right-aligned-header\",\n cellClass: \"ag-right-aligned-cell\"\n }\n};\n\n// community-modules/core/src/columns/columnKeyCreator.ts\nvar ColumnKeyCreator = class {\n constructor() {\n this.existingKeys = {};\n }\n addExistingKeys(keys) {\n for (let i = 0; i < keys.length; i++) {\n this.existingKeys[keys[i]] = true;\n }\n }\n getUniqueKey(colId, colField) {\n colId = _toStringOrNull(colId);\n let count = 0;\n while (true) {\n let idToTry;\n if (colId) {\n idToTry = colId;\n if (count !== 0) {\n idToTry += \"_\" + count;\n }\n } else if (colField) {\n idToTry = colField;\n if (count !== 0) {\n idToTry += \"_\" + count;\n }\n } else {\n idToTry = count;\n }\n if (!this.existingKeys[idToTry]) {\n this.existingKeys[idToTry] = true;\n return String(idToTry);\n }\n count++;\n }\n }\n};\n\n// community-modules/core/src/columns/columnFactory.ts\nvar ColumnFactory = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnFactory\";\n }\n wireBeans(beans) {\n this.dataTypeService = beans.dataTypeService;\n }\n createColumnTree(defs, primaryColumns, existingTree, source) {\n const columnKeyCreator = new ColumnKeyCreator();\n const { existingCols, existingGroups, existingColKeys } = this.extractExistingTreeData(existingTree);\n columnKeyCreator.addExistingKeys(existingColKeys);\n const unbalancedTree = this.recursivelyCreateColumns(\n defs,\n 0,\n primaryColumns,\n existingCols,\n columnKeyCreator,\n existingGroups,\n source\n );\n const treeDept = this.findMaxDept(unbalancedTree, 0);\n const columnTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);\n const deptFirstCallback = (child, parent) => {\n if (isProvidedColumnGroup(child)) {\n child.setupExpandable();\n }\n child.setOriginalParent(parent);\n };\n depthFirstOriginalTreeSearch(null, columnTree, deptFirstCallback);\n return {\n columnTree,\n treeDept\n };\n }\n extractExistingTreeData(existingTree) {\n const existingCols = [];\n const existingGroups = [];\n const existingColKeys = [];\n if (existingTree) {\n depthFirstOriginalTreeSearch(null, existingTree, (item) => {\n if (isProvidedColumnGroup(item)) {\n const group = item;\n existingGroups.push(group);\n } else {\n const col = item;\n existingColKeys.push(col.getId());\n existingCols.push(col);\n }\n });\n }\n return { existingCols, existingGroups, existingColKeys };\n }\n /**\n * Inserts dummy group columns in the hierarchy above auto-generated columns\n * in order to ensure auto-generated columns are leaf nodes (and therefore are\n * displayed correctly)\n */\n balanceTreeForAutoCols(autoCols, liveTree) {\n const tree = [];\n const dept = this.findDepth(liveTree);\n autoCols.forEach((col) => {\n let nextChild = col;\n for (let i = dept - 1; i >= 0; i--) {\n const autoGroup = new AgProvidedColumnGroup(null, `FAKE_PATH_${col.getId()}}_${i}`, true, i);\n this.createBean(autoGroup);\n autoGroup.setChildren([nextChild]);\n nextChild.setOriginalParent(autoGroup);\n nextChild = autoGroup;\n }\n if (dept === 0) {\n col.setOriginalParent(null);\n }\n tree.push(nextChild);\n });\n return [tree, dept];\n }\n findDepth(balancedColumnTree) {\n let dept = 0;\n let pointer = balancedColumnTree;\n while (pointer && pointer[0] && isProvidedColumnGroup(pointer[0])) {\n dept++;\n pointer = pointer[0].getChildren();\n }\n return dept;\n }\n balanceColumnTree(unbalancedTree, currentDept, columnDept, columnKeyCreator) {\n const result = [];\n for (let i = 0; i < unbalancedTree.length; i++) {\n const child = unbalancedTree[i];\n if (isProvidedColumnGroup(child)) {\n const originalGroup = child;\n const newChildren = this.balanceColumnTree(\n originalGroup.getChildren(),\n currentDept + 1,\n columnDept,\n columnKeyCreator\n );\n originalGroup.setChildren(newChildren);\n result.push(originalGroup);\n } else {\n let firstPaddedGroup;\n let currentPaddedGroup;\n for (let j = columnDept - 1; j >= currentDept; j--) {\n const newColId = columnKeyCreator.getUniqueKey(null, null);\n const colGroupDefMerged = this.createMergedColGroupDef(null);\n const paddedGroup = new AgProvidedColumnGroup(colGroupDefMerged, newColId, true, currentDept);\n this.createBean(paddedGroup);\n if (currentPaddedGroup) {\n currentPaddedGroup.setChildren([paddedGroup]);\n }\n currentPaddedGroup = paddedGroup;\n if (!firstPaddedGroup) {\n firstPaddedGroup = currentPaddedGroup;\n }\n }\n if (firstPaddedGroup && currentPaddedGroup) {\n result.push(firstPaddedGroup);\n const hasGroups = unbalancedTree.some((leaf) => isProvidedColumnGroup(leaf));\n if (hasGroups) {\n currentPaddedGroup.setChildren([child]);\n continue;\n } else {\n currentPaddedGroup.setChildren(unbalancedTree);\n break;\n }\n }\n result.push(child);\n }\n }\n return result;\n }\n findMaxDept(treeChildren, dept) {\n let maxDeptThisLevel = dept;\n for (let i = 0; i < treeChildren.length; i++) {\n const abstractColumn = treeChildren[i];\n if (isProvidedColumnGroup(abstractColumn)) {\n const originalGroup = abstractColumn;\n const newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);\n if (maxDeptThisLevel < newDept) {\n maxDeptThisLevel = newDept;\n }\n }\n }\n return maxDeptThisLevel;\n }\n recursivelyCreateColumns(defs, level, primaryColumns, existingColsCopy, columnKeyCreator, existingGroups, source) {\n if (!defs)\n return [];\n const result = new Array(defs.length);\n for (let i = 0; i < result.length; i++) {\n const def = defs[i];\n if (this.isColumnGroup(def)) {\n result[i] = this.createColumnGroup(\n primaryColumns,\n def,\n level,\n existingColsCopy,\n columnKeyCreator,\n existingGroups,\n source\n );\n } else {\n result[i] = this.createColumn(\n primaryColumns,\n def,\n existingColsCopy,\n columnKeyCreator,\n source\n );\n }\n }\n return result;\n }\n createColumnGroup(primaryColumns, colGroupDef, level, existingColumns, columnKeyCreator, existingGroups, source) {\n const colGroupDefMerged = this.createMergedColGroupDef(colGroupDef);\n const groupId = columnKeyCreator.getUniqueKey(colGroupDefMerged.groupId || null, null);\n const providedGroup = new AgProvidedColumnGroup(colGroupDefMerged, groupId, false, level);\n this.createBean(providedGroup);\n const existingGroupAndIndex = this.findExistingGroup(colGroupDef, existingGroups);\n if (existingGroupAndIndex) {\n existingGroups.splice(existingGroupAndIndex.idx, 1);\n }\n const existingGroup = existingGroupAndIndex?.group;\n if (existingGroup) {\n providedGroup.setExpanded(existingGroup.isExpanded());\n }\n const children = this.recursivelyCreateColumns(\n colGroupDefMerged.children,\n level + 1,\n primaryColumns,\n existingColumns,\n columnKeyCreator,\n existingGroups,\n source\n );\n providedGroup.setChildren(children);\n return providedGroup;\n }\n createMergedColGroupDef(colGroupDef) {\n const colGroupDefMerged = {};\n Object.assign(colGroupDefMerged, this.gos.get(\"defaultColGroupDef\"));\n Object.assign(colGroupDefMerged, colGroupDef);\n return colGroupDefMerged;\n }\n createColumn(primaryColumns, colDef, existingColsCopy, columnKeyCreator, source) {\n const existingColAndIndex = this.findExistingColumn(colDef, existingColsCopy);\n if (existingColAndIndex) {\n existingColsCopy?.splice(existingColAndIndex.idx, 1);\n }\n let column = existingColAndIndex?.column;\n if (!column) {\n const colId = columnKeyCreator.getUniqueKey(colDef.colId, colDef.field);\n const colDefMerged = this.addColumnDefaultAndTypes(colDef, colId);\n column = new AgColumn(colDefMerged, colDef, colId, primaryColumns);\n this.createBean(column);\n } else {\n const colDefMerged = this.addColumnDefaultAndTypes(colDef, column.getColId());\n column.setColDef(colDefMerged, colDef, source);\n this.applyColumnState(column, colDefMerged, source);\n }\n this.dataTypeService?.addColumnListeners(column);\n return column;\n }\n applyColumnState(column, colDef, source) {\n const flex = _attrToNumber(colDef.flex);\n if (flex !== void 0) {\n column.setFlex(flex);\n }\n const noFlexThisCol = column.getFlex() <= 0;\n if (noFlexThisCol) {\n const width = _attrToNumber(colDef.width);\n if (width != null) {\n column.setActualWidth(width, source);\n } else {\n const widthBeforeUpdate = column.getActualWidth();\n column.setActualWidth(widthBeforeUpdate, source);\n }\n }\n if (colDef.sort !== void 0) {\n if (colDef.sort == \"asc\" || colDef.sort == \"desc\") {\n column.setSort(colDef.sort, source);\n } else {\n column.setSort(void 0, source);\n }\n }\n const sortIndex = _attrToNumber(colDef.sortIndex);\n if (sortIndex !== void 0) {\n column.setSortIndex(sortIndex);\n }\n const hide = _attrToBoolean(colDef.hide);\n if (hide !== void 0) {\n column.setVisible(!hide, source);\n }\n if (colDef.pinned !== void 0) {\n column.setPinned(colDef.pinned);\n }\n }\n findExistingColumn(newColDef, existingColsCopy) {\n if (!existingColsCopy)\n return void 0;\n for (let i = 0; i < existingColsCopy.length; i++) {\n const def = existingColsCopy[i].getUserProvidedColDef();\n if (!def)\n continue;\n const newHasId = newColDef.colId != null;\n if (newHasId) {\n if (existingColsCopy[i].getId() === newColDef.colId) {\n return { idx: i, column: existingColsCopy[i] };\n }\n continue;\n }\n const newHasField = newColDef.field != null;\n if (newHasField) {\n if (def.field === newColDef.field) {\n return { idx: i, column: existingColsCopy[i] };\n }\n continue;\n }\n if (def === newColDef) {\n return { idx: i, column: existingColsCopy[i] };\n }\n }\n return void 0;\n }\n findExistingGroup(newGroupDef, existingGroups) {\n const newHasId = newGroupDef.groupId != null;\n if (!newHasId) {\n return void 0;\n }\n for (let i = 0; i < existingGroups.length; i++) {\n const existingGroup = existingGroups[i];\n const existingDef = existingGroup.getColGroupDef();\n if (!existingDef) {\n continue;\n }\n if (existingGroup.getId() === newGroupDef.groupId) {\n return { idx: i, group: existingGroup };\n }\n }\n return void 0;\n }\n addColumnDefaultAndTypes(colDef, colId) {\n const res = {};\n const defaultColDef = this.gos.get(\"defaultColDef\");\n _mergeDeep(res, defaultColDef, false, true);\n const columnType = this.updateColDefAndGetColumnType(res, colDef, colId);\n if (columnType) {\n this.assignColumnTypes(columnType, res);\n }\n _mergeDeep(res, colDef, false, true);\n const autoGroupColDef = this.gos.get(\"autoGroupColumnDef\");\n const isSortingCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n if (colDef.rowGroup && autoGroupColDef && isSortingCoupled) {\n _mergeDeep(\n res,\n { sort: autoGroupColDef.sort, initialSort: autoGroupColDef.initialSort },\n false,\n true\n );\n }\n this.dataTypeService?.validateColDef(res);\n return res;\n }\n updateColDefAndGetColumnType(colDef, userColDef, colId) {\n const dataTypeDefinitionColumnType = this.dataTypeService?.updateColDefAndGetColumnType(\n colDef,\n userColDef,\n colId\n );\n const columnTypes = userColDef.type ?? dataTypeDefinitionColumnType ?? colDef.type;\n colDef.type = columnTypes;\n return columnTypes ? convertColumnTypes(columnTypes) : void 0;\n }\n assignColumnTypes(typeKeys, colDefMerged) {\n if (!typeKeys.length) {\n return;\n }\n const allColumnTypes = Object.assign({}, DefaultColumnTypes);\n const userTypes = this.gos.get(\"columnTypes\") || {};\n _iterateObject(userTypes, (key, value) => {\n if (key in allColumnTypes) {\n _warnOnce(`the column type '${key}' is a default column type and cannot be overridden.`);\n } else {\n const colType = value;\n if (colType.type) {\n _warnOnce(\n `Column type definitions 'columnTypes' with a 'type' attribute are not supported because a column type cannot refer to another column type. Only column definitions 'columnDefs' can use the 'type' attribute to refer to a column type.`\n );\n }\n allColumnTypes[key] = value;\n }\n });\n typeKeys.forEach((t) => {\n const typeColDef = allColumnTypes[t.trim()];\n if (typeColDef) {\n _mergeDeep(colDefMerged, typeColDef, false, true);\n } else {\n _warnOnce(\"colDef.type '\" + t + \"' does not correspond to defined gridOptions.columnTypes\");\n }\n });\n }\n // if object has children, we assume it's a group\n isColumnGroup(abstractColDef) {\n return abstractColDef.children !== void 0;\n }\n};\nfunction depthFirstOriginalTreeSearch(parent, tree, callback) {\n if (!tree) {\n return;\n }\n for (let i = 0; i < tree.length; i++) {\n const child = tree[i];\n if (isProvidedColumnGroup(child)) {\n depthFirstOriginalTreeSearch(child, child.getChildren(), callback);\n }\n callback(child, parent);\n }\n}\n\n// community-modules/core/src/columns/columnModel.ts\nvar ColumnModel = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnModel\";\n // if pivotMode is on, however pivot results are NOT shown if no pivot columns are set\n this.pivotMode = false;\n this.autoHeightActiveAtLeastOnce = false;\n this.ready = false;\n this.changeEventsDispatching = false;\n // when we're waiting for cell data types to be inferred, we need to defer column resizing\n this.shouldQueueResizeOperations = false;\n this.resizeOperationQueue = [];\n }\n wireBeans(beans) {\n this.context = beans.context;\n this.ctrlsService = beans.ctrlsService;\n this.columnFactory = beans.columnFactory;\n this.columnSizeService = beans.columnSizeService;\n this.visibleColsService = beans.visibleColsService;\n this.columnViewportService = beans.columnViewportService;\n this.pivotResultColsService = beans.pivotResultColsService;\n this.columnAnimationService = beans.columnAnimationService;\n this.autoColService = beans.autoColService;\n this.controlsColService = beans.controlsColService;\n this.valueCache = beans.valueCache;\n this.columnDefFactory = beans.columnDefFactory;\n this.columnApplyStateService = beans.columnApplyStateService;\n this.columnGroupStateService = beans.columnGroupStateService;\n this.eventDispatcher = beans.columnEventDispatcher;\n this.columnMoveService = beans.columnMoveService;\n this.columnAutosizeService = beans.columnAutosizeService;\n this.funcColsService = beans.funcColsService;\n this.quickFilterService = beans.quickFilterService;\n this.showRowGroupColsService = beans.showRowGroupColsService;\n this.environment = beans.environment;\n }\n postConstruct() {\n const pivotMode = this.gos.get(\"pivotMode\");\n if (this.isPivotSettingAllowed(pivotMode)) {\n this.pivotMode = pivotMode;\n }\n this.addManagedPropertyListeners(\n [\"groupDisplayType\", \"treeData\", \"treeDataDisplayType\", \"groupHideOpenParents\"],\n (event) => this.refreshAll(convertSourceType(event.source))\n );\n this.addManagedPropertyListener(\"rowSelection\", (event) => {\n this.onSelectionOptionsChanged(event.currentValue, event.previousValue, convertSourceType(event.source));\n });\n this.addManagedPropertyListener(\n \"autoGroupColumnDef\",\n (event) => this.onAutoGroupColumnDefChanged(convertSourceType(event.source))\n );\n this.addManagedPropertyListeners(\n [\"defaultColDef\", \"defaultColGroupDef\", \"columnTypes\", \"suppressFieldDotNotation\"],\n (event) => this.recreateColumnDefs(convertSourceType(event.source))\n );\n this.addManagedPropertyListener(\n \"pivotMode\",\n (event) => this.setPivotMode(this.gos.get(\"pivotMode\"), convertSourceType(event.source))\n );\n this.addManagedEventListeners({ firstDataRendered: () => this.onFirstDataRendered() });\n }\n // called from SyncService, when grid has finished initialising\n createColsFromColDefs(source) {\n const dispatchEventsFunc = this.colDefs ? this.columnApplyStateService.compareColumnStatesAndDispatchEvents(source) : void 0;\n this.valueCache.expire();\n const oldCols = this.colDefCols?.list;\n const oldTree = this.colDefCols?.tree;\n const newTree = this.columnFactory.createColumnTree(this.colDefs, true, oldTree, source);\n destroyColumnTree(this.context, this.colDefCols?.tree, newTree.columnTree);\n const tree = newTree.columnTree;\n const treeDepth = newTree.treeDept;\n const list = getColumnsFromTree(tree);\n const map = {};\n list.forEach((col) => map[col.getId()] = col);\n this.colDefCols = { tree, treeDepth, list, map };\n this.funcColsService.extractCols(source, oldCols);\n this.ready = true;\n this.refreshCols(true);\n this.visibleColsService.refresh(source);\n this.columnViewportService.checkViewportColumns();\n this.eventDispatcher.everythingChanged(source);\n if (dispatchEventsFunc) {\n this.changeEventsDispatching = true;\n dispatchEventsFunc();\n this.changeEventsDispatching = false;\n }\n this.eventDispatcher.newColumnsLoaded(source);\n if (source === \"gridInitializing\") {\n this.columnSizeService.applyAutosizeStrategy();\n }\n }\n // called from: buildAutoGroupColumns (events 'groupDisplayType', 'treeData', 'treeDataDisplayType', 'groupHideOpenParents')\n // createColsFromColDefs (recreateColumnDefs, setColumnsDefs),\n // setPivotMode, applyColumnState,\n // functionColsService.setPrimaryColList, functionColsService.updatePrimaryColList,\n // pivotResultColsService.setPivotResultCols\n refreshCols(newColDefs) {\n if (!this.colDefCols) {\n return;\n }\n const prevColTree = this.cols?.tree;\n this.saveColOrder();\n this.selectCols();\n this.createAutoCols();\n this.addAutoCols();\n this.createControlsCols();\n this.addControlsCols();\n const shouldSortNewColDefs = _shouldMaintainColumnOrder(this.gos, this.showingPivotResult);\n if (!newColDefs || shouldSortNewColDefs) {\n this.restoreColOrder();\n }\n this.positionLockedCols();\n this.showRowGroupColsService?.refresh();\n this.quickFilterService?.refreshQuickFilterCols();\n this.setColSpanActive();\n this.setAutoHeightActive();\n this.visibleColsService.clear();\n this.columnViewportService.clear();\n const dispatchChangedEvent = !_areEqual(prevColTree, this.cols.tree);\n if (dispatchChangedEvent) {\n this.eventDispatcher.gridColumns();\n }\n }\n selectCols() {\n const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n this.showingPivotResult = pivotResultCols != null;\n if (pivotResultCols) {\n const { map, list, tree, treeDepth } = pivotResultCols;\n this.cols = {\n list: list.slice(),\n map: { ...map },\n tree: tree.slice(),\n treeDepth\n };\n const hasSameColumns = pivotResultCols.list.some((col) => this.cols?.map[col.getColId()] !== void 0);\n if (!hasSameColumns) {\n this.lastPivotOrder = null;\n }\n } else {\n const { map, list, tree, treeDepth } = this.colDefCols;\n this.cols = {\n list: list.slice(),\n map: { ...map },\n tree: tree.slice(),\n treeDepth\n };\n }\n }\n getColsToShow() {\n const showAutoGroupAndValuesOnly = this.isPivotMode() && !this.isShowingPivotResult();\n const valueColumns = this.funcColsService.getValueColumns();\n const res = this.cols.list.filter((col) => {\n const isAutoGroupCol = isColumnGroupAutoCol(col);\n if (showAutoGroupAndValuesOnly) {\n const isValueCol = valueColumns && _includes(valueColumns, col);\n return isAutoGroupCol || isValueCol;\n } else {\n return isAutoGroupCol || col.isVisible();\n }\n });\n return res;\n }\n addAutoCols() {\n if (this.autoCols == null) {\n return;\n }\n this.cols.list = this.autoCols.list.concat(this.cols.list);\n this.cols.tree = this.autoCols.tree.concat(this.cols.tree);\n updateColsMap(this.cols);\n }\n createAutoCols() {\n const groupFullWidthRow = _isGroupUseEntireRow(this.gos, this.pivotMode);\n const suppressAutoColumn = this.pivotMode ? this.gos.get(\"pivotSuppressAutoColumn\") : this.isSuppressAutoCol();\n const rowGroupCols = this.funcColsService.getRowGroupColumns();\n const groupingActive = rowGroupCols.length > 0 || this.gos.get(\"treeData\");\n const noAutoCols = !groupingActive || suppressAutoColumn || groupFullWidthRow;\n const destroyPrevious = () => {\n if (this.autoCols) {\n destroyColumnTree(this.context, this.autoCols.tree);\n this.autoCols = null;\n }\n };\n if (noAutoCols || !this.autoColService) {\n destroyPrevious();\n return;\n }\n const list = this.autoColService.createAutoCols(rowGroupCols) ?? [];\n const autoColsSame = areColIdsEqual(list, this.autoCols?.list || null);\n const newTreeDepth = this.cols.treeDepth;\n const oldTreeDepth = this.autoCols ? this.autoCols.treeDepth : -1;\n const treeDeptSame = oldTreeDepth == newTreeDepth;\n if (autoColsSame && treeDeptSame) {\n return;\n }\n destroyPrevious();\n const [tree, treeDepth] = this.columnFactory.balanceTreeForAutoCols(list, this.cols.tree);\n this.autoCols = {\n list,\n tree,\n treeDepth,\n map: {}\n };\n const putAutocolsFirstInList = (cols) => {\n if (!cols) {\n return null;\n }\n const colsFiltered = cols.filter((col) => !isColumnGroupAutoCol(col));\n return [...list, ...colsFiltered];\n };\n this.lastOrder = putAutocolsFirstInList(this.lastOrder);\n this.lastPivotOrder = putAutocolsFirstInList(this.lastPivotOrder);\n }\n createControlsCols() {\n const destroyCollection = () => {\n destroyColumnTree(this.context, this.controlsCols?.tree);\n this.controlsCols = null;\n };\n if (!this.controlsColService) {\n destroyCollection();\n }\n const newTreeDepth = this.cols.treeDepth;\n const oldTreeDepth = this.controlsCols?.treeDepth ?? -1;\n const treeDeptSame = oldTreeDepth == newTreeDepth;\n const list = this.controlsColService?.createControlsCols() ?? [];\n const areSame = areColIdsEqual(list, this.controlsCols?.list ?? []);\n if (areSame && treeDeptSame) {\n return;\n }\n destroyCollection();\n const [tree, treeDepth] = this.columnFactory.balanceTreeForAutoCols(list, this.cols.tree);\n this.controlsCols = {\n list,\n tree,\n treeDepth,\n map: {}\n };\n const putControlscolsFirstInList = (cols) => {\n if (!cols) {\n return null;\n }\n const colsFiltered = cols.filter((col) => !isColumnControlsCol(col));\n return [...list, ...colsFiltered];\n };\n this.lastOrder = putControlscolsFirstInList(this.lastOrder);\n this.lastPivotOrder = putControlscolsFirstInList(this.lastPivotOrder);\n }\n addControlsCols() {\n if (this.controlsCols == null) {\n return;\n }\n this.cols.list = this.controlsCols.list.concat(this.cols.list);\n this.cols.tree = this.controlsCols.tree.concat(this.cols.tree);\n updateColsMap(this.cols);\n }\n // on events 'groupDisplayType', 'treeData', 'treeDataDisplayType', 'groupHideOpenParents'\n refreshAll(source) {\n if (!this.isReady()) {\n return;\n }\n this.refreshCols(false);\n this.visibleColsService.refresh(source);\n }\n setColsVisible(keys, visible = false, source) {\n this.columnApplyStateService.applyColumnState(\n {\n state: keys.map((key) => ({\n colId: typeof key === \"string\" ? key : key.getColId(),\n hide: !visible\n }))\n },\n source\n );\n }\n setColsPinned(keys, pinned, source) {\n if (!this.cols) {\n return;\n }\n if (_missingOrEmpty(keys)) {\n return;\n }\n if (_isDomLayout(this.gos, \"print\")) {\n _warnOnce(`Changing the column pinning status is not allowed with domLayout='print'`);\n return;\n }\n this.columnAnimationService.start();\n let actualPinned;\n if (pinned === true || pinned === \"left\") {\n actualPinned = \"left\";\n } else if (pinned === \"right\") {\n actualPinned = \"right\";\n } else {\n actualPinned = null;\n }\n const updatedCols = [];\n keys.forEach((key) => {\n if (!key) {\n return;\n }\n const column = this.getCol(key);\n if (!column) {\n return;\n }\n if (column.getPinned() !== actualPinned) {\n column.setPinned(actualPinned);\n updatedCols.push(column);\n }\n });\n if (updatedCols.length) {\n this.visibleColsService.refresh(source);\n this.eventDispatcher.columnPinned(updatedCols, source);\n }\n this.columnAnimationService.finish();\n }\n // called by headerRenderer - when a header is opened or closed\n setColumnGroupOpened(key, newValue, source) {\n let keyAsString;\n if (isProvidedColumnGroup(key)) {\n keyAsString = key.getId();\n } else {\n keyAsString = key || \"\";\n }\n this.columnGroupStateService.setColumnGroupState([{ groupId: keyAsString, open: newValue }], source);\n }\n getProvidedColGroup(key) {\n let res = null;\n depthFirstOriginalTreeSearch(null, this.cols?.tree, (node) => {\n if (isProvidedColumnGroup(node)) {\n if (node.getId() === key) {\n res = node;\n }\n }\n });\n return res;\n }\n isColGroupLocked(column) {\n const groupLockGroupColumns = this.gos.get(\"groupLockGroupColumns\");\n if (!column.isRowGroupActive() || groupLockGroupColumns === 0) {\n return false;\n }\n if (groupLockGroupColumns === -1) {\n return true;\n }\n const rowGroupCols = this.funcColsService.getRowGroupColumns();\n const colIndex = rowGroupCols.findIndex((groupCol) => groupCol.getColId() === column.getColId());\n return groupLockGroupColumns > colIndex;\n }\n isSuppressAutoCol() {\n const groupDisplayType = this.gos.get(\"groupDisplayType\");\n const isCustomRowGroups = groupDisplayType === \"custom\";\n if (isCustomRowGroups) {\n return true;\n }\n const treeDataDisplayType = this.gos.get(\"treeDataDisplayType\");\n return treeDataDisplayType === \"custom\";\n }\n setAutoHeightActive() {\n this.autoHeightActive = this.cols.list.some((col) => col.isVisible() && col.isAutoHeight());\n if (this.autoHeightActive) {\n this.autoHeightActiveAtLeastOnce = true;\n const supportedRowModel = _isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos);\n if (!supportedRowModel) {\n _warnOnce(\"autoHeight columns only work with Client Side Row Model and Server Side Row Model.\");\n }\n }\n }\n restoreColOrder() {\n const lastOrder = this.showingPivotResult ? this.lastPivotOrder : this.lastOrder;\n if (!lastOrder) {\n return;\n }\n const lastOrderMapped = new Map(lastOrder.map((col, index) => [col, index]));\n const noColsFound = !this.cols.list.some((col) => lastOrderMapped.has(col));\n if (noColsFound) {\n return;\n }\n const colsMap = new Map(this.cols.list.map((col) => [col, true]));\n const lastOrderFiltered = lastOrder.filter((col) => colsMap.has(col));\n const lastOrderFilteredMap = new Map(lastOrderFiltered.map((col) => [col, true]));\n const missingFromLastOrder = this.cols.list.filter((col) => !lastOrderFilteredMap.has(col));\n const res = lastOrderFiltered.slice();\n missingFromLastOrder.forEach((newCol) => {\n let parent = newCol.getOriginalParent();\n if (!parent) {\n res.push(newCol);\n return;\n }\n const siblings = [];\n while (!siblings.length && parent) {\n const leafCols = parent.getLeafColumns();\n leafCols.forEach((leafCol) => {\n const presentInNewCols = res.indexOf(leafCol) >= 0;\n const notYetInSiblings = siblings.indexOf(leafCol) < 0;\n if (presentInNewCols && notYetInSiblings) {\n siblings.push(leafCol);\n }\n });\n parent = parent.getOriginalParent();\n }\n if (!siblings.length) {\n res.push(newCol);\n return;\n }\n const indexes = siblings.map((col) => res.indexOf(col));\n const lastIndex = Math.max(...indexes);\n _insertIntoArray(res, newCol, lastIndex + 1);\n });\n this.cols.list = res;\n }\n sortColsLikeKeys(colIds) {\n if (this.cols == null) {\n return;\n }\n let newOrder = [];\n const processedColIds = {};\n colIds.forEach((colId) => {\n if (processedColIds[colId]) {\n return;\n }\n const col = this.cols.map[colId];\n if (col) {\n newOrder.push(col);\n processedColIds[colId] = true;\n }\n });\n let autoGroupInsertIndex = 0;\n this.cols.list.forEach((col) => {\n const colId = col.getColId();\n const alreadyProcessed = processedColIds[colId] != null;\n if (alreadyProcessed) {\n return;\n }\n const isAutoGroupCol = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n if (isAutoGroupCol) {\n _insertIntoArray(newOrder, col, autoGroupInsertIndex++);\n } else {\n newOrder.push(col);\n }\n });\n newOrder = this.columnMoveService.placeLockedColumns(newOrder);\n if (!this.columnMoveService.doesMovePassMarryChildren(newOrder)) {\n _warnOnce(\n \"Applying column order broke a group where columns should be married together. Applying new order has been discarded.\"\n );\n return;\n }\n this.cols.list = newOrder;\n }\n // returns the provided cols sorted in same order as they appear in this.cols, eg if this.cols\n // contains [a,b,c,d,e] and col passed is [e,a] then the passed cols are sorted into [a,e]\n sortColsLikeCols(cols) {\n if (!cols || cols.length <= 1) {\n return;\n }\n const notAllColsPresent = cols.filter((c) => this.cols.list.indexOf(c) < 0).length > 0;\n if (notAllColsPresent) {\n return;\n }\n cols.sort((a, b) => {\n const indexA = this.cols.list.indexOf(a);\n const indexB = this.cols.list.indexOf(b);\n return indexA - indexB;\n });\n }\n resetColDefIntoCol(column, source) {\n const userColDef = column.getUserProvidedColDef();\n if (!userColDef) {\n return false;\n }\n const newColDef = this.columnFactory.addColumnDefaultAndTypes(userColDef, column.getColId());\n column.setColDef(newColDef, userColDef, source);\n return true;\n }\n queueResizeOperations() {\n this.shouldQueueResizeOperations = true;\n }\n isShouldQueueResizeOperations() {\n return this.shouldQueueResizeOperations;\n }\n processResizeOperations() {\n this.shouldQueueResizeOperations = false;\n this.resizeOperationQueue.forEach((resizeOperation) => resizeOperation());\n this.resizeOperationQueue = [];\n }\n pushResizeOperation(func) {\n this.resizeOperationQueue.push(func);\n }\n moveInCols(movedColumns, toIndex, source) {\n _moveInArray(this.cols?.list, movedColumns, toIndex);\n this.visibleColsService.refresh(source);\n }\n positionLockedCols() {\n this.cols.list = this.columnMoveService.placeLockedColumns(this.cols.list);\n }\n saveColOrder() {\n if (this.showingPivotResult) {\n this.lastPivotOrder = this.cols?.list;\n } else {\n this.lastOrder = this.cols?.list;\n }\n }\n getColumnDefs() {\n if (!this.colDefCols) {\n return;\n }\n const cols = this.colDefCols.list.slice();\n if (this.showingPivotResult) {\n cols.sort((a, b) => this.lastOrder.indexOf(a) - this.lastOrder.indexOf(b));\n } else if (this.lastOrder) {\n cols.sort((a, b) => this.cols.list.indexOf(a) - this.cols.list.indexOf(b));\n }\n const rowGroupColumns = this.funcColsService.getRowGroupColumns();\n const pivotColumns = this.funcColsService.getPivotColumns();\n return this.columnDefFactory.buildColumnDefs(cols, rowGroupColumns, pivotColumns);\n }\n isShowingPivotResult() {\n return this.showingPivotResult;\n }\n // called by clientSideRowModel.refreshModel\n isChangeEventsDispatching() {\n return this.changeEventsDispatching;\n }\n isColSpanActive() {\n return this.colSpanActive;\n }\n // used by Column Tool Panel\n isProvidedColGroupsPresent() {\n return this.colDefCols?.treeDepth > 0;\n }\n setColSpanActive() {\n this.colSpanActive = this.cols.list.some((col) => col.getColDef().colSpan != null);\n }\n isAutoRowHeightActive() {\n return this.autoHeightActive;\n }\n wasAutoRowHeightEverActive() {\n return this.autoHeightActiveAtLeastOnce;\n }\n // + gridPanel -> for resizing the body and setting top margin\n getHeaderRowCount() {\n return this.cols ? this.cols.treeDepth + 1 : -1;\n }\n isReady() {\n return this.ready;\n }\n isPivotMode() {\n return this.pivotMode;\n }\n setPivotMode(pivotMode, source) {\n if (pivotMode === this.pivotMode || !this.isPivotSettingAllowed(this.pivotMode)) {\n return;\n }\n this.pivotMode = pivotMode;\n if (!this.ready) {\n return;\n }\n this.refreshCols(false);\n this.visibleColsService.refresh(source);\n this.eventDispatcher.pivotModeChanged();\n }\n isPivotSettingAllowed(pivot) {\n if (pivot && this.gos.get(\"treeData\")) {\n _warnOnce(\"Pivot mode not available with treeData.\");\n return false;\n }\n return true;\n }\n // + clientSideRowModel\n isPivotActive() {\n const pivotColumns = this.funcColsService.getPivotColumns();\n return this.pivotMode && !_missingOrEmpty(pivotColumns);\n }\n // called when dataTypes change\n recreateColumnDefs(source) {\n if (!this.cols) {\n return;\n }\n if (this.autoCols) {\n this.autoColService.updateAutoCols(this.autoCols.list, source);\n }\n this.createColsFromColDefs(source);\n }\n setColumnDefs(columnDefs, source) {\n this.colDefs = columnDefs;\n this.createColsFromColDefs(source);\n }\n destroy() {\n destroyColumnTree(this.context, this.colDefCols?.tree);\n destroyColumnTree(this.context, this.autoCols?.tree);\n destroyColumnTree(this.context, this.controlsCols?.tree);\n super.destroy();\n }\n getColTree() {\n return this.cols.tree;\n }\n // + columnSelectPanel\n getColDefColTree() {\n return this.colDefCols.tree;\n }\n // + clientSideRowController -> sorting, building quick filter text\n // + headerRenderer -> sorting (clearing icon)\n getColDefCols() {\n return this.colDefCols?.list ? this.colDefCols.list : null;\n }\n // + moveColumnController\n getCols() {\n return this.cols?.list ?? [];\n }\n // returns colDefCols, pivotResultCols and autoCols\n getAllCols() {\n const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n const pivotResultColsList = pivotResultCols?.list;\n return [\n this.colDefCols?.list ?? [],\n this.autoCols?.list ?? [],\n this.controlsCols?.list ?? [],\n pivotResultColsList ?? []\n ].flat();\n }\n getColsForKeys(keys) {\n if (!keys) {\n return [];\n }\n return keys.map((key) => this.getCol(key)).filter((col) => col != null);\n }\n getColDefCol(key) {\n if (!this.colDefCols?.list) {\n return null;\n }\n return this.getColFromCollection(key, this.colDefCols);\n }\n getCol(key) {\n if (key == null) {\n return null;\n }\n return this.getColFromCollection(key, this.cols);\n }\n getColFromCollection(key, cols) {\n if (cols == null) {\n return null;\n }\n const { map, list } = cols;\n if (typeof key == \"string\" && map[key]) {\n return map[key];\n }\n for (let i = 0; i < list.length; i++) {\n if (columnsMatch(list[i], key)) {\n return list[i];\n }\n }\n return this.getAutoCol(key);\n }\n getAutoCol(key) {\n return this.autoCols?.list.find((groupCol) => columnsMatch(groupCol, key)) ?? null;\n }\n getAutoCols() {\n return this.autoCols?.list ?? null;\n }\n setColHeaderHeight(col, height) {\n const changed = col.setAutoHeaderHeight(height);\n if (changed) {\n if (col.isColumn) {\n this.eventDispatcher.headerHeight(col);\n } else {\n this.eventDispatcher.groupHeaderHeight(col);\n }\n }\n }\n getGroupRowsHeight() {\n const heights = [];\n const headerRowContainerCtrls = this.ctrlsService.getHeaderRowContainerCtrls();\n for (const headerRowContainerCtrl of headerRowContainerCtrls) {\n if (!headerRowContainerCtrl) {\n continue;\n }\n const groupRowCount = headerRowContainerCtrl.getGroupRowCount() || 0;\n for (let i = 0; i < groupRowCount; i++) {\n const headerRowCtrl = headerRowContainerCtrl.getGroupRowCtrlAtIndex(i);\n const currentHeightAtPos = heights[i];\n if (headerRowCtrl) {\n const newHeight = this.getColumnGroupHeaderRowHeight(headerRowCtrl);\n if (currentHeightAtPos == null || newHeight > currentHeightAtPos) {\n heights[i] = newHeight;\n }\n }\n }\n }\n return heights;\n }\n getColumnGroupHeaderRowHeight(headerRowCtrl) {\n const defaultHeight = this.isPivotMode() ? this.getPivotGroupHeaderHeight() : this.getGroupHeaderHeight();\n let displayedHeights = 0;\n const headerRowCellCtrls = headerRowCtrl.getHeaderCtrls();\n for (const headerCellCtrl of headerRowCellCtrls) {\n const column = headerCellCtrl.getColumn();\n if (column.isAutoHeaderHeight()) {\n const height = column.getAutoHeaderHeight();\n if (height != null && height > displayedHeights) {\n displayedHeights = height;\n }\n }\n }\n return Math.max(defaultHeight, displayedHeights);\n }\n getColumnHeaderRowHeight() {\n const defaultHeight = this.isPivotMode() ? this.getPivotHeaderHeight() : this.getHeaderHeight();\n const allDisplayedCols = this.visibleColsService.getAllCols();\n const displayedHeights = allDisplayedCols.filter((col) => col.isAutoHeaderHeight()).map((col) => col.getAutoHeaderHeight() || 0);\n return Math.max(defaultHeight, ...displayedHeights);\n }\n getHeaderHeight() {\n return this.gos.get(\"headerHeight\") ?? this.environment.getDefaultHeaderHeight();\n }\n getFloatingFiltersHeight() {\n return this.gos.get(\"floatingFiltersHeight\") ?? this.getHeaderHeight();\n }\n getGroupHeaderHeight() {\n return this.gos.get(\"groupHeaderHeight\") ?? this.getHeaderHeight();\n }\n getPivotHeaderHeight() {\n return this.gos.get(\"pivotHeaderHeight\") ?? this.getHeaderHeight();\n }\n getPivotGroupHeaderHeight() {\n return this.gos.get(\"pivotGroupHeaderHeight\") ?? this.getGroupHeaderHeight();\n }\n onFirstDataRendered() {\n const autoSizeStrategy = this.gos.get(\"autoSizeStrategy\");\n if (autoSizeStrategy?.type !== \"fitCellContents\") {\n return;\n }\n const { colIds: columns, skipHeader } = autoSizeStrategy;\n setTimeout(() => {\n if (columns) {\n this.columnAutosizeService.autoSizeCols({\n colKeys: columns,\n skipHeader,\n source: \"autosizeColumns\"\n });\n } else {\n this.columnAutosizeService.autoSizeAllColumns(\"autosizeColumns\", skipHeader);\n }\n });\n }\n onAutoGroupColumnDefChanged(source) {\n if (this.autoCols) {\n this.autoColService.updateAutoCols(this.autoCols.list, source);\n }\n }\n onSelectionOptionsChanged(current, prev, source) {\n const prevCheckbox = prev && typeof prev !== \"string\" ? _getCheckboxes(prev) : void 0;\n const currCheckbox = current && typeof current !== \"string\" ? _getCheckboxes(current) : void 0;\n const checkboxHasChanged = prevCheckbox !== currCheckbox;\n const prevHeaderCheckbox = prev && typeof prev !== \"string\" ? _getHeaderCheckbox(prev) : void 0;\n const currHeaderCheckbox = current && typeof current !== \"string\" ? _getHeaderCheckbox(current) : void 0;\n const headerCheckboxHasChanged = prevHeaderCheckbox !== currHeaderCheckbox;\n if (checkboxHasChanged || headerCheckboxHasChanged) {\n this.refreshAll(source);\n }\n }\n};\nfunction convertSourceType(source) {\n return source === \"gridOptionsUpdated\" ? \"gridOptionsChanged\" : source;\n}\nfunction updateColsMap(cols) {\n cols.map = {};\n cols.list.forEach((col) => cols.map[col.getId()] = col);\n}\nfunction columnsMatch(column, key) {\n const columnMatches = column === key;\n const colDefMatches = column.getColDef() === key;\n const idMatches = column.getColId() == key;\n return columnMatches || colDefMatches || idMatches;\n}\nfunction areColIdsEqual(colsA, colsB) {\n return _areEqual(colsA, colsB, (a, b) => a.getColId() === b.getColId());\n}\n\n// community-modules/core/src/columns/columnAutosizeService.ts\nvar ColumnAutosizeService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnAutosizeService\";\n this.timesDelayed = 0;\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.visibleColsService = beans.visibleColsService;\n this.animationFrameService = beans.animationFrameService;\n this.autoWidthCalculator = beans.autoWidthCalculator;\n this.eventDispatcher = beans.columnEventDispatcher;\n this.ctrlsService = beans.ctrlsService;\n this.renderStatusService = beans.renderStatusService;\n }\n autoSizeCols(params) {\n if (this.columnModel.isShouldQueueResizeOperations()) {\n this.columnModel.pushResizeOperation(() => this.autoSizeCols(params));\n return;\n }\n const { colKeys, skipHeader, skipHeaderGroups, stopAtGroup, source = \"api\" } = params;\n this.animationFrameService.flushAllFrames();\n if (this.timesDelayed < 5 && this.renderStatusService && !this.renderStatusService.areHeaderCellsRendered()) {\n this.timesDelayed++;\n setTimeout(() => this.autoSizeCols(params));\n return;\n }\n this.timesDelayed = 0;\n const columnsAutosized = [];\n let changesThisTimeAround = -1;\n const shouldSkipHeader = skipHeader != null ? skipHeader : this.gos.get(\"skipHeaderOnAutoSize\");\n const shouldSkipHeaderGroups = skipHeaderGroups != null ? skipHeaderGroups : shouldSkipHeader;\n while (changesThisTimeAround !== 0) {\n changesThisTimeAround = 0;\n const updatedColumns = [];\n colKeys.forEach((key) => {\n if (!key) {\n return;\n }\n const column = this.columnModel.getCol(key);\n if (!column) {\n return;\n }\n if (columnsAutosized.indexOf(column) >= 0) {\n return;\n }\n const preferredWidth = this.autoWidthCalculator.getPreferredWidthForColumn(column, shouldSkipHeader);\n if (preferredWidth > 0) {\n const newWidth = this.normaliseColumnWidth(column, preferredWidth);\n column.setActualWidth(newWidth, source);\n columnsAutosized.push(column);\n changesThisTimeAround++;\n }\n updatedColumns.push(column);\n });\n if (!updatedColumns.length) {\n continue;\n }\n this.visibleColsService.refresh(source);\n }\n if (!shouldSkipHeaderGroups) {\n this.autoSizeColumnGroupsByColumns(colKeys, source, stopAtGroup);\n }\n this.eventDispatcher.columnResized(columnsAutosized, true, \"autosizeColumns\");\n }\n autoSizeColumn(key, source, skipHeader) {\n if (key) {\n this.autoSizeCols({ colKeys: [key], skipHeader, skipHeaderGroups: true, source });\n }\n }\n autoSizeColumnGroupsByColumns(keys, source, stopAtGroup) {\n const columnGroups = /* @__PURE__ */ new Set();\n const columns = this.columnModel.getColsForKeys(keys);\n columns.forEach((col) => {\n let parent = col.getParent();\n while (parent && parent != stopAtGroup) {\n if (!parent.isPadding()) {\n columnGroups.add(parent);\n }\n parent = parent.getParent();\n }\n });\n let headerGroupCtrl;\n const resizedColumns = [];\n for (const columnGroup of columnGroups) {\n for (const headerContainerCtrl of this.ctrlsService.getHeaderRowContainerCtrls()) {\n headerGroupCtrl = headerContainerCtrl.getHeaderCtrlForColumn(columnGroup);\n if (headerGroupCtrl) {\n break;\n }\n }\n if (headerGroupCtrl) {\n headerGroupCtrl.resizeLeafColumnsToFit(source);\n }\n }\n return resizedColumns;\n }\n autoSizeAllColumns(source, skipHeader) {\n if (this.columnModel.isShouldQueueResizeOperations()) {\n this.columnModel.pushResizeOperation(() => this.autoSizeAllColumns(source, skipHeader));\n return;\n }\n const allDisplayedColumns = this.visibleColsService.getAllCols();\n this.autoSizeCols({ colKeys: allDisplayedColumns, skipHeader, source });\n }\n // returns the width we can set to this col, taking into consideration min and max widths\n normaliseColumnWidth(column, newWidth) {\n const minWidth = column.getMinWidth();\n if (newWidth < minWidth) {\n newWidth = minWidth;\n }\n const maxWidth = column.getMaxWidth();\n if (column.isGreaterThanMax(newWidth)) {\n newWidth = maxWidth;\n }\n return newWidth;\n }\n};\n\n// community-modules/core/src/columns/funcColsService.ts\nvar FuncColsService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"funcColsService\";\n this.rowGroupCols = [];\n this.valueCols = [];\n this.pivotCols = [];\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.eventDispatcher = beans.columnEventDispatcher;\n this.aggFuncService = beans.aggFuncService;\n this.visibleColsService = beans.visibleColsService;\n }\n getModifyColumnsNoEventsCallbacks() {\n return {\n addGroupCol: (column) => this.rowGroupCols.push(column),\n removeGroupCol: (column) => _removeFromArray(this.rowGroupCols, column),\n addPivotCol: (column) => this.pivotCols.push(column),\n removePivotCol: (column) => _removeFromArray(this.pivotCols, column),\n addValueCol: (column) => this.valueCols.push(column),\n removeValueCol: (column) => _removeFromArray(this.valueCols, column)\n };\n }\n getSourceColumnsForGroupColumn(groupCol) {\n const sourceColumnId = groupCol.getColDef().showRowGroup;\n if (!sourceColumnId) {\n return null;\n }\n if (sourceColumnId === true) {\n return this.rowGroupCols.slice(0);\n }\n const column = this.columnModel.getColDefCol(sourceColumnId);\n return column ? [column] : null;\n }\n sortRowGroupColumns(compareFn) {\n this.rowGroupCols.sort(compareFn);\n }\n sortPivotColumns(compareFn) {\n this.pivotCols.sort(compareFn);\n }\n // + rowController\n getValueColumns() {\n return this.valueCols ? this.valueCols : [];\n }\n // + rowController\n getPivotColumns() {\n return this.pivotCols ? this.pivotCols : [];\n }\n // + toolPanel\n getRowGroupColumns() {\n return this.rowGroupCols ? this.rowGroupCols : [];\n }\n isRowGroupEmpty() {\n return _missingOrEmpty(this.rowGroupCols);\n }\n setColumnAggFunc(key, aggFunc, source) {\n if (!key) {\n return;\n }\n const column = this.columnModel.getColDefCol(key);\n if (!column) {\n return;\n }\n column.setAggFunc(aggFunc);\n this.eventDispatcher.columnChanged(\"columnValueChanged\", [column], source);\n }\n setRowGroupColumns(colKeys, source) {\n this.setColList(\n colKeys,\n this.rowGroupCols,\n \"columnRowGroupChanged\",\n true,\n true,\n (added, column) => this.setRowGroupActive(added, column, source),\n source\n );\n }\n setRowGroupActive(active, column, source) {\n if (active === column.isRowGroupActive()) {\n return;\n }\n column.setRowGroupActive(active, source);\n if (active && !this.gos.get(\"suppressRowGroupHidesColumns\")) {\n this.columnModel.setColsVisible([column], false, source);\n }\n if (!active && !this.gos.get(\"suppressMakeColumnVisibleAfterUnGroup\")) {\n this.columnModel.setColsVisible([column], true, source);\n }\n }\n addRowGroupColumns(keys, source) {\n this.updateColList(\n keys,\n this.rowGroupCols,\n true,\n true,\n (column) => this.setRowGroupActive(true, column, source),\n \"columnRowGroupChanged\",\n source\n );\n }\n removeRowGroupColumns(keys, source) {\n this.updateColList(\n keys,\n this.rowGroupCols,\n false,\n true,\n (column) => this.setRowGroupActive(false, column, source),\n \"columnRowGroupChanged\",\n source\n );\n }\n addPivotColumns(keys, source) {\n this.updateColList(\n keys,\n this.pivotCols,\n true,\n false,\n (column) => column.setPivotActive(true, source),\n \"columnPivotChanged\",\n source\n );\n }\n setPivotColumns(colKeys, source) {\n this.setColList(\n colKeys,\n this.pivotCols,\n \"columnPivotChanged\",\n true,\n false,\n (added, column) => {\n column.setPivotActive(added, source);\n },\n source\n );\n }\n removePivotColumns(keys, source) {\n this.updateColList(\n keys,\n this.pivotCols,\n false,\n false,\n (column) => column.setPivotActive(false, source),\n \"columnPivotChanged\",\n source\n );\n }\n setValueColumns(colKeys, source) {\n this.setColList(\n colKeys,\n this.valueCols,\n \"columnValueChanged\",\n false,\n false,\n (added, column) => this.setValueActive(added, column, source),\n source\n );\n }\n setValueActive(active, column, source) {\n if (active === column.isValueActive()) {\n return;\n }\n column.setValueActive(active, source);\n if (active && !column.getAggFunc() && this.aggFuncService) {\n const initialAggFunc = this.aggFuncService.getDefaultAggFunc(column);\n column.setAggFunc(initialAggFunc);\n }\n }\n addValueColumns(keys, source) {\n this.updateColList(\n keys,\n this.valueCols,\n true,\n false,\n (column) => this.setValueActive(true, column, source),\n \"columnValueChanged\",\n source\n );\n }\n removeValueColumns(keys, source) {\n this.updateColList(\n keys,\n this.valueCols,\n false,\n false,\n (column) => this.setValueActive(false, column, source),\n \"columnValueChanged\",\n source\n );\n }\n moveRowGroupColumn(fromIndex, toIndex, source) {\n if (this.isRowGroupEmpty()) {\n return;\n }\n const column = this.rowGroupCols[fromIndex];\n const impactedColumns = this.rowGroupCols.slice(fromIndex, toIndex);\n this.rowGroupCols.splice(fromIndex, 1);\n this.rowGroupCols.splice(toIndex, 0, column);\n this.eventDispatcher.rowGroupChanged(impactedColumns, source);\n }\n setColList(colKeys, masterList, eventName, detectOrderChange, autoGroupsNeedBuilding, columnCallback, source) {\n if (!this.columnModel.getCols()) {\n return;\n }\n const changes = /* @__PURE__ */ new Map();\n masterList.forEach((col, idx) => changes.set(col, idx));\n masterList.length = 0;\n if (_exists(colKeys)) {\n colKeys.forEach((key) => {\n const column = this.columnModel.getColDefCol(key);\n if (column) {\n masterList.push(column);\n }\n });\n }\n masterList.forEach((col, idx) => {\n const oldIndex = changes.get(col);\n if (oldIndex === void 0) {\n changes.set(col, 0);\n return;\n }\n if (detectOrderChange && oldIndex !== idx) {\n return;\n }\n changes.delete(col);\n });\n const primaryCols = this.columnModel.getColDefCols();\n (primaryCols || []).forEach((column) => {\n const added = masterList.indexOf(column) >= 0;\n columnCallback(added, column);\n });\n autoGroupsNeedBuilding && this.columnModel.refreshCols(false);\n this.visibleColsService.refresh(source);\n this.eventDispatcher.columnChanged(eventName, [...changes.keys()], source);\n }\n updateColList(keys, masterList, actionIsAdd, autoGroupsNeedBuilding, columnCallback, eventType, source) {\n if (!keys || _missingOrEmpty(keys)) {\n return;\n }\n let atLeastOne = false;\n const updatedCols = /* @__PURE__ */ new Set();\n keys.forEach((key) => {\n if (!key) {\n return;\n }\n const columnToAdd = this.columnModel.getColDefCol(key);\n if (!columnToAdd) {\n return;\n }\n updatedCols.add(columnToAdd);\n if (actionIsAdd) {\n if (masterList.indexOf(columnToAdd) >= 0) {\n return;\n }\n masterList.push(columnToAdd);\n } else {\n const currentIndex = masterList.indexOf(columnToAdd);\n if (currentIndex < 0) {\n return;\n }\n for (let i = currentIndex + 1; i < masterList.length; i++) {\n updatedCols.add(masterList[i]);\n }\n _removeFromArray(masterList, columnToAdd);\n }\n columnCallback(columnToAdd);\n atLeastOne = true;\n });\n if (!atLeastOne) {\n return;\n }\n if (autoGroupsNeedBuilding) {\n this.columnModel.refreshCols(false);\n }\n this.visibleColsService.refresh(source);\n this.eventDispatcher.genericColumnEvent(eventType, Array.from(updatedCols), source);\n }\n extractCols(source, oldProvidedCols) {\n this.extractRowGroupCols(source, oldProvidedCols);\n this.extractPivotCols(source, oldProvidedCols);\n this.extractValueCols(source, oldProvidedCols);\n }\n extractValueCols(source, oldProvidedCols) {\n this.valueCols = this.extractColsCommon(\n oldProvidedCols,\n this.valueCols,\n (col, flag) => col.setValueActive(flag, source),\n // aggFunc doesn't have index variant, cos order of value cols doesn't matter, so always return null\n () => void 0,\n () => void 0,\n // aggFunc is a string, so return it's existence\n (colDef) => {\n const aggFunc = colDef.aggFunc;\n if (aggFunc === null || aggFunc === \"\") {\n return null;\n }\n if (aggFunc === void 0) {\n return;\n }\n return !!aggFunc;\n },\n (colDef) => {\n return colDef.initialAggFunc != null && colDef.initialAggFunc != \"\";\n }\n );\n this.valueCols.forEach((col) => {\n const colDef = col.getColDef();\n if (colDef.aggFunc != null && colDef.aggFunc != \"\") {\n col.setAggFunc(colDef.aggFunc);\n } else {\n if (!col.getAggFunc()) {\n col.setAggFunc(colDef.initialAggFunc);\n }\n }\n });\n }\n extractRowGroupCols(source, oldProvidedCols) {\n this.rowGroupCols = this.extractColsCommon(\n oldProvidedCols,\n this.rowGroupCols,\n (col, flag) => col.setRowGroupActive(flag, source),\n (colDef) => colDef.rowGroupIndex,\n (colDef) => colDef.initialRowGroupIndex,\n (colDef) => colDef.rowGroup,\n (colDef) => colDef.initialRowGroup\n );\n }\n extractPivotCols(source, oldProvidedCols) {\n this.pivotCols = this.extractColsCommon(\n oldProvidedCols,\n this.pivotCols,\n (col, flag) => col.setPivotActive(flag, source),\n (colDef) => colDef.pivotIndex,\n (colDef) => colDef.initialPivotIndex,\n (colDef) => colDef.pivot,\n (colDef) => colDef.initialPivot\n );\n }\n extractColsCommon(oldProvidedCols = [], previousCols = [], setFlagFunc, getIndexFunc, getInitialIndexFunc, getValueFunc, getInitialValueFunc) {\n const colsWithIndex = [];\n const colsWithValue = [];\n const primaryCols = this.columnModel.getColDefCols() || [];\n primaryCols.forEach((col) => {\n const colIsNew = oldProvidedCols.indexOf(col) < 0;\n const colDef = col.getColDef();\n const value = _attrToBoolean(getValueFunc(colDef));\n const initialValue = _attrToBoolean(getInitialValueFunc(colDef));\n const index = _attrToNumber(getIndexFunc(colDef));\n const initialIndex = _attrToNumber(getInitialIndexFunc(colDef));\n let include;\n const valuePresent = value !== void 0;\n const indexPresent = index !== void 0;\n const initialValuePresent = initialValue !== void 0;\n const initialIndexPresent = initialIndex !== void 0;\n if (valuePresent) {\n include = value;\n } else if (indexPresent) {\n if (index === null) {\n include = false;\n } else {\n include = index >= 0;\n }\n } else {\n if (colIsNew) {\n if (initialValuePresent) {\n include = initialValue;\n } else if (initialIndexPresent) {\n include = initialIndex != null && initialIndex >= 0;\n } else {\n include = false;\n }\n } else {\n include = previousCols.indexOf(col) >= 0;\n }\n }\n if (include) {\n const useIndex = colIsNew ? index != null || initialIndex != null : index != null;\n useIndex ? colsWithIndex.push(col) : colsWithValue.push(col);\n }\n });\n const getIndexForCol = (col) => {\n const index = getIndexFunc(col.getColDef());\n const defaultIndex = getInitialIndexFunc(col.getColDef());\n return index != null ? index : defaultIndex;\n };\n colsWithIndex.sort((colA, colB) => {\n const indexA = getIndexForCol(colA);\n const indexB = getIndexForCol(colB);\n if (indexA === indexB) {\n return 0;\n }\n if (indexA < indexB) {\n return -1;\n }\n return 1;\n });\n const res = [].concat(colsWithIndex);\n previousCols.forEach((col) => {\n if (colsWithValue.indexOf(col) >= 0) {\n res.push(col);\n }\n });\n colsWithValue.forEach((col) => {\n if (res.indexOf(col) < 0) {\n res.push(col);\n }\n });\n previousCols.forEach((col) => {\n if (res.indexOf(col) < 0) {\n setFlagFunc(col, false);\n }\n });\n res.forEach((col) => {\n if (previousCols.indexOf(col) < 0) {\n setFlagFunc(col, true);\n }\n });\n return res;\n }\n generateColumnStateForRowGroupAndPivotIndexes(updatedRowGroupColumnState, updatedPivotColumnState) {\n const existingColumnStateUpdates = {};\n const orderColumns = (updatedColumnState, colList, enableProp, initialEnableProp, indexProp, initialIndexProp) => {\n const primaryCols = this.columnModel.getColDefCols();\n if (!colList.length || !primaryCols) {\n return [];\n }\n const updatedColIdArray = Object.keys(updatedColumnState);\n const updatedColIds = new Set(updatedColIdArray);\n const newColIds = new Set(updatedColIdArray);\n const allColIds = new Set(\n colList.map((column) => {\n const colId = column.getColId();\n newColIds.delete(colId);\n return colId;\n }).concat(updatedColIdArray)\n );\n const colIdsInOriginalOrder = [];\n const originalOrderMap = {};\n let orderIndex = 0;\n for (let i = 0; i < primaryCols.length; i++) {\n const colId = primaryCols[i].getColId();\n if (allColIds.has(colId)) {\n colIdsInOriginalOrder.push(colId);\n originalOrderMap[colId] = orderIndex++;\n }\n }\n let index = 1e3;\n let hasAddedNewCols = false;\n let lastIndex = 0;\n const processPrecedingNewCols = (colId) => {\n const originalOrderIndex = originalOrderMap[colId];\n for (let i = lastIndex; i < originalOrderIndex; i++) {\n const newColId = colIdsInOriginalOrder[i];\n if (newColIds.has(newColId)) {\n updatedColumnState[newColId][indexProp] = index++;\n newColIds.delete(newColId);\n }\n }\n lastIndex = originalOrderIndex;\n };\n colList.forEach((column) => {\n const colId = column.getColId();\n if (updatedColIds.has(colId)) {\n processPrecedingNewCols(colId);\n updatedColumnState[colId][indexProp] = index++;\n } else {\n const colDef = column.getColDef();\n const missingIndex = colDef[indexProp] === null || colDef[indexProp] === void 0 && colDef[initialIndexProp] == null;\n if (missingIndex) {\n if (!hasAddedNewCols) {\n const propEnabled = colDef[enableProp] || colDef[enableProp] === void 0 && colDef[initialEnableProp];\n if (propEnabled) {\n processPrecedingNewCols(colId);\n } else {\n newColIds.forEach((newColId) => {\n updatedColumnState[newColId][indexProp] = index + originalOrderMap[newColId];\n });\n index += colIdsInOriginalOrder.length;\n hasAddedNewCols = true;\n }\n }\n if (!existingColumnStateUpdates[colId]) {\n existingColumnStateUpdates[colId] = { colId };\n }\n existingColumnStateUpdates[colId][indexProp] = index++;\n }\n }\n });\n };\n orderColumns(\n updatedRowGroupColumnState,\n this.rowGroupCols,\n \"rowGroup\",\n \"initialRowGroup\",\n \"rowGroupIndex\",\n \"initialRowGroupIndex\"\n );\n orderColumns(\n updatedPivotColumnState,\n this.pivotCols,\n \"pivot\",\n \"initialPivot\",\n \"pivotIndex\",\n \"initialPivotIndex\"\n );\n return Object.values(existingColumnStateUpdates);\n }\n};\n\n// community-modules/core/src/columns/columnApplyStateService.ts\nvar ColumnApplyStateService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnApplyStateService\";\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.eventDispatcher = beans.columnEventDispatcher;\n this.sortController = beans.sortController;\n this.columnGetStateService = beans.columnGetStateService;\n this.funcColsService = beans.funcColsService;\n this.visibleColsService = beans.visibleColsService;\n this.columnAnimationService = beans.columnAnimationService;\n this.pivotResultColsService = beans.pivotResultColsService;\n }\n applyColumnState(params, source) {\n const providedCols = this.columnModel.getColDefCols() || [];\n if (_missingOrEmpty(providedCols)) {\n return false;\n }\n if (params && params.state && !params.state.forEach) {\n _warnOnce(\n \"applyColumnState() - the state attribute should be an array, however an array was not found. Please provide an array of items (one for each col you want to change) for state.\"\n );\n return false;\n }\n const callbacks = this.funcColsService.getModifyColumnsNoEventsCallbacks();\n const applyStates = (states, existingColumns, getById) => {\n const dispatchEventsFunc = this.compareColumnStatesAndDispatchEvents(source);\n const columnsWithNoState = existingColumns.slice();\n const rowGroupIndexes = {};\n const pivotIndexes = {};\n const autoColStates = [];\n const unmatchedAndAutoStates2 = [];\n let unmatchedCount2 = 0;\n const previousRowGroupCols = this.funcColsService.getRowGroupColumns().slice();\n const previousPivotCols = this.funcColsService.getPivotColumns().slice();\n states.forEach((state) => {\n const colId = state.colId || \"\";\n const isAutoGroupColumn = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n if (isAutoGroupColumn) {\n autoColStates.push(state);\n unmatchedAndAutoStates2.push(state);\n return;\n }\n const column = getById(colId);\n if (!column) {\n unmatchedAndAutoStates2.push(state);\n unmatchedCount2 += 1;\n } else {\n this.syncColumnWithStateItem(\n column,\n state,\n params.defaultState,\n rowGroupIndexes,\n pivotIndexes,\n false,\n source,\n callbacks\n );\n _removeFromArray(columnsWithNoState, column);\n }\n });\n const applyDefaultsFunc = (col) => this.syncColumnWithStateItem(\n col,\n null,\n params.defaultState,\n rowGroupIndexes,\n pivotIndexes,\n false,\n source,\n callbacks\n );\n columnsWithNoState.forEach(applyDefaultsFunc);\n this.funcColsService.sortRowGroupColumns(\n comparatorByIndex.bind(this, rowGroupIndexes, previousRowGroupCols)\n );\n this.funcColsService.sortPivotColumns(comparatorByIndex.bind(this, pivotIndexes, previousPivotCols));\n this.columnModel.refreshCols(false);\n const autoCols = this.columnModel.getAutoCols() || [];\n const autoColsCopy = autoCols.slice();\n autoColStates.forEach((stateItem) => {\n const autoCol = this.columnModel.getAutoCol(stateItem.colId);\n _removeFromArray(autoColsCopy, autoCol);\n this.syncColumnWithStateItem(\n autoCol,\n stateItem,\n params.defaultState,\n null,\n null,\n true,\n source,\n callbacks\n );\n });\n autoColsCopy.forEach(applyDefaultsFunc);\n this.orderLiveColsLikeState(params);\n this.visibleColsService.refresh(source);\n this.eventDispatcher.everythingChanged(source);\n dispatchEventsFunc();\n return { unmatchedAndAutoStates: unmatchedAndAutoStates2, unmatchedCount: unmatchedCount2 };\n };\n this.columnAnimationService.start();\n let { unmatchedAndAutoStates, unmatchedCount } = applyStates(\n params.state || [],\n providedCols,\n (id) => this.columnModel.getColDefCol(id)\n );\n if (unmatchedAndAutoStates.length > 0 || _exists(params.defaultState)) {\n const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n const pivotResultColsList = pivotResultCols?.list;\n unmatchedCount = applyStates(\n unmatchedAndAutoStates,\n pivotResultColsList || [],\n (id) => this.pivotResultColsService.getPivotResultCol(id)\n ).unmatchedCount;\n }\n this.columnAnimationService.finish();\n return unmatchedCount === 0;\n }\n resetColumnState(source) {\n const primaryCols = this.columnModel.getColDefCols();\n if (_missingOrEmpty(primaryCols)) {\n return;\n }\n const primaryColumnTree = this.columnModel.getColDefColTree();\n const primaryColumns = getColumnsFromTree(primaryColumnTree);\n const columnStates = [];\n let letRowGroupIndex = 1e3;\n let letPivotIndex = 1e3;\n let colsToProcess = [];\n const groupAutoCols = this.columnModel.getAutoCols();\n if (groupAutoCols) {\n colsToProcess = colsToProcess.concat(groupAutoCols);\n }\n if (primaryColumns) {\n colsToProcess = colsToProcess.concat(primaryColumns);\n }\n colsToProcess.forEach((column) => {\n const stateItem = this.getColumnStateFromColDef(column);\n if (_missing(stateItem.rowGroupIndex) && stateItem.rowGroup) {\n stateItem.rowGroupIndex = letRowGroupIndex++;\n }\n if (_missing(stateItem.pivotIndex) && stateItem.pivot) {\n stateItem.pivotIndex = letPivotIndex++;\n }\n columnStates.push(stateItem);\n });\n this.applyColumnState({ state: columnStates, applyOrder: true }, source);\n }\n getColumnStateFromColDef(column) {\n const getValueOrNull = (a, b) => a != null ? a : b != null ? b : null;\n const colDef = column.getColDef();\n const sort = getValueOrNull(colDef.sort, colDef.initialSort);\n const sortIndex = getValueOrNull(colDef.sortIndex, colDef.initialSortIndex);\n const hide = getValueOrNull(colDef.hide, colDef.initialHide);\n const pinned = getValueOrNull(colDef.pinned, colDef.initialPinned);\n const width = getValueOrNull(colDef.width, colDef.initialWidth);\n const flex = getValueOrNull(colDef.flex, colDef.initialFlex);\n let rowGroupIndex = getValueOrNull(\n colDef.rowGroupIndex,\n colDef.initialRowGroupIndex\n );\n let rowGroup = getValueOrNull(colDef.rowGroup, colDef.initialRowGroup);\n if (rowGroupIndex == null && (rowGroup == null || rowGroup == false)) {\n rowGroupIndex = null;\n rowGroup = null;\n }\n let pivotIndex = getValueOrNull(colDef.pivotIndex, colDef.initialPivotIndex);\n let pivot = getValueOrNull(colDef.pivot, colDef.initialPivot);\n if (pivotIndex == null && (pivot == null || pivot == false)) {\n pivotIndex = null;\n pivot = null;\n }\n const aggFunc = getValueOrNull(colDef.aggFunc, colDef.initialAggFunc);\n return {\n colId: column.getColId(),\n sort,\n sortIndex,\n hide,\n pinned,\n width,\n flex,\n rowGroup,\n rowGroupIndex,\n pivot,\n pivotIndex,\n aggFunc\n };\n }\n syncColumnWithStateItem(column, stateItem, defaultState, rowGroupIndexes, pivotIndexes, autoCol, source, callbacks) {\n if (!column) {\n return;\n }\n const getValue2 = (key1, key2) => {\n const obj = {\n value1: void 0,\n value2: void 0\n };\n let calculated = false;\n if (stateItem) {\n if (stateItem[key1] !== void 0) {\n obj.value1 = stateItem[key1];\n calculated = true;\n }\n if (_exists(key2) && stateItem[key2] !== void 0) {\n obj.value2 = stateItem[key2];\n calculated = true;\n }\n }\n if (!calculated && defaultState) {\n if (defaultState[key1] !== void 0) {\n obj.value1 = defaultState[key1];\n }\n if (_exists(key2) && defaultState[key2] !== void 0) {\n obj.value2 = defaultState[key2];\n }\n }\n return obj;\n };\n const hide = getValue2(\"hide\").value1;\n if (hide !== void 0) {\n column.setVisible(!hide, source);\n }\n const pinned = getValue2(\"pinned\").value1;\n if (pinned !== void 0) {\n column.setPinned(pinned);\n }\n const minColWidth = column.getColDef().minWidth ?? this.gos.environment.getDefaultColumnMinWidth();\n const flex = getValue2(\"flex\").value1;\n if (flex !== void 0) {\n column.setFlex(flex);\n }\n if (flex == null) {\n const width = getValue2(\"width\").value1;\n if (width != null) {\n if (minColWidth != null && width >= minColWidth) {\n column.setActualWidth(width, source);\n }\n }\n }\n const sort = getValue2(\"sort\").value1;\n if (sort !== void 0) {\n if (sort === \"desc\" || sort === \"asc\") {\n column.setSort(sort, source);\n } else {\n column.setSort(void 0, source);\n }\n }\n const sortIndex = getValue2(\"sortIndex\").value1;\n if (sortIndex !== void 0) {\n column.setSortIndex(sortIndex);\n }\n if (autoCol || !column.isPrimary()) {\n return;\n }\n const aggFunc = getValue2(\"aggFunc\").value1;\n if (aggFunc !== void 0) {\n if (typeof aggFunc === \"string\") {\n column.setAggFunc(aggFunc);\n if (!column.isValueActive()) {\n column.setValueActive(true, source);\n callbacks.addValueCol(column);\n }\n } else {\n if (_exists(aggFunc)) {\n _warnOnce(\n \"stateItem.aggFunc must be a string. if using your own aggregation functions, register the functions first before using them in get/set state. This is because it is intended for the column state to be stored and retrieved as simple JSON.\"\n );\n }\n if (column.isValueActive()) {\n column.setValueActive(false, source);\n callbacks.removeValueCol(column);\n }\n }\n }\n const { value1: rowGroup, value2: rowGroupIndex } = getValue2(\"rowGroup\", \"rowGroupIndex\");\n if (rowGroup !== void 0 || rowGroupIndex !== void 0) {\n if (typeof rowGroupIndex === \"number\" || rowGroup) {\n if (!column.isRowGroupActive()) {\n column.setRowGroupActive(true, source);\n callbacks.addGroupCol(column);\n }\n if (rowGroupIndexes && typeof rowGroupIndex === \"number\") {\n rowGroupIndexes[column.getId()] = rowGroupIndex;\n }\n } else {\n if (column.isRowGroupActive()) {\n column.setRowGroupActive(false, source);\n callbacks.removeGroupCol(column);\n }\n }\n }\n const { value1: pivot, value2: pivotIndex } = getValue2(\"pivot\", \"pivotIndex\");\n if (pivot !== void 0 || pivotIndex !== void 0) {\n if (typeof pivotIndex === \"number\" || pivot) {\n if (!column.isPivotActive()) {\n column.setPivotActive(true, source);\n callbacks.addPivotCol(column);\n }\n if (pivotIndexes && typeof pivotIndex === \"number\") {\n pivotIndexes[column.getId()] = pivotIndex;\n }\n } else {\n if (column.isPivotActive()) {\n column.setPivotActive(false, source);\n callbacks.removePivotCol(column);\n }\n }\n }\n }\n orderLiveColsLikeState(params) {\n if (!params.applyOrder || !params.state) {\n return;\n }\n const colIds = [];\n params.state.forEach((item) => {\n if (item.colId != null) {\n colIds.push(item.colId);\n }\n });\n this.columnModel.sortColsLikeKeys(colIds);\n }\n // calculates what events to fire between column state changes. gets used when:\n // a) apply column state\n // b) apply new column definitions (so changes from old cols)\n compareColumnStatesAndDispatchEvents(source) {\n const startState = {\n rowGroupColumns: this.funcColsService.getRowGroupColumns().slice(),\n pivotColumns: this.funcColsService.getPivotColumns().slice(),\n valueColumns: this.funcColsService.getValueColumns().slice()\n };\n const columnStateBefore = this.columnGetStateService.getColumnState();\n const columnStateBeforeMap = {};\n columnStateBefore.forEach((col) => {\n columnStateBeforeMap[col.colId] = col;\n });\n return () => {\n const colsForState = this.columnModel.getAllCols();\n const dispatchWhenListsDifferent = (eventType, colsBefore, colsAfter, idMapper) => {\n const beforeList = colsBefore.map(idMapper);\n const afterList = colsAfter.map(idMapper);\n const unchanged = _areEqual(beforeList, afterList);\n if (unchanged) {\n return;\n }\n const changes = new Set(colsBefore);\n colsAfter.forEach((id) => {\n if (!changes.delete(id)) {\n changes.add(id);\n }\n });\n const changesArr = [...changes];\n this.eventService.dispatchEvent({\n type: eventType,\n columns: changesArr,\n column: changesArr.length === 1 ? changesArr[0] : null,\n source\n });\n };\n const getChangedColumns = (changedPredicate) => {\n const changedColumns2 = [];\n colsForState.forEach((column) => {\n const colStateBefore = columnStateBeforeMap[column.getColId()];\n if (colStateBefore && changedPredicate(colStateBefore, column)) {\n changedColumns2.push(column);\n }\n });\n return changedColumns2;\n };\n const columnIdMapper = (c) => c.getColId();\n dispatchWhenListsDifferent(\n \"columnRowGroupChanged\",\n startState.rowGroupColumns,\n this.funcColsService.getRowGroupColumns(),\n columnIdMapper\n );\n dispatchWhenListsDifferent(\n \"columnPivotChanged\",\n startState.pivotColumns,\n this.funcColsService.getPivotColumns(),\n columnIdMapper\n );\n const valueChangePredicate = (cs, c) => {\n const oldActive = cs.aggFunc != null;\n const activeChanged = oldActive != c.isValueActive();\n const aggFuncChanged = oldActive && cs.aggFunc != c.getAggFunc();\n return activeChanged || aggFuncChanged;\n };\n const changedValues = getChangedColumns(valueChangePredicate);\n if (changedValues.length > 0) {\n this.eventDispatcher.columnChanged(\"columnValueChanged\", changedValues, source);\n }\n const resizeChangePredicate = (cs, c) => cs.width != c.getActualWidth();\n this.eventDispatcher.columnResized(getChangedColumns(resizeChangePredicate), true, source);\n const pinnedChangePredicate = (cs, c) => cs.pinned != c.getPinned();\n this.eventDispatcher.columnPinned(getChangedColumns(pinnedChangePredicate), source);\n const visibilityChangePredicate = (cs, c) => cs.hide == c.isVisible();\n this.eventDispatcher.columnVisible(getChangedColumns(visibilityChangePredicate), source);\n const sortChangePredicate = (cs, c) => cs.sort != c.getSort() || cs.sortIndex != c.getSortIndex();\n const changedColumns = getChangedColumns(sortChangePredicate);\n if (changedColumns.length > 0) {\n this.sortController.dispatchSortChangedEvents(source, changedColumns);\n }\n this.normaliseColumnMovedEventForColumnState(columnStateBefore, source);\n };\n }\n normaliseColumnMovedEventForColumnState(colStateBefore, source) {\n const colStateAfter = this.columnGetStateService.getColumnState();\n const colStateAfterMapped = {};\n colStateAfter.forEach((s) => colStateAfterMapped[s.colId] = s);\n const colsIntersectIds = {};\n colStateBefore.forEach((s) => {\n if (colStateAfterMapped[s.colId]) {\n colsIntersectIds[s.colId] = true;\n }\n });\n const beforeFiltered = colStateBefore.filter((c) => colsIntersectIds[c.colId]);\n const afterFiltered = colStateAfter.filter((c) => colsIntersectIds[c.colId]);\n const movedColumns = [];\n afterFiltered.forEach((csAfter, index) => {\n const csBefore = beforeFiltered && beforeFiltered[index];\n if (csBefore && csBefore.colId !== csAfter.colId) {\n const gridCol = this.columnModel.getCol(csBefore.colId);\n if (gridCol) {\n movedColumns.push(gridCol);\n }\n }\n });\n if (!movedColumns.length) {\n return;\n }\n this.eventDispatcher.columnMoved({ movedColumns, source, finished: true });\n }\n};\nvar comparatorByIndex = (indexes, oldList, colA, colB) => {\n const indexA = indexes[colA.getId()];\n const indexB = indexes[colB.getId()];\n const aHasIndex = indexA != null;\n const bHasIndex = indexB != null;\n if (aHasIndex && bHasIndex) {\n return indexA - indexB;\n }\n if (aHasIndex) {\n return -1;\n }\n if (bHasIndex) {\n return 1;\n }\n const oldIndexA = oldList.indexOf(colA);\n const oldIndexB = oldList.indexOf(colB);\n const aHasOldIndex = oldIndexA >= 0;\n const bHasOldIndex = oldIndexB >= 0;\n if (aHasOldIndex && bHasOldIndex) {\n return oldIndexA - oldIndexB;\n }\n if (aHasOldIndex) {\n return -1;\n }\n return 1;\n};\n\n// community-modules/core/src/columns/columnMoveService.ts\nvar ColumnMoveService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnMoveService\";\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.columnAnimationService = beans.columnAnimationService;\n this.eventDispatcher = beans.columnEventDispatcher;\n }\n moveColumnByIndex(fromIndex, toIndex, source) {\n const gridColumns = this.columnModel.getCols();\n if (!gridColumns) {\n return;\n }\n const column = gridColumns[fromIndex];\n this.moveColumns([column], toIndex, source);\n }\n moveColumns(columnsToMoveKeys, toIndex, source, finished = true) {\n const gridColumns = this.columnModel.getCols();\n if (!gridColumns) {\n return;\n }\n if (toIndex > gridColumns.length - columnsToMoveKeys.length) {\n _warnOnce(\"tried to insert columns in invalid location, toIndex = \", toIndex);\n _warnOnce(\"remember that you should not count the moving columns when calculating the new index\");\n return;\n }\n this.columnAnimationService.start();\n const movedColumns = this.columnModel.getColsForKeys(columnsToMoveKeys);\n if (this.doesMovePassRules(movedColumns, toIndex)) {\n this.columnModel.moveInCols(movedColumns, toIndex, source);\n this.eventDispatcher.columnMoved({ movedColumns, source, toIndex, finished });\n }\n this.columnAnimationService.finish();\n }\n doesMovePassRules(columnsToMove, toIndex) {\n const proposedColumnOrder = this.getProposedColumnOrder(columnsToMove, toIndex);\n return this.doesOrderPassRules(proposedColumnOrder);\n }\n doesOrderPassRules(gridOrder) {\n if (!this.doesMovePassMarryChildren(gridOrder)) {\n return false;\n }\n if (!this.doesMovePassLockedPositions(gridOrder)) {\n return false;\n }\n return true;\n }\n getProposedColumnOrder(columnsToMove, toIndex) {\n const gridColumns = this.columnModel.getCols();\n const proposedColumnOrder = gridColumns.slice();\n _moveInArray(proposedColumnOrder, columnsToMove, toIndex);\n return proposedColumnOrder;\n }\n doesMovePassLockedPositions(proposedColumnOrder) {\n const lockPositionToPlacement = (position) => {\n if (!position) {\n return 0 /* NONE */;\n }\n return position === \"left\" || position === true ? -1 /* LEFT */ : 1 /* RIGHT */;\n };\n const isRtl = this.gos.get(\"enableRtl\");\n let lastPlacement = isRtl ? 1 /* RIGHT */ : -1 /* LEFT */;\n let rulePassed = true;\n proposedColumnOrder.forEach((col) => {\n const placement = lockPositionToPlacement(col.getColDef().lockPosition);\n if (isRtl) {\n if (placement > lastPlacement) {\n rulePassed = false;\n }\n } else {\n if (placement < lastPlacement) {\n rulePassed = false;\n }\n }\n lastPlacement = placement;\n });\n return rulePassed;\n }\n doesMovePassMarryChildren(allColumnsCopy) {\n let rulePassed = true;\n const gridBalancedTree = this.columnModel.getColTree();\n depthFirstOriginalTreeSearch(null, gridBalancedTree, (child) => {\n if (!isProvidedColumnGroup(child)) {\n return;\n }\n const columnGroup = child;\n const colGroupDef = columnGroup.getColGroupDef();\n const marryChildren = colGroupDef && colGroupDef.marryChildren;\n if (!marryChildren) {\n return;\n }\n const newIndexes = [];\n columnGroup.getLeafColumns().forEach((col) => {\n const newColIndex = allColumnsCopy.indexOf(col);\n newIndexes.push(newColIndex);\n });\n const maxIndex = Math.max.apply(Math, newIndexes);\n const minIndex = Math.min.apply(Math, newIndexes);\n const spread = maxIndex - minIndex;\n const maxSpread = columnGroup.getLeafColumns().length - 1;\n if (spread > maxSpread) {\n rulePassed = false;\n }\n });\n return rulePassed;\n }\n placeLockedColumns(cols) {\n const left = [];\n const normal = [];\n const right = [];\n cols.forEach((col) => {\n const position = col.getColDef().lockPosition;\n if (position === \"right\") {\n right.push(col);\n } else if (position === \"left\" || position === true) {\n left.push(col);\n } else {\n normal.push(col);\n }\n });\n const isRtl = this.gos.get(\"enableRtl\");\n if (isRtl) {\n return [...right, ...normal, ...left];\n }\n return [...left, ...normal, ...right];\n }\n};\n\n// community-modules/core/src/utils/string.ts\nvar reUnescapedHtml = /[&<>\"']/g;\nvar HTML_ESCAPES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n};\nfunction _utf8_encode(s) {\n const stringFromCharCode = String.fromCharCode;\n function ucs2decode(string) {\n const output = [];\n if (!string) {\n return [];\n }\n const len = string.length;\n let counter = 0;\n let value;\n let extra;\n while (counter < len) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < len) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function checkScalarValue(point) {\n if (point >= 55296 && point <= 57343) {\n throw Error(\"Lone surrogate U+\" + point.toString(16).toUpperCase() + \" is not a scalar value\");\n }\n }\n function createByte(point, shift) {\n return stringFromCharCode(point >> shift & 63 | 128);\n }\n function encodeCodePoint(point) {\n if ((point & 4294967168) == 0) {\n return stringFromCharCode(point);\n }\n let symbol = \"\";\n if ((point & 4294965248) == 0) {\n symbol = stringFromCharCode(point >> 6 & 31 | 192);\n } else if ((point & 4294901760) == 0) {\n checkScalarValue(point);\n symbol = stringFromCharCode(point >> 12 & 15 | 224);\n symbol += createByte(point, 6);\n } else if ((point & 4292870144) == 0) {\n symbol = stringFromCharCode(point >> 18 & 7 | 240);\n symbol += createByte(point, 12);\n symbol += createByte(point, 6);\n }\n symbol += stringFromCharCode(point & 63 | 128);\n return symbol;\n }\n const codePoints = ucs2decode(s);\n const length = codePoints.length;\n let index = -1;\n let codePoint;\n let byteString = \"\";\n while (++index < length) {\n codePoint = codePoints[index];\n byteString += encodeCodePoint(codePoint);\n }\n return byteString;\n}\nfunction _capitalise(str) {\n return str[0].toUpperCase() + str.substring(1).toLowerCase();\n}\nfunction _escapeString(toEscape, skipEscapingHtmlChars) {\n if (toEscape == null) {\n return null;\n }\n const stringResult = toEscape.toString().toString();\n if (skipEscapingHtmlChars) {\n return stringResult;\n }\n return stringResult.replace(reUnescapedHtml, (chr) => HTML_ESCAPES[chr]);\n}\nfunction _camelCaseToHumanText(camelCase) {\n if (!camelCase || camelCase == null) {\n return null;\n }\n const rex = /([a-z])([A-Z])/g;\n const rexCaps = /([A-Z]+)([A-Z])([a-z])/g;\n const words = camelCase.replace(rex, \"$1 $2\").replace(rexCaps, \"$1 $2$3\").replace(/\\./g, \" \").split(\" \");\n return words.map((word) => word.substring(0, 1).toUpperCase() + (word.length > 1 ? word.substring(1, word.length) : \"\")).join(\" \");\n}\nfunction _camelCaseToHyphenated(camelCase) {\n return camelCase.replace(/[A-Z]/g, (s) => `-${s.toLocaleLowerCase()}`);\n}\n\n// community-modules/core/src/columns/columnNameService.ts\nvar ColumnNameService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnNameService\";\n }\n wireBeans(beans) {\n this.expressionService = beans.expressionService;\n this.funcColsService = beans.funcColsService;\n this.columnModel = beans.columnModel;\n }\n getDisplayNameForColumn(column, location, includeAggFunc = false) {\n if (!column) {\n return null;\n }\n const headerName = this.getHeaderName(column.getColDef(), column, null, null, location);\n if (includeAggFunc) {\n return this.wrapHeaderNameWithAggFunc(column, headerName);\n }\n return headerName;\n }\n getDisplayNameForProvidedColumnGroup(columnGroup, providedColumnGroup, location) {\n const colGroupDef = providedColumnGroup ? providedColumnGroup.getColGroupDef() : null;\n if (colGroupDef) {\n return this.getHeaderName(colGroupDef, null, columnGroup, providedColumnGroup, location);\n }\n return null;\n }\n getDisplayNameForColumnGroup(columnGroup, location) {\n return this.getDisplayNameForProvidedColumnGroup(columnGroup, columnGroup.getProvidedColumnGroup(), location);\n }\n // location is where the column is going to appear, ie who is calling us\n getHeaderName(colDef, column, columnGroup, providedColumnGroup, location) {\n const headerValueGetter = colDef.headerValueGetter;\n if (headerValueGetter) {\n const params = this.gos.addGridCommonParams({\n colDef,\n column,\n columnGroup,\n providedColumnGroup,\n location\n });\n if (typeof headerValueGetter === \"function\") {\n return headerValueGetter(params);\n } else if (typeof headerValueGetter === \"string\") {\n return this.expressionService.evaluate(headerValueGetter, params);\n }\n _warnOnce(\"headerValueGetter must be a function or a string\");\n return \"\";\n } else if (colDef.headerName != null) {\n return colDef.headerName;\n } else if (colDef.field) {\n return _camelCaseToHumanText(colDef.field);\n }\n return \"\";\n }\n wrapHeaderNameWithAggFunc(column, headerName) {\n if (this.gos.get(\"suppressAggFuncInHeader\")) {\n return headerName;\n }\n const pivotValueColumn = column.getColDef().pivotValueColumn;\n const pivotActiveOnThisColumn = _exists(pivotValueColumn);\n let aggFunc = null;\n let aggFuncFound;\n if (pivotActiveOnThisColumn) {\n const valueColumns = this.funcColsService.getValueColumns();\n const isCollapsedHeaderEnabled = this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\") && valueColumns.length === 1;\n const isTotalColumn = column.getColDef().pivotTotalColumnIds !== void 0;\n if (isCollapsedHeaderEnabled && !isTotalColumn) {\n return headerName;\n }\n aggFunc = pivotValueColumn ? pivotValueColumn.getAggFunc() : null;\n aggFuncFound = true;\n } else {\n const measureActive = column.isValueActive();\n const aggregationPresent = this.columnModel.isPivotMode() || !this.funcColsService.isRowGroupEmpty();\n if (measureActive && aggregationPresent) {\n aggFunc = column.getAggFunc();\n aggFuncFound = true;\n } else {\n aggFuncFound = false;\n }\n }\n if (aggFuncFound) {\n const aggFuncString = typeof aggFunc === \"string\" ? aggFunc : \"func\";\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);\n return `${aggFuncStringTranslated}(${headerName})`;\n }\n return headerName;\n }\n};\n\n// community-modules/core/src/columns/pivotResultColsService.ts\nvar PivotResultColsService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"pivotResultColsService\";\n }\n wireBeans(beans) {\n this.context = beans.context;\n this.columnModel = beans.columnModel;\n this.columnFactory = beans.columnFactory;\n this.visibleColsService = beans.visibleColsService;\n }\n destroy() {\n destroyColumnTree(this.context, this.pivotResultCols?.tree);\n super.destroy();\n }\n isPivotResultColsPresent() {\n return this.pivotResultCols != null;\n }\n lookupPivotResultCol(pivotKeys, valueColKey) {\n if (this.pivotResultCols == null) {\n return null;\n }\n const valueColumnToFind = this.columnModel.getColDefCol(valueColKey);\n let foundColumn = null;\n this.pivotResultCols.list.forEach((column) => {\n const thisPivotKeys = column.getColDef().pivotKeys;\n const pivotValueColumn = column.getColDef().pivotValueColumn;\n const pivotKeyMatches = _areEqual(thisPivotKeys, pivotKeys);\n const pivotValueMatches = pivotValueColumn === valueColumnToFind;\n if (pivotKeyMatches && pivotValueMatches) {\n foundColumn = column;\n }\n });\n return foundColumn;\n }\n getPivotResultCols() {\n return this.pivotResultCols;\n }\n getPivotResultCol(key) {\n if (!this.pivotResultCols) {\n return null;\n }\n return this.columnModel.getColFromCollection(key, this.pivotResultCols);\n }\n setPivotResultCols(colDefs, source) {\n if (!this.columnModel.isReady()) {\n return;\n }\n if (colDefs == null && this.pivotResultCols == null) {\n return;\n }\n if (colDefs) {\n this.processPivotResultColDef(colDefs);\n const balancedTreeResult = this.columnFactory.createColumnTree(\n colDefs,\n false,\n this.pivotResultCols?.tree || this.previousPivotResultCols || void 0,\n source\n );\n destroyColumnTree(this.context, this.pivotResultCols?.tree, balancedTreeResult.columnTree);\n const tree = balancedTreeResult.columnTree;\n const treeDepth = balancedTreeResult.treeDept;\n const list = getColumnsFromTree(tree);\n const map = {};\n this.pivotResultCols = { tree, treeDepth, list, map };\n this.pivotResultCols.list.forEach((col) => this.pivotResultCols.map[col.getId()] = col);\n const hasPreviousCols = !!this.previousPivotResultCols;\n this.previousPivotResultCols = null;\n this.columnModel.refreshCols(!hasPreviousCols);\n } else {\n this.previousPivotResultCols = this.pivotResultCols ? this.pivotResultCols.tree : null;\n this.pivotResultCols = null;\n this.columnModel.refreshCols(false);\n }\n this.visibleColsService.refresh(source);\n }\n processPivotResultColDef(colDefs) {\n const columnCallback = this.gos.get(\"processPivotResultColDef\");\n const groupCallback = this.gos.get(\"processPivotResultColGroupDef\");\n if (!columnCallback && !groupCallback) {\n return void 0;\n }\n const searchForColDefs = (colDefs2) => {\n colDefs2.forEach((abstractColDef) => {\n const isGroup = _exists(abstractColDef.children);\n if (isGroup) {\n const colGroupDef = abstractColDef;\n if (groupCallback) {\n groupCallback(colGroupDef);\n }\n searchForColDefs(colGroupDef.children);\n } else {\n const colDef = abstractColDef;\n if (columnCallback) {\n columnCallback(colDef);\n }\n }\n });\n };\n if (colDefs) {\n searchForColDefs(colDefs);\n }\n }\n};\n\n// community-modules/core/src/columns/columnSizeService.ts\nvar ColumnSizeService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"columnSizeService\";\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.columnViewportService = beans.columnViewportService;\n this.eventDispatcher = beans.columnEventDispatcher;\n this.visibleColsService = beans.visibleColsService;\n this.ctrlsService = beans.ctrlsService;\n }\n setColumnWidths(columnWidths, shiftKey, finished, source) {\n const sets = [];\n columnWidths.forEach((columnWidth) => {\n const col = this.columnModel.getColDefCol(columnWidth.key) || this.columnModel.getCol(columnWidth.key);\n if (!col) {\n return;\n }\n sets.push({\n width: columnWidth.newWidth,\n ratios: [1],\n columns: [col]\n });\n const defaultIsShift = this.gos.get(\"colResizeDefault\") === \"shift\";\n if (defaultIsShift) {\n shiftKey = !shiftKey;\n }\n if (shiftKey) {\n const otherCol = this.visibleColsService.getColAfter(col);\n if (!otherCol) {\n return;\n }\n const widthDiff = col.getActualWidth() - columnWidth.newWidth;\n const otherColWidth = otherCol.getActualWidth() + widthDiff;\n sets.push({\n width: otherColWidth,\n ratios: [1],\n columns: [otherCol]\n });\n }\n });\n if (sets.length === 0) {\n return;\n }\n this.resizeColumnSets({\n resizeSets: sets,\n finished,\n source\n });\n }\n // method takes sets of columns and resizes them. either all sets will be resized, or nothing\n // be resized. this is used for example when user tries to resize a group and holds shift key,\n // then both the current group (grows), and the adjacent group (shrinks), will get resized,\n // so that's two sets for this method.\n resizeColumnSets(params) {\n const { resizeSets, finished, source } = params;\n const passMinMaxCheck = !resizeSets || resizeSets.every((columnResizeSet) => this.checkMinAndMaxWidthsForSet(columnResizeSet));\n if (!passMinMaxCheck) {\n if (finished) {\n const columns = resizeSets && resizeSets.length > 0 ? resizeSets[0].columns : null;\n this.eventDispatcher.columnResized(columns, finished, source);\n }\n return;\n }\n const changedCols = [];\n const allResizedCols = [];\n resizeSets.forEach((set) => {\n const { width, columns, ratios } = set;\n const newWidths = {};\n const finishedCols = {};\n columns.forEach((col) => allResizedCols.push(col));\n let finishedColsGrew = true;\n let loopCount = 0;\n while (finishedColsGrew) {\n loopCount++;\n if (loopCount > 1e3) {\n _errorOnce(\"infinite loop in resizeColumnSets\");\n break;\n }\n finishedColsGrew = false;\n const subsetCols = [];\n let subsetRatioTotal = 0;\n let pixelsToDistribute = width;\n columns.forEach((col, index) => {\n const thisColFinished = finishedCols[col.getId()];\n if (thisColFinished) {\n pixelsToDistribute -= newWidths[col.getId()];\n } else {\n subsetCols.push(col);\n const ratioThisCol = ratios[index];\n subsetRatioTotal += ratioThisCol;\n }\n });\n const ratioScale = 1 / subsetRatioTotal;\n subsetCols.forEach((col, index) => {\n const lastCol = index === subsetCols.length - 1;\n let colNewWidth;\n if (lastCol) {\n colNewWidth = pixelsToDistribute;\n } else {\n colNewWidth = Math.round(ratios[index] * width * ratioScale);\n pixelsToDistribute -= colNewWidth;\n }\n const minWidth = col.getMinWidth();\n const maxWidth = col.getMaxWidth();\n if (colNewWidth < minWidth) {\n colNewWidth = minWidth;\n finishedCols[col.getId()] = true;\n finishedColsGrew = true;\n } else if (maxWidth > 0 && colNewWidth > maxWidth) {\n colNewWidth = maxWidth;\n finishedCols[col.getId()] = true;\n finishedColsGrew = true;\n }\n newWidths[col.getId()] = colNewWidth;\n });\n }\n columns.forEach((col) => {\n const newWidth = newWidths[col.getId()];\n const actualWidth = col.getActualWidth();\n if (actualWidth !== newWidth) {\n col.setActualWidth(newWidth, source);\n changedCols.push(col);\n }\n });\n });\n const atLeastOneColChanged = changedCols.length > 0;\n let flexedCols = [];\n if (atLeastOneColChanged) {\n flexedCols = this.refreshFlexedColumns({ resizingCols: allResizedCols, skipSetLeft: true });\n this.visibleColsService.setLeftValues(source);\n this.visibleColsService.updateBodyWidths();\n this.columnViewportService.checkViewportColumns();\n }\n const colsForEvent = allResizedCols.concat(flexedCols);\n if (atLeastOneColChanged || finished) {\n this.eventDispatcher.columnResized(colsForEvent, finished, source, flexedCols);\n }\n }\n checkMinAndMaxWidthsForSet(columnResizeSet) {\n const { columns, width } = columnResizeSet;\n let minWidthAccumulated = 0;\n let maxWidthAccumulated = 0;\n let maxWidthActive = true;\n columns.forEach((col) => {\n const minWidth = col.getMinWidth();\n minWidthAccumulated += minWidth || 0;\n const maxWidth = col.getMaxWidth();\n if (maxWidth > 0) {\n maxWidthAccumulated += maxWidth;\n } else {\n maxWidthActive = false;\n }\n });\n const minWidthPasses = width >= minWidthAccumulated;\n const maxWidthPasses = !maxWidthActive || width <= maxWidthAccumulated;\n return minWidthPasses && maxWidthPasses;\n }\n refreshFlexedColumns(params = {}) {\n const source = params.source ? params.source : \"flex\";\n if (params.viewportWidth != null) {\n this.flexViewportWidth = params.viewportWidth;\n }\n if (!this.flexViewportWidth) {\n return [];\n }\n const displayedCenterCols = this.visibleColsService.getCenterCols();\n let flexAfterDisplayIndex = -1;\n if (params.resizingCols) {\n const allResizingCols = new Set(params.resizingCols);\n for (let i = displayedCenterCols.length - 1; i >= 0; i--) {\n if (allResizingCols.has(displayedCenterCols[i])) {\n flexAfterDisplayIndex = i;\n break;\n }\n }\n }\n let knownColumnsWidth = 0;\n let flexingColumns = [];\n let minimumFlexedWidth = 0;\n let totalFlex = 0;\n for (let i = 0; i < displayedCenterCols.length; i++) {\n const isFlex = displayedCenterCols[i].getFlex() && i > flexAfterDisplayIndex;\n if (isFlex) {\n flexingColumns.push(displayedCenterCols[i]);\n totalFlex += displayedCenterCols[i].getFlex();\n minimumFlexedWidth += displayedCenterCols[i].getMinWidth();\n } else {\n knownColumnsWidth += displayedCenterCols[i].getActualWidth();\n }\n }\n if (!flexingColumns.length) {\n return [];\n }\n let changedColumns = [];\n if (knownColumnsWidth + minimumFlexedWidth > this.flexViewportWidth) {\n flexingColumns.forEach((col) => col.setActualWidth(col.getMinWidth(), source));\n changedColumns = flexingColumns;\n flexingColumns = [];\n }\n const flexingColumnSizes = [];\n let spaceForFlexingColumns;\n outer:\n while (true) {\n spaceForFlexingColumns = this.flexViewportWidth - knownColumnsWidth;\n const spacePerFlex = spaceForFlexingColumns / totalFlex;\n for (let i = 0; i < flexingColumns.length; i++) {\n const col = flexingColumns[i];\n const widthByFlexRule = spacePerFlex * col.getFlex();\n let constrainedWidth = 0;\n const minWidth = col.getMinWidth();\n const maxWidth = col.getMaxWidth();\n if (widthByFlexRule < minWidth) {\n constrainedWidth = minWidth;\n } else if (widthByFlexRule > maxWidth) {\n constrainedWidth = maxWidth;\n }\n if (constrainedWidth) {\n col.setActualWidth(constrainedWidth, source);\n _removeFromUnorderedArray(flexingColumns, col);\n totalFlex -= col.getFlex();\n changedColumns.push(col);\n knownColumnsWidth += col.getActualWidth();\n continue outer;\n }\n flexingColumnSizes[i] = Math.floor(widthByFlexRule);\n }\n break;\n }\n let remainingSpace = spaceForFlexingColumns;\n flexingColumns.forEach((col, i) => {\n const size = i < flexingColumns.length - 1 ? Math.min(flexingColumnSizes[i], remainingSpace) : (\n // ensure flex columns fill available width by growing the last column to fit available space if there is more available\n Math.max(flexingColumnSizes[i], remainingSpace)\n );\n col.setActualWidth(size, source);\n changedColumns.push(col);\n remainingSpace -= flexingColumnSizes[i];\n });\n if (!params.skipSetLeft) {\n this.visibleColsService.setLeftValues(source);\n }\n if (params.updateBodyWidths) {\n this.visibleColsService.updateBodyWidths();\n }\n if (params.fireResizedEvent) {\n this.eventDispatcher.columnResized(changedColumns, true, source, flexingColumns);\n }\n return flexingColumns;\n }\n // called from api\n sizeColumnsToFit(gridWidth, source = \"sizeColumnsToFit\", silent, params) {\n if (this.columnModel.isShouldQueueResizeOperations()) {\n this.columnModel.pushResizeOperation(() => this.sizeColumnsToFit(gridWidth, source, silent, params));\n return;\n }\n const limitsMap = {};\n if (params) {\n params?.columnLimits?.forEach(({ key, ...dimensions }) => {\n limitsMap[typeof key === \"string\" ? key : key.getColId()] = dimensions;\n });\n }\n const allDisplayedColumns = this.visibleColsService.getAllCols();\n const doColumnsAlreadyFit = gridWidth === getWidthOfColsInList(allDisplayedColumns);\n if (gridWidth <= 0 || !allDisplayedColumns.length || doColumnsAlreadyFit) {\n return;\n }\n const colsToSpread = [];\n const colsToNotSpread = [];\n allDisplayedColumns.forEach((column) => {\n if (column.getColDef().suppressSizeToFit === true) {\n colsToNotSpread.push(column);\n } else {\n colsToSpread.push(column);\n }\n });\n const colsToDispatchEventFor = colsToSpread.slice(0);\n let finishedResizing = false;\n const moveToNotSpread = (column) => {\n _removeFromArray(colsToSpread, column);\n colsToNotSpread.push(column);\n };\n colsToSpread.forEach((column) => {\n column.resetActualWidth(source);\n const widthOverride = limitsMap?.[column.getId()];\n const minOverride = widthOverride?.minWidth ?? params?.defaultMinWidth;\n const maxOverride = widthOverride?.maxWidth ?? params?.defaultMaxWidth;\n const colWidth = column.getActualWidth();\n if (typeof minOverride === \"number\" && colWidth < minOverride) {\n column.setActualWidth(minOverride, source, true);\n } else if (typeof maxOverride === \"number\" && colWidth > maxOverride) {\n column.setActualWidth(maxOverride, source, true);\n }\n });\n while (!finishedResizing) {\n finishedResizing = true;\n const availablePixels = gridWidth - getWidthOfColsInList(colsToNotSpread);\n if (availablePixels <= 0) {\n colsToSpread.forEach((column) => {\n const widthOverride = limitsMap?.[column.getId()]?.minWidth ?? params?.defaultMinWidth;\n if (typeof widthOverride === \"number\") {\n column.setActualWidth(widthOverride, source, true);\n return;\n }\n column.setMinimum(source);\n });\n } else {\n const scale = availablePixels / getWidthOfColsInList(colsToSpread);\n let pixelsForLastCol = availablePixels;\n for (let i = colsToSpread.length - 1; i >= 0; i--) {\n const column = colsToSpread[i];\n const widthOverride = limitsMap?.[column.getId()];\n const minOverride = widthOverride?.minWidth ?? params?.defaultMinWidth;\n const maxOverride = widthOverride?.maxWidth ?? params?.defaultMaxWidth;\n const colMinWidth = column.getMinWidth();\n const colMaxWidth = column.getMaxWidth();\n const minWidth = typeof minOverride === \"number\" && minOverride > colMinWidth ? minOverride : colMinWidth;\n const maxWidth = typeof maxOverride === \"number\" && maxOverride < colMaxWidth ? maxOverride : colMaxWidth;\n let newWidth = Math.round(column.getActualWidth() * scale);\n if (newWidth < minWidth) {\n newWidth = minWidth;\n moveToNotSpread(column);\n finishedResizing = false;\n } else if (newWidth > maxWidth) {\n newWidth = maxWidth;\n moveToNotSpread(column);\n finishedResizing = false;\n } else if (i === 0) {\n newWidth = pixelsForLastCol;\n }\n column.setActualWidth(newWidth, source, true);\n pixelsForLastCol -= newWidth;\n }\n }\n }\n colsToDispatchEventFor.forEach((col) => {\n col.fireColumnWidthChangedEvent(source);\n });\n this.visibleColsService.setLeftValues(source);\n this.visibleColsService.updateBodyWidths();\n if (silent) {\n return;\n }\n this.eventDispatcher.columnResized(colsToDispatchEventFor, true, source);\n }\n applyAutosizeStrategy() {\n const autoSizeStrategy = this.gos.get(\"autoSizeStrategy\");\n if (!autoSizeStrategy) {\n return;\n }\n const { type } = autoSizeStrategy;\n setTimeout(() => {\n if (type === \"fitGridWidth\") {\n const { columnLimits: propColumnLimits, defaultMinWidth, defaultMaxWidth } = autoSizeStrategy;\n const columnLimits = propColumnLimits?.map(({ colId: key, minWidth, maxWidth }) => ({\n key,\n minWidth,\n maxWidth\n }));\n this.ctrlsService.getGridBodyCtrl().sizeColumnsToFit({\n defaultMinWidth,\n defaultMaxWidth,\n columnLimits\n });\n } else if (type === \"fitProvidedWidth\") {\n this.sizeColumnsToFit(autoSizeStrategy.width, \"sizeColumnsToFit\");\n }\n });\n }\n};\n\n// community-modules/core/src/entities/agColumnGroup.ts\nfunction createUniqueColumnGroupId(groupId, instanceId) {\n return groupId + \"_\" + instanceId;\n}\nfunction isColumnGroup(col) {\n return col instanceof AgColumnGroup;\n}\nvar AgColumnGroup = class extends BeanStub {\n constructor(providedColumnGroup, groupId, partId, pinned) {\n super();\n this.isColumn = false;\n // depends on the open/closed state of the group, only displaying columns are stored here\n this.displayedChildren = [];\n // The measured height of this column's header when autoHeaderHeight is enabled\n this.autoHeaderHeight = null;\n this.parent = null;\n this.groupId = groupId;\n this.partId = partId;\n this.providedColumnGroup = providedColumnGroup;\n this.pinned = pinned;\n }\n // as the user is adding and removing columns, the groups are recalculated.\n // this reset clears out all children, ready for children to be added again\n reset() {\n this.parent = null;\n this.children = null;\n this.displayedChildren = null;\n }\n getParent() {\n return this.parent;\n }\n setParent(parent) {\n this.parent = parent;\n }\n getUniqueId() {\n return createUniqueColumnGroupId(this.groupId, this.partId);\n }\n isEmptyGroup() {\n return this.displayedChildren.length === 0;\n }\n isMoving() {\n const allLeafColumns = this.getProvidedColumnGroup().getLeafColumns();\n if (!allLeafColumns || allLeafColumns.length === 0) {\n return false;\n }\n return allLeafColumns.every((col) => col.isMoving());\n }\n checkLeft() {\n this.displayedChildren.forEach((child) => {\n if (isColumnGroup(child)) {\n child.checkLeft();\n }\n });\n if (this.displayedChildren.length > 0) {\n if (this.gos.get(\"enableRtl\")) {\n const lastChild = _last(this.displayedChildren);\n const lastChildLeft = lastChild.getLeft();\n this.setLeft(lastChildLeft);\n } else {\n const firstChildLeft = this.displayedChildren[0].getLeft();\n this.setLeft(firstChildLeft);\n }\n } else {\n this.setLeft(null);\n }\n }\n getLeft() {\n return this.left;\n }\n getOldLeft() {\n return this.oldLeft;\n }\n setLeft(left) {\n this.oldLeft = this.left;\n if (this.left !== left) {\n this.left = left;\n this.dispatchLocalEvent({ type: \"leftChanged\" });\n }\n }\n getPinned() {\n return this.pinned;\n }\n getGroupId() {\n return this.groupId;\n }\n getPartId() {\n return this.partId;\n }\n getActualWidth() {\n let groupActualWidth = 0;\n if (this.displayedChildren) {\n this.displayedChildren.forEach((child) => {\n groupActualWidth += child.getActualWidth();\n });\n }\n return groupActualWidth;\n }\n isResizable() {\n if (!this.displayedChildren) {\n return false;\n }\n let result = false;\n this.displayedChildren.forEach((child) => {\n if (child.isResizable()) {\n result = true;\n }\n });\n return result;\n }\n getMinWidth() {\n let result = 0;\n this.displayedChildren.forEach((groupChild) => {\n result += groupChild.getMinWidth();\n });\n return result;\n }\n addChild(child) {\n if (!this.children) {\n this.children = [];\n }\n this.children.push(child);\n }\n getDisplayedChildren() {\n return this.displayedChildren;\n }\n getLeafColumns() {\n const result = [];\n this.addLeafColumns(result);\n return result;\n }\n getDisplayedLeafColumns() {\n const result = [];\n this.addDisplayedLeafColumns(result);\n return result;\n }\n getDefinition() {\n return this.providedColumnGroup.getColGroupDef();\n }\n getColGroupDef() {\n return this.providedColumnGroup.getColGroupDef();\n }\n isPadding() {\n return this.providedColumnGroup.isPadding();\n }\n isExpandable() {\n return this.providedColumnGroup.isExpandable();\n }\n isExpanded() {\n return this.providedColumnGroup.isExpanded();\n }\n setExpanded(expanded) {\n this.providedColumnGroup.setExpanded(expanded);\n }\n isAutoHeaderHeight() {\n return !!this.getColGroupDef()?.autoHeaderHeight;\n }\n getAutoHeaderHeight() {\n return this.autoHeaderHeight;\n }\n /** Returns true if the header height has changed */\n setAutoHeaderHeight(height) {\n const changed = height !== this.autoHeaderHeight;\n this.autoHeaderHeight = height;\n return changed;\n }\n addDisplayedLeafColumns(leafColumns) {\n this.displayedChildren.forEach((child) => {\n if (isColumn(child)) {\n leafColumns.push(child);\n } else if (isColumnGroup(child)) {\n child.addDisplayedLeafColumns(leafColumns);\n }\n });\n }\n addLeafColumns(leafColumns) {\n this.children.forEach((child) => {\n if (isColumn(child)) {\n leafColumns.push(child);\n } else if (isColumnGroup(child)) {\n child.addLeafColumns(leafColumns);\n }\n });\n }\n getChildren() {\n return this.children;\n }\n getColumnGroupShow() {\n return this.providedColumnGroup.getColumnGroupShow();\n }\n getProvidedColumnGroup() {\n return this.providedColumnGroup;\n }\n getPaddingLevel() {\n const parent = this.getParent();\n if (!this.isPadding() || !parent || !parent.isPadding()) {\n return 0;\n }\n return 1 + parent.getPaddingLevel();\n }\n calculateDisplayedColumns() {\n this.displayedChildren = [];\n let parentWithExpansion = this;\n while (parentWithExpansion != null && parentWithExpansion.isPadding()) {\n parentWithExpansion = parentWithExpansion.getParent();\n }\n const isExpandable = parentWithExpansion ? parentWithExpansion.getProvidedColumnGroup().isExpandable() : false;\n if (!isExpandable) {\n this.displayedChildren = this.children;\n this.dispatchLocalEvent({ type: \"displayedChildrenChanged\" });\n return;\n }\n this.children.forEach((child) => {\n const emptyGroup = isColumnGroup(child) && (!child.displayedChildren || !child.displayedChildren.length);\n if (emptyGroup) {\n return;\n }\n const headerGroupShow = child.getColumnGroupShow();\n switch (headerGroupShow) {\n case \"open\":\n if (parentWithExpansion.getProvidedColumnGroup().isExpanded()) {\n this.displayedChildren.push(child);\n }\n break;\n case \"closed\":\n if (!parentWithExpansion.getProvidedColumnGroup().isExpanded()) {\n this.displayedChildren.push(child);\n }\n break;\n default:\n this.displayedChildren.push(child);\n break;\n }\n });\n this.dispatchLocalEvent({ type: \"displayedChildrenChanged\" });\n }\n};\n\n// community-modules/core/src/columns/groupInstanceIdCreator.ts\nvar GroupInstanceIdCreator = class {\n constructor() {\n // this map contains keys to numbers, so we remember what the last call was\n this.existingIds = {};\n }\n getInstanceIdForKey(key) {\n const lastResult = this.existingIds[key];\n let result;\n if (typeof lastResult !== \"number\") {\n result = 0;\n } else {\n result = lastResult + 1;\n }\n this.existingIds[key] = result;\n return result;\n }\n};\n\n// community-modules/core/src/columns/visibleColsService.ts\nvar VisibleColsService = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"visibleColsService\";\n // for fast lookup, to see if a column or group is still visible\n this.colsAndGroupsMap = {};\n // leave level columns of the displayed trees\n this.columnsLeft = [];\n this.columnsRight = [];\n this.columnsCenter = [];\n // all three lists above combined\n this.columns = [];\n this.bodyWidth = 0;\n this.leftWidth = 0;\n this.rightWidth = 0;\n this.bodyWidthDirty = true;\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n this.columnSizeService = beans.columnSizeService;\n this.columnViewportService = beans.columnViewportService;\n this.eventDispatcher = beans.columnEventDispatcher;\n }\n refresh(source, skipTreeBuild = false) {\n if (!skipTreeBuild) {\n this.buildTrees();\n }\n this.updateOpenClosedVisibilityInColumnGroups();\n this.columnsLeft = pickDisplayedCols(this.treeLeft);\n this.columnsCenter = pickDisplayedCols(this.treeCenter);\n this.columnsRight = pickDisplayedCols(this.treeRight);\n this.joinColsAriaOrder();\n this.joinCols();\n this.setLeftValues(source);\n this.autoHeightCols = this.columns.filter((col) => col.isAutoHeight());\n this.columnSizeService.refreshFlexedColumns();\n this.updateBodyWidths();\n this.columnViewportService.checkViewportColumns(false);\n this.setFirstRightAndLastLeftPinned(source);\n this.eventDispatcher.visibleCols(source);\n }\n // after setColumnWidth or updateGroupsAndPresentedCols\n updateBodyWidths() {\n const newBodyWidth = getWidthOfColsInList(this.columnsCenter);\n const newLeftWidth = getWidthOfColsInList(this.columnsLeft);\n const newRightWidth = getWidthOfColsInList(this.columnsRight);\n this.bodyWidthDirty = this.bodyWidth !== newBodyWidth;\n const atLeastOneChanged = this.bodyWidth !== newBodyWidth || this.leftWidth !== newLeftWidth || this.rightWidth !== newRightWidth;\n if (atLeastOneChanged) {\n this.bodyWidth = newBodyWidth;\n this.leftWidth = newLeftWidth;\n this.rightWidth = newRightWidth;\n this.eventService.dispatchEvent({\n type: \"columnContainerWidthChanged\"\n });\n this.eventService.dispatchEvent({\n type: \"displayedColumnsWidthChanged\"\n });\n }\n }\n // sets the left pixel position of each column\n setLeftValues(source) {\n this.setLeftValuesOfCols(source);\n this.setLeftValuesOfGroups();\n }\n setFirstRightAndLastLeftPinned(source) {\n let lastLeft;\n let firstRight;\n if (this.gos.get(\"enableRtl\")) {\n lastLeft = this.columnsLeft ? this.columnsLeft[0] : null;\n firstRight = this.columnsRight ? _last(this.columnsRight) : null;\n } else {\n lastLeft = this.columnsLeft ? _last(this.columnsLeft) : null;\n firstRight = this.columnsRight ? this.columnsRight[0] : null;\n }\n this.columnModel.getCols().forEach((col) => {\n col.setLastLeftPinned(col === lastLeft, source);\n col.setFirstRightPinned(col === firstRight, source);\n });\n }\n buildTrees() {\n const cols = this.columnModel.getColsToShow();\n const leftCols = cols.filter((col) => col.getPinned() == \"left\");\n const rightCols = cols.filter((col) => col.getPinned() == \"right\");\n const centerCols = cols.filter((col) => col.getPinned() != \"left\" && col.getPinned() != \"right\");\n const idCreator = new GroupInstanceIdCreator();\n this.treeLeft = this.createGroups({\n columns: leftCols,\n idCreator,\n pinned: \"left\",\n oldDisplayedGroups: this.treeLeft\n });\n this.treeRight = this.createGroups({\n columns: rightCols,\n idCreator,\n pinned: \"right\",\n oldDisplayedGroups: this.treeRight\n });\n this.treeCenter = this.createGroups({\n columns: centerCols,\n idCreator,\n pinned: null,\n oldDisplayedGroups: this.treeCenter\n });\n this.updateColsAndGroupsMap();\n }\n clear() {\n this.columnsLeft = [];\n this.columnsRight = [];\n this.columnsCenter = [];\n this.columns = [];\n this.ariaOrderColumns = [];\n }\n joinColsAriaOrder() {\n const allColumns = this.columnModel.getCols();\n const pinnedLeft = [];\n const center = [];\n const pinnedRight = [];\n for (const col of allColumns) {\n const pinned = col.getPinned();\n if (!pinned) {\n center.push(col);\n } else if (pinned === true || pinned === \"left\") {\n pinnedLeft.push(col);\n } else {\n pinnedRight.push(col);\n }\n }\n this.ariaOrderColumns = pinnedLeft.concat(center).concat(pinnedRight);\n }\n getAriaColIndex(colOrGroup) {\n let col;\n if (isColumnGroup(colOrGroup)) {\n col = colOrGroup.getLeafColumns()[0];\n } else {\n col = colOrGroup;\n }\n return this.ariaOrderColumns.indexOf(col) + 1;\n }\n getAllAutoHeightCols() {\n return this.autoHeightCols;\n }\n setLeftValuesOfGroups() {\n [this.treeLeft, this.treeRight, this.treeCenter].forEach((columns) => {\n columns.forEach((column) => {\n if (isColumnGroup(column)) {\n const columnGroup = column;\n columnGroup.checkLeft();\n }\n });\n });\n }\n setLeftValuesOfCols(source) {\n const primaryCols = this.columnModel.getColDefCols();\n if (!primaryCols) {\n return;\n }\n const allColumns = this.columnModel.getCols().slice(0);\n const doingRtl = this.gos.get(\"enableRtl\");\n [this.columnsLeft, this.columnsRight, this.columnsCenter].forEach((columns) => {\n if (doingRtl) {\n let left = getWidthOfColsInList(columns);\n columns.forEach((column) => {\n left -= column.getActualWidth();\n column.setLeft(left, source);\n });\n } else {\n let left = 0;\n columns.forEach((column) => {\n column.setLeft(left, source);\n left += column.getActualWidth();\n });\n }\n _removeAllFromUnorderedArray(allColumns, columns);\n });\n allColumns.forEach((column) => {\n column.setLeft(null, source);\n });\n }\n joinCols() {\n if (this.gos.get(\"enableRtl\")) {\n this.columns = this.columnsRight.concat(this.columnsCenter).concat(this.columnsLeft);\n } else {\n this.columns = this.columnsLeft.concat(this.columnsCenter).concat(this.columnsRight);\n }\n }\n getColsCenter() {\n return this.columnsCenter;\n }\n getAllTrees() {\n if (this.treeLeft && this.treeRight && this.treeCenter) {\n return this.treeLeft.concat(this.treeCenter).concat(this.treeRight);\n }\n return null;\n }\n // + headerRenderer -> setting pinned body width\n getTreeLeft() {\n return this.treeLeft;\n }\n // + headerRenderer -> setting pinned body width\n getTreeRight() {\n return this.treeRight;\n }\n // + headerRenderer -> setting pinned body width\n getTreeCenter() {\n return this.treeCenter;\n }\n // + csvCreator\n getAllCols() {\n return this.columns;\n }\n // gridPanel -> ensureColumnVisible\n isColDisplayed(column) {\n return this.getAllCols().indexOf(column) >= 0;\n }\n getLeftColsForRow(rowNode) {\n const colSpanActive = this.columnModel.isColSpanActive();\n if (!colSpanActive) {\n return this.columnsLeft;\n }\n return this.getColsForRow(rowNode, this.columnsLeft);\n }\n getRightColsForRow(rowNode) {\n const colSpanActive = this.columnModel.isColSpanActive();\n if (!colSpanActive) {\n return this.columnsRight;\n }\n return this.getColsForRow(rowNode, this.columnsRight);\n }\n getColsForRow(rowNode, displayedColumns, filterCallback, emptySpaceBeforeColumn) {\n const result = [];\n let lastConsideredCol = null;\n for (let i = 0; i < displayedColumns.length; i++) {\n const col = displayedColumns[i];\n const maxAllowedColSpan = displayedColumns.length - i;\n const colSpan = Math.min(col.getColSpan(rowNode), maxAllowedColSpan);\n const columnsToCheckFilter = [col];\n if (colSpan > 1) {\n const colsToRemove = colSpan - 1;\n for (let j = 1; j <= colsToRemove; j++) {\n columnsToCheckFilter.push(displayedColumns[i + j]);\n }\n i += colsToRemove;\n }\n let filterPasses;\n if (filterCallback) {\n filterPasses = false;\n columnsToCheckFilter.forEach((colForFilter) => {\n if (filterCallback(colForFilter)) {\n filterPasses = true;\n }\n });\n } else {\n filterPasses = true;\n }\n if (filterPasses) {\n if (result.length === 0 && lastConsideredCol) {\n const gapBeforeColumn = emptySpaceBeforeColumn ? emptySpaceBeforeColumn(col) : false;\n if (gapBeforeColumn) {\n result.push(lastConsideredCol);\n }\n }\n result.push(col);\n }\n lastConsideredCol = col;\n }\n return result;\n }\n // used by:\n // + angularGrid -> for setting body width\n // + rowController -> setting main row widths (when inserting and resizing)\n // need to cache this\n getBodyContainerWidth() {\n return this.bodyWidth;\n }\n getContainerWidth(pinned) {\n switch (pinned) {\n case \"left\":\n return this.leftWidth;\n case \"right\":\n return this.rightWidth;\n default:\n return this.bodyWidth;\n }\n }\n // + rowController -> while inserting rows\n getCenterCols() {\n return this.columnsCenter;\n }\n // + rowController -> while inserting rows\n getLeftCols() {\n return this.columnsLeft;\n }\n getRightCols() {\n return this.columnsRight;\n }\n getColBefore(col) {\n const allDisplayedColumns = this.getAllCols();\n const oldIndex = allDisplayedColumns.indexOf(col);\n if (oldIndex > 0) {\n return allDisplayedColumns[oldIndex - 1];\n }\n return null;\n }\n getGroupAtDirection(columnGroup, direction) {\n const requiredLevel = columnGroup.getProvidedColumnGroup().getLevel() + columnGroup.getPaddingLevel();\n const colGroupLeafColumns = columnGroup.getDisplayedLeafColumns();\n const col = direction === \"After\" ? _last(colGroupLeafColumns) : colGroupLeafColumns[0];\n const getDisplayColMethod = `getCol${direction}`;\n while (true) {\n const column = this[getDisplayColMethod](col);\n if (!column) {\n return null;\n }\n const groupPointer = this.getColGroupAtLevel(column, requiredLevel);\n if (groupPointer !== columnGroup) {\n return groupPointer;\n }\n }\n }\n getColGroupAtLevel(column, level) {\n let groupPointer = column.getParent();\n let originalGroupLevel;\n let groupPointerLevel;\n while (true) {\n const groupPointerProvidedColumnGroup = groupPointer.getProvidedColumnGroup();\n originalGroupLevel = groupPointerProvidedColumnGroup.getLevel();\n groupPointerLevel = groupPointer.getPaddingLevel();\n if (originalGroupLevel + groupPointerLevel <= level) {\n break;\n }\n groupPointer = groupPointer.getParent();\n }\n return groupPointer;\n }\n isPinningLeft() {\n return this.columnsLeft.length > 0;\n }\n isPinningRight() {\n return this.columnsRight.length > 0;\n }\n updateColsAndGroupsMap() {\n this.colsAndGroupsMap = {};\n const func = (child) => {\n this.colsAndGroupsMap[child.getUniqueId()] = child;\n };\n depthFirstAllColumnTreeSearch(this.treeCenter, false, func);\n depthFirstAllColumnTreeSearch(this.treeLeft, false, func);\n depthFirstAllColumnTreeSearch(this.treeRight, false, func);\n }\n isVisible(item) {\n const fromMap = this.colsAndGroupsMap[item.getUniqueId()];\n return fromMap === item;\n }\n updateOpenClosedVisibilityInColumnGroups() {\n const allColumnGroups = this.getAllTrees();\n depthFirstAllColumnTreeSearch(allColumnGroups, false, (child) => {\n if (isColumnGroup(child)) {\n child.calculateDisplayedColumns();\n }\n });\n }\n getFirstColumn() {\n const isRtl = this.gos.get(\"enableRtl\");\n const queryOrder = [\n \"getLeftCols\",\n \"getCenterCols\",\n \"getRightCols\"\n ];\n if (isRtl) {\n queryOrder.reverse();\n }\n for (let i = 0; i < queryOrder.length; i++) {\n const container = this[queryOrder[i]]();\n if (container.length) {\n return isRtl ? _last(container) : container[0];\n }\n }\n return null;\n }\n // returns the group with matching colId and instanceId. If instanceId is missing,\n // matches only on the colId.\n getColumnGroup(colId, partId) {\n if (!colId) {\n return null;\n }\n if (isColumnGroup(colId)) {\n return colId;\n }\n const allColumnGroups = this.getAllTrees();\n const checkPartId = typeof partId === \"number\";\n let result = null;\n depthFirstAllColumnTreeSearch(allColumnGroups, false, (child) => {\n if (isColumnGroup(child)) {\n const columnGroup = child;\n let matched;\n if (checkPartId) {\n matched = colId === columnGroup.getGroupId() && partId === columnGroup.getPartId();\n } else {\n matched = colId === columnGroup.getGroupId();\n }\n if (matched) {\n result = columnGroup;\n }\n }\n });\n return result;\n }\n // used by:\n // + rowRenderer -> for navigation\n getColAfter(col) {\n const allDisplayedColumns = this.getAllCols();\n const oldIndex = allDisplayedColumns.indexOf(col);\n if (oldIndex < allDisplayedColumns.length - 1) {\n return allDisplayedColumns[oldIndex + 1];\n }\n return null;\n }\n isBodyWidthDirty() {\n return this.bodyWidthDirty;\n }\n setBodyWidthDirty() {\n this.bodyWidthDirty = true;\n }\n // used by:\n // + angularGrid -> setting pinned body width\n // note: this should be cached\n getColsLeftWidth() {\n return getWidthOfColsInList(this.columnsLeft);\n }\n // note: this should be cached\n getDisplayedColumnsRightWidth() {\n return getWidthOfColsInList(this.columnsRight);\n }\n isColAtEdge(col, edge) {\n const allColumns = this.getAllCols();\n if (!allColumns.length) {\n return false;\n }\n const isFirst = edge === \"first\";\n let columnToCompare;\n if (isColumnGroup(col)) {\n const leafColumns = col.getDisplayedLeafColumns();\n if (!leafColumns.length) {\n return false;\n }\n columnToCompare = isFirst ? leafColumns[0] : _last(leafColumns);\n } else {\n columnToCompare = col;\n }\n return (isFirst ? allColumns[0] : _last(allColumns)) === columnToCompare;\n }\n createGroups(params) {\n const { columns, idCreator, pinned, oldDisplayedGroups, isStandaloneStructure } = params;\n const oldColumnsMapped = this.mapOldGroupsById(oldDisplayedGroups);\n const topLevelResultCols = [];\n let groupsOrColsAtCurrentLevel = columns;\n while (groupsOrColsAtCurrentLevel.length) {\n const currentlyIterating = groupsOrColsAtCurrentLevel;\n groupsOrColsAtCurrentLevel = [];\n let lastGroupedColIdx = 0;\n const createGroupToIndex = (to) => {\n const from = lastGroupedColIdx;\n lastGroupedColIdx = to;\n const previousNode = currentlyIterating[from];\n const previousNodeProvided = isColumnGroup(previousNode) ? previousNode.getProvidedColumnGroup() : previousNode;\n const previousNodeParent = previousNodeProvided.getOriginalParent();\n if (previousNodeParent == null) {\n for (let i = from; i < to; i++) {\n topLevelResultCols.push(currentlyIterating[i]);\n }\n return;\n }\n const newGroup = this.createColGroup(\n previousNodeParent,\n idCreator,\n oldColumnsMapped,\n pinned,\n isStandaloneStructure\n );\n for (let i = from; i < to; i++) {\n newGroup.addChild(currentlyIterating[i]);\n }\n groupsOrColsAtCurrentLevel.push(newGroup);\n };\n for (let i = 1; i < currentlyIterating.length; i++) {\n const thisNode = currentlyIterating[i];\n const thisNodeProvided = isColumnGroup(thisNode) ? thisNode.getProvidedColumnGroup() : thisNode;\n const thisNodeParent = thisNodeProvided.getOriginalParent();\n const previousNode = currentlyIterating[lastGroupedColIdx];\n const previousNodeProvided = isColumnGroup(previousNode) ? previousNode.getProvidedColumnGroup() : previousNode;\n const previousNodeParent = previousNodeProvided.getOriginalParent();\n if (thisNodeParent !== previousNodeParent) {\n createGroupToIndex(i);\n }\n }\n if (lastGroupedColIdx < currentlyIterating.length) {\n createGroupToIndex(currentlyIterating.length);\n }\n }\n if (!isStandaloneStructure) {\n this.setupParentsIntoCols(topLevelResultCols, null);\n }\n return topLevelResultCols;\n }\n createColGroup(providedGroup, groupInstanceIdCreator, oldColumnsMapped, pinned, isStandaloneStructure) {\n const groupId = providedGroup.getGroupId();\n const instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);\n const uniqueId = createUniqueColumnGroupId(groupId, instanceId);\n let columnGroup = oldColumnsMapped[uniqueId];\n if (columnGroup && columnGroup.getProvidedColumnGroup() !== providedGroup) {\n columnGroup = null;\n }\n if (_exists(columnGroup)) {\n columnGroup.reset();\n } else {\n columnGroup = new AgColumnGroup(providedGroup, groupId, instanceId, pinned);\n if (!isStandaloneStructure) {\n this.createBean(columnGroup);\n }\n }\n return columnGroup;\n }\n // returns back a 2d map of ColumnGroup as follows: groupId -> instanceId -> ColumnGroup\n mapOldGroupsById(displayedGroups) {\n const result = {};\n const recursive = (columnsOrGroups) => {\n columnsOrGroups.forEach((columnOrGroup) => {\n if (isColumnGroup(columnOrGroup)) {\n const columnGroup = columnOrGroup;\n result[columnOrGroup.getUniqueId()] = columnGroup;\n recursive(columnGroup.getChildren());\n }\n });\n };\n if (displayedGroups) {\n recursive(displayedGroups);\n }\n return result;\n }\n setupParentsIntoCols(columnsOrGroups, parent) {\n columnsOrGroups.forEach((columnsOrGroup) => {\n columnsOrGroup.setParent(parent);\n if (isColumnGroup(columnsOrGroup)) {\n const columnGroup = columnsOrGroup;\n this.setupParentsIntoCols(columnGroup.getChildren(), columnGroup);\n }\n });\n }\n};\nfunction depthFirstAllColumnTreeSearch(tree, useDisplayedChildren, callback) {\n if (!tree) {\n return;\n }\n for (let i = 0; i < tree.length; i++) {\n const child = tree[i];\n if (isColumnGroup(child)) {\n const childTree = useDisplayedChildren ? child.getDisplayedChildren() : child.getChildren();\n depthFirstAllColumnTreeSearch(childTree, useDisplayedChildren, callback);\n }\n callback(child);\n }\n}\nfunction pickDisplayedCols(tree) {\n const res = [];\n depthFirstAllColumnTreeSearch(tree, true, (child) => {\n if (isColumn(child)) {\n res.push(child);\n }\n });\n return res;\n}\n\n// community-modules/core/src/eventTypes.ts\nvar PUBLIC_EVENTS = [\n \"columnEverythingChanged\",\n \"newColumnsLoaded\",\n \"columnPivotModeChanged\",\n \"pivotMaxColumnsExceeded\",\n \"columnRowGroupChanged\",\n \"expandOrCollapseAll\",\n \"columnPivotChanged\",\n \"gridColumnsChanged\",\n \"columnValueChanged\",\n \"columnMoved\",\n \"columnVisible\",\n \"columnPinned\",\n \"columnGroupOpened\",\n \"columnResized\",\n \"displayedColumnsChanged\",\n \"virtualColumnsChanged\",\n \"columnHeaderMouseOver\",\n \"columnHeaderMouseLeave\",\n \"columnHeaderClicked\",\n \"columnHeaderContextMenu\",\n \"asyncTransactionsFlushed\",\n \"rowGroupOpened\",\n \"rowDataUpdated\",\n \"pinnedRowDataChanged\",\n \"rangeSelectionChanged\",\n \"cellSelectionChanged\",\n \"chartCreated\",\n \"chartRangeSelectionChanged\",\n \"chartOptionsChanged\",\n \"chartDestroyed\",\n \"toolPanelVisibleChanged\",\n \"toolPanelSizeChanged\",\n \"modelUpdated\",\n \"cutStart\",\n \"cutEnd\",\n \"pasteStart\",\n \"pasteEnd\",\n \"fillStart\",\n \"fillEnd\",\n \"cellSelectionDeleteStart\",\n \"cellSelectionDeleteEnd\",\n \"rangeDeleteStart\",\n \"rangeDeleteEnd\",\n \"undoStarted\",\n \"undoEnded\",\n \"redoStarted\",\n \"redoEnded\",\n \"cellClicked\",\n \"cellDoubleClicked\",\n \"cellMouseDown\",\n \"cellContextMenu\",\n \"cellValueChanged\",\n \"cellEditRequest\",\n \"rowValueChanged\",\n \"headerFocused\",\n \"cellFocused\",\n \"rowSelected\",\n \"selectionChanged\",\n \"tooltipShow\",\n \"tooltipHide\",\n \"cellKeyDown\",\n \"cellMouseOver\",\n \"cellMouseOut\",\n \"filterChanged\",\n \"filterModified\",\n \"filterOpened\",\n \"advancedFilterBuilderVisibleChanged\",\n \"sortChanged\",\n \"virtualRowRemoved\",\n \"rowClicked\",\n \"rowDoubleClicked\",\n \"gridReady\",\n \"gridPreDestroyed\",\n \"gridSizeChanged\",\n \"viewportChanged\",\n \"firstDataRendered\",\n \"dragStarted\",\n \"dragStopped\",\n \"dragCancelled\",\n \"rowEditingStarted\",\n \"rowEditingStopped\",\n \"cellEditingStarted\",\n \"cellEditingStopped\",\n \"bodyScroll\",\n \"bodyScrollEnd\",\n \"paginationChanged\",\n \"componentStateChanged\",\n \"storeRefreshed\",\n \"stateUpdated\",\n \"columnMenuVisibleChanged\",\n \"contextMenuVisibleChanged\",\n \"rowDragEnter\",\n \"rowDragMove\",\n \"rowDragLeave\",\n \"rowDragEnd\",\n \"rowDragCancel\"\n];\nvar INTERNAL_EVENTS = [\n \"scrollbarWidthChanged\",\n \"keyShortcutChangedCellStart\",\n \"keyShortcutChangedCellEnd\",\n \"pinnedHeightChanged\",\n \"cellFocusCleared\",\n \"fullWidthRowFocused\",\n \"checkboxChanged\",\n \"heightScaleChanged\",\n \"suppressMovableColumns\",\n \"suppressMenuHide\",\n \"suppressFieldDotNotation\",\n \"columnPanelItemDragStart\",\n \"columnPanelItemDragEnd\",\n \"bodyHeightChanged\",\n \"columnContainerWidthChanged\",\n \"displayedColumnsWidthChanged\",\n \"scrollVisibilityChanged\",\n \"scrollGapChanged\",\n \"columnHoverChanged\",\n \"flashCells\",\n \"paginationPixelOffsetChanged\",\n \"displayedRowsChanged\",\n \"leftPinnedWidthChanged\",\n \"rightPinnedWidthChanged\",\n \"rowContainerHeightChanged\",\n \"headerHeightChanged\",\n \"columnGroupHeaderHeightChanged\",\n \"columnHeaderHeightChanged\",\n \"gridStylesChanged\",\n \"storeUpdated\",\n \"filterDestroyed\",\n \"rowDataUpdateStarted\",\n \"rowCountReady\",\n \"advancedFilterEnabledChanged\",\n \"dataTypesInferred\",\n \"fieldValueChanged\",\n \"fieldPickerValueSelected\",\n \"richSelectListRowSelected\",\n \"sideBarUpdated\",\n \"alignedGridScroll\",\n \"alignedGridColumn\",\n \"gridOptionsChanged\",\n \"chartTitleEdit\",\n \"recalculateRowBounds\",\n \"stickyTopOffsetChanged\",\n \"overlayExclusiveChanged\"\n];\nvar ALL_EVENTS = [...PUBLIC_EVENTS, ...INTERNAL_EVENTS];\n\n// community-modules/core/src/propertyKeys.ts\nvar INITIAL_GRID_OPTION_KEYS = {\n enableBrowserTooltips: true,\n tooltipTrigger: true,\n tooltipMouseTrack: true,\n tooltipShowMode: true,\n tooltipInteraction: true,\n defaultColGroupDef: true,\n suppressAutoSize: true,\n skipHeaderOnAutoSize: true,\n autoSizeStrategy: true,\n components: true,\n stopEditingWhenCellsLoseFocus: true,\n undoRedoCellEditing: true,\n undoRedoCellEditingLimit: true,\n excelStyles: true,\n cacheQuickFilter: true,\n advancedFilterModel: true,\n customChartThemes: true,\n chartThemeOverrides: true,\n chartToolPanelsDef: true,\n loadingCellRendererSelector: true,\n localeText: true,\n keepDetailRows: true,\n keepDetailRowsCount: true,\n detailRowHeight: true,\n detailRowAutoHeight: true,\n tabIndex: true,\n valueCache: true,\n valueCacheNeverExpires: true,\n enableCellExpressions: true,\n suppressTouch: true,\n suppressAsyncEvents: true,\n suppressBrowserResizeObserver: true,\n suppressPropertyNamesCheck: true,\n debug: true,\n dragAndDropImageComponent: true,\n loadingOverlayComponent: true,\n suppressLoadingOverlay: true,\n noRowsOverlayComponent: true,\n paginationPageSizeSelector: true,\n paginateChildRows: true,\n pivotPanelShow: true,\n pivotSuppressAutoColumn: true,\n suppressExpandablePivotGroups: true,\n aggFuncs: true,\n suppressAggFuncInHeader: true,\n allowShowChangeAfterFilter: true,\n ensureDomOrder: true,\n enableRtl: true,\n suppressColumnVirtualisation: true,\n suppressMaxRenderedRowRestriction: true,\n suppressRowVirtualisation: true,\n rowDragText: true,\n suppressGroupMaintainValueType: true,\n groupLockGroupColumns: true,\n rowGroupPanelSuppressSort: true,\n suppressGroupRowsSticky: true,\n rowModelType: true,\n cacheOverflowSize: true,\n infiniteInitialRowCount: true,\n serverSideInitialRowCount: true,\n suppressServerSideInfiniteScroll: true,\n maxBlocksInCache: true,\n maxConcurrentDatasourceRequests: true,\n blockLoadDebounceMillis: true,\n serverSideOnlyRefreshFilteredGroups: true,\n serverSidePivotResultFieldSeparator: true,\n viewportRowModelPageSize: true,\n viewportRowModelBufferSize: true,\n debounceVerticalScrollbar: true,\n suppressAnimationFrame: true,\n suppressPreventDefaultOnMouseWheel: true,\n scrollbarWidth: true,\n icons: true,\n suppressRowTransform: true,\n gridId: true,\n enableGroupEdit: true,\n initialState: true,\n processUnpinnedColumns: true,\n createChartContainer: true,\n getLocaleText: true,\n getRowId: true,\n reactiveCustomComponents: true,\n columnMenu: true,\n suppressSetFilterByDefault: true\n};\nvar _PropertyKeys = class _PropertyKeys {\n};\n_PropertyKeys.STRING_PROPERTIES = [\n \"overlayLoadingTemplate\",\n \"overlayNoRowsTemplate\",\n \"gridId\",\n \"quickFilterText\",\n \"rowModelType\",\n \"editType\",\n \"domLayout\",\n \"clipboardDelimiter\",\n \"rowGroupPanelShow\",\n \"multiSortKey\",\n \"pivotColumnGroupTotals\",\n \"pivotRowTotals\",\n \"pivotPanelShow\",\n \"fillHandleDirection\",\n \"groupDisplayType\",\n \"treeDataDisplayType\",\n \"colResizeDefault\",\n \"tooltipTrigger\",\n \"serverSidePivotResultFieldSeparator\",\n \"columnMenu\",\n \"tooltipShowMode\",\n \"grandTotalRow\"\n];\n_PropertyKeys.OBJECT_PROPERTIES = [\n \"components\",\n \"rowStyle\",\n \"context\",\n \"autoGroupColumnDef\",\n \"localeText\",\n \"icons\",\n \"datasource\",\n \"dragAndDropImageComponentParams\",\n \"serverSideDatasource\",\n \"viewportDatasource\",\n \"groupRowRendererParams\",\n \"aggFuncs\",\n \"fullWidthCellRendererParams\",\n \"defaultColGroupDef\",\n \"defaultColDef\",\n \"defaultCsvExportParams\",\n \"defaultExcelExportParams\",\n \"columnTypes\",\n \"rowClassRules\",\n \"detailCellRendererParams\",\n \"loadingCellRendererParams\",\n \"loadingOverlayComponentParams\",\n \"noRowsOverlayComponentParams\",\n \"popupParent\",\n \"statusBar\",\n \"sideBar\",\n \"theme\",\n \"chartThemeOverrides\",\n \"customChartThemes\",\n \"chartToolPanelsDef\",\n \"dataTypeDefinitions\",\n \"advancedFilterModel\",\n \"advancedFilterParent\",\n \"advancedFilterBuilderParams\",\n \"initialState\",\n \"autoSizeStrategy\",\n \"cellSelection\",\n \"selectionColumnDef\"\n];\n_PropertyKeys.ARRAY_PROPERTIES = [\n \"sortingOrder\",\n \"alignedGrids\",\n \"rowData\",\n \"columnDefs\",\n \"excelStyles\",\n \"pinnedTopRowData\",\n \"pinnedBottomRowData\",\n \"chartThemes\",\n \"rowClass\",\n \"paginationPageSizeSelector\"\n];\n// These properties are coerced at runtime, do not do union types\n_PropertyKeys.NUMBER_PROPERTIES = [\n \"rowHeight\",\n \"detailRowHeight\",\n \"rowBuffer\",\n \"headerHeight\",\n \"groupHeaderHeight\",\n \"groupLockGroupColumns\",\n \"floatingFiltersHeight\",\n \"pivotHeaderHeight\",\n \"pivotGroupHeaderHeight\",\n \"groupDefaultExpanded\",\n \"pivotDefaultExpanded\",\n \"viewportRowModelPageSize\",\n \"viewportRowModelBufferSize\",\n \"autoSizePadding\",\n \"maxBlocksInCache\",\n \"maxConcurrentDatasourceRequests\",\n \"tooltipShowDelay\",\n \"tooltipHideDelay\",\n \"cacheOverflowSize\",\n \"paginationPageSize\",\n \"cacheBlockSize\",\n \"infiniteInitialRowCount\",\n \"serverSideInitialRowCount\",\n \"scrollbarWidth\",\n \"asyncTransactionWaitMillis\",\n \"blockLoadDebounceMillis\",\n \"keepDetailRowsCount\",\n \"undoRedoCellEditingLimit\",\n \"cellFlashDelay\",\n \"cellFadeDelay\",\n \"cellFlashDuration\",\n \"cellFadeDuration\",\n \"tabIndex\",\n \"pivotMaxGeneratedColumns\"\n];\n// These properties are coerced at runtime, do not do union types\n_PropertyKeys.BOOLEAN_PROPERTIES = [\n \"suppressMakeColumnVisibleAfterUnGroup\",\n \"suppressRowClickSelection\",\n \"suppressCellFocus\",\n \"suppressHeaderFocus\",\n \"suppressHorizontalScroll\",\n \"groupSelectsChildren\",\n \"alwaysShowHorizontalScroll\",\n \"alwaysShowVerticalScroll\",\n \"debug\",\n \"enableBrowserTooltips\",\n \"enableCellExpressions\",\n \"groupIncludeTotalFooter\",\n \"groupSuppressBlankHeader\",\n \"suppressMenuHide\",\n \"suppressRowDeselection\",\n \"unSortIcon\",\n \"suppressMultiSort\",\n \"alwaysMultiSort\",\n \"singleClickEdit\",\n \"suppressLoadingOverlay\",\n \"suppressNoRowsOverlay\",\n \"suppressAutoSize\",\n \"skipHeaderOnAutoSize\",\n \"suppressColumnMoveAnimation\",\n \"suppressMoveWhenColumnDragging\",\n \"suppressMovableColumns\",\n \"suppressFieldDotNotation\",\n \"enableRangeSelection\",\n \"enableRangeHandle\",\n \"enableFillHandle\",\n \"suppressClearOnFillReduction\",\n \"deltaSort\",\n \"suppressTouch\",\n \"suppressAsyncEvents\",\n \"allowContextMenuWithControlKey\",\n \"suppressContextMenu\",\n \"enableCellChangeFlash\",\n \"suppressDragLeaveHidesColumns\",\n \"suppressRowGroupHidesColumns\",\n \"suppressMiddleClickScrolls\",\n \"suppressPreventDefaultOnMouseWheel\",\n \"suppressCopyRowsToClipboard\",\n \"copyHeadersToClipboard\",\n \"copyGroupHeadersToClipboard\",\n \"pivotMode\",\n \"suppressAggFuncInHeader\",\n \"suppressColumnVirtualisation\",\n \"alwaysAggregateAtRootLevel\",\n \"suppressFocusAfterRefresh\",\n \"functionsReadOnly\",\n \"animateRows\",\n \"groupSelectsFiltered\",\n \"groupRemoveSingleChildren\",\n \"groupRemoveLowestSingleChildren\",\n \"enableRtl\",\n \"suppressClickEdit\",\n \"rowDragEntireRow\",\n \"rowDragManaged\",\n \"suppressRowDrag\",\n \"suppressMoveWhenRowDragging\",\n \"rowDragMultiRow\",\n \"enableGroupEdit\",\n \"embedFullWidthRows\",\n \"suppressPaginationPanel\",\n \"groupHideOpenParents\",\n \"groupAllowUnbalanced\",\n \"pagination\",\n \"paginationAutoPageSize\",\n \"suppressScrollOnNewData\",\n \"suppressScrollWhenPopupsAreOpen\",\n \"purgeClosedRowNodes\",\n \"cacheQuickFilter\",\n \"includeHiddenColumnsInQuickFilter\",\n \"ensureDomOrder\",\n \"accentedSort\",\n \"suppressChangeDetection\",\n \"valueCache\",\n \"valueCacheNeverExpires\",\n \"aggregateOnlyChangedColumns\",\n \"suppressAnimationFrame\",\n \"suppressExcelExport\",\n \"suppressCsvExport\",\n \"includeHiddenColumnsInAdvancedFilter\",\n \"suppressMultiRangeSelection\",\n \"enterNavigatesVerticallyAfterEdit\",\n \"enterNavigatesVertically\",\n \"suppressPropertyNamesCheck\",\n \"rowMultiSelectWithClick\",\n \"suppressRowHoverHighlight\",\n \"suppressRowTransform\",\n \"suppressClipboardPaste\",\n \"suppressLastEmptyLineOnPaste\",\n \"enableCharts\",\n \"suppressMaintainUnsortedOrder\",\n \"enableCellTextSelection\",\n \"suppressBrowserResizeObserver\",\n \"suppressMaxRenderedRowRestriction\",\n \"excludeChildrenWhenTreeDataFiltering\",\n \"tooltipMouseTrack\",\n \"tooltipInteraction\",\n \"keepDetailRows\",\n \"paginateChildRows\",\n \"preventDefaultOnContextMenu\",\n \"undoRedoCellEditing\",\n \"allowDragFromColumnsToolPanel\",\n \"pivotSuppressAutoColumn\",\n \"suppressExpandablePivotGroups\",\n \"debounceVerticalScrollbar\",\n \"detailRowAutoHeight\",\n \"serverSideSortAllLevels\",\n \"serverSideEnableClientSideSort\",\n \"serverSideOnlyRefreshFilteredGroups\",\n \"serverSideSortOnServer\",\n \"serverSideFilterOnServer\",\n \"suppressAggFilteredOnly\",\n \"showOpenedGroup\",\n \"suppressClipboardApi\",\n \"suppressModelUpdateAfterUpdateTransaction\",\n \"stopEditingWhenCellsLoseFocus\",\n \"groupMaintainOrder\",\n \"columnHoverHighlight\",\n \"readOnlyEdit\",\n \"suppressRowVirtualisation\",\n \"enableCellEditingOnBackspace\",\n \"resetRowDataOnUpdate\",\n \"removePivotHeaderRowWhenSingleValueColumn\",\n \"suppressCopySingleCellRanges\",\n \"suppressGroupRowsSticky\",\n \"suppressCutToClipboard\",\n \"suppressServerSideInfiniteScroll\",\n \"rowGroupPanelSuppressSort\",\n \"allowShowChangeAfterFilter\",\n \"enableAdvancedFilter\",\n \"masterDetail\",\n \"treeData\",\n \"suppressGroupMaintainValueType\",\n \"reactiveCustomComponents\",\n \"applyQuickFilterBeforePivotOrAgg\",\n \"suppressServerSideFullWidthLoadingRow\",\n \"suppressAdvancedFilterEval\",\n \"loading\",\n \"maintainColumnOrder\",\n \"enableStrictPivotColumnOrder\",\n \"suppressSetFilterByDefault\"\n];\n// If property does not fit above, i.e union that should not be coerced.\n_PropertyKeys.OTHER_PROPERTIES = [\n \"suppressStickyTotalRow\",\n // needs avoid coercion to boolean so that we can warn if it's unset\n \"loadThemeGoogleFonts\",\n \"rowSelection\"\n];\n_PropertyKeys.FUNCTION_PROPERTIES = [\n \"doesExternalFilterPass\",\n \"processPivotResultColDef\",\n \"processPivotResultColGroupDef\",\n \"getBusinessKeyForNode\",\n \"isRowSelectable\",\n \"rowDragText\",\n \"groupRowRenderer\",\n \"dragAndDropImageComponent\",\n \"fullWidthCellRenderer\",\n \"loadingCellRenderer\",\n \"loadingOverlayComponent\",\n \"noRowsOverlayComponent\",\n \"detailCellRenderer\",\n \"quickFilterParser\",\n \"quickFilterMatcher\",\n \"getLocaleText\",\n \"isExternalFilterPresent\",\n \"getRowHeight\",\n \"getRowClass\",\n \"getRowStyle\",\n \"getContextMenuItems\",\n \"getMainMenuItems\",\n \"processRowPostCreate\",\n \"processCellForClipboard\",\n \"getGroupRowAgg\",\n \"isFullWidthRow\",\n \"sendToClipboard\",\n \"focusGridInnerElement\",\n \"navigateToNextHeader\",\n \"tabToNextHeader\",\n \"navigateToNextCell\",\n \"tabToNextCell\",\n \"processCellFromClipboard\",\n \"getDocument\",\n \"postProcessPopup\",\n \"getChildCount\",\n \"getDataPath\",\n \"isRowMaster\",\n \"postSortRows\",\n \"processHeaderForClipboard\",\n \"processUnpinnedColumns\",\n \"processGroupHeaderForClipboard\",\n \"paginationNumberFormatter\",\n \"processDataFromClipboard\",\n \"getServerSideGroupKey\",\n \"isServerSideGroup\",\n \"createChartContainer\",\n \"getChartToolbarItems\",\n \"fillOperation\",\n \"isApplyServerSideTransaction\",\n \"getServerSideGroupLevelParams\",\n \"isServerSideGroupOpenByDefault\",\n \"isGroupOpenByDefault\",\n \"initialGroupOrderComparator\",\n \"groupIncludeFooter\",\n \"loadingCellRendererSelector\",\n \"getRowId\",\n \"groupAggFiltering\",\n \"chartMenuItems\",\n \"groupTotalRow\"\n];\n_PropertyKeys.ALL_PROPERTIES = [\n ..._PropertyKeys.ARRAY_PROPERTIES,\n ..._PropertyKeys.OBJECT_PROPERTIES,\n ..._PropertyKeys.STRING_PROPERTIES,\n ..._PropertyKeys.NUMBER_PROPERTIES,\n ..._PropertyKeys.FUNCTION_PROPERTIES,\n ..._PropertyKeys.BOOLEAN_PROPERTIES,\n ..._PropertyKeys.OTHER_PROPERTIES\n];\nvar PropertyKeys = _PropertyKeys;\n\n// community-modules/core/src/components/componentUtil.ts\nvar _ComponentUtil = class _ComponentUtil {\n static getCallbackForEvent(eventName) {\n if (!eventName || eventName.length < 2) {\n return eventName;\n }\n return \"on\" + eventName[0].toUpperCase() + eventName.substring(1);\n }\n};\n_ComponentUtil.VUE_OMITTED_PROPERTY = \"AG-VUE-OMITTED-PROPERTY\";\n_ComponentUtil.PUBLIC_EVENTS = PUBLIC_EVENTS;\n// onXXX methods, based on the above events\n_ComponentUtil.EVENT_CALLBACKS = ALL_EVENTS.map((event) => _ComponentUtil.getCallbackForEvent(event));\n_ComponentUtil.BOOLEAN_PROPERTIES = PropertyKeys.BOOLEAN_PROPERTIES;\n_ComponentUtil.ALL_PROPERTIES = PropertyKeys.ALL_PROPERTIES;\n_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS = [..._ComponentUtil.ALL_PROPERTIES, ..._ComponentUtil.EVENT_CALLBACKS];\n_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS_SET = new Set(_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS);\nvar ComponentUtil = _ComponentUtil;\nfunction _combineAttributesAndGridOptions(gridOptions, component) {\n if (typeof gridOptions !== \"object\") {\n gridOptions = {};\n }\n const mergedOptions = { ...gridOptions };\n const keys = ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS;\n keys.forEach((key) => {\n const value = component[key];\n if (typeof value !== \"undefined\" && value !== ComponentUtil.VUE_OMITTED_PROPERTY) {\n mergedOptions[key] = value;\n }\n });\n return mergedOptions;\n}\nfunction _processOnChange(changes, api) {\n if (!changes) {\n return;\n }\n const gridChanges = {};\n let hasChanges = false;\n Object.keys(changes).filter((key) => ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS_SET.has(key)).forEach((key) => {\n gridChanges[key] = changes[key];\n hasChanges = true;\n });\n if (!hasChanges) {\n return;\n }\n const internalUpdateEvent = {\n type: \"gridOptionsChanged\",\n options: gridChanges\n };\n api.dispatchEvent(internalUpdateEvent);\n const event = {\n type: \"componentStateChanged\"\n };\n _iterateObject(gridChanges, (key, value) => {\n event[key] = value;\n });\n api.dispatchEvent(event);\n}\n\n// community-modules/core/src/components/emptyBean.ts\nvar EmptyBean = class extends BeanStub {\n};\nfunction setupCompBean(ctrl, ctx, compBean) {\n if (compBean) {\n ctrl.addDestroyFunc(() => ctx.destroyBean(compBean));\n }\n return compBean ?? ctrl;\n}\n\n// community-modules/core/src/rendering/cssClassManager.ts\nvar CssClassManager = class {\n constructor(getGui) {\n // to minimise DOM hits, we only apply CSS classes if they have changed. as adding a CSS class that is already\n // there, or removing one that wasn't present, all takes CPU.\n this.cssClassStates = {};\n this.getGui = getGui;\n }\n addCssClass(className) {\n const list = (className || \"\").split(\" \");\n if (list.length > 1) {\n list.forEach((cls) => this.addCssClass(cls));\n return;\n }\n const updateNeeded = this.cssClassStates[className] !== true;\n if (updateNeeded && className.length) {\n const eGui = this.getGui();\n if (eGui) {\n eGui.classList.add(className);\n }\n this.cssClassStates[className] = true;\n }\n }\n removeCssClass(className) {\n const list = (className || \"\").split(\" \");\n if (list.length > 1) {\n list.forEach((cls) => this.removeCssClass(cls));\n return;\n }\n const updateNeeded = this.cssClassStates[className] !== false;\n if (updateNeeded && className.length) {\n const eGui = this.getGui();\n if (eGui) {\n eGui.classList.remove(className);\n }\n this.cssClassStates[className] = false;\n }\n }\n containsCssClass(className) {\n const eGui = this.getGui();\n if (!eGui) {\n return false;\n }\n return eGui.classList.contains(className);\n }\n addOrRemoveCssClass(className, addOrRemove) {\n if (!className) {\n return;\n }\n if (className.indexOf(\" \") >= 0) {\n const list = (className || \"\").split(\" \");\n if (list.length > 1) {\n list.forEach((cls) => this.addOrRemoveCssClass(cls, addOrRemove));\n return;\n }\n }\n const updateNeeded = this.cssClassStates[className] !== addOrRemove;\n if (updateNeeded && className.length) {\n const eGui = this.getGui();\n if (eGui) {\n eGui.classList.toggle(className, addOrRemove);\n }\n this.cssClassStates[className] = addOrRemove;\n }\n }\n};\n\n// community-modules/core/src/utils/aria.ts\nfunction _toggleAriaAttribute(element, attribute, value) {\n if (value == null || typeof value === \"string\" && value == \"\") {\n _removeAriaAttribute(element, attribute);\n } else {\n _setAriaAttribute(element, attribute, value);\n }\n}\nfunction _setAriaAttribute(element, attribute, value) {\n element.setAttribute(_ariaAttributeName(attribute), value.toString());\n}\nfunction _removeAriaAttribute(element, attribute) {\n element.removeAttribute(_ariaAttributeName(attribute));\n}\nfunction _ariaAttributeName(attribute) {\n return `aria-${attribute}`;\n}\nfunction _setAriaRole(element, role) {\n if (role) {\n element.setAttribute(\"role\", role);\n } else {\n element.removeAttribute(\"role\");\n }\n}\nfunction _getAriaSortState(sortDirection) {\n let sort;\n if (sortDirection === \"asc\") {\n sort = \"ascending\";\n } else if (sortDirection === \"desc\") {\n sort = \"descending\";\n } else if (sortDirection === \"mixed\") {\n sort = \"other\";\n } else {\n sort = \"none\";\n }\n return sort;\n}\nfunction _getAriaPosInSet(element) {\n return parseInt(element.getAttribute(\"aria-posinset\"), 10);\n}\nfunction _getAriaLabel(element) {\n return element.getAttribute(\"aria-label\");\n}\nfunction _setAriaLabel(element, label) {\n _toggleAriaAttribute(element, \"label\", label);\n}\nfunction _setAriaLabelledBy(element, labelledBy) {\n _toggleAriaAttribute(element, \"labelledby\", labelledBy);\n}\nfunction _setAriaDescribedBy(element, describedby) {\n _toggleAriaAttribute(element, \"describedby\", describedby);\n}\nfunction _setAriaLive(element, live) {\n _toggleAriaAttribute(element, \"live\", live);\n}\nfunction _setAriaAtomic(element, atomic) {\n _toggleAriaAttribute(element, \"atomic\", atomic);\n}\nfunction _setAriaRelevant(element, relevant) {\n _toggleAriaAttribute(element, \"relevant\", relevant);\n}\nfunction _setAriaLevel(element, level) {\n _toggleAriaAttribute(element, \"level\", level);\n}\nfunction _setAriaDisabled(element, disabled) {\n _toggleAriaAttribute(element, \"disabled\", disabled);\n}\nfunction _setAriaHidden(element, hidden) {\n _toggleAriaAttribute(element, \"hidden\", hidden);\n}\nfunction _setAriaActiveDescendant(element, descendantId) {\n _toggleAriaAttribute(element, \"activedescendant\", descendantId);\n}\nfunction _setAriaExpanded(element, expanded) {\n _setAriaAttribute(element, \"expanded\", expanded);\n}\nfunction _removeAriaExpanded(element) {\n _removeAriaAttribute(element, \"expanded\");\n}\nfunction _setAriaSetSize(element, setsize) {\n _setAriaAttribute(element, \"setsize\", setsize);\n}\nfunction _setAriaPosInSet(element, position) {\n _setAriaAttribute(element, \"posinset\", position);\n}\nfunction _setAriaMultiSelectable(element, multiSelectable) {\n _setAriaAttribute(element, \"multiselectable\", multiSelectable);\n}\nfunction _setAriaRowCount(element, rowCount) {\n _setAriaAttribute(element, \"rowcount\", rowCount);\n}\nfunction _setAriaRowIndex(element, rowIndex) {\n _setAriaAttribute(element, \"rowindex\", rowIndex);\n}\nfunction _setAriaColCount(element, colCount) {\n _setAriaAttribute(element, \"colcount\", colCount);\n}\nfunction _setAriaColIndex(element, colIndex) {\n _setAriaAttribute(element, \"colindex\", colIndex);\n}\nfunction _setAriaColSpan(element, colSpan) {\n _setAriaAttribute(element, \"colspan\", colSpan);\n}\nfunction _setAriaSort(element, sort) {\n _setAriaAttribute(element, \"sort\", sort);\n}\nfunction _removeAriaSort(element) {\n _removeAriaAttribute(element, \"sort\");\n}\nfunction _setAriaSelected(element, selected) {\n _toggleAriaAttribute(element, \"selected\", selected);\n}\nfunction _setAriaChecked(element, checked) {\n _setAriaAttribute(element, \"checked\", checked === void 0 ? \"mixed\" : checked);\n}\nfunction _setAriaControls(controllerElement, controlledElement) {\n _toggleAriaAttribute(controllerElement, \"controls\", controlledElement.id);\n _setAriaLabelledBy(controlledElement, controllerElement.id);\n}\nfunction _getAriaCheckboxStateName(translate, state) {\n return state === void 0 ? translate(\"ariaIndeterminate\", \"indeterminate\") : state === true ? translate(\"ariaChecked\", \"checked\") : translate(\"ariaUnchecked\", \"unchecked\");\n}\n\n// community-modules/core/src/utils/browser.ts\nvar isSafari;\nvar safariVersion;\nvar isChrome;\nvar isFirefox;\nvar isMacOs;\nvar isIOS;\nvar invisibleScrollbar;\nvar browserScrollbarWidth;\nvar maxDivHeight;\nfunction _isBrowserSafari() {\n if (isSafari === void 0) {\n isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n }\n return isSafari;\n}\nfunction _getSafariVersion() {\n if (safariVersion === void 0) {\n if (_isBrowserSafari()) {\n const versionMatch = navigator.userAgent.match(/version\\/(\\d+)/i);\n if (versionMatch) {\n safariVersion = versionMatch[1] != null ? parseFloat(versionMatch[1]) : 0;\n }\n } else {\n safariVersion = 0;\n }\n }\n return safariVersion;\n}\nfunction _isBrowserChrome() {\n if (isChrome === void 0) {\n const win = window;\n isChrome = !!win.chrome && (!!win.chrome.webstore || !!win.chrome.runtime) || /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n }\n return isChrome;\n}\nfunction _isBrowserFirefox() {\n if (isFirefox === void 0) {\n isFirefox = /(firefox)/i.test(navigator.userAgent);\n }\n return isFirefox;\n}\nfunction _isMacOsUserAgent() {\n if (isMacOs === void 0) {\n isMacOs = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n }\n return isMacOs;\n}\nfunction _isIOSUserAgent() {\n if (isIOS === void 0) {\n isIOS = /iPad|iPhone|iPod/.test(navigator.platform) || navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1;\n }\n return isIOS;\n}\nfunction _browserSupportsPreventScroll() {\n return !_isBrowserSafari() || _getSafariVersion() >= 15;\n}\nfunction _getTabIndex(el) {\n if (!el) {\n return null;\n }\n const numberTabIndex = el.tabIndex;\n const tabIndex = el.getAttribute(\"tabIndex\");\n if (numberTabIndex === -1 && (tabIndex === null || tabIndex === \"\" && !_isBrowserFirefox())) {\n return null;\n }\n return numberTabIndex.toString();\n}\nfunction _getMaxDivHeight() {\n if (maxDivHeight !== void 0) {\n return maxDivHeight;\n }\n if (!document.body) {\n return -1;\n }\n let res = 1e6;\n const testUpTo = _isBrowserFirefox() ? 6e6 : 1e9;\n const div = document.createElement(\"div\");\n document.body.appendChild(div);\n while (true) {\n const test = res * 2;\n div.style.height = test + \"px\";\n if (test > testUpTo || div.clientHeight !== test) {\n break;\n } else {\n res = test;\n }\n }\n document.body.removeChild(div);\n maxDivHeight = res;\n return res;\n}\nfunction _getBodyWidth() {\n return document.body?.clientWidth ?? (window.innerHeight || document.documentElement?.clientWidth || -1);\n}\nfunction _getBodyHeight() {\n return document.body?.clientHeight ?? (window.innerHeight || document.documentElement?.clientHeight || -1);\n}\nfunction _getScrollbarWidth() {\n if (browserScrollbarWidth == null) {\n initScrollbarWidthAndVisibility();\n }\n return browserScrollbarWidth;\n}\nfunction initScrollbarWidthAndVisibility() {\n const body = document.body;\n const div = document.createElement(\"div\");\n div.style.width = div.style.height = \"100px\";\n div.style.opacity = \"0\";\n div.style.overflow = \"scroll\";\n div.style.msOverflowStyle = \"scrollbar\";\n div.style.position = \"absolute\";\n body.appendChild(div);\n let width = div.offsetWidth - div.clientWidth;\n if (width === 0 && div.clientWidth === 0) {\n width = null;\n }\n if (div.parentNode) {\n div.parentNode.removeChild(div);\n }\n if (width != null) {\n browserScrollbarWidth = width;\n invisibleScrollbar = width === 0;\n }\n}\nfunction _isInvisibleScrollbar() {\n if (invisibleScrollbar == null) {\n initScrollbarWidthAndVisibility();\n }\n return invisibleScrollbar;\n}\n\n// community-modules/core/src/utils/dom.ts\nvar rtlNegativeScroll;\nfunction _radioCssClass(element, elementClass, otherElementClass) {\n const parent = element.parentElement;\n let sibling = parent && parent.firstChild;\n while (sibling) {\n if (elementClass) {\n sibling.classList.toggle(elementClass, sibling === element);\n }\n if (otherElementClass) {\n sibling.classList.toggle(otherElementClass, sibling !== element);\n }\n sibling = sibling.nextSibling;\n }\n}\nvar FOCUSABLE_SELECTOR = \"[tabindex], input, select, button, textarea, [href]\";\nvar FOCUSABLE_EXCLUDE = \"[disabled], .ag-disabled:not(.ag-button), .ag-disabled *\";\nfunction _isFocusableFormField(element) {\n const matches = Element.prototype.matches || Element.prototype.msMatchesSelector;\n const inputSelector = \"input, select, button, textarea\";\n const isFocusable = matches.call(element, inputSelector);\n const isNotFocusable = matches.call(element, FOCUSABLE_EXCLUDE);\n const isElementVisible = _isVisible(element);\n const focusable = isFocusable && !isNotFocusable && isElementVisible;\n return focusable;\n}\nfunction _setDisplayed(element, displayed, options = {}) {\n const { skipAriaHidden } = options;\n element.classList.toggle(\"ag-hidden\", !displayed);\n if (!skipAriaHidden) {\n _setAriaHidden(element, !displayed);\n }\n}\nfunction _setVisible(element, visible, options = {}) {\n const { skipAriaHidden } = options;\n element.classList.toggle(\"ag-invisible\", !visible);\n if (!skipAriaHidden) {\n _setAriaHidden(element, !visible);\n }\n}\nfunction _setDisabled(element, disabled) {\n const attributeName = \"disabled\";\n const addOrRemoveDisabledAttribute = disabled ? (e) => e.setAttribute(attributeName, \"\") : (e) => e.removeAttribute(attributeName);\n addOrRemoveDisabledAttribute(element);\n _nodeListForEach(element.querySelectorAll(\"input\"), (input) => addOrRemoveDisabledAttribute(input));\n}\nfunction _isElementChildOfClass(element, cls, maxNest) {\n let counter = 0;\n while (element) {\n if (element.classList.contains(cls)) {\n return true;\n }\n element = element.parentElement;\n if (typeof maxNest == \"number\") {\n if (++counter > maxNest) {\n break;\n }\n } else if (element === maxNest) {\n break;\n }\n }\n return false;\n}\nfunction _getElementSize(el) {\n const {\n height,\n width,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n boxSizing\n } = window.getComputedStyle(el);\n return {\n height: parseFloat(height || \"0\"),\n width: parseFloat(width || \"0\"),\n borderTopWidth: parseFloat(borderTopWidth || \"0\"),\n borderRightWidth: parseFloat(borderRightWidth || \"0\"),\n borderBottomWidth: parseFloat(borderBottomWidth || \"0\"),\n borderLeftWidth: parseFloat(borderLeftWidth || \"0\"),\n paddingTop: parseFloat(paddingTop || \"0\"),\n paddingRight: parseFloat(paddingRight || \"0\"),\n paddingBottom: parseFloat(paddingBottom || \"0\"),\n paddingLeft: parseFloat(paddingLeft || \"0\"),\n marginTop: parseFloat(marginTop || \"0\"),\n marginRight: parseFloat(marginRight || \"0\"),\n marginBottom: parseFloat(marginBottom || \"0\"),\n marginLeft: parseFloat(marginLeft || \"0\"),\n boxSizing\n };\n}\nfunction _getInnerHeight(el) {\n const size = _getElementSize(el);\n if (size.boxSizing === \"border-box\") {\n return size.height - size.paddingTop - size.paddingBottom;\n }\n return size.height;\n}\nfunction _getInnerWidth(el) {\n const size = _getElementSize(el);\n if (size.boxSizing === \"border-box\") {\n return size.width - size.paddingLeft - size.paddingRight;\n }\n return size.width;\n}\nfunction _getAbsoluteHeight(el) {\n const { height, marginBottom, marginTop } = _getElementSize(el);\n return Math.floor(height + marginBottom + marginTop);\n}\nfunction _getAbsoluteWidth(el) {\n const { width, marginLeft, marginRight } = _getElementSize(el);\n return Math.floor(width + marginLeft + marginRight);\n}\nfunction _getElementRectWithOffset(el) {\n const offsetElementRect = el.getBoundingClientRect();\n const { borderTopWidth, borderLeftWidth, borderRightWidth, borderBottomWidth } = _getElementSize(el);\n return {\n top: offsetElementRect.top + (borderTopWidth || 0),\n left: offsetElementRect.left + (borderLeftWidth || 0),\n right: offsetElementRect.right + (borderRightWidth || 0),\n bottom: offsetElementRect.bottom + (borderBottomWidth || 0)\n };\n}\nfunction _isRtlNegativeScroll() {\n if (typeof rtlNegativeScroll === \"boolean\") {\n return rtlNegativeScroll;\n }\n const template = document.createElement(\"div\");\n template.style.direction = \"rtl\";\n template.style.width = \"1px\";\n template.style.height = \"1px\";\n template.style.position = \"fixed\";\n template.style.top = \"0px\";\n template.style.overflow = \"hidden\";\n template.dir = \"rtl\";\n template.innerHTML = /* html */\n `
\n \n \n
`;\n document.body.appendChild(template);\n template.scrollLeft = 1;\n rtlNegativeScroll = Math.floor(template.scrollLeft) === 0;\n document.body.removeChild(template);\n return rtlNegativeScroll;\n}\nfunction _getScrollLeft(element, rtl) {\n let scrollLeft = element.scrollLeft;\n if (rtl) {\n scrollLeft = Math.abs(scrollLeft);\n if (_isBrowserChrome() && !_isRtlNegativeScroll()) {\n scrollLeft = element.scrollWidth - element.getBoundingClientRect().width - scrollLeft;\n }\n }\n return scrollLeft;\n}\nfunction _setScrollLeft(element, value, rtl) {\n if (rtl) {\n if (_isRtlNegativeScroll()) {\n value *= -1;\n } else if (_isBrowserSafari() || _isBrowserChrome()) {\n value = element.scrollWidth - element.getBoundingClientRect().width - value;\n }\n }\n element.scrollLeft = value;\n}\nfunction _clearElement(el) {\n while (el && el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\nfunction _removeFromParent(node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction _isInDOM(element) {\n return !!element.offsetParent;\n}\nfunction _isVisible(element) {\n const el = element;\n if (el.checkVisibility) {\n return el.checkVisibility({ checkVisibilityCSS: true });\n }\n const isHidden = !_isInDOM(element) || window.getComputedStyle(element).visibility !== \"visible\";\n return !isHidden;\n}\nfunction _loadTemplate(template) {\n const tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = (template || \"\").trim();\n return tempDiv.firstChild;\n}\nfunction _ensureDomOrder(eContainer, eChild, eChildBefore) {\n if (eChildBefore && eChildBefore.nextSibling === eChild) {\n return;\n }\n if (eChildBefore) {\n if (eChildBefore.nextSibling) {\n eContainer.insertBefore(eChild, eChildBefore.nextSibling);\n } else {\n eContainer.appendChild(eChild);\n }\n } else {\n if (eContainer.firstChild && eContainer.firstChild !== eChild) {\n eContainer.insertAdjacentElement(\"afterbegin\", eChild);\n }\n }\n}\nfunction _setDomChildOrder(eContainer, orderedChildren) {\n for (let i = 0; i < orderedChildren.length; i++) {\n const correctCellAtIndex = orderedChildren[i];\n const actualCellAtIndex = eContainer.children[i];\n if (actualCellAtIndex !== correctCellAtIndex) {\n eContainer.insertBefore(correctCellAtIndex, actualCellAtIndex);\n }\n }\n}\nfunction _insertWithDomOrder(eContainer, eToInsert, eChildBefore) {\n if (eChildBefore) {\n eChildBefore.insertAdjacentElement(\"afterend\", eToInsert);\n } else {\n if (eContainer.firstChild) {\n eContainer.insertAdjacentElement(\"afterbegin\", eToInsert);\n } else {\n eContainer.appendChild(eToInsert);\n }\n }\n}\nfunction _addStylesToElement(eElement, styles) {\n if (!styles) {\n return;\n }\n for (const [key, value] of Object.entries(styles)) {\n if (!key || !key.length || value == null) {\n continue;\n }\n const parsedKey = _camelCaseToHyphenated(key);\n const valueAsString = value.toString();\n const parsedValue = valueAsString.replace(/\\s*!important/g, \"\");\n const priority = parsedValue.length != valueAsString.length ? \"important\" : void 0;\n eElement.style.setProperty(parsedKey, parsedValue, priority);\n }\n}\nfunction _isHorizontalScrollShowing(element) {\n return element.clientWidth < element.scrollWidth;\n}\nfunction _isVerticalScrollShowing(element) {\n return element.clientHeight < element.scrollHeight;\n}\nfunction _setElementWidth(element, width) {\n if (width === \"flex\") {\n element.style.removeProperty(\"width\");\n element.style.removeProperty(\"minWidth\");\n element.style.removeProperty(\"maxWidth\");\n element.style.flex = \"1 1 auto\";\n } else {\n _setFixedWidth(element, width);\n }\n}\nfunction _setFixedWidth(element, width) {\n width = _formatSize(width);\n element.style.width = width.toString();\n element.style.maxWidth = width.toString();\n element.style.minWidth = width.toString();\n}\nfunction _setFixedHeight(element, height) {\n height = _formatSize(height);\n element.style.height = height.toString();\n element.style.maxHeight = height.toString();\n element.style.minHeight = height.toString();\n}\nfunction _formatSize(size) {\n if (typeof size === \"number\") {\n return `${size}px`;\n }\n return size;\n}\nfunction _isNodeOrElement(o) {\n return o instanceof Node || o instanceof HTMLElement;\n}\nfunction _copyNodeList(nodeList) {\n if (nodeList == null) {\n return [];\n }\n const result = [];\n _nodeListForEach(nodeList, (node) => result.push(node));\n return result;\n}\nfunction _iterateNamedNodeMap(map, callback) {\n if (!map) {\n return;\n }\n for (let i = 0; i < map.length; i++) {\n const attr = map[i];\n callback(attr.name, attr.value);\n }\n}\nfunction _addOrRemoveAttribute(element, name, value) {\n if (value == null || value === \"\") {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value.toString());\n }\n}\nfunction _nodeListForEach(nodeList, action) {\n if (nodeList == null) {\n return;\n }\n for (let i = 0; i < nodeList.length; i++) {\n action(nodeList[i]);\n }\n}\nfunction _bindCellRendererToHtmlElement(cellRendererPromise, eTarget) {\n cellRendererPromise.then((cellRenderer) => {\n const gui = cellRenderer.getGui();\n if (gui != null) {\n if (typeof gui === \"object\") {\n eTarget.appendChild(gui);\n } else {\n eTarget.innerHTML = gui;\n }\n }\n });\n}\n\n// community-modules/core/src/utils/numberSequence.ts\nvar NumberSequence = class {\n constructor(initValue = 0, step = 1) {\n this.nextValue = initValue;\n this.step = step;\n }\n next() {\n const valToReturn = this.nextValue;\n this.nextValue += this.step;\n return valToReturn;\n }\n peek() {\n return this.nextValue;\n }\n skip(count) {\n this.nextValue += count;\n }\n};\n\n// community-modules/core/src/widgets/tooltipStateManager.ts\nvar SHOW_QUICK_TOOLTIP_DIFF = 1e3;\nvar FADE_OUT_TOOLTIP_TIMEOUT = 1e3;\nvar INTERACTIVE_HIDE_DELAY = 100;\nvar _TooltipStateManager = class _TooltipStateManager extends BeanStub {\n constructor(parentComp, tooltipShowDelayOverride, tooltipHideDelayOverride, shouldDisplayTooltip) {\n super();\n this.parentComp = parentComp;\n this.tooltipShowDelayOverride = tooltipShowDelayOverride;\n this.tooltipHideDelayOverride = tooltipHideDelayOverride;\n this.shouldDisplayTooltip = shouldDisplayTooltip;\n this.interactionEnabled = false;\n this.isInteractingWithTooltip = false;\n this.state = 0 /* NOTHING */;\n // when showing the tooltip, we need to make sure it's the most recent instance we request, as due to\n // async we could request two tooltips before the first instance returns, in which case we should\n // disregard the second instance.\n this.tooltipInstanceCount = 0;\n this.tooltipMouseTrack = false;\n }\n wireBeans(beans) {\n this.popupService = beans.popupService;\n this.userComponentFactory = beans.userComponentFactory;\n }\n postConstruct() {\n if (this.gos.get(\"tooltipInteraction\")) {\n this.interactionEnabled = true;\n }\n this.tooltipTrigger = this.getTooltipTrigger();\n this.tooltipMouseTrack = this.gos.get(\"tooltipMouseTrack\");\n const el = this.parentComp.getGui();\n if (this.tooltipTrigger === 0 /* HOVER */) {\n this.addManagedListeners(el, {\n mouseenter: this.onMouseEnter.bind(this),\n mouseleave: this.onMouseLeave.bind(this)\n });\n }\n if (this.tooltipTrigger === 1 /* FOCUS */) {\n this.addManagedListeners(el, {\n focusin: this.onFocusIn.bind(this),\n focusout: this.onFocusOut.bind(this)\n });\n }\n this.addManagedListeners(el, { mousemove: this.onMouseMove.bind(this) });\n if (!this.interactionEnabled) {\n this.addManagedListeners(el, {\n mousedown: this.onMouseDown.bind(this),\n keydown: this.onKeyDown.bind(this)\n });\n }\n }\n getGridOptionsTooltipDelay(delayOption) {\n const delay = this.gos.get(delayOption);\n if (delay < 0) {\n _warnOnce(`${delayOption} should not be lower than 0`);\n }\n return Math.max(200, delay);\n }\n getTooltipDelay(type) {\n if (type === \"show\") {\n return this.tooltipShowDelayOverride ?? this.getGridOptionsTooltipDelay(\"tooltipShowDelay\");\n }\n return this.tooltipHideDelayOverride ?? this.getGridOptionsTooltipDelay(\"tooltipHideDelay\");\n }\n destroy() {\n this.setToDoNothing();\n super.destroy();\n }\n getTooltipTrigger() {\n const trigger = this.gos.get(\"tooltipTrigger\");\n if (!trigger || trigger === \"hover\") {\n return 0 /* HOVER */;\n }\n return 1 /* FOCUS */;\n }\n onMouseEnter(e) {\n if (this.interactionEnabled && this.interactiveTooltipTimeoutId) {\n this.unlockService();\n this.startHideTimeout();\n }\n if (_isIOSUserAgent()) {\n return;\n }\n if (_TooltipStateManager.isLocked) {\n this.showTooltipTimeoutId = window.setTimeout(() => {\n this.prepareToShowTooltip(e);\n }, INTERACTIVE_HIDE_DELAY);\n } else {\n this.prepareToShowTooltip(e);\n }\n }\n onMouseMove(e) {\n if (this.lastMouseEvent) {\n this.lastMouseEvent = e;\n }\n if (this.tooltipMouseTrack && this.state === 2 /* SHOWING */ && this.tooltipComp) {\n this.positionTooltip();\n }\n }\n onMouseDown() {\n this.setToDoNothing();\n }\n onMouseLeave() {\n if (this.interactionEnabled) {\n this.lockService();\n } else {\n this.setToDoNothing();\n }\n }\n onFocusIn() {\n this.prepareToShowTooltip();\n }\n onFocusOut(e) {\n const relatedTarget = e.relatedTarget;\n const parentCompGui = this.parentComp.getGui();\n const tooltipGui = this.tooltipComp?.getGui();\n if (this.isInteractingWithTooltip || parentCompGui.contains(relatedTarget) || this.interactionEnabled && tooltipGui?.contains(relatedTarget)) {\n return;\n }\n this.setToDoNothing();\n }\n onKeyDown() {\n if (this.isInteractingWithTooltip) {\n this.isInteractingWithTooltip = false;\n }\n this.setToDoNothing();\n }\n prepareToShowTooltip(mouseEvent) {\n if (this.state != 0 /* NOTHING */ || _TooltipStateManager.isLocked) {\n return;\n }\n let delay = 0;\n if (mouseEvent) {\n delay = this.isLastTooltipHiddenRecently() ? 200 : this.getTooltipDelay(\"show\");\n }\n this.lastMouseEvent = mouseEvent || null;\n this.showTooltipTimeoutId = window.setTimeout(this.showTooltip.bind(this), delay);\n this.state = 1 /* WAITING_TO_SHOW */;\n }\n isLastTooltipHiddenRecently() {\n const now = (/* @__PURE__ */ new Date()).getTime();\n const then = _TooltipStateManager.lastTooltipHideTime;\n return now - then < SHOW_QUICK_TOOLTIP_DIFF;\n }\n setToDoNothing(fromHideTooltip) {\n if (!fromHideTooltip && this.state === 2 /* SHOWING */) {\n this.hideTooltip();\n }\n if (this.onBodyScrollEventCallback) {\n this.onBodyScrollEventCallback();\n this.onBodyScrollEventCallback = void 0;\n }\n if (this.onColumnMovedEventCallback) {\n this.onColumnMovedEventCallback();\n this.onColumnMovedEventCallback = void 0;\n }\n if (this.onDocumentKeyDownCallback) {\n this.onDocumentKeyDownCallback();\n this.onDocumentKeyDownCallback = void 0;\n }\n this.clearTimeouts();\n this.state = 0 /* NOTHING */;\n this.lastMouseEvent = null;\n }\n showTooltip() {\n const params = {\n ...this.parentComp.getTooltipParams()\n };\n if (!_exists(params.value) || this.shouldDisplayTooltip && !this.shouldDisplayTooltip()) {\n this.setToDoNothing();\n return;\n }\n this.state = 2 /* SHOWING */;\n this.tooltipInstanceCount++;\n const callback = this.newTooltipComponentCallback.bind(this, this.tooltipInstanceCount);\n const userDetails = this.userComponentFactory.getTooltipCompDetails(params);\n userDetails.newAgStackInstance().then(callback);\n }\n hideTooltip(forceHide) {\n if (!forceHide && this.isInteractingWithTooltip) {\n return;\n }\n if (this.tooltipComp) {\n this.destroyTooltipComp();\n _TooltipStateManager.lastTooltipHideTime = (/* @__PURE__ */ new Date()).getTime();\n }\n this.eventService.dispatchEvent({\n type: \"tooltipHide\",\n parentGui: this.parentComp.getGui()\n });\n if (forceHide) {\n this.isInteractingWithTooltip = false;\n }\n this.setToDoNothing(true);\n }\n newTooltipComponentCallback(tooltipInstanceCopy, tooltipComp) {\n const compNoLongerNeeded = this.state !== 2 /* SHOWING */ || this.tooltipInstanceCount !== tooltipInstanceCopy;\n if (compNoLongerNeeded) {\n this.destroyBean(tooltipComp);\n return;\n }\n const eGui = tooltipComp.getGui();\n this.tooltipComp = tooltipComp;\n if (!eGui.classList.contains(\"ag-tooltip\")) {\n eGui.classList.add(\"ag-tooltip-custom\");\n }\n if (this.tooltipTrigger === 0 /* HOVER */) {\n eGui.classList.add(\"ag-tooltip-animate\");\n }\n if (this.interactionEnabled) {\n eGui.classList.add(\"ag-tooltip-interactive\");\n }\n const translate = this.localeService.getLocaleTextFunc();\n const addPopupRes = this.popupService.addPopup({\n eChild: eGui,\n ariaLabel: translate(\"ariaLabelTooltip\", \"Tooltip\")\n });\n if (addPopupRes) {\n this.tooltipPopupDestroyFunc = addPopupRes.hideFunc;\n }\n this.positionTooltip();\n if (this.tooltipTrigger === 1 /* FOCUS */) {\n const listener = () => this.setToDoNothing();\n [this.onBodyScrollEventCallback, this.onColumnMovedEventCallback] = this.addManagedEventListeners({\n bodyScroll: listener,\n columnMoved: listener\n });\n }\n if (this.interactionEnabled) {\n [this.tooltipMouseEnterListener, this.tooltipMouseLeaveListener] = this.addManagedElementListeners(eGui, {\n mouseenter: this.onTooltipMouseEnter.bind(this),\n mouseleave: this.onTooltipMouseLeave.bind(this)\n });\n [this.onDocumentKeyDownCallback] = this.addManagedElementListeners(_getDocument(this.gos), {\n keydown: (e) => {\n if (!eGui.contains(e?.target)) {\n this.onKeyDown();\n }\n }\n });\n if (this.tooltipTrigger === 1 /* FOCUS */) {\n [this.tooltipFocusInListener, this.tooltipFocusOutListener] = this.addManagedElementListeners(eGui, {\n focusin: this.onTooltipFocusIn.bind(this),\n focusout: this.onTooltipFocusOut.bind(this)\n });\n }\n }\n this.eventService.dispatchEvent({\n type: \"tooltipShow\",\n tooltipGui: eGui,\n parentGui: this.parentComp.getGui()\n });\n this.startHideTimeout();\n }\n onTooltipMouseEnter() {\n this.isInteractingWithTooltip = true;\n this.unlockService();\n }\n onTooltipMouseLeave() {\n if (this.isTooltipFocused()) {\n return;\n }\n this.isInteractingWithTooltip = false;\n this.lockService();\n }\n onTooltipFocusIn() {\n this.isInteractingWithTooltip = true;\n }\n isTooltipFocused() {\n const tooltipGui = this.tooltipComp?.getGui();\n const activeEl = _getActiveDomElement(this.gos);\n return !!tooltipGui && tooltipGui.contains(activeEl);\n }\n onTooltipFocusOut(e) {\n const parentGui = this.parentComp.getGui();\n if (this.isTooltipFocused()) {\n return;\n }\n this.isInteractingWithTooltip = false;\n if (parentGui.contains(e.relatedTarget)) {\n this.startHideTimeout();\n } else {\n this.hideTooltip();\n }\n }\n positionTooltip() {\n const params = {\n type: \"tooltip\",\n ePopup: this.tooltipComp.getGui(),\n nudgeY: 18,\n skipObserver: this.tooltipMouseTrack\n };\n if (this.lastMouseEvent) {\n this.popupService.positionPopupUnderMouseEvent({\n ...params,\n mouseEvent: this.lastMouseEvent\n });\n } else {\n this.popupService.positionPopupByComponent({\n ...params,\n eventSource: this.parentComp.getGui(),\n position: \"under\",\n keepWithinBounds: true,\n nudgeY: 5\n });\n }\n }\n destroyTooltipComp() {\n this.tooltipComp.getGui().classList.add(\"ag-tooltip-hiding\");\n const tooltipPopupDestroyFunc = this.tooltipPopupDestroyFunc;\n const tooltipComp = this.tooltipComp;\n const delay = this.tooltipTrigger === 0 /* HOVER */ ? FADE_OUT_TOOLTIP_TIMEOUT : 0;\n window.setTimeout(() => {\n tooltipPopupDestroyFunc();\n this.destroyBean(tooltipComp);\n }, delay);\n this.clearTooltipListeners();\n this.tooltipPopupDestroyFunc = void 0;\n this.tooltipComp = void 0;\n }\n clearTooltipListeners() {\n [\n this.tooltipMouseEnterListener,\n this.tooltipMouseLeaveListener,\n this.tooltipFocusInListener,\n this.tooltipFocusOutListener\n ].forEach((listener) => {\n if (listener) {\n listener();\n }\n });\n this.tooltipMouseEnterListener = this.tooltipMouseLeaveListener = this.tooltipFocusInListener = this.tooltipFocusOutListener = null;\n }\n lockService() {\n _TooltipStateManager.isLocked = true;\n this.interactiveTooltipTimeoutId = window.setTimeout(() => {\n this.unlockService();\n this.setToDoNothing();\n }, INTERACTIVE_HIDE_DELAY);\n }\n unlockService() {\n _TooltipStateManager.isLocked = false;\n this.clearInteractiveTimeout();\n }\n startHideTimeout() {\n this.clearHideTimeout();\n this.hideTooltipTimeoutId = window.setTimeout(this.hideTooltip.bind(this), this.getTooltipDelay(\"hide\"));\n }\n clearShowTimeout() {\n if (!this.showTooltipTimeoutId) {\n return;\n }\n window.clearTimeout(this.showTooltipTimeoutId);\n this.showTooltipTimeoutId = void 0;\n }\n clearHideTimeout() {\n if (!this.hideTooltipTimeoutId) {\n return;\n }\n window.clearTimeout(this.hideTooltipTimeoutId);\n this.hideTooltipTimeoutId = void 0;\n }\n clearInteractiveTimeout() {\n if (!this.interactiveTooltipTimeoutId) {\n return;\n }\n window.clearTimeout(this.interactiveTooltipTimeoutId);\n this.interactiveTooltipTimeoutId = void 0;\n }\n clearTimeouts() {\n this.clearShowTimeout();\n this.clearHideTimeout();\n this.clearInteractiveTimeout();\n }\n};\n_TooltipStateManager.isLocked = false;\nvar TooltipStateManager = _TooltipStateManager;\n\n// community-modules/core/src/widgets/tooltipFeature.ts\nvar TooltipFeature = class extends BeanStub {\n constructor(ctrl, beans) {\n super();\n this.ctrl = ctrl;\n if (beans) {\n this.beans = beans;\n }\n }\n wireBeans(beans) {\n this.beans = beans;\n }\n postConstruct() {\n this.refreshToolTip();\n }\n setBrowserTooltip(tooltip) {\n const name = \"title\";\n const eGui = this.ctrl.getGui();\n if (!eGui) {\n return;\n }\n if (tooltip != null && tooltip != \"\") {\n eGui.setAttribute(name, tooltip);\n } else {\n eGui.removeAttribute(name);\n }\n }\n updateTooltipText() {\n this.tooltip = this.ctrl.getTooltipValue();\n }\n createTooltipFeatureIfNeeded() {\n if (this.tooltipManager != null) {\n return;\n }\n const parent = {\n getTooltipParams: () => this.getTooltipParams(),\n getGui: () => this.ctrl.getGui()\n };\n this.tooltipManager = this.createBean(\n new TooltipStateManager(\n parent,\n this.ctrl.getTooltipShowDelayOverride?.(),\n this.ctrl.getTooltipHideDelayOverride?.(),\n this.ctrl.shouldDisplayTooltip\n ),\n this.beans.context\n );\n }\n refreshToolTip() {\n this.browserTooltips = this.beans.gos.get(\"enableBrowserTooltips\");\n this.updateTooltipText();\n if (this.browserTooltips) {\n this.setBrowserTooltip(this.tooltip);\n if (this.tooltipManager) {\n this.tooltipManager = this.destroyBean(this.tooltipManager, this.beans.context);\n }\n } else {\n this.setBrowserTooltip(null);\n this.createTooltipFeatureIfNeeded();\n }\n }\n getTooltipParams() {\n const ctrl = this.ctrl;\n const column = ctrl.getColumn?.();\n const colDef = ctrl.getColDef?.();\n const rowNode = ctrl.getRowNode?.();\n return {\n location: ctrl.getLocation(),\n //'cell',\n colDef,\n column,\n rowIndex: ctrl.getRowIndex?.(),\n node: rowNode,\n data: rowNode?.data,\n value: this.getTooltipText(),\n valueFormatted: ctrl.getValueFormatted?.(),\n hideTooltipCallback: () => this.tooltipManager?.hideTooltip(true)\n };\n }\n getTooltipText() {\n return this.tooltip;\n }\n // overriding to make public, as we don't dispose this bean via context\n destroy() {\n if (this.tooltipManager) {\n this.tooltipManager = this.destroyBean(this.tooltipManager, this.beans.context);\n }\n super.destroy();\n }\n};\n\n// community-modules/core/src/widgets/component.ts\nvar compIdSequence = new NumberSequence();\nvar RefPlaceholder = null;\nvar Component = class _Component extends BeanStub {\n constructor(template, componentSelectors) {\n super();\n this.suppressDataRefValidation = false;\n // if false, then CSS class \"ag-hidden\" is applied, which sets \"display: none\"\n this.displayed = true;\n // if false, then CSS class \"ag-invisible\" is applied, which sets \"visibility: hidden\"\n this.visible = true;\n // unique id for this row component. this is used for getting a reference to the HTML dom.\n // we cannot use the RowNode id as this is not unique (due to animation, old rows can be lying\n // around as we create a new rowComp instance for the same row node).\n this.compId = compIdSequence.next();\n this.cssClassManager = new CssClassManager(() => this.eGui);\n this.componentSelectors = new Map((componentSelectors ?? []).map((comp) => [comp.selector, comp]));\n if (template) {\n this.setTemplate(template);\n }\n }\n preWireBeans(beans) {\n super.preWireBeans(beans);\n }\n preConstruct() {\n this.usingBrowserTooltips = this.gos.get(\"enableBrowserTooltips\");\n this.wireTemplate(this.getGui());\n }\n wireTemplate(element, paramsMap) {\n if (element && this.gos) {\n this.applyElementsToComponent(element);\n this.createChildComponentsFromTags(element, paramsMap);\n }\n }\n getCompId() {\n return this.compId;\n }\n getTooltipParams() {\n return {\n value: this.tooltipText,\n location: \"UNKNOWN\"\n };\n }\n setTooltip(params) {\n const { newTooltipText, showDelayOverride, hideDelayOverride, location, shouldDisplayTooltip } = params || {};\n if (this.tooltipFeature) {\n this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n }\n if (this.tooltipText !== newTooltipText) {\n this.tooltipText = newTooltipText;\n }\n const getTooltipValue = () => this.tooltipText;\n if (newTooltipText != null) {\n this.tooltipFeature = this.createBean(\n new TooltipFeature({\n getTooltipValue,\n getGui: () => this.getGui(),\n getLocation: () => location ?? \"UNKNOWN\",\n getColDef: params?.getColDef,\n getColumn: params?.getColumn,\n getTooltipShowDelayOverride: showDelayOverride != null ? () => showDelayOverride : void 0,\n getTooltipHideDelayOverride: hideDelayOverride != null ? () => hideDelayOverride : void 0,\n shouldDisplayTooltip\n })\n );\n }\n }\n getDataRefAttribute(element) {\n if (element.getAttribute) {\n return element.getAttribute(\"data-ref\");\n }\n return null;\n }\n applyElementsToComponent(element, elementRef, paramsMap, newComponent = null) {\n if (elementRef === void 0) {\n elementRef = this.getDataRefAttribute(element);\n }\n if (elementRef) {\n const current = this[elementRef];\n if (current === RefPlaceholder) {\n this[elementRef] = newComponent ?? element;\n } else {\n const usedAsParamRef = paramsMap && paramsMap[elementRef];\n if (!this.suppressDataRefValidation && !usedAsParamRef) {\n _warnOnce(`Issue with data-ref: ${elementRef} on ${this.constructor.name} with ${current}`);\n }\n }\n }\n }\n // for registered components only, eg creates AgCheckbox instance from ag-checkbox HTML tag\n createChildComponentsFromTags(parentNode, paramsMap) {\n const childNodeList = _copyNodeList(parentNode.childNodes);\n childNodeList.forEach((childNode) => {\n if (!(childNode instanceof HTMLElement)) {\n return;\n }\n const childComp = this.createComponentFromElement(\n childNode,\n (childComp2) => {\n const childGui = childComp2.getGui();\n if (childGui) {\n this.copyAttributesFromNode(childNode, childComp2.getGui());\n }\n },\n paramsMap\n );\n if (childComp) {\n if (childComp.addItems && childNode.children.length) {\n this.createChildComponentsFromTags(childNode, paramsMap);\n const items = Array.prototype.slice.call(childNode.children);\n childComp.addItems(items);\n }\n this.swapComponentForNode(childComp, parentNode, childNode);\n } else if (childNode.childNodes) {\n this.createChildComponentsFromTags(childNode, paramsMap);\n }\n });\n }\n createComponentFromElement(element, afterPreCreateCallback, paramsMap) {\n const key = element.nodeName;\n const elementRef = this.getDataRefAttribute(element);\n const isAgGridComponent = key.indexOf(\"AG-\") === 0;\n const componentSelector = isAgGridComponent ? this.componentSelectors.get(key) : null;\n let newComponent = null;\n if (componentSelector) {\n _Component.elementGettingCreated = element;\n const componentParams = paramsMap && elementRef ? paramsMap[elementRef] : void 0;\n newComponent = new componentSelector.component(componentParams);\n newComponent.setParentComponent(this);\n this.createBean(newComponent, null, afterPreCreateCallback);\n } else if (isAgGridComponent) {\n _warnOnce(`Missing selector: ${key}`);\n }\n this.applyElementsToComponent(element, elementRef, paramsMap, newComponent);\n return newComponent;\n }\n copyAttributesFromNode(source, dest) {\n _iterateNamedNodeMap(source.attributes, (name, value) => dest.setAttribute(name, value));\n }\n swapComponentForNode(newComponent, parentNode, childNode) {\n const eComponent = newComponent.getGui();\n parentNode.replaceChild(eComponent, childNode);\n parentNode.insertBefore(document.createComment(childNode.nodeName), eComponent);\n this.addDestroyFunc(this.destroyBean.bind(this, newComponent));\n }\n activateTabIndex(elements) {\n const tabIndex = this.gos.get(\"tabIndex\");\n if (!elements) {\n elements = [];\n }\n if (!elements.length) {\n elements.push(this.getGui());\n }\n elements.forEach((el) => el.setAttribute(\"tabindex\", tabIndex.toString()));\n }\n setTemplate(template, componentSelectors, paramsMap) {\n const eGui = _loadTemplate(template);\n this.setTemplateFromElement(eGui, componentSelectors, paramsMap);\n }\n setTemplateFromElement(element, components, paramsMap, suppressDataRefValidation = false) {\n this.eGui = element;\n this.suppressDataRefValidation = suppressDataRefValidation;\n if (components) {\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n this.componentSelectors.set(component.selector, component);\n }\n }\n this.wireTemplate(element, paramsMap);\n }\n getGui() {\n return this.eGui;\n }\n getFocusableElement() {\n return this.eGui;\n }\n getAriaElement() {\n return this.getFocusableElement();\n }\n setParentComponent(component) {\n this.parentComponent = component;\n }\n getParentComponent() {\n return this.parentComponent;\n }\n // this method is for older code, that wants to provide the gui element,\n // it is not intended for this to be in ag-Stack\n setGui(eGui) {\n this.eGui = eGui;\n }\n queryForHtmlElement(cssSelector) {\n return this.eGui.querySelector(cssSelector);\n }\n getContainerAndElement(newChild, container) {\n let parent = container;\n if (newChild == null) {\n return null;\n }\n if (!parent) {\n parent = this.eGui;\n }\n if (_isNodeOrElement(newChild)) {\n return {\n element: newChild,\n parent\n };\n }\n return {\n element: newChild.getGui(),\n parent\n };\n }\n prependChild(newChild, container) {\n const { element, parent } = this.getContainerAndElement(newChild, container) || {};\n if (!element || !parent) {\n return;\n }\n parent.insertAdjacentElement(\"afterbegin\", element);\n }\n appendChild(newChild, container) {\n const { element, parent } = this.getContainerAndElement(newChild, container) || {};\n if (!element || !parent) {\n return;\n }\n parent.appendChild(element);\n }\n isDisplayed() {\n return this.displayed;\n }\n setVisible(visible, options = {}) {\n if (visible !== this.visible) {\n this.visible = visible;\n const { skipAriaHidden } = options;\n _setVisible(this.eGui, visible, { skipAriaHidden });\n }\n }\n setDisplayed(displayed, options = {}) {\n if (displayed !== this.displayed) {\n this.displayed = displayed;\n const { skipAriaHidden } = options;\n _setDisplayed(this.eGui, displayed, { skipAriaHidden });\n const event = {\n type: \"displayChanged\",\n visible: this.displayed\n };\n this.dispatchLocalEvent(event);\n }\n }\n destroy() {\n if (this.parentComponent) {\n this.parentComponent = void 0;\n }\n if (this.tooltipFeature) {\n this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n }\n super.destroy();\n }\n addGuiEventListener(event, listener, options) {\n this.eGui.addEventListener(event, listener, options);\n this.addDestroyFunc(() => this.eGui.removeEventListener(event, listener));\n }\n addCssClass(className) {\n this.cssClassManager.addCssClass(className);\n }\n removeCssClass(className) {\n this.cssClassManager.removeCssClass(className);\n }\n containsCssClass(className) {\n return this.cssClassManager.containsCssClass(className);\n }\n addOrRemoveCssClass(className, addOrRemove) {\n this.cssClassManager.addOrRemoveCssClass(className, addOrRemove);\n }\n};\n\n// community-modules/core/src/utils/icon.ts\nvar iconNameClassMap = {\n // header column group shown when expanded (click to contract)\n columnGroupOpened: \"expanded\",\n // header column group shown when contracted (click to expand)\n columnGroupClosed: \"contracted\",\n // tool panel column group contracted (click to expand)\n columnSelectClosed: \"tree-closed\",\n // tool panel column group expanded (click to contract)\n columnSelectOpen: \"tree-open\",\n // column tool panel header expand/collapse all button, shown when some children are expanded and\n // others are collapsed\n columnSelectIndeterminate: \"tree-indeterminate\",\n // shown on drag and drop image component icon while dragging column to the side of the grid to pin\n columnMovePin: \"pin\",\n // shown on drag and drop image component icon while dragging over part of the page that is not a drop zone\n columnMoveHide: \"eye-slash\",\n // shown on drag and drop image component icon while dragging columns to reorder\n columnMoveMove: \"arrows\",\n // animating icon shown when dragging a column to the right of the grid causes horizontal scrolling\n columnMoveLeft: \"left\",\n // animating icon shown when dragging a column to the left of the grid causes horizontal scrolling\n columnMoveRight: \"right\",\n // shown on drag and drop image component icon while dragging over Row Groups drop zone\n columnMoveGroup: \"group\",\n // shown on drag and drop image component icon while dragging over Values drop zone\n columnMoveValue: \"aggregation\",\n // shown on drag and drop image component icon while dragging over pivot drop zone\n columnMovePivot: \"pivot\",\n // shown on drag and drop image component icon while dragging over drop zone that doesn't support it, e.g.\n // string column over aggregation drop zone\n dropNotAllowed: \"not-allowed\",\n // shown on row group when contracted (click to expand)\n groupContracted: \"tree-closed\",\n // shown on row group when expanded (click to contract)\n groupExpanded: \"tree-open\",\n // set filter tree list group contracted (click to expand)\n setFilterGroupClosed: \"tree-closed\",\n // set filter tree list group expanded (click to contract)\n setFilterGroupOpen: \"tree-open\",\n // set filter tree list expand/collapse all button, shown when some children are expanded and\n // others are collapsed\n setFilterGroupIndeterminate: \"tree-indeterminate\",\n // context menu chart item\n chart: \"chart\",\n // chart window title bar\n close: \"cross\",\n // X (remove) on column 'pill' after adding it to a drop zone list\n cancel: \"cancel\",\n // indicates the currently active pin state in the \"Pin column\" sub-menu of the column menu\n check: \"tick\",\n // \"go to first\" button in pagination controls\n first: \"first\",\n // \"go to previous\" button in pagination controls\n previous: \"previous\",\n // \"go to next\" button in pagination controls\n next: \"next\",\n // \"go to last\" button in pagination controls\n last: \"last\",\n // shown on top right of chart when chart is linked to range data (click to unlink)\n linked: \"linked\",\n // shown on top right of chart when chart is not linked to range data (click to link)\n unlinked: \"unlinked\",\n // \"Choose colour\" button on chart settings tab\n colorPicker: \"color-picker\",\n // rotating spinner shown by the loading cell renderer\n groupLoading: \"loading\",\n // button to launch enterprise column menu\n menu: \"menu\",\n menuAlt: \"menu-alt\",\n // filter tool panel tab\n filter: \"filter\",\n // column tool panel tab\n columns: \"columns\",\n // button in chart regular size window title bar (click to maximise)\n maximize: \"maximize\",\n // button in chart maximised window title bar (click to make regular size)\n minimize: \"minimize\",\n // \"Pin column\" item in column header menu\n menuPin: \"pin\",\n // \"Value aggregation\" column menu item (shown on numeric columns when grouping is active)\"\n menuValue: \"aggregation\",\n // \"Group by {column-name}\" item in column header menu\n menuAddRowGroup: \"group\",\n // \"Un-Group by {column-name}\" item in column header menu\n menuRemoveRowGroup: \"group\",\n // context menu copy item\n clipboardCopy: \"copy\",\n // context menu cut item\n clipboardCut: \"cut\",\n // context menu paste item\n clipboardPaste: \"paste\",\n // identifies the pivot drop zone\n pivotPanel: \"pivot\",\n // \"Row groups\" drop zone in column tool panel\n rowGroupPanel: \"group\",\n // columns tool panel Values drop zone\n valuePanel: \"aggregation\",\n // drag handle used to pick up draggable columns\n columnDrag: \"grip\",\n // drag handle used to pick up draggable rows\n rowDrag: \"grip\",\n // context menu export item\n save: \"save\",\n // csv export\n csvExport: \"csv\",\n // excel export,\n excelExport: \"excel\",\n // icon on dropdown editors\n smallDown: \"small-down\",\n // version of small-right used in RTL mode\n smallLeft: \"small-left\",\n // separater between column 'pills' when you add multiple columns to the header drop zone\n smallRight: \"small-right\",\n smallUp: \"small-up\",\n // show on column header when column is sorted ascending\n sortAscending: \"asc\",\n // show on column header when column is sorted descending\n sortDescending: \"desc\",\n // show on column header when column has no sort, only when enabled with gridOptions.unSortIcon=true\n sortUnSort: \"none\",\n // Builder button in Advanced Filter\n advancedFilterBuilder: \"group\",\n // drag handle used to pick up Advanced Filter Builder rows\n advancedFilterBuilderDrag: \"grip\",\n // Advanced Filter Builder row validation error\n advancedFilterBuilderInvalid: \"not-allowed\",\n // shown on Advanced Filter Builder rows to move them up\n advancedFilterBuilderMoveUp: \"up\",\n // shown on Advanced Filter Builder rows to move them down\n advancedFilterBuilderMoveDown: \"down\",\n // shown on Advanced Filter Builder rows to add new rows\n advancedFilterBuilderAdd: \"plus\",\n // shown on Advanced Filter Builder rows to remove row\n advancedFilterBuilderRemove: \"minus\",\n // Edit Chart menu item shown in Integrated Charts menu\n chartsMenuEdit: \"chart\",\n // Advanced Settings menu item shown in Integrated Charts menu\n chartsMenuAdvancedSettings: \"settings\",\n // shown in Integrated Charts menu add fields\n chartsMenuAdd: \"plus\",\n // checked checkbox\n checkboxChecked: \"checkbox-checked\",\n // indeterminate checkbox\n checkboxIndeterminate: \"checkbox-indeterminate\",\n // unchecked checkbox\n checkboxUnchecked: \"checkbox-unchecked\",\n // radio button on\n radioButtonOn: \"radio-button-on\",\n // radio button off\n radioButtonOff: \"radio-button-off\"\n};\nvar ICONS = (() => {\n const icons = new Set(Object.values(iconNameClassMap));\n icons.add(\"eye\");\n return icons;\n})();\nfunction _createIcon(iconName, gos, column) {\n const iconContents = _createIconNoSpan(iconName, gos, column);\n if (iconContents) {\n const { className } = iconContents;\n if (typeof className === \"string\" && className.indexOf(\"ag-icon\") > -1 || typeof className === \"object\" && className[\"ag-icon\"]) {\n return iconContents;\n }\n }\n const eResult = document.createElement(\"span\");\n eResult.appendChild(iconContents);\n return eResult;\n}\nfunction _createIconNoSpan(iconName, gos, column, forceCreate) {\n let userProvidedIcon = null;\n const icons = column && column.getColDef().icons;\n if (icons) {\n userProvidedIcon = icons[iconName];\n }\n if (gos && !userProvidedIcon) {\n const optionsIcons = gos.get(\"icons\");\n if (optionsIcons) {\n userProvidedIcon = optionsIcons[iconName];\n }\n }\n if (userProvidedIcon) {\n let rendererResult;\n if (typeof userProvidedIcon === \"function\") {\n rendererResult = userProvidedIcon();\n } else if (typeof userProvidedIcon === \"string\") {\n rendererResult = userProvidedIcon;\n } else {\n throw new Error(\"icon from grid options needs to be a string or a function\");\n }\n if (typeof rendererResult === \"string\") {\n return _loadTemplate(rendererResult);\n }\n if (_isNodeOrElement(rendererResult)) {\n return rendererResult;\n }\n _warnOnce(\"iconRenderer should return back a string or a dom object\");\n } else {\n const span = document.createElement(\"span\");\n let cssClass = iconNameClassMap[iconName] ?? (ICONS.has(iconName) ? iconName : void 0);\n if (!cssClass) {\n if (!forceCreate) {\n _warnOnce(`Did not find icon ${iconName}`);\n cssClass = \"\";\n } else {\n cssClass = iconName;\n }\n }\n span.setAttribute(\"class\", `ag-icon ag-icon-${cssClass}`);\n span.setAttribute(\"unselectable\", \"on\");\n _setAriaRole(span, \"presentation\");\n return span;\n }\n}\n\n// community-modules/core/src/dragAndDrop/dragAndDropImageComponent.ts\nvar DragAndDropImageComponent = class extends Component {\n constructor() {\n super(...arguments);\n this.dragSource = null;\n this.eIcon = RefPlaceholder;\n this.eLabel = RefPlaceholder;\n }\n postConstruct() {\n const create = (iconName) => _createIcon(iconName, this.gos, null);\n this.dropIconMap = {\n pinned: create(\"columnMovePin\"),\n hide: create(\"columnMoveHide\"),\n move: create(\"columnMoveMove\"),\n left: create(\"columnMoveLeft\"),\n right: create(\"columnMoveRight\"),\n group: create(\"columnMoveGroup\"),\n aggregate: create(\"columnMoveValue\"),\n pivot: create(\"columnMovePivot\"),\n notAllowed: create(\"dropNotAllowed\")\n };\n }\n init(params) {\n this.dragSource = params.dragSource;\n this.setTemplate(\n /* html */\n `
\n \n
\n
`\n );\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n this.dragSource = null;\n super.destroy();\n }\n setIcon(iconName, shake = false) {\n _clearElement(this.eIcon);\n let eIcon = null;\n if (!iconName) {\n iconName = this.dragSource?.getDefaultIconName ? this.dragSource?.getDefaultIconName() : \"notAllowed\";\n }\n eIcon = this.dropIconMap[iconName];\n this.eIcon.classList.toggle(\"ag-shake-left-to-right\", shake);\n if (eIcon === this.dropIconMap[\"hide\"] && this.gos.get(\"suppressDragLeaveHidesColumns\")) {\n return;\n }\n if (eIcon) {\n this.eIcon.appendChild(eIcon);\n }\n }\n setLabel(label) {\n this.eLabel.textContent = _escapeString(label);\n }\n};\n\n// community-modules/core/src/utils/mouse.ts\nfunction _areEventsNear(e1, e2, pixelCount) {\n if (pixelCount === 0) {\n return false;\n }\n const diffX = Math.abs(e1.clientX - e2.clientX);\n const diffY = Math.abs(e1.clientY - e2.clientY);\n return Math.max(diffX, diffY) <= pixelCount;\n}\n\n// community-modules/core/src/widgets/touchListener.ts\nvar TouchListener = class {\n constructor(eElement, preventMouseClick = false) {\n this.DOUBLE_TAP_MILLIS = 500;\n this.destroyFuncs = [];\n this.touching = false;\n this.localEventService = new LocalEventService();\n this.eElement = eElement;\n this.preventMouseClick = preventMouseClick;\n const startListener = this.onTouchStart.bind(this);\n const moveListener = this.onTouchMove.bind(this);\n const endListener = this.onTouchEnd.bind(this);\n this.eElement.addEventListener(\"touchstart\", startListener, { passive: true });\n this.eElement.addEventListener(\"touchmove\", moveListener, { passive: true });\n this.eElement.addEventListener(\"touchend\", endListener, { passive: false });\n this.destroyFuncs.push(() => {\n this.eElement.removeEventListener(\"touchstart\", startListener, { passive: true });\n this.eElement.removeEventListener(\"touchmove\", moveListener, { passive: true });\n this.eElement.removeEventListener(\"touchend\", endListener, { passive: false });\n });\n }\n getActiveTouch(touchList) {\n for (let i = 0; i < touchList.length; i++) {\n const matches = touchList[i].identifier === this.touchStart.identifier;\n if (matches) {\n return touchList[i];\n }\n }\n return null;\n }\n addEventListener(eventType, listener) {\n this.localEventService.addEventListener(eventType, listener);\n }\n removeEventListener(eventType, listener) {\n this.localEventService.removeEventListener(eventType, listener);\n }\n onTouchStart(touchEvent) {\n if (this.touching) {\n return;\n }\n this.touchStart = touchEvent.touches[0];\n this.touching = true;\n this.moved = false;\n const touchStartCopy = this.touchStart;\n window.setTimeout(() => {\n const touchesMatch = this.touchStart === touchStartCopy;\n if (this.touching && touchesMatch && !this.moved) {\n this.moved = true;\n const event = {\n type: \"longTap\",\n touchStart: this.touchStart,\n touchEvent\n };\n this.localEventService.dispatchEvent(event);\n }\n }, 500);\n }\n onTouchMove(touchEvent) {\n if (!this.touching) {\n return;\n }\n const touch = this.getActiveTouch(touchEvent.touches);\n if (!touch) {\n return;\n }\n const eventIsFarAway = !_areEventsNear(touch, this.touchStart, 4);\n if (eventIsFarAway) {\n this.moved = true;\n }\n }\n onTouchEnd(touchEvent) {\n if (!this.touching) {\n return;\n }\n if (!this.moved) {\n const event = {\n type: \"tap\",\n touchStart: this.touchStart\n };\n this.localEventService.dispatchEvent(event);\n this.checkForDoubleTap();\n }\n if (this.preventMouseClick && touchEvent.cancelable) {\n touchEvent.preventDefault();\n }\n this.touching = false;\n }\n checkForDoubleTap() {\n const now = (/* @__PURE__ */ new Date()).getTime();\n if (this.lastTapTime && this.lastTapTime > 0) {\n const interval = now - this.lastTapTime;\n if (interval > this.DOUBLE_TAP_MILLIS) {\n const event = {\n type: \"doubleTap\",\n touchStart: this.touchStart\n };\n this.localEventService.dispatchEvent(event);\n this.lastTapTime = null;\n } else {\n this.lastTapTime = now;\n }\n } else {\n this.lastTapTime = now;\n }\n }\n destroy() {\n this.destroyFuncs.forEach((func) => func());\n }\n};\n\n// community-modules/core/src/headerRendering/cells/column/sortIndicatorComp.ts\nfunction makeSpan(dataRefSuffix, classSuffix) {\n return (\n /* html */\n ``\n );\n}\nvar SortIndicatorTemplate = (\n /* html */\n `\n ${makeSpan(\"Order\", \"order\")}\n ${makeSpan(\"Asc\", \"ascending-icon\")}\n ${makeSpan(\"Desc\", \"descending-icon\")}\n ${makeSpan(\"Mixed\", \"mixed-icon\")}\n ${makeSpan(\"None\", \"none-icon\")}\n `\n);\nvar SortIndicatorComp = class extends Component {\n constructor(skipTemplate) {\n super();\n this.eSortOrder = RefPlaceholder;\n this.eSortAsc = RefPlaceholder;\n this.eSortDesc = RefPlaceholder;\n this.eSortMixed = RefPlaceholder;\n this.eSortNone = RefPlaceholder;\n if (!skipTemplate) {\n this.setTemplate(SortIndicatorTemplate);\n }\n }\n wireBeans(beans) {\n this.sortController = beans.sortController;\n }\n attachCustomElements(eSortOrder, eSortAsc, eSortDesc, eSortMixed, eSortNone) {\n this.eSortOrder = eSortOrder;\n this.eSortAsc = eSortAsc;\n this.eSortDesc = eSortDesc;\n this.eSortMixed = eSortMixed;\n this.eSortNone = eSortNone;\n }\n setupSort(column, suppressOrder = false) {\n this.column = column;\n this.suppressOrder = suppressOrder;\n this.setupMultiSortIndicator();\n if (!this.column.isSortable() && !this.column.getColDef().showRowGroup) {\n return;\n }\n this.addInIcon(\"sortAscending\", this.eSortAsc, column);\n this.addInIcon(\"sortDescending\", this.eSortDesc, column);\n this.addInIcon(\"sortUnSort\", this.eSortNone, column);\n const updateIcons = this.updateIcons.bind(this);\n const sortUpdated = this.onSortChanged.bind(this);\n this.addManagedPropertyListener(\"unSortIcon\", updateIcons);\n this.addManagedEventListeners({\n newColumnsLoaded: updateIcons,\n // Watch global events, as row group columns can effect their display column.\n sortChanged: sortUpdated,\n // when grouping changes so can sort indexes and icons\n columnRowGroupChanged: sortUpdated\n });\n this.onSortChanged();\n }\n addInIcon(iconName, eParent, column) {\n if (eParent == null) {\n return;\n }\n const eIcon = _createIconNoSpan(iconName, this.gos, column);\n if (eIcon) {\n eParent.appendChild(eIcon);\n }\n }\n onSortChanged() {\n this.updateIcons();\n if (!this.suppressOrder) {\n this.updateSortOrder();\n }\n }\n updateIcons() {\n const sortDirection = this.sortController.getDisplaySortForColumn(this.column);\n if (this.eSortAsc) {\n const isAscending = sortDirection === \"asc\";\n _setDisplayed(this.eSortAsc, isAscending, { skipAriaHidden: true });\n }\n if (this.eSortDesc) {\n const isDescending = sortDirection === \"desc\";\n _setDisplayed(this.eSortDesc, isDescending, { skipAriaHidden: true });\n }\n if (this.eSortNone) {\n const alwaysHideNoSort = !this.column.getColDef().unSortIcon && !this.gos.get(\"unSortIcon\");\n const isNone = sortDirection === null || sortDirection === void 0;\n _setDisplayed(this.eSortNone, !alwaysHideNoSort && isNone, { skipAriaHidden: true });\n }\n }\n setupMultiSortIndicator() {\n this.addInIcon(\"sortUnSort\", this.eSortMixed, this.column);\n const isColumnShowingRowGroup = this.column.getColDef().showRowGroup;\n const areGroupsCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n if (areGroupsCoupled && isColumnShowingRowGroup) {\n this.addManagedEventListeners({\n // Watch global events, as row group columns can effect their display column.\n sortChanged: this.updateMultiSortIndicator.bind(this),\n // when grouping changes so can sort indexes and icons\n columnRowGroupChanged: this.updateMultiSortIndicator.bind(this)\n });\n this.updateMultiSortIndicator();\n }\n }\n updateMultiSortIndicator() {\n if (this.eSortMixed) {\n const isMixedSort = this.sortController.getDisplaySortForColumn(this.column) === \"mixed\";\n _setDisplayed(this.eSortMixed, isMixedSort, { skipAriaHidden: true });\n }\n }\n // we listen here for global sort events, NOT column sort events, as we want to do this\n // when sorting has been set on all column (if we listened just for our col (where we\n // set the asc / desc icons) then it's possible other cols are yet to get their sorting state.\n updateSortOrder() {\n if (!this.eSortOrder) {\n return;\n }\n const allColumnsWithSorting = this.sortController.getColumnsWithSortingOrdered();\n const indexThisCol = this.sortController.getDisplaySortIndexForColumn(this.column) ?? -1;\n const moreThanOneColSorting = allColumnsWithSorting.some(\n (col) => this.sortController.getDisplaySortIndexForColumn(col) ?? -1 >= 1\n );\n const showIndex = indexThisCol >= 0 && moreThanOneColSorting;\n _setDisplayed(this.eSortOrder, showIndex, { skipAriaHidden: true });\n if (indexThisCol >= 0) {\n this.eSortOrder.textContent = (indexThisCol + 1).toString();\n } else {\n _clearElement(this.eSortOrder);\n }\n }\n};\nvar SortIndicatorSelector = {\n selector: \"AG-SORT-INDICATOR\",\n component: SortIndicatorComp\n};\n\n// community-modules/core/src/headerRendering/cells/column/headerComp.ts\nvar HeaderCompTemplate = (\n /* html */\n `
\n \n \n
\n \n \n \n
\n
`\n);\nvar HeaderComp = class extends Component {\n constructor() {\n super(...arguments);\n this.eFilter = RefPlaceholder;\n this.eFilterButton = RefPlaceholder;\n this.eSortIndicator = RefPlaceholder;\n this.eMenu = RefPlaceholder;\n this.eLabel = RefPlaceholder;\n this.eText = RefPlaceholder;\n /**\n * Selectors for custom headers templates\n */\n this.eSortOrder = RefPlaceholder;\n this.eSortAsc = RefPlaceholder;\n this.eSortDesc = RefPlaceholder;\n this.eSortMixed = RefPlaceholder;\n this.eSortNone = RefPlaceholder;\n this.lastMovingChanged = 0;\n }\n wireBeans(beans) {\n this.sortController = beans.sortController;\n this.menuService = beans.menuService;\n this.funcColsService = beans.funcColsService;\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n super.destroy();\n }\n refresh(params) {\n const oldParams = this.params;\n this.params = params;\n if (this.workOutTemplate() != this.currentTemplate || this.workOutShowMenu() != this.currentShowMenu || this.workOutSort() != this.currentSort || this.shouldSuppressMenuHide() != this.currentSuppressMenuHide || oldParams.enableFilterButton != params.enableFilterButton || oldParams.enableFilterIcon != params.enableFilterIcon) {\n return false;\n }\n this.setDisplayName(params);\n return true;\n }\n workOutTemplate() {\n let template = this.params.template ?? HeaderCompTemplate;\n template = template && template.trim ? template.trim() : template;\n return template;\n }\n init(params) {\n this.params = params;\n this.currentTemplate = this.workOutTemplate();\n this.setTemplate(this.currentTemplate, [SortIndicatorSelector]);\n this.setupTap();\n this.setMenu();\n this.setupSort();\n this.setupFilterIcon();\n this.setupFilterButton();\n this.setDisplayName(params);\n }\n setDisplayName(params) {\n if (this.currentDisplayName != params.displayName) {\n this.currentDisplayName = params.displayName;\n const displayNameSanitised = _escapeString(this.currentDisplayName, true);\n if (this.eText) {\n this.eText.textContent = displayNameSanitised;\n }\n }\n }\n addInIcon(iconName, eParent, column) {\n if (eParent == null) {\n return;\n }\n const eIcon = _createIconNoSpan(iconName, this.gos, column);\n if (eIcon) {\n eParent.appendChild(eIcon);\n }\n }\n setupTap() {\n const { gos } = this;\n if (gos.get(\"suppressTouch\")) {\n return;\n }\n const touchListener = new TouchListener(this.getGui(), true);\n const suppressMenuHide = this.shouldSuppressMenuHide();\n const tapMenuButton = suppressMenuHide && _exists(this.eMenu);\n const menuTouchListener = tapMenuButton ? new TouchListener(this.eMenu, true) : touchListener;\n if (this.params.enableMenu) {\n const eventType = tapMenuButton ? \"tap\" : \"longTap\";\n const showMenuFn = (event) => this.params.showColumnMenuAfterMouseClick(event.touchStart);\n this.addManagedListeners(menuTouchListener, { [eventType]: showMenuFn });\n }\n if (this.params.enableSorting) {\n const tapListener = (event) => {\n const target = event.touchStart.target;\n if (suppressMenuHide && (this.eMenu?.contains(target) || this.eFilterButton?.contains(target))) {\n return;\n }\n this.sortController.progressSort(this.params.column, false, \"uiColumnSorted\");\n };\n this.addManagedListeners(touchListener, { tap: tapListener });\n }\n if (this.params.enableFilterButton) {\n const filterButtonTouchListener = new TouchListener(this.eFilterButton, true);\n this.addManagedListeners(filterButtonTouchListener, {\n tap: () => this.params.showFilter(this.eFilterButton)\n });\n this.addDestroyFunc(() => filterButtonTouchListener.destroy());\n }\n this.addDestroyFunc(() => touchListener.destroy());\n if (tapMenuButton) {\n this.addDestroyFunc(() => menuTouchListener.destroy());\n }\n }\n workOutShowMenu() {\n return this.params.enableMenu && this.menuService.isHeaderMenuButtonEnabled();\n }\n shouldSuppressMenuHide() {\n return this.menuService.isHeaderMenuButtonAlwaysShowEnabled();\n }\n setMenu() {\n if (!this.eMenu) {\n return;\n }\n this.currentShowMenu = this.workOutShowMenu();\n if (!this.currentShowMenu) {\n _removeFromParent(this.eMenu);\n this.eMenu = void 0;\n return;\n }\n const isLegacyMenu = this.menuService.isLegacyMenuEnabled();\n this.addInIcon(isLegacyMenu ? \"menu\" : \"menuAlt\", this.eMenu, this.params.column);\n this.eMenu.classList.toggle(\"ag-header-menu-icon\", !isLegacyMenu);\n this.currentSuppressMenuHide = this.shouldSuppressMenuHide();\n this.addManagedElementListeners(this.eMenu, { click: () => this.params.showColumnMenu(this.eMenu) });\n this.eMenu.classList.toggle(\"ag-header-menu-always-show\", this.currentSuppressMenuHide);\n }\n onMenuKeyboardShortcut(isFilterShortcut) {\n const column = this.params.column;\n const isLegacyMenuEnabled = this.menuService.isLegacyMenuEnabled();\n if (isFilterShortcut && !isLegacyMenuEnabled) {\n if (this.menuService.isFilterMenuInHeaderEnabled(column)) {\n this.params.showFilter(this.eFilterButton ?? this.eMenu ?? this.getGui());\n return true;\n }\n } else if (this.params.enableMenu) {\n this.params.showColumnMenu(this.eMenu ?? this.eFilterButton ?? this.getGui());\n return true;\n }\n return false;\n }\n workOutSort() {\n return this.params.enableSorting;\n }\n setupSort() {\n this.currentSort = this.params.enableSorting;\n if (!this.eSortIndicator) {\n this.eSortIndicator = this.createBean(new SortIndicatorComp(true));\n this.eSortIndicator.attachCustomElements(\n this.eSortOrder,\n this.eSortAsc,\n this.eSortDesc,\n this.eSortMixed,\n this.eSortNone\n );\n }\n this.eSortIndicator.setupSort(this.params.column);\n if (!this.currentSort) {\n return;\n }\n this.addManagedListeners(this.params.column, {\n movingChanged: () => {\n this.lastMovingChanged = (/* @__PURE__ */ new Date()).getTime();\n }\n });\n if (this.eLabel) {\n this.addManagedElementListeners(this.eLabel, {\n click: (event) => {\n const moving = this.params.column.isMoving();\n const nowTime = (/* @__PURE__ */ new Date()).getTime();\n const movedRecently = nowTime - this.lastMovingChanged < 50;\n const columnMoving = moving || movedRecently;\n if (!columnMoving) {\n const sortUsingCtrl = this.gos.get(\"multiSortKey\") === \"ctrl\";\n const multiSort = sortUsingCtrl ? event.ctrlKey || event.metaKey : event.shiftKey;\n this.params.progressSort(multiSort);\n }\n }\n });\n }\n const onSortingChanged = () => {\n const sort = this.params.column.getSort();\n this.addOrRemoveCssClass(\"ag-header-cell-sorted-asc\", sort === \"asc\");\n this.addOrRemoveCssClass(\"ag-header-cell-sorted-desc\", sort === \"desc\");\n this.addOrRemoveCssClass(\"ag-header-cell-sorted-none\", !sort);\n if (this.params.column.getColDef().showRowGroup) {\n const sourceColumns = this.funcColsService.getSourceColumnsForGroupColumn(\n this.params.column\n );\n const sortDirectionsMatch = sourceColumns?.every(\n (sourceCol) => this.params.column.getSort() == sourceCol.getSort()\n );\n const isMultiSorting = !sortDirectionsMatch;\n this.addOrRemoveCssClass(\"ag-header-cell-sorted-mixed\", isMultiSorting);\n }\n };\n this.addManagedEventListeners({\n sortChanged: onSortingChanged,\n columnRowGroupChanged: onSortingChanged\n });\n }\n setupFilterIcon() {\n if (!this.eFilter) {\n return;\n }\n this.configureFilter(this.params.enableFilterIcon, this.eFilter, this.onFilterChangedIcon.bind(this));\n }\n setupFilterButton() {\n if (!this.eFilterButton) {\n return;\n }\n const configured = this.configureFilter(\n this.params.enableFilterButton,\n this.eFilterButton,\n this.onFilterChangedButton.bind(this)\n );\n if (configured) {\n this.addManagedElementListeners(this.eFilterButton, {\n click: () => this.params.showFilter(this.eFilterButton)\n });\n } else {\n this.eFilterButton = void 0;\n }\n }\n configureFilter(enabled, element, filterChangedCallback) {\n if (!enabled) {\n _removeFromParent(element);\n return false;\n }\n const column = this.params.column;\n this.addInIcon(\"filter\", element, column);\n this.addManagedListeners(column, { filterChanged: filterChangedCallback });\n filterChangedCallback();\n return true;\n }\n onFilterChangedIcon() {\n const filterPresent = this.params.column.isFilterActive();\n _setDisplayed(this.eFilter, filterPresent, { skipAriaHidden: true });\n }\n onFilterChangedButton() {\n const filterPresent = this.params.column.isFilterActive();\n this.eFilterButton.classList.toggle(\"ag-filter-active\", filterPresent);\n }\n getAnchorElementForMenu(isFilter) {\n if (isFilter) {\n return this.eFilterButton ?? this.eMenu ?? this.getGui();\n }\n return this.eMenu ?? this.eFilterButton ?? this.getGui();\n }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/headerGroupComp.ts\nvar HeaderGroupComp = class extends Component {\n constructor() {\n super(\n /* html */\n `
\n \n \n \n
`\n );\n this.agOpened = RefPlaceholder;\n this.agClosed = RefPlaceholder;\n this.agLabel = RefPlaceholder;\n }\n wireBeans(beans) {\n this.columnModel = beans.columnModel;\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n super.destroy();\n }\n init(params) {\n this.params = params;\n this.checkWarnings();\n this.setupLabel();\n this.addGroupExpandIcon();\n this.setupExpandIcons();\n }\n checkWarnings() {\n const paramsAny = this.params;\n if (paramsAny.template) {\n _warnOnce(\n `A template was provided for Header Group Comp - templates are only supported for Header Comps (not groups)`\n );\n }\n }\n setupExpandIcons() {\n this.addInIcon(\"columnGroupOpened\", this.agOpened);\n this.addInIcon(\"columnGroupClosed\", this.agClosed);\n const expandAction = (event) => {\n if (_isStopPropagationForAgGrid(event)) {\n return;\n }\n const newExpandedValue = !this.params.columnGroup.isExpanded();\n this.columnModel.setColumnGroupOpened(\n this.params.columnGroup.getProvidedColumnGroup(),\n newExpandedValue,\n \"uiColumnExpanded\"\n );\n };\n this.addTouchAndClickListeners(this.agClosed, expandAction);\n this.addTouchAndClickListeners(this.agOpened, expandAction);\n const stopPropagationAction = (event) => {\n _stopPropagationForAgGrid(event);\n };\n this.addManagedElementListeners(this.agClosed, { dblclick: stopPropagationAction });\n this.addManagedElementListeners(this.agOpened, { dblclick: stopPropagationAction });\n this.addManagedElementListeners(this.getGui(), { dblclick: expandAction });\n this.updateIconVisibility();\n const providedColumnGroup = this.params.columnGroup.getProvidedColumnGroup();\n const updateIcon = this.updateIconVisibility.bind(this);\n this.addManagedListeners(providedColumnGroup, {\n expandedChanged: updateIcon,\n expandableChanged: updateIcon\n });\n }\n addTouchAndClickListeners(eElement, action) {\n const touchListener = new TouchListener(eElement, true);\n this.addManagedListeners(touchListener, { tap: action });\n this.addDestroyFunc(() => touchListener.destroy());\n this.addManagedElementListeners(eElement, { click: action });\n }\n updateIconVisibility() {\n const columnGroup = this.params.columnGroup;\n if (columnGroup.isExpandable()) {\n const expanded = this.params.columnGroup.isExpanded();\n _setDisplayed(this.agOpened, expanded);\n _setDisplayed(this.agClosed, !expanded);\n } else {\n _setDisplayed(this.agOpened, false);\n _setDisplayed(this.agClosed, false);\n }\n }\n addInIcon(iconName, element) {\n const eIcon = _createIconNoSpan(iconName, this.gos, null);\n if (eIcon) {\n element.appendChild(eIcon);\n }\n }\n addGroupExpandIcon() {\n if (!this.params.columnGroup.isExpandable()) {\n _setDisplayed(this.agOpened, false);\n _setDisplayed(this.agClosed, false);\n return;\n }\n }\n setupLabel() {\n const { displayName, columnGroup } = this.params;\n if (_exists(displayName)) {\n const displayNameSanitised = _escapeString(displayName, true);\n this.agLabel.textContent = displayNameSanitised;\n }\n this.addOrRemoveCssClass(\"ag-sticky-label\", !columnGroup.getColGroupDef()?.suppressStickyLabel);\n }\n};\n\n// community-modules/core/src/rendering/cellRenderers/animateShowChangeCellRenderer.ts\nvar ARROW_UP = \"\\u2191\";\nvar ARROW_DOWN = \"\\u2193\";\nvar AnimateShowChangeCellRenderer = class extends Component {\n constructor() {\n super();\n this.refreshCount = 0;\n const template = document.createElement(\"span\");\n const delta = document.createElement(\"span\");\n delta.setAttribute(\"class\", \"ag-value-change-delta\");\n const value = document.createElement(\"span\");\n value.setAttribute(\"class\", \"ag-value-change-value\");\n template.appendChild(delta);\n template.appendChild(value);\n this.setTemplateFromElement(template);\n }\n wireBeans(beans) {\n this.filterManager = beans.filterManager;\n }\n init(params) {\n this.eValue = this.queryForHtmlElement(\".ag-value-change-value\");\n this.eDelta = this.queryForHtmlElement(\".ag-value-change-delta\");\n this.refresh(params, true);\n }\n showDelta(params, delta) {\n const absDelta = Math.abs(delta);\n const valueFormatted = params.formatValue(absDelta);\n const valueToUse = _exists(valueFormatted) ? valueFormatted : absDelta;\n const deltaUp = delta >= 0;\n if (deltaUp) {\n this.eDelta.textContent = ARROW_UP + valueToUse;\n } else {\n this.eDelta.textContent = ARROW_DOWN + valueToUse;\n }\n this.eDelta.classList.toggle(\"ag-value-change-delta-up\", deltaUp);\n this.eDelta.classList.toggle(\"ag-value-change-delta-down\", !deltaUp);\n }\n setTimerToRemoveDelta() {\n this.refreshCount++;\n const refreshCountCopy = this.refreshCount;\n this.getFrameworkOverrides().wrapIncoming(() => {\n window.setTimeout(() => {\n if (refreshCountCopy === this.refreshCount) {\n this.hideDeltaValue();\n }\n }, 2e3);\n });\n }\n hideDeltaValue() {\n this.eValue.classList.remove(\"ag-value-change-value-highlight\");\n _clearElement(this.eDelta);\n }\n refresh(params, isInitialRender = false) {\n const value = params.value;\n if (value === this.lastValue) {\n return false;\n }\n if (_exists(params.valueFormatted)) {\n this.eValue.textContent = params.valueFormatted;\n } else if (_exists(params.value)) {\n this.eValue.textContent = value;\n } else {\n _clearElement(this.eValue);\n }\n if (this.filterManager?.isSuppressFlashingCellsBecauseFiltering()) {\n return false;\n }\n if (typeof value === \"number\" && typeof this.lastValue === \"number\") {\n const delta = value - this.lastValue;\n this.showDelta(params, delta);\n }\n if (this.lastValue) {\n this.eValue.classList.add(\"ag-value-change-value-highlight\");\n }\n if (!isInitialRender) {\n this.setTimerToRemoveDelta();\n }\n this.lastValue = value;\n return true;\n }\n};\n\n// community-modules/core/src/rendering/cellRenderers/animateSlideCellRenderer.ts\nvar AnimateSlideCellRenderer = class extends Component {\n constructor() {\n super();\n this.refreshCount = 0;\n const template = document.createElement(\"span\");\n const slide = document.createElement(\"span\");\n slide.setAttribute(\"class\", \"ag-value-slide-current\");\n template.appendChild(slide);\n this.setTemplateFromElement(template);\n this.eCurrent = this.queryForHtmlElement(\".ag-value-slide-current\");\n }\n wireBeans(beans) {\n this.filterManager = beans.filterManager;\n }\n init(params) {\n this.refresh(params, true);\n }\n addSlideAnimation() {\n this.refreshCount++;\n const refreshCountCopy = this.refreshCount;\n if (this.ePrevious) {\n this.getGui().removeChild(this.ePrevious);\n }\n const prevElement = document.createElement(\"span\");\n prevElement.setAttribute(\"class\", \"ag-value-slide-previous ag-value-slide-out\");\n this.ePrevious = prevElement;\n this.ePrevious.textContent = this.eCurrent.textContent;\n this.getGui().insertBefore(this.ePrevious, this.eCurrent);\n this.getFrameworkOverrides().wrapIncoming(() => {\n window.setTimeout(() => {\n if (refreshCountCopy !== this.refreshCount) {\n return;\n }\n this.ePrevious.classList.add(\"ag-value-slide-out-end\");\n }, 50);\n window.setTimeout(() => {\n if (refreshCountCopy !== this.refreshCount) {\n return;\n }\n this.getGui().removeChild(this.ePrevious);\n this.ePrevious = null;\n }, 3e3);\n });\n }\n refresh(params, isInitialRender = false) {\n let value = params.value;\n if (_missing(value)) {\n value = \"\";\n }\n if (value === this.lastValue) {\n return false;\n }\n if (this.filterManager?.isSuppressFlashingCellsBecauseFiltering()) {\n return false;\n }\n if (!isInitialRender) {\n this.addSlideAnimation();\n }\n this.lastValue = value;\n if (_exists(params.valueFormatted)) {\n this.eCurrent.textContent = params.valueFormatted;\n } else if (_exists(params.value)) {\n this.eCurrent.textContent = value;\n } else {\n _clearElement(this.eCurrent);\n }\n return true;\n }\n};\n\n// community-modules/core/src/constants/keyCode.ts\nvar KeyCode = class {\n};\nKeyCode.BACKSPACE = \"Backspace\";\nKeyCode.TAB = \"Tab\";\nKeyCode.ENTER = \"Enter\";\nKeyCode.ESCAPE = \"Escape\";\nKeyCode.SPACE = \" \";\nKeyCode.LEFT = \"ArrowLeft\";\nKeyCode.UP = \"ArrowUp\";\nKeyCode.RIGHT = \"ArrowRight\";\nKeyCode.DOWN = \"ArrowDown\";\nKeyCode.DELETE = \"Delete\";\nKeyCode.F2 = \"F2\";\nKeyCode.PAGE_UP = \"PageUp\";\nKeyCode.PAGE_DOWN = \"PageDown\";\nKeyCode.PAGE_HOME = \"Home\";\nKeyCode.PAGE_END = \"End\";\n// these should be used with `event.code` instead of `event.key`\n// as `event.key` changes when non-latin keyboards are used\nKeyCode.A = \"KeyA\";\nKeyCode.C = \"KeyC\";\nKeyCode.D = \"KeyD\";\nKeyCode.V = \"KeyV\";\nKeyCode.X = \"KeyX\";\nKeyCode.Y = \"KeyY\";\nKeyCode.Z = \"KeyZ\";\n\n// community-modules/core/src/widgets/agAbstractLabel.ts\nvar AgAbstractLabel = class extends Component {\n constructor(config, template, components) {\n super(template, components);\n this.labelSeparator = \"\";\n this.labelAlignment = \"left\";\n this.disabled = false;\n this.label = \"\";\n this.config = config || {};\n }\n postConstruct() {\n this.addCssClass(\"ag-labeled\");\n this.eLabel.classList.add(\"ag-label\");\n const { labelSeparator, label, labelWidth, labelAlignment, disabled } = this.config;\n if (disabled != null) {\n this.setDisabled(disabled);\n }\n if (labelSeparator != null) {\n this.setLabelSeparator(labelSeparator);\n }\n if (label != null) {\n this.setLabel(label);\n }\n if (labelWidth != null) {\n this.setLabelWidth(labelWidth);\n }\n this.setLabelAlignment(labelAlignment || this.labelAlignment);\n this.refreshLabel();\n }\n refreshLabel() {\n _clearElement(this.eLabel);\n if (typeof this.label === \"string\") {\n this.eLabel.innerText = this.label + this.labelSeparator;\n } else if (this.label) {\n this.eLabel.appendChild(this.label);\n }\n if (this.label === \"\") {\n _setDisplayed(this.eLabel, false);\n _setAriaRole(this.eLabel, \"presentation\");\n } else {\n _setDisplayed(this.eLabel, true);\n _setAriaRole(this.eLabel, null);\n }\n }\n setLabelSeparator(labelSeparator) {\n if (this.labelSeparator === labelSeparator) {\n return this;\n }\n this.labelSeparator = labelSeparator;\n if (this.label != null) {\n this.refreshLabel();\n }\n return this;\n }\n getLabelId() {\n this.eLabel.id = this.eLabel.id || `ag-${this.getCompId()}-label`;\n return this.eLabel.id;\n }\n getLabel() {\n return this.label;\n }\n setLabel(label) {\n if (this.label === label) {\n return this;\n }\n this.label = label;\n this.refreshLabel();\n return this;\n }\n setLabelAlignment(alignment) {\n const eGui = this.getGui();\n const eGuiClassList = eGui.classList;\n eGuiClassList.toggle(\"ag-label-align-left\", alignment === \"left\");\n eGuiClassList.toggle(\"ag-label-align-right\", alignment === \"right\");\n eGuiClassList.toggle(\"ag-label-align-top\", alignment === \"top\");\n return this;\n }\n setLabelEllipsis(hasEllipsis) {\n this.eLabel.classList.toggle(\"ag-label-ellipsis\", hasEllipsis);\n return this;\n }\n setLabelWidth(width) {\n if (this.label == null) {\n return this;\n }\n _setElementWidth(this.eLabel, width);\n return this;\n }\n setDisabled(disabled) {\n disabled = !!disabled;\n const element = this.getGui();\n _setDisabled(element, disabled);\n element.classList.toggle(\"ag-disabled\", disabled);\n this.disabled = disabled;\n return this;\n }\n isDisabled() {\n return !!this.disabled;\n }\n};\n\n// community-modules/core/src/widgets/agAbstractField.ts\nvar AgAbstractField = class extends AgAbstractLabel {\n constructor(config, template, components, className) {\n super(config, template, components);\n this.className = className;\n }\n postConstruct() {\n super.postConstruct();\n const { width, value, onValueChange } = this.config;\n if (width != null) {\n this.setWidth(width);\n }\n if (value != null) {\n this.setValue(value);\n }\n if (onValueChange != null) {\n this.onValueChange(onValueChange);\n }\n if (this.className) {\n this.addCssClass(this.className);\n }\n this.refreshAriaLabelledBy();\n }\n setLabel(label) {\n super.setLabel(label);\n this.refreshAriaLabelledBy();\n return this;\n }\n refreshAriaLabelledBy() {\n const ariaEl = this.getAriaElement();\n const labelId = this.getLabelId();\n const label = this.getLabel();\n if (label == null || label == \"\" || _getAriaLabel(ariaEl) !== null) {\n _setAriaLabelledBy(ariaEl, \"\");\n } else {\n _setAriaLabelledBy(ariaEl, labelId ?? \"\");\n }\n }\n setAriaLabel(label) {\n _setAriaLabel(this.getAriaElement(), label);\n this.refreshAriaLabelledBy();\n return this;\n }\n onValueChange(callbackFn) {\n this.addManagedListeners(this, { fieldValueChanged: () => callbackFn(this.getValue()) });\n return this;\n }\n getWidth() {\n return this.getGui().clientWidth;\n }\n setWidth(width) {\n _setFixedWidth(this.getGui(), width);\n return this;\n }\n getPreviousValue() {\n return this.previousValue;\n }\n getValue() {\n return this.value;\n }\n setValue(value, silent) {\n if (this.value === value) {\n return this;\n }\n this.previousValue = this.value;\n this.value = value;\n if (!silent) {\n this.dispatchLocalEvent({ type: \"fieldValueChanged\" });\n }\n return this;\n }\n};\n\n// community-modules/core/src/widgets/agAbstractInputField.ts\nvar AgAbstractInputField = class extends AgAbstractField {\n constructor(config, className, inputType = \"text\", displayFieldTag = \"input\") {\n super(\n config,\n config?.template ?? /* html */\n `\n
\n
\n
\n <${displayFieldTag} data-ref=\"eInput\" class=\"ag-input-field-input\">\n
\n
`,\n [],\n className\n );\n this.inputType = inputType;\n this.displayFieldTag = displayFieldTag;\n this.eLabel = RefPlaceholder;\n this.eWrapper = RefPlaceholder;\n this.eInput = RefPlaceholder;\n }\n postConstruct() {\n super.postConstruct();\n this.setInputType();\n this.eLabel.classList.add(`${this.className}-label`);\n this.eWrapper.classList.add(`${this.className}-input-wrapper`);\n this.eInput.classList.add(`${this.className}-input`);\n this.addCssClass(\"ag-input-field\");\n this.eInput.id = this.eInput.id || `ag-${this.getCompId()}-input`;\n const { inputName, inputWidth } = this.config;\n if (inputName != null) {\n this.setInputName(inputName);\n }\n if (inputWidth != null) {\n this.setInputWidth(inputWidth);\n }\n this.addInputListeners();\n this.activateTabIndex([this.eInput]);\n }\n addInputListeners() {\n this.addManagedElementListeners(this.eInput, { input: (e) => this.setValue(e.target.value) });\n }\n setInputType() {\n if (this.displayFieldTag === \"input\") {\n this.eInput.setAttribute(\"type\", this.inputType);\n }\n }\n getInputElement() {\n return this.eInput;\n }\n setInputWidth(width) {\n _setElementWidth(this.eWrapper, width);\n return this;\n }\n setInputName(name) {\n this.getInputElement().setAttribute(\"name\", name);\n return this;\n }\n getFocusableElement() {\n return this.eInput;\n }\n setMaxLength(length) {\n const eInput = this.eInput;\n eInput.maxLength = length;\n return this;\n }\n setInputPlaceholder(placeholder) {\n _addOrRemoveAttribute(this.eInput, \"placeholder\", placeholder);\n return this;\n }\n setInputAriaLabel(label) {\n _setAriaLabel(this.eInput, label);\n this.refreshAriaLabelledBy();\n return this;\n }\n setDisabled(disabled) {\n _setDisabled(this.eInput, disabled);\n return super.setDisabled(disabled);\n }\n setAutoComplete(value) {\n if (value === true) {\n _addOrRemoveAttribute(this.eInput, \"autocomplete\", null);\n } else {\n const autoCompleteValue = typeof value === \"string\" ? value : \"off\";\n _addOrRemoveAttribute(this.eInput, \"autocomplete\", autoCompleteValue);\n }\n return this;\n }\n};\n\n// community-modules/core/src/widgets/agCheckbox.ts\nvar AgCheckbox = class extends AgAbstractInputField {\n constructor(config, className = \"ag-checkbox\", inputType = \"checkbox\") {\n super(config, className, inputType);\n this.labelAlignment = \"right\";\n this.selected = false;\n this.readOnly = false;\n this.passive = false;\n }\n postConstruct() {\n super.postConstruct();\n const { readOnly, passive } = this.config;\n if (typeof readOnly === \"boolean\")\n this.setReadOnly(readOnly);\n if (typeof passive === \"boolean\")\n this.setPassive(passive);\n }\n addInputListeners() {\n this.addManagedElementListeners(this.eInput, { click: this.onCheckboxClick.bind(this) });\n this.addManagedElementListeners(this.eLabel, { click: this.toggle.bind(this) });\n }\n getNextValue() {\n return this.selected === void 0 ? true : !this.selected;\n }\n setPassive(passive) {\n this.passive = passive;\n }\n isReadOnly() {\n return this.readOnly;\n }\n setReadOnly(readOnly) {\n this.eWrapper.classList.toggle(\"ag-disabled\", readOnly);\n this.eInput.disabled = readOnly;\n this.readOnly = readOnly;\n }\n setDisabled(disabled) {\n this.eWrapper.classList.toggle(\"ag-disabled\", disabled);\n return super.setDisabled(disabled);\n }\n toggle() {\n if (this.eInput.disabled) {\n return;\n }\n const previousValue = this.isSelected();\n const nextValue = this.getNextValue();\n if (this.passive) {\n this.dispatchChange(nextValue, previousValue);\n } else {\n this.setValue(nextValue);\n }\n }\n getValue() {\n return this.isSelected();\n }\n setValue(value, silent) {\n this.refreshSelectedClass(value);\n this.setSelected(value, silent);\n return this;\n }\n setName(name) {\n const input = this.getInputElement();\n input.name = name;\n return this;\n }\n isSelected() {\n return this.selected;\n }\n setSelected(selected, silent) {\n if (this.isSelected() === selected) {\n return;\n }\n this.previousValue = this.isSelected();\n selected = this.selected = typeof selected === \"boolean\" ? selected : void 0;\n this.eInput.checked = selected;\n this.eInput.indeterminate = selected === void 0;\n if (!silent) {\n this.dispatchChange(this.selected, this.previousValue);\n }\n }\n dispatchChange(selected, previousValue, event) {\n this.dispatchLocalEvent({ type: \"fieldValueChanged\", selected, previousValue, event });\n const input = this.getInputElement();\n this.eventService.dispatchEvent({\n type: \"checkboxChanged\",\n id: input.id,\n name: input.name,\n selected,\n previousValue\n });\n }\n onCheckboxClick(e) {\n if (this.passive || this.eInput.disabled) {\n return;\n }\n const previousValue = this.isSelected();\n const selected = this.selected = e.target.checked;\n this.refreshSelectedClass(selected);\n this.dispatchChange(selected, previousValue, e);\n }\n refreshSelectedClass(value) {\n this.eWrapper.classList.toggle(\"ag-checked\", value === true);\n this.eWrapper.classList.toggle(\"ag-indeterminate\", value == null);\n }\n};\nvar AgCheckboxSelector = {\n selector: \"AG-CHECKBOX\",\n component: AgCheckbox\n};\n\n// community-modules/core/src/rendering/cellRenderers/checkboxCellRenderer.ts\nvar CheckboxCellRenderer = class extends Component {\n constructor() {\n super(\n /* html*/\n `\n
\n \n
`,\n [AgCheckboxSelector]\n );\n this.eCheckbox = RefPlaceholder;\n }\n init(params) {\n this.refresh(params);\n const inputEl = this.eCheckbox.getInputElement();\n inputEl.setAttribute(\"tabindex\", \"-1\");\n _setAriaLive(inputEl, \"polite\");\n this.addManagedListeners(inputEl, {\n click: (event) => {\n _stopPropagationForAgGrid(event);\n if (this.eCheckbox.isDisabled()) {\n return;\n }\n const isSelected = this.eCheckbox.getValue();\n this.onCheckboxChanged(isSelected);\n },\n dblclick: (event) => {\n _stopPropagationForAgGrid(event);\n }\n });\n this.addManagedElementListeners(this.params.eGridCell, {\n keydown: (event) => {\n if (event.key === KeyCode.SPACE && !this.eCheckbox.isDisabled()) {\n if (this.params.eGridCell === _getActiveDomElement(this.gos)) {\n this.eCheckbox.toggle();\n }\n const isSelected = this.eCheckbox.getValue();\n this.onCheckboxChanged(isSelected);\n event.preventDefault();\n }\n }\n });\n }\n refresh(params) {\n this.params = params;\n this.updateCheckbox(params);\n return true;\n }\n updateCheckbox(params) {\n let isSelected;\n let displayed = true;\n if (params.node.group && params.column) {\n if (typeof params.value === \"boolean\") {\n isSelected = params.value;\n } else {\n const colId = params.column.getColId();\n if (colId.startsWith(GROUP_AUTO_COLUMN_ID)) {\n isSelected = params.value == null || params.value === \"\" ? void 0 : params.value === \"true\";\n } else if (params.node.aggData && params.node.aggData[colId] !== void 0) {\n isSelected = params.value ?? void 0;\n } else {\n displayed = false;\n }\n }\n } else {\n isSelected = params.value ?? void 0;\n }\n if (!displayed) {\n this.eCheckbox.setDisplayed(false);\n return;\n }\n this.eCheckbox.setValue(isSelected);\n const disabled = params.disabled != null ? params.disabled : !params.column?.isCellEditable(params.node);\n this.eCheckbox.setDisabled(disabled);\n const translate = this.localeService.getLocaleTextFunc();\n const stateName = _getAriaCheckboxStateName(translate, isSelected);\n const ariaLabel = disabled ? stateName : `${translate(\"ariaToggleCellValue\", \"Press SPACE to toggle cell value\")} (${stateName})`;\n this.eCheckbox.setInputAriaLabel(ariaLabel);\n }\n onCheckboxChanged(isSelected) {\n const { column, node, value } = this.params;\n this.eventService.dispatchEvent({\n type: \"cellEditingStarted\",\n column,\n colDef: column?.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value\n });\n const valueChanged = this.params.node.setDataValue(this.params.column, isSelected, \"edit\");\n this.eventService.dispatchEvent({\n type: \"cellEditingStopped\",\n column,\n colDef: column?.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n oldValue: value,\n newValue: isSelected,\n valueChanged\n });\n if (!valueChanged) {\n this.updateCheckbox(this.params);\n }\n }\n};\n\n// community-modules/core/src/rendering/cellRenderers/loadingCellRenderer.ts\nvar LoadingCellRenderer = class extends Component {\n constructor() {\n super(\n /* html */\n `
\n \n \n
`\n );\n this.eLoadingIcon = RefPlaceholder;\n this.eLoadingText = RefPlaceholder;\n }\n init(params) {\n params.node.failedLoad ? this.setupFailed() : this.setupLoading();\n }\n setupFailed() {\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n this.eLoadingText.innerText = localeTextFunc(\"loadingError\", \"ERR\");\n }\n setupLoading() {\n const eLoadingIcon = _createIconNoSpan(\"groupLoading\", this.gos, null);\n if (eLoadingIcon) {\n this.eLoadingIcon.appendChild(eLoadingIcon);\n }\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n this.eLoadingText.innerText = localeTextFunc(\"loadingOoo\", \"Loading\");\n }\n refresh(params) {\n return false;\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n super.destroy();\n }\n};\n\n// community-modules/core/src/rendering/cellRenderers/skeletonCellRenderer.ts\nvar SkeletonCellRenderer = class extends Component {\n constructor() {\n super(\n /* html */\n `
`\n );\n }\n init(params) {\n const id = `ag-cell-skeleton-renderer-${this.getCompId()}`;\n this.getGui().setAttribute(\"id\", id);\n this.addDestroyFunc(() => _setAriaLabelledBy(params.eParentOfValue));\n _setAriaLabelledBy(params.eParentOfValue, id);\n params.node.failedLoad ? this.setupFailed() : this.setupLoading(params);\n }\n setupFailed() {\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n this.getGui().innerText = localeTextFunc(\"loadingError\", \"ERR\");\n const ariaFailed = localeTextFunc(\"ariaSkeletonCellLoadingFailed\", \"Row failed to load\");\n _setAriaLabel(this.getGui(), ariaFailed);\n }\n setupLoading(params) {\n const eDocument = _getDocument(this.gos);\n const skeletonEffect = eDocument.createElement(\"div\");\n skeletonEffect.classList.add(\"ag-skeleton-effect\");\n const rowIndex = params.node.rowIndex;\n if (rowIndex != null) {\n const width = 75 + 25 * (rowIndex % 2 === 0 ? Math.sin(rowIndex) : Math.cos(rowIndex));\n skeletonEffect.style.width = `${width}%`;\n }\n this.getGui().appendChild(skeletonEffect);\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n const ariaLoading = localeTextFunc(\"ariaSkeletonCellLoading\", \"Row data is loading\");\n _setAriaLabel(this.getGui(), ariaLoading);\n }\n refresh(params) {\n return false;\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n super.destroy();\n }\n};\n\n// community-modules/core/src/rendering/overlays/overlayComponent.ts\nvar OverlayComponent = class extends Component {\n constructor() {\n super();\n }\n // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n // so we need to override destroy() just to make the method public.\n destroy() {\n super.destroy();\n }\n};\n\n// community-modules/core/src/rendering/overlays/loadingOverlayComponent.ts\nvar LoadingOverlayComponent = class extends OverlayComponent {\n init() {\n const customTemplate = _makeNull(this.gos.get(\"overlayLoadingTemplate\")?.trim());\n this.setTemplate(\n customTemplate ?? /* html */\n ``\n );\n if (!customTemplate) {\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n setTimeout(() => {\n this.getGui().textContent = localeTextFunc(\"loadingOoo\", \"Loading...\");\n });\n }\n }\n};\n\n// community-modules/core/src/rendering/overlays/noRowsOverlayComponent.ts\nvar NoRowsOverlayComponent = class extends OverlayComponent {\n init() {\n const customTemplate = _makeNull(this.gos.get(\"overlayNoRowsTemplate\")?.trim());\n this.setTemplate(customTemplate ?? /* html */\n ``);\n if (!customTemplate) {\n const localeTextFunc = this.localeService.getLocaleTextFunc();\n setTimeout(() => {\n this.getGui().textContent = localeTextFunc(\"noRowsToShow\", \"No Rows To Show\");\n });\n }\n }\n};\n\n// community-modules/core/src/widgets/popupComponent.ts\nvar PopupComponent = class extends Component {\n isPopup() {\n return true;\n }\n setParentComponent(container) {\n container.addCssClass(\"ag-has-popup\");\n super.setParentComponent(container);\n }\n destroy() {\n const parentComp = this.parentComponent;\n const hasParent = parentComp && parentComp.isAlive();\n if (hasParent) {\n parentComp.getGui().classList.remove(\"ag-has-popup\");\n }\n super.destroy();\n }\n};\n\n// community-modules/core/src/rendering/tooltipComponent.ts\nvar TooltipComponent = class extends PopupComponent {\n constructor() {\n super(\n /* html */\n `
`\n );\n }\n // will need to type params\n init(params) {\n const { value } = params;\n this.getGui().textContent = _escapeString(value, true);\n }\n};\n\n// community-modules/core/src/utils/fuzzyMatch.ts\nfunction _fuzzySuggestions(params) {\n const { inputValue, allSuggestions, hideIrrelevant, filterByPercentageOfBestMatch, addSequentialWeight } = params;\n let thisSuggestions = allSuggestions.map((text, idx) => ({\n value: text,\n relevance: levenshteinDistance(inputValue.toLowerCase(), text.toLocaleLowerCase(), addSequentialWeight),\n idx\n }));\n thisSuggestions.sort((a, b) => b.relevance - a.relevance);\n if (hideIrrelevant) {\n thisSuggestions = thisSuggestions.filter((suggestion) => suggestion.relevance !== 0);\n }\n if (thisSuggestions.length > 0 && filterByPercentageOfBestMatch && filterByPercentageOfBestMatch > 0) {\n const bestMatch = thisSuggestions[0].relevance;\n const limit = bestMatch * filterByPercentageOfBestMatch;\n thisSuggestions = thisSuggestions.filter((suggestion) => limit - suggestion.relevance < 0);\n }\n const values = [];\n const indices = [];\n for (const suggestion of thisSuggestions) {\n values.push(suggestion.value);\n indices.push(suggestion.idx);\n }\n return { values, indices };\n}\nfunction getAllSubstrings(str) {\n const result = [];\n const size = str.length;\n for (let len = 1; len <= size; len++) {\n for (let i = 0; i <= size - len; i++) {\n const j = i + len - 1;\n result.push(str.slice(i, j + 1));\n }\n }\n return result;\n}\nfunction levenshteinDistance(str1, str2, addSequentialWeight = false) {\n const a = str1.replace(/\\s/g, \"\");\n const b = str2.replace(/\\s/g, \"\");\n const len1 = a.length;\n const len2 = b.length;\n const m = new Array(len1 + 1).fill(null).map(() => new Array(len2 + 1).fill(0));\n for (let i = 0; i <= len1; i += 1) {\n m[i][0] = i;\n }\n for (let j = 0; j <= len2; j += 1) {\n m[0][j] = j;\n }\n for (let i = 1; i <= len1; i++) {\n for (let j = 1; j <= len2; j++) {\n if (a[i - 1] === b[j - 1]) {\n m[i][j] = m[i - 1][j - 1];\n } else {\n m[i][j] = 1 + Math.min(m[i][j - 1], Math.min(m[i - 1][j], m[i - 1][j - 1]));\n }\n }\n }\n const distance = m[len1][len2];\n const maxDistance = Math.max(len1, len2);\n let weight = maxDistance - distance;\n if (addSequentialWeight) {\n const substrings = getAllSubstrings(a);\n for (let i = 0; i < substrings.length; i++) {\n const currentSubstring = substrings[i];\n if (b.indexOf(currentSubstring) !== -1) {\n weight += 1;\n weight *= currentSubstring.length;\n }\n }\n }\n return weight;\n}\n\n// community-modules/core/src/components/framework/userComponentRegistry.ts\nvar UserComponentRegistry = class extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"userComponentRegistry\";\n this.agGridDefaults = {\n // drag and drop\n agDragAndDropImage: DragAndDropImageComponent,\n //header\n agColumnHeader: HeaderComp,\n agColumnGroupHeader: HeaderGroupComp,\n agSortIndicator: SortIndicatorComp,\n // renderers\n agAnimateShowChangeCellRenderer: AnimateShowChangeCellRenderer,\n agAnimateSlideCellRenderer: AnimateSlideCellRenderer,\n agLoadingCellRenderer: LoadingCellRenderer,\n agSkeletonCellRenderer: SkeletonCellRenderer,\n agCheckboxCellRenderer: CheckboxCellRenderer,\n //overlays\n agLoadingOverlay: LoadingOverlayComponent,\n agNoRowsOverlay: NoRowsOverlayComponent,\n // tooltips\n agTooltipComponent: TooltipComponent\n };\n this.agGridDefaultParams = {};\n /** Used to provide useful error messages if a user is trying to use an enterprise component without loading the module. */\n this.enterpriseAgDefaultCompsModule = {\n agSetColumnFilter: \"@ag-grid-enterprise/set-filter\" /* SetFilterModule */,\n agSetColumnFloatingFilter: \"@ag-grid-enterprise/set-filter\" /* SetFilterModule */,\n agMultiColumnFilter: \"@ag-grid-enterprise/multi-filter\" /* MultiFilterModule */,\n agMultiColumnFloatingFilter: \"@ag-grid-enterprise/multi-filter\" /* MultiFilterModule */,\n agGroupColumnFilter: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n agGroupColumnFloatingFilter: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n agGroupCellRenderer: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n // Actually in enterprise core as used by MasterDetail too but best guess is they are grouping\n agGroupRowRenderer: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n // Actually in enterprise core as used by MasterDetail but best guess is they are grouping\n agRichSelect: \"@ag-grid-enterprise/rich-select\" /* RichSelectModule */,\n agRichSelectCellEditor: \"@ag-grid-enterprise/rich-select\" /* RichSelectModule */,\n agDetailCellRenderer: \"@ag-grid-enterprise/master-detail\" /* MasterDetailModule */,\n agSparklineCellRenderer: \"@ag-grid-enterprise/sparklines\" /* SparklinesModule */\n };\n this.jsComps = {};\n }\n postConstruct() {\n const comps = this.gos.get(\"components\");\n if (comps != null) {\n _iterateObject(comps, (key, component) => this.registerJsComponent(key, component));\n }\n }\n registerDefaultComponent(name, component, params) {\n this.agGridDefaults[name] = component;\n if (params) {\n this.agGridDefaultParams[name] = params;\n }\n }\n registerJsComponent(name, component) {\n this.jsComps[name] = component;\n }\n retrieve(propertyName, name) {\n const createResult = (component, componentFromFramework, params) => ({\n componentFromFramework,\n component,\n params\n });\n const registeredViaFrameworkComp = this.getFrameworkOverrides().frameworkComponent(\n name,\n this.gos.get(\"components\")\n );\n if (registeredViaFrameworkComp != null) {\n return createResult(registeredViaFrameworkComp, true);\n }\n const jsComponent = this.jsComps[name];\n if (jsComponent) {\n const isFwkComp = this.getFrameworkOverrides().isFrameworkComponent(jsComponent);\n return createResult(jsComponent, isFwkComp);\n }\n const defaultComponent = this.agGridDefaults[name];\n if (defaultComponent) {\n return createResult(defaultComponent, false, this.agGridDefaultParams[name]);\n }\n const moduleForComponent = this.enterpriseAgDefaultCompsModule[name];\n if (moduleForComponent) {\n this.gos.assertModuleRegistered(moduleForComponent, `AG Grid '${propertyName}' component: ${name}`);\n } else {\n _doOnce(() => {\n this.warnAboutMissingComponent(propertyName, name);\n }, \"MissingComp\" + name);\n }\n return null;\n }\n warnAboutMissingComponent(propertyName, componentName) {\n const validComponents = [\n // Don't include the old names / internals in potential suggestions\n ...Object.keys(this.agGridDefaults).filter(\n (k) => ![\"agCellEditor\", \"agGroupRowRenderer\", \"agSortIndicator\"].includes(k)\n ),\n ...Object.keys(this.jsComps)\n ];\n const suggestions = _fuzzySuggestions({\n inputValue: componentName,\n allSuggestions: validComponents,\n hideIrrelevant: true,\n filterByPercentageOfBestMatch: 0.8\n }).values;\n _warnOnce(\n `Could not find '${componentName}' component. It was configured as \"${propertyName}: '${componentName}'\" but it wasn't found in the list of registered components.`\n );\n if (suggestions.length > 0) {\n _warnOnce(` Did you mean: [${suggestions.slice(0, 3)}]?`);\n }\n _warnOnce(\n `If using a custom component check it has been registered as described in: ${this.getFrameworkOverrides().getDocLink(\"components/\")}`\n );\n }\n};\n\n// community-modules/core/src/utils/promise.ts\nvar AgPromise = class _AgPromise {\n constructor(callback) {\n this.status = 0 /* IN_PROGRESS */;\n this.resolution = null;\n this.waiters = [];\n callback(\n (value) => this.onDone(value),\n (params) => this.onReject(params)\n );\n }\n static all(promises) {\n return promises.length ? new _AgPromise((resolve) => {\n let remainingToResolve = promises.length;\n const combinedValues = new Array(remainingToResolve);\n promises.forEach((promise, index) => {\n promise.then((value) => {\n combinedValues[index] = value;\n remainingToResolve--;\n if (remainingToResolve === 0) {\n resolve(combinedValues);\n }\n });\n });\n }) : _AgPromise.resolve();\n }\n static resolve(value = null) {\n return new _AgPromise((resolve) => resolve(value));\n }\n then(func) {\n return new _AgPromise((resolve) => {\n if (this.status === 1 /* RESOLVED */) {\n resolve(func(this.resolution));\n } else {\n this.waiters.push((value) => resolve(func(value)));\n }\n });\n }\n onDone(value) {\n this.status = 1 /* RESOLVED */;\n this.resolution = value;\n this.waiters.forEach((waiter) => waiter(value));\n }\n onReject(params) {\n }\n};\n\n// community-modules/core/src/components/framework/componentTypes.ts\nvar DateComponent = {\n propertyName: \"dateComponent\",\n cellRenderer: false\n};\nvar DragAndDropImageComponent2 = {\n propertyName: \"dragAndDropImageComponent\",\n cellRenderer: false\n};\nvar HeaderComponent = {\n propertyName: \"headerComponent\",\n cellRenderer: false\n};\nvar HeaderGroupComponent = {\n propertyName: \"headerGroupComponent\",\n cellRenderer: false\n};\nvar CellRendererComponent = {\n propertyName: \"cellRenderer\",\n cellRenderer: true\n};\nvar EditorRendererComponent = {\n propertyName: \"cellRenderer\",\n cellRenderer: false\n};\nvar LoadingCellRendererComponent = {\n propertyName: \"loadingCellRenderer\",\n cellRenderer: true\n};\nvar CellEditorComponent = {\n propertyName: \"cellEditor\",\n cellRenderer: false\n};\nvar InnerRendererComponent = {\n propertyName: \"innerRenderer\",\n cellRenderer: true\n};\nvar LoadingOverlayComponent2 = {\n propertyName: \"loadingOverlayComponent\",\n cellRenderer: false\n};\nvar NoRowsOverlayComponent2 = {\n propertyName: \"noRowsOverlayComponent\",\n cellRenderer: false\n};\nvar TooltipComponent2 = {\n propertyName: \"tooltipComponent\",\n cellRenderer: false\n};\nvar FilterComponent = {\n propertyName: \"filter\",\n cellRenderer: false\n};\nvar FloatingFilterComponent = {\n propertyName: \"floatingFilterComponent\",\n cellRenderer: false\n};\nvar ToolPanelComponent = {\n propertyName: \"toolPanel\",\n cellRenderer: false\n};\nvar StatusPanelComponent = {\n propertyName: \"statusPanel\",\n cellRenderer: false\n};\nvar FullWidth = {\n propertyName: \"fullWidthCellRenderer\",\n cellRenderer: true\n};\nvar FullWidthLoading = {\n propertyName: \"loadingCellRenderer\",\n cellRenderer: true\n};\nvar FullWidthGroup = {\n propertyName: \"groupRowRenderer\",\n cellRenderer: true\n};\nvar FullWidthDetail = {\n propertyName: \"detailCellRenderer\",\n cellRenderer: true\n};\nvar MenuItemComponent = {\n propertyName: \"menuItem\",\n cellRenderer: false\n};\n\n// community-modules/core/src/components/framework/userComponentFactory.ts\nvar UserComponentFactory = class _UserComponentFactory extends BeanStub {\n constructor() {\n super(...arguments);\n this.beanName = \"userComponentFactory\";\n }\n wireBeans(beans) {\n this.agComponentUtils = beans.agComponentUtils;\n this.componentMetadataProvider = beans.componentMetadataProvider;\n this.userComponentRegistry = beans.userComponentRegistry;\n this.frameworkComponentWrapper = beans.frameworkComponentWrapper;\n this.gridOptions = beans.gridOptions;\n }\n getDragAndDropImageCompDetails(params) {\n return this.getCompDetails(this.gridOptions, DragAndDropImageComponent2, \"agDragAndDropImage\", params, true);\n }\n getHeaderCompDetails(colDef, params) {\n return this.getCompDetails(colDef, HeaderComponent, \"agColumnHeader\", params);\n }\n getHeaderGroupCompDetails(params) {\n const colGroupDef = params.columnGroup.getColGroupDef();\n return this.getCompDetails(colGroupDef, HeaderGroupComponent, \"agColumnGroupHeader\", params);\n }\n // this one is unusual, as it can be LoadingCellRenderer, DetailCellRenderer, FullWidthCellRenderer or GroupRowRenderer.\n // so we have to pass the type in.\n getFullWidthCellRendererDetails(params) {\n return this.getCompDetails(this.gridOptions, FullWidth, null, params, true);\n }\n getFullWidthLoadingCellRendererDetails(params) {\n return this.getCompDetails(this.gridOptions, FullWidthLoading, \"agLoadingCellRenderer\", params, true);\n }\n getFullWidthGroupCellRendererDetails(params) {\n return this.getCompDetails(this.gridOptions, FullWidthGroup, \"agGroupRowRenderer\", params, true);\n }\n getFullWidthDetailCellRendererDetails(params) {\n return this.getCompDetails(this.gridOptions, FullWidthDetail, \"agDetailCellRenderer\", params, true);\n }\n // CELL RENDERER\n getInnerRendererDetails(def, params) {\n return this.getCompDetails(def, InnerRendererComponent, null, params);\n }\n getFullWidthGroupRowInnerCellRenderer(def, params) {\n return this.getCompDetails(def, InnerRendererComponent, null, params);\n }\n getCellRendererDetails(def, params) {\n return this.getCompDetails(def, CellRendererComponent, null, params);\n }\n getEditorRendererDetails(def, params) {\n return this.getCompDetails(def, EditorRendererComponent, null, params);\n }\n getLoadingCellRendererDetails(def, params) {\n return this.getCompDetails(def, LoadingCellRendererComponent, \"agSkeletonCellRenderer\", params, true);\n }\n // CELL EDITOR\n getCellEditorDetails(def, params) {\n return this.getCompDetails(def, CellEditorComponent, \"agCellEditor\", params, true);\n }\n // FILTER\n getFilterDetails(def, params, defaultFilter) {\n return this.getCompDetails(def, FilterComponent, defaultFilter, params, true);\n }\n getDateCompDetails(params) {\n return this.getCompDetails(this.gridOptions, DateComponent, \"agDateInput\", params, true);\n }\n getLoadingOverlayCompDetails(params) {\n return this.getCompDetails(this.gridOptions, LoadingOverlayComponent2, \"agLoadingOverlay\", params, true);\n }\n getNoRowsOverlayCompDetails(params) {\n return this.getCompDetails(this.gridOptions, NoRowsOverlayComponent2, \"agNoRowsOverlay\", params, true);\n }\n getTooltipCompDetails(params) {\n return this.getCompDetails(params.colDef, TooltipComponent2, \"agTooltipComponent\", params, true);\n }\n getSetFilterCellRendererDetails(def, params) {\n return this.getCompDetails(def, CellRendererComponent, null, params);\n }\n getFloatingFilterCompDetails(def, params, defaultFloatingFilter) {\n return this.getCompDetails(def, FloatingFilterComponent, defaultFloatingFilter, params);\n }\n getToolPanelCompDetails(toolPanelDef, params) {\n return this.getCompDetails(toolPanelDef, ToolPanelComponent, null, params, true);\n }\n getStatusPanelCompDetails(def, params) {\n return this.getCompDetails(def, StatusPanelComponent, null, params, true);\n }\n getMenuItemCompDetails(def, params) {\n return this.getCompDetails(def, MenuItemComponent, \"agMenuItem\", params, true);\n }\n getCompDetails(defObject, type, defaultName, params, mandatory = false) {\n const { propertyName, cellRenderer } = type;\n let { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector } = _UserComponentFactory.getCompKeys(this.frameworkOverrides, defObject, type, params);\n let defaultCompParams;\n const lookupFromRegistry = (key) => {\n const item = this.userComponentRegistry.retrieve(propertyName, key);\n if (item) {\n jsComp = !item.componentFromFramework ? item.component : void 0;\n fwComp = item.componentFromFramework ? item.component : void 0;\n defaultCompParams = item.params;\n }\n };\n if (compName != null) {\n lookupFromRegistry(compName);\n }\n if (jsComp == null && fwComp == null && defaultName != null) {\n lookupFromRegistry(defaultName);\n }\n if (jsComp && cellRenderer && !this.agComponentUtils.doesImplementIComponent(jsComp)) {\n jsComp = this.agComponentUtils.adaptFunction(propertyName, jsComp);\n }\n if (!jsComp && !fwComp) {\n if (mandatory) {\n _errorOnce(`Could not find component ${compName}, did you forget to configure this component?`);\n }\n return;\n }\n const paramsMerged = this.mergeParamsWithApplicationProvidedParams(\n defObject,\n type,\n params,\n paramsFromSelector,\n defaultCompParams\n );\n const componentFromFramework = jsComp == null;\n const componentClass = jsComp ? jsComp : fwComp;\n return {\n componentFromFramework,\n componentClass,\n params: paramsMerged,\n type,\n popupFromSelector,\n popupPositionFromSelector,\n newAgStackInstance: () => this.newAgStackInstance(componentClass, componentFromFramework, paramsMerged, type)\n };\n }\n static getCompKeys(frameworkOverrides, defObject, type, params) {\n const { propertyName } = type;\n let compName;\n let jsComp;\n let fwComp;\n let paramsFromSelector;\n let popupFromSelector;\n let popupPositionFromSelector;\n if (defObject) {\n const defObjectAny = defObject;\n const selectorFunc = defObjectAny[propertyName + \"Selector\"];\n const selectorRes = selectorFunc ? selectorFunc(params) : null;\n const assignComp = (providedJsComp) => {\n if (typeof providedJsComp === \"string\") {\n compName = providedJsComp;\n } else if (providedJsComp != null && providedJsComp !== true) {\n const isFwkComp = frameworkOverrides.isFrameworkComponent(providedJsComp);\n if (isFwkComp) {\n fwComp = providedJsComp;\n } else {\n jsComp = providedJsComp;\n }\n }\n };\n if (selectorRes) {\n assignComp(selectorRes.component);\n paramsFromSelector = selectorRes.params;\n popupFromSelector = selectorRes.popup;\n popupPositionFromSelector = selectorRes.popupPosition;\n } else {\n assignComp(defObjectAny[propertyName]);\n }\n }\n return { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector };\n }\n newAgStackInstance(ComponentClass, componentFromFramework, params, type) {\n const propertyName = type.propertyName;\n const jsComponent = !componentFromFramework;\n let instance;\n if (jsComponent) {\n instance = new ComponentClass();\n } else {\n const thisComponentConfig = this.componentMetadataProvider.retrieve(propertyName);\n instance = this.frameworkComponentWrapper.wrap(\n ComponentClass,\n thisComponentConfig.mandatoryMethodList,\n thisComponentConfig.optionalMethodList,\n type\n );\n }\n const deferredInit = this.initComponent(instance, params);\n if (deferredInit == null) {\n return AgPromise.resolve(instance);\n }\n return deferredInit.then(() => instance);\n }\n // used by Floating Filter\n mergeParamsWithApplicationProvidedParams(defObject, type, paramsFromGrid, paramsFromSelector = null, defaultCompParams) {\n const params = this.gos.getGridCommonParams();\n _mergeDeep(params, paramsFromGrid);\n if (defaultCompParams) {\n _mergeDeep(params, defaultCompParams);\n }\n const defObjectAny = defObject;\n const userParams = defObjectAny && defObjectAny[type.propertyName + \"Params\"];\n if (typeof userParams === \"function\") {\n const userParamsFromFunc = userParams(paramsFromGrid);\n _mergeDeep(params, userParamsFromFunc);\n } else if (typeof userParams === \"object\") {\n _mergeDeep(params, userParams);\n }\n _mergeDeep(params, paramsFromSelector);\n return params;\n }\n initComponent(component, params) {\n this.createBean(component);\n if (component.init == null) {\n return;\n }\n return component.init(params);\n }\n};\n\n// community-modules/core/src/components/framework/unwrapUserComp.ts\nfunction _unwrapUserComp(comp) {\n const compAsAny = comp;\n const isProxy = compAsAny != null && compAsAny.getFrameworkComponentInstance != null;\n return isProxy ? compAsAny.getFrameworkComponentInstance() : comp;\n}\n\n// community-modules/core/src/modules/moduleRegistry.ts\nvar _ModuleRegistry = class _ModuleRegistry {\n /**\n * Globally register the given module for all grids.\n * @param module - module to register\n */\n static register(module) {\n _ModuleRegistry.__register(module, true, void 0);\n }\n /**\n * Globally register the given modules for all grids.\n * @param modules - modules to register\n */\n static registerModules(modules) {\n _ModuleRegistry.__registerModules(modules, true, void 0);\n }\n /** AG GRID INTERNAL - Module registration helper. */\n static __register(module, moduleBased, gridId) {\n _ModuleRegistry.runVersionChecks(module);\n if (gridId !== void 0) {\n _ModuleRegistry.areGridScopedModules = true;\n if (_ModuleRegistry.gridModulesMap[gridId] === void 0) {\n _ModuleRegistry.gridModulesMap[gridId] = {};\n }\n _ModuleRegistry.gridModulesMap[gridId][module.moduleName] = module;\n } else {\n _ModuleRegistry.globalModulesMap[module.moduleName] = module;\n }\n _ModuleRegistry.setModuleBased(moduleBased);\n }\n /** AG GRID INTERNAL - Unregister grid scoped module. */\n static __unRegisterGridModules(gridId) {\n delete _ModuleRegistry.gridModulesMap[gridId];\n }\n /** AG GRID INTERNAL - Module registration helper. */\n static __registerModules(modules, moduleBased, gridId) {\n _ModuleRegistry.setModuleBased(moduleBased);\n if (!modules) {\n return;\n }\n modules.forEach((module) => _ModuleRegistry.__register(module, moduleBased, gridId));\n }\n static isValidModuleVersion(module) {\n const [moduleMajor, moduleMinor] = module.version.split(\".\") || [];\n const [currentModuleMajor, currentModuleMinor] = _ModuleRegistry.currentModuleVersion.split(\".\") || [];\n return moduleMajor === currentModuleMajor && moduleMinor === currentModuleMinor;\n }\n static runVersionChecks(module) {\n if (!_ModuleRegistry.currentModuleVersion) {\n _ModuleRegistry.currentModuleVersion = module.version;\n }\n const errorMsg = (details) => `You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${details} Please update all modules to the same version.`;\n if (!module.version) {\n _errorOnce(errorMsg(`'${module.moduleName}' is incompatible.`));\n } else if (!_ModuleRegistry.isValidModuleVersion(module)) {\n _errorOnce(\n errorMsg(\n `'${module.moduleName}' is version ${module.version} but the other modules are version ${_ModuleRegistry.currentModuleVersion}.`\n )\n );\n }\n if (module.validate) {\n const result = module.validate();\n if (!result.isValid) {\n const errorResult = result;\n _errorOnce(`${errorResult.message}`);\n }\n }\n }\n static setModuleBased(moduleBased) {\n if (_ModuleRegistry.moduleBased === void 0) {\n _ModuleRegistry.moduleBased = moduleBased;\n } else {\n if (_ModuleRegistry.moduleBased !== moduleBased) {\n _errorOnce(\n `AG Grid: You are mixing modules (i.e. @ag-grid-community/core) and packages (ag-grid-community) - you can only use one or the other of these mechanisms.`\n );\n _errorOnce(\"Please see https://www.ag-grid.com/javascript-grid/modules/ for more information.\");\n }\n }\n }\n /**\n * AG GRID INTERNAL - Set if files are being served from a single UMD bundle to provide accurate enterprise upgrade steps.\n */\n static __setIsBundled() {\n _ModuleRegistry.isBundled = true;\n }\n /** AG GRID INTERNAL - Assert a given module has been register, globally or individually with this grid. */\n static __assertRegistered(moduleName, reason, gridId) {\n if (this.__isRegistered(moduleName, gridId)) {\n return true;\n }\n let warningMessage;\n if (_ModuleRegistry.isBundled) {\n {\n warningMessage = `AG Grid: unable to use ${reason} as 'ag-grid-enterprise' has not been loaded. Check you are using the Enterprise bundle:\n \n