/usr/share/grafana/public/app/plugins/datasource/loki/dist
{"version":3,"file":"module.js","mappings":"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ACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAmC,QAAQd,EAAUW,oBAEbX,CACT,CAhfqBA,E,wBCNrB7L,EAAOC,QAAU2M,C,8BCEjB,MAAM1H,EAAU,EAAQ,MAExBlF,EAAOC,QADI,CAACiI,EAAGa,EAAGZ,IAAmC,IAAzBjD,EAAQgD,EAAGa,EAAGZ,E,wBCD1C,MAAM0E,EAAU,WACV9F,EAAqB,CAACmB,EAAGa,KAC7B,GAAiB,iBAANb,GAA+B,iBAANa,EAClC,OAAOb,IAAMa,EAAI,EAAIb,EAAIa,GAAK,EAAI,EAGpC,MAAM+D,EAAOD,EAAQrE,KAAKN,GACpB6E,EAAOF,EAAQrE,KAAKO,GAO1B,OALI+D,GAAQC,IACV7E,GAAKA,EACLa,GAAKA,GAGAb,IAAMa,EAAI,EACZ+D,IAASC,GAAS,EAClBA,IAASD,EAAQ,EAClB5E,EAAIa,GAAK,EACT,GAKN/I,EAAOC,QAAU,CACf8G,qBACAC,oBAJ0B,CAACkB,EAAGa,IAAMhC,EAAmBgC,EAAGb,G,WCH5DlI,EAAOC,QAXP,SAAkB+M,EAAOC,GAKvB,IAJA,IAAIzK,GAAS,EACTC,EAAkB,MAATuK,EAAgB,EAAIA,EAAMvK,OACnCyI,EAASgC,MAAMzK,KAEVD,EAAQC,GACfyI,EAAO1I,GAASyK,EAASD,EAAMxK,GAAQA,EAAOwK,GAEhD,OAAO9B,CACT,C,8BChBAjE,OAAOC,eAAejH,EAAS,aAAc,CAC3CW,O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","sources":["webpack://loki/webpack/runtime/load script","webpack://loki/../../../../../node_modules/semver/ranges/ltr.js","webpack://loki/../../../../../node_modules/semver/internal/lrucache.js","webpack://loki/../../../../../node_modules/semver/ranges/valid.js","webpack://loki/external amd \"react-redux\"","webpack://loki/../../../../../node_modules/lodash/_baseUnary.js","webpack://loki/../../../../../node_modules/semver/ranges/intersects.js","webpack://loki/../../../../../node_modules/semver/functions/coerce.js","webpack://loki/../../../../../node_modules/lodash/isLength.js","webpack://loki/./syntax.ts","webpack://loki/../../../../../node_modules/semver/index.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/tokenTypes.js","webpack://loki/../../../../../node_modules/semver/functions/major.js","webpack://loki/../../../../../node_modules/semver/internal/debug.js","webpack://loki/../../../../../node_modules/lodash/toFinite.js","webpack://loki/../../../../../node_modules/semver/functions/rsort.js","webpack://loki/external amd \"rxjs\"","webpack://loki/../../../../../node_modules/lodash/_trimmedEndIndex.js","webpack://loki/../../../../../node_modules/lodash/_baseValues.js","webpack://loki/../../../../../node_modules/lodash/includes.js","webpack://loki/../../../../../node_modules/pluralize/pluralize.js","webpack://loki/external amd \"module\"","webpack://loki/../../../../../node_modules/semver/functions/eq.js","webpack://loki/../../../../../node_modules/semver/internal/identifiers.js","webpack://loki/../../../../../node_modules/lodash/_arrayMap.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/languages/StandardSqlFormatter.js","webpack://loki/../../../../../node_modules/lodash/_baseRepeat.js","webpack://loki/../../../../../node_modules/lodash/values.js","webpack://loki/./components/monaco-query-field/monaco-completion-provider/validation.ts","webpack://loki/../../../../../node_modules/lodash/isFunction.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/types.js","webpack://loki/../../../../../node_modules/lodash/_nodeUtil.js","webpack://loki/external amd \"@grafana/ui\"","webpack://loki/../../../../../node_modules/semver/ranges/subset.js","webpack://loki/./querybuilder/parsingUtils.ts","webpack://loki/../../../../../node_modules/lodash/_getNative.js","webpack://loki/../../../../../node_modules/semver/internal/constants.js","webpack://loki/../../../../../node_modules/semver/functions/lt.js","webpack://loki/../../../../../node_modules/semver/ranges/min-satisfying.js","webpack://loki/../../../../../node_modules/semver/functions/inc.js","webpack://loki/../../../../../node_modules/lodash/_coreJsData.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/Indentation.js","webpack://loki/../../../../../node_modules/lodash/_Symbol.js","webpack://loki/../../../../../node_modules/lodash/_baseTimes.js","webpack://loki/../../../../../node_modules/lodash/_Set.js","webpack://loki/../../../../../node_modules/semver/classes/range.js","webpack://loki/../../../../../node_modules/lodash/_getRawTag.js","webpack://loki/./querybuilder/components/LabelParamEditor.tsx","webpack://loki/./querybuilder/operationUtils.ts","webpack://loki/external amd \"rxjs/operators\"","webpack://loki/../../../../../node_modules/lodash/_baseIsArguments.js","webpack://loki/../../../../../node_modules/lodash/toString.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/Tokenizer.js","webpack://loki/../../../../../node_modules/semver/functions/satisfies.js","webpack://loki/external amd \"lodash\"","webpack://loki/../../../../../node_modules/lodash/_isMasked.js","webpack://loki/./modifyQuery.ts","webpack://loki/../../../../../node_modules/lodash/_baseFindIndex.js","webpack://loki/../../../../../node_modules/semver/ranges/to-comparators.js","webpack://loki/./querybuilder/parsing.ts","webpack://loki/../../../../../node_modules/semver/functions/compare.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js","webpack://loki/./querybuilder/LokiQueryModeller.ts","webpack://loki/./querybuilder/components/UnwrapParamEditor.tsx","webpack://loki/./querybuilder/operations.ts","webpack://loki/../../../../../node_modules/semver/functions/sort.js","webpack://loki/../../../../../node_modules/lodash/_isIterateeCall.js","webpack://loki/../../../../../node_modules/lodash/toNumber.js","webpack://loki/../../../../../node_modules/lodash/_toSource.js","webpack://loki/../../../../../node_modules/lodash/keys.js","webpack://loki/../../../../../node_modules/semver/functions/gte.js","webpack://loki/../../../../../node_modules/semver/functions/parse.js","webpack://loki/../../../../../node_modules/lodash/isBuffer.js","webpack://loki/../../../../../node_modules/lodash/_baseIsNative.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/languages/Db2Formatter.js","webpack://loki/../../../../../node_modules/semver/functions/lte.js","webpack://loki/./lineParser.ts","webpack://loki/./responseUtils.ts","webpack://loki/../../../../../node_modules/semver/classes/semver.js","webpack://loki/../../../../../node_modules/react-fast-compare/index.js","webpack://loki/../../../../../node_modules/lodash/isArray.js","webpack://loki/../../../../../node_modules/semver/functions/diff.js","webpack://loki/../../../../../node_modules/semver/functions/cmp.js","webpack://loki/../../../../../node_modules/lodash/isTypedArray.js","webpack://loki/../../../../../node_modules/lodash/isArguments.js","webpack://loki/../../../../../node_modules/semver/functions/patch.js","webpack://loki/../../../../../node_modules/lodash/_getValue.js","webpack://loki/../../../../../node_modules/lodash/_Map.js","webpack://loki/../../../../../node_modules/@lezer/common/dist/index.js","webpack://loki/../../../../../node_modules/@lezer/lr/dist/index.js","webpack://loki/../../../../../node_modules/@grafana/lezer-logql/index.es.js","webpack://loki/../../../../../node_modules/semver/functions/compare-loose.js","webpack://loki/../../../../../node_modules/lodash/toInteger.js","webpack://loki/../../../../../node_modules/lodash/_isPrototype.js","webpack://loki/../../../../../node_modules/semver/internal/re.js","webpack://loki/../../../../../node_modules/lodash/_DataView.js","webpack://loki/../../../../../node_modules/lodash/_strictIndexOf.js","webpack://loki/external amd \"react\"","webpack://loki/../../../../../node_modules/semver/functions/neq.js","webpack://loki/../../../../../node_modules/lodash/_getTag.js","webpack://loki/external amd \"@emotion/css\"","webpack://loki/./queryUtils.ts","webpack://loki/../../../../../node_modules/lodash/_freeGlobal.js","webpack://loki/../../../../../node_modules/lodash/_Promise.js","webpack://loki/../../../../../node_modules/lodash/eq.js","webpack://loki/../../../../../node_modules/lodash/_baseKeys.js","webpack://loki/../../../../../node_modules/semver/functions/prerelease.js","webpack://loki/../../../../../node_modules/lodash/_isIndex.js","webpack://loki/../../../../../node_modules/lodash/_arrayLikeKeys.js","webpack://loki/../../../../../node_modules/semver/ranges/max-satisfying.js","webpack://loki/../../../../../node_modules/lodash/isArrayLike.js","webpack://loki/../../../../../node_modules/lodash/_objectToString.js","webpack://loki/../../../../../node_modules/lodash/_baseTrim.js","webpack://loki/../../../../../node_modules/semver/ranges/gtr.js","webpack://loki/../../../../../node_modules/lodash/isSymbol.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/sqlFormatter.js","webpack://loki/../../../../../node_modules/semver/ranges/min-version.js","webpack://loki/../../../../../node_modules/semver/functions/compare-build.js","webpack://loki/../../../../../node_modules/semver/functions/rcompare.js","webpack://loki/external amd \"redux\"","webpack://loki/../../../../../node_modules/semver/ranges/outside.js","webpack://loki/external amd \"@grafana/data\"","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/languages/PlSqlFormatter.js","webpack://loki/./languageUtils.ts","webpack://loki/../../../../../node_modules/lodash/isEmpty.js","webpack://loki/../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://loki/./querybuilder/types.ts","webpack://loki/../../../../../node_modules/lodash/_WeakMap.js","webpack://loki/external amd \"prismjs\"","webpack://loki/../../../../../node_modules/semver/ranges/simplify.js","webpack://loki/../../../../../node_modules/lodash/_overArg.js","webpack://loki/external amd \"react-dom\"","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/stringify.js","webpack://loki/../../../../../node_modules/lodash/escapeRegExp.js","webpack://loki/external amd \"@grafana/runtime\"","webpack://loki/./querybuilder/binaryScalarOperations.ts","webpack://loki/../../../../../node_modules/semver/functions/clean.js","webpack://loki/../../../../../node_modules/lodash/last.js","webpack://loki/../../../../../node_modules/lodash/isString.js","webpack://loki/../../../../../node_modules/lodash/_baseIsNaN.js","webpack://loki/../../../../../node_modules/lodash/_baseGetTag.js","webpack://loki/../../../../../packages/grafana-e2e-selectors/src/resolver.ts","webpack://loki/../../../../../packages/grafana-e2e-selectors/src/selectors/constants.ts","webpack://loki/../../../../../packages/grafana-e2e-selectors/src/selectors/components.ts","webpack://loki/../../../../../packages/grafana-e2e-selectors/src/selectors/index.ts","webpack://loki/../../../../../packages/grafana-e2e-selectors/src/selectors/pages.ts","webpack://loki/./dataquery.gen.ts","webpack://loki/./types.ts","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/InlineBlock.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/Formatter.js","webpack://loki/../../../../../node_modules/semver/classes/comparator.js","webpack://loki/../../../../../node_modules/semver/functions/gt.js","webpack://loki/../../../../../node_modules/lodash/stubFalse.js","webpack://loki/../../../../../node_modules/semver/functions/minor.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/core/Params.js","webpack://loki/../../../../../node_modules/sql-formatter-plus/lib/languages/N1qlFormatter.js","webpack://loki/../../../../../node_modules/lodash/_nativeKeys.js","webpack://loki/../../../../../node_modules/lodash/isObjectLike.js","webpack://loki/../../../../../node_modules/semver/internal/parse-options.js","webpack://loki/../../../../../node_modules/lodash/_baseIndexOf.js","webpack://loki/../../../../../node_modules/lodash/_baseIsTypedArray.js","webpack://loki/../../../../../node_modules/react/jsx-runtime.js","webpack://loki/../../../../../node_modules/lodash/_baseToString.js","webpack://loki/../../../../../node_modules/lodash/isObject.js","webpack://loki/../../../../../node_modules/semver/functions/valid.js","webpack://loki/../../../../../node_modules/lodash/repeat.js","webpack://loki/../../../../../node_modules/lodash/_root.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/native.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/rng.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/v4.js","webpack://loki/webpack/bootstrap","webpack://loki/webpack/runtime/compat get default export","webpack://loki/webpack/runtime/define property getters","webpack://loki/webpack/runtime/ensure chunk","webpack://loki/webpack/runtime/get javascript chunk filename","webpack://loki/webpack/runtime/global","webpack://loki/webpack/runtime/hasOwnProperty shorthand","webpack://loki/webpack/runtime/make namespace object","webpack://loki/webpack/runtime/node module decorator","webpack://loki/webpack/runtime/publicPath","webpack://loki/webpack/runtime/jsonp chunk loading","webpack://loki/./node_modules/grafana-public-path.js","webpack://loki/./components/LokiCheatSheet.tsx","webpack://loki/../../../../../node_modules/react-use/esm/usePrevious.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorHeader.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorStack.js","webpack://loki/../../../../../node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/FlexItem.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorRows.js","webpack://loki/../../../../../node_modules/react-window/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://loki/../../../../../node_modules/react-window/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://loki/../../../../../node_modules/react-window/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://loki/../../../../../node_modules/react-window/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://loki/../../../../../node_modules/react-window/node_modules/memoize-one/dist/memoize-one.esm.js","webpack://loki/../../../../../node_modules/react-window/dist/index.esm.js","webpack://loki/./components/LokiLabelBrowser.tsx","webpack://loki/./querybuilder/components/LabelBrowserModal.tsx","webpack://loki/../../../../../node_modules/immer/dist/immer.mjs","webpack://loki/../../../../../node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorRow.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorField.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorFieldGroup.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorList.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/InputGroup.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/AccessoryButton.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/RawQuery.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js","webpack://loki/../../../../../node_modules/use-memo-one/dist/use-memo-one.esm.js","webpack://loki/../../../../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","webpack://loki/../../../../../node_modules/css-box-model/dist/css-box-model.esm.js","webpack://loki/../../../../../node_modules/memoize-one/dist/memoize-one.esm.js","webpack://loki/../../../../../node_modules/raf-schd/dist/raf-schd.esm.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/node_modules/@hello-pangea/dnd/dist/dnd.esm.js","webpack://loki/../../../../../node_modules/react-use/esm/useMountedState.js","webpack://loki/../../../../../node_modules/react-popper-tooltip/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/math.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/enums.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/createPopper.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/debounce.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/within.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/popper.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://loki/../../../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://loki/../../../../../node_modules/react-popper/lib/esm/utils.js","webpack://loki/../../../../../node_modules/react-popper/lib/esm/usePopper.js","webpack://loki/../../../../../node_modules/react-popper-tooltip/dist/esm/react-popper-tooltip.js","webpack://loki/../../../../../node_modules/react-popper-tooltip/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationList.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js","webpack://loki/./querybuilder/components/LokiQueryBuilderExplained.tsx","webpack://loki/./querybuilder/components/NestedQuery.tsx","webpack://loki/./querybuilder/components/NestedQueryList.tsx","webpack://loki/./querybuilder/components/LokiQueryBuilder.tsx","webpack://loki/./querybuilder/components/QueryPreview.tsx","webpack://loki/./querybuilder/components/LokiQueryBuilderContainer.tsx","webpack://loki/../../../../../node_modules/react-use/esm/useToggle.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js","webpack://loki/./components/LokiOptionFields.tsx","webpack://loki/./querybuilder/components/LokiQueryBuilderOptions.tsx","webpack://loki/./components/monaco-query-field/MonacoQueryFieldLazy.tsx","webpack://loki/./components/monaco-query-field/MonacoQueryFieldWrapper.tsx","webpack://loki/./components/LokiQueryField.tsx","webpack://loki/./querybuilder/components/LokiQueryCodeEditor.tsx","webpack://loki/./querybuilder/components/QueryPattern.tsx","webpack://loki/./querybuilder/components/QueryPatternsModal.tsx","webpack://loki/./querybuilder/state.ts","webpack://loki/./components/stats.ts","webpack://loki/./components/LokiQueryEditor.tsx","webpack://loki/./components/LokiQueryEditorForAlerting.tsx","webpack://loki/./components/LokiQueryEditorByApp.tsx","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/DataSourceDescription.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/styles.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/types.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/Auth.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/utils.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js","webpack://loki/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js","webpack://loki/./configuration/AlertingSettings.tsx","webpack://loki/./configuration/DebugSection.tsx","webpack://loki/./configuration/DerivedField.tsx","webpack://loki/./configuration/DerivedFields.tsx","webpack://loki/./configuration/QuerySettings.tsx","webpack://loki/./configuration/ConfigEditor.tsx","webpack://loki/../../../../../node_modules/lru-cache/dist/esm/index.js","webpack://loki/./LanguageProvider.ts","webpack://loki/../../../../../node_modules/tslib/tslib.es6.mjs","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/Subscription.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/config.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/noop.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/NotificationFactories.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/Subscriber.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/identity.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/pipe.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/Observable.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/Subject.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/ReplaySubject.js","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/observable/dom/WebSocketSubject.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/sha1.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/regex.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/validate.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/parse.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/v35.js","webpack://loki/../../../../../node_modules/uuid/dist/esm-browser/v5.js","webpack://loki/./liveStreamsResultTransformer.ts","webpack://loki/./LiveStreams.ts","webpack://loki/../../../../../node_modules/rxjs/dist/esm5/internal/observable/dom/webSocket.js","webpack://loki/../../../../../node_modules/react-use/esm/useAsync.js","webpack://loki/../../../../../node_modules/react-use/esm/useAsyncFn.js","webpack://loki/./components/LokiContextUi.tsx","webpack://loki/./sortDataFrame.ts","webpack://loki/./LogContextProvider.ts","webpack://loki/./migrations/variableQueryMigrations.ts","webpack://loki/./components/VariableQueryEditor.tsx","webpack://loki/./LokiVariableSupport.ts","webpack://loki/./getDerivedFields.ts","webpack://loki/./makeTableFrames.ts","webpack://loki/./backendResultTransformer.ts","webpack://loki/./components/AnnotationsQueryEditor.tsx","webpack://loki/./mergeResponses.ts","webpack://loki/./tracking.ts","webpack://loki/./querySplitting.ts","webpack://loki/./logsTimeSplitting.ts","webpack://loki/./metricTimeSplitting.ts","webpack://loki/./shardQuerySplitting.ts","webpack://loki/./streaming.ts","webpack://loki/./datasource.ts","webpack://loki/./queryHints.ts","webpack://loki/./module.ts"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"loki:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","module.exports = __WEBPACK_EXTERNAL_MODULE__200__;","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","import { Grammar } from 'prismjs';\n\nimport { CompletionItem } from '@grafana/ui';\n\nexport const AGGREGATION_OPERATORS: CompletionItem[] = [\n {\n label: 'avg',\n insertText: 'avg',\n documentation: 'Calculate the average over dimensions',\n },\n {\n label: 'bottomk',\n insertText: 'bottomk',\n documentation: 'Smallest k elements by sample value',\n },\n {\n label: 'count',\n insertText: 'count',\n documentation: 'Count number of elements in the vector',\n },\n {\n label: 'max',\n insertText: 'max',\n documentation: 'Select maximum over dimensions',\n },\n {\n label: 'min',\n insertText: 'min',\n documentation: 'Select minimum over dimensions',\n },\n {\n label: 'stddev',\n insertText: 'stddev',\n documentation: 'Calculate population standard deviation over dimensions',\n },\n {\n label: 'stdvar',\n insertText: 'stdvar',\n documentation: 'Calculate population standard variance over dimensions',\n },\n {\n label: 'sum',\n insertText: 'sum',\n documentation: 'Calculate sum over dimensions',\n },\n {\n label: 'topk',\n insertText: 'topk',\n documentation: 'Largest k elements by sample value',\n },\n];\n\nexport const PIPE_PARSERS: CompletionItem[] = [\n {\n label: 'json',\n insertText: 'json',\n documentation: 'Extracting labels from the log line using json parser.',\n },\n {\n label: 'regexp',\n insertText: 'regexp \"\"',\n documentation: 'Extracting labels from the log line using regexp parser.',\n move: -1,\n },\n {\n label: 'logfmt',\n insertText: 'logfmt',\n documentation: 'Extracting labels from the log line using logfmt parser.',\n },\n {\n label: 'pattern',\n insertText: 'pattern',\n documentation: 'Extracting labels from the log line using pattern parser. Only available in Loki 2.3+.',\n },\n {\n label: 'unpack',\n insertText: 'unpack',\n detail: 'unpack identifier',\n documentation:\n 'Parses a JSON log line, unpacking all embedded labels in the pack stage. A special property \"_entry\" will also be used to replace the original log line. Only available in Loki 2.2+.',\n },\n];\n\nexport const PIPE_OPERATORS: CompletionItem[] = [\n {\n label: 'unwrap',\n insertText: 'unwrap',\n detail: 'unwrap identifier',\n documentation: 'Take labels and use the values as sample data for metric aggregations.',\n },\n {\n label: 'label_format',\n insertText: 'label_format',\n documentation: 'Use to rename, modify or add labels. For example, | label_format foo=bar .',\n },\n {\n label: 'line_format',\n insertText: 'line_format',\n documentation: 'Rewrites log line content. For example, | line_format \"{{.query}} {{.duration}}\" .',\n },\n];\n\nexport const RANGE_VEC_FUNCTIONS = [\n {\n insertText: 'avg_over_time',\n label: 'avg_over_time',\n detail: 'avg_over_time(range-vector)',\n documentation: 'The average of all values in the specified interval.',\n },\n {\n insertText: 'bytes_over_time',\n label: 'bytes_over_time',\n detail: 'bytes_over_time(range-vector)',\n documentation: 'Counts the amount of bytes used by each log stream for a given range',\n },\n {\n insertText: 'bytes_rate',\n label: 'bytes_rate',\n detail: 'bytes_rate(range-vector)',\n documentation: 'Calculates the number of bytes per second for each stream.',\n },\n {\n insertText: 'first_over_time',\n label: 'first_over_time',\n detail: 'first_over_time(range-vector)',\n documentation: 'The first of all values in the specified interval. Only available in Loki 2.3+.',\n },\n {\n insertText: 'last_over_time',\n label: 'last_over_time',\n detail: 'last_over_time(range-vector)',\n documentation: 'The last of all values in the specified interval. Only available in Loki 2.3+.',\n },\n {\n insertText: 'sum_over_time',\n label: 'sum_over_time',\n detail: 'sum_over_time(range-vector)',\n documentation: 'The sum of all values in the specified interval.',\n },\n {\n insertText: 'count_over_time',\n label: 'count_over_time',\n detail: 'count_over_time(range-vector)',\n documentation: 'The count of all values in the specified interval.',\n },\n {\n insertText: 'max_over_time',\n label: 'max_over_time',\n detail: 'max_over_time(range-vector)',\n documentation: 'The maximum of all values in the specified interval.',\n },\n {\n insertText: 'min_over_time',\n label: 'min_over_time',\n detail: 'min_over_time(range-vector)',\n documentation: 'The minimum of all values in the specified interval.',\n },\n {\n insertText: 'quantile_over_time',\n label: 'quantile_over_time',\n detail: 'quantile_over_time(scalar, range-vector)',\n documentation: 'The φ-quantile (0 ≤ φ ≤ 1) of the values in the specified interval.',\n },\n {\n insertText: 'rate',\n label: 'rate',\n detail: 'rate(v range-vector)',\n documentation: 'Calculates the number of entries per second.',\n },\n {\n insertText: 'stddev_over_time',\n label: 'stddev_over_time',\n detail: 'stddev_over_time(range-vector)',\n documentation: 'The population standard deviation of the values in the specified interval.',\n },\n {\n insertText: 'stdvar_over_time',\n label: 'stdvar_over_time',\n detail: 'stdvar_over_time(range-vector)',\n documentation: 'The population standard variance of the values in the specified interval.',\n },\n];\n\nexport const BUILT_IN_FUNCTIONS = [\n {\n insertText: 'vector',\n label: 'vector',\n detail: 'vector(scalar)',\n documentation: 'Returns the scalar as a vector with no labels.',\n },\n];\n\nexport const FUNCTIONS = [...AGGREGATION_OPERATORS, ...RANGE_VEC_FUNCTIONS, ...BUILT_IN_FUNCTIONS];\n\n// Loki grammar is used for query highlight in query previews outside of code editor\nexport const lokiGrammar: Grammar = {\n comment: {\n pattern: /#.*/,\n },\n 'context-aggregation': {\n pattern: /((without|by)\\s*)\\([^)]*\\)/, // by ()\n lookbehind: true,\n inside: {\n 'label-key': {\n pattern: /[^(),\\s][^,)]*[^),\\s]*/,\n alias: 'attr-name',\n },\n punctuation: /[()]/,\n },\n },\n 'context-labels': {\n pattern: /\\{[^}]*(?=}?)/,\n greedy: true,\n inside: {\n comment: {\n pattern: /#.*/,\n },\n 'label-key': {\n pattern: /[a-zA-Z_]\\w*(?=\\s*(=|!=|=~|!~))/,\n alias: 'attr-name',\n greedy: true,\n },\n 'label-value': {\n pattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n greedy: true,\n alias: 'attr-value',\n },\n punctuation: /[{]/,\n },\n },\n 'context-pipe': {\n pattern: /\\s\\|[^=~]\\s?\\w*/i,\n inside: {\n 'pipe-operator': {\n pattern: /\\|/i,\n alias: 'operator',\n },\n 'pipe-operations': {\n pattern: new RegExp(`${[...PIPE_PARSERS, ...PIPE_OPERATORS].map((f) => f.label).join('|')}`, 'i'),\n alias: 'keyword',\n },\n },\n },\n function: new RegExp(`\\\\b(?:${FUNCTIONS.map((f) => f.label).join('|')})(?=\\\\s*\\\\()`, 'i'),\n 'context-range': [\n {\n pattern: /\\[[^\\]]*(?=\\])/, // [1m]\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n {\n pattern: /(offset\\s+)\\w+/, // offset 1m\n lookbehind: true,\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n ],\n quote: {\n pattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n alias: 'string',\n greedy: true,\n },\n backticks: {\n pattern: /`(?:\\\\.|[^\\\\`])*`/,\n alias: 'string',\n greedy: true,\n },\n number: /\\b-?\\d+((\\.\\d*)?([eE][+-]?\\d+)?)?\\b/,\n operator: /\\s?(\\|[=~]?|!=?|<(?:=>?|<|>)?|>[>=]?)\\s?/i,\n punctuation: /[{}(),.]/,\n};\n\nexport default lokiGrammar;\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\n/**\r\n * Constants for token types\r\n */\nvar _default = {\n WHITESPACE: 'whitespace',\n WORD: 'word',\n STRING: 'string',\n RESERVED: 'reserved',\n RESERVED_TOP_LEVEL: 'reserved-top-level',\n RESERVED_TOP_LEVEL_NO_INDENT: 'reserved-top-level-no-indent',\n RESERVED_NEWLINE: 'reserved-newline',\n OPERATOR: 'operator',\n OPEN_PAREN: 'open-paren',\n CLOSE_PAREN: 'close-paren',\n LINE_COMMENT: 'line-comment',\n BLOCK_COMMENT: 'block-comment',\n NUMBER: 'number',\n PLACEHOLDER: 'placeholder'\n};\nexports[\"default\"] = _default;\nmodule.exports = exports.default;","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1269__;","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n // Node.\n module.exports = pluralize();\n } else if (typeof define === 'function' && define.amd) {\n // AMD, registers as an anonymous module.\n define(function () {\n return pluralize();\n });\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(this, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1308__;","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _Formatter = _interopRequireDefault(require(\"../core/Formatter\"));\n\nvar _Tokenizer = _interopRequireDefault(require(\"../core/Tokenizer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar reservedWords = ['ACCESSIBLE', 'ACTION', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ANALYSE', 'ANALYZE', 'AS', 'ASC', 'AUTOCOMMIT', 'AUTO_INCREMENT', 'BACKUP', 'BEGIN', 'BETWEEN', 'BINLOG', 'BOTH', 'CASCADE', 'CASE', 'CHANGE', 'CHANGED', 'CHARACTER SET', 'CHARSET', 'CHECK', 'CHECKSUM', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPRESSED', 'CONCURRENT', 'CONSTRAINT', 'CONTAINS', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT_TIMESTAMP', 'DATABASE', 'DATABASES', 'DAY', 'DAY_HOUR', 'DAY_MINUTE', 'DAY_SECOND', 'DEFAULT', 'DEFINER', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE', 'DETERMINISTIC', 'DISTINCT', 'DISTINCTROW', 'DIV', 'DO', 'DROP', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'ELSE', 'ENCLOSED', 'END', 'ENGINE', 'ENGINES', 'ENGINE_TYPE', 'ESCAPE', 'ESCAPED', 'EVENTS', 'EXEC', 'EXECUTE', 'EXISTS', 'EXPLAIN', 'EXTENDED', 'FAST', 'FETCH', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLUSH', 'FOR', 'FORCE', 'FOREIGN', 'FULL', 'FULLTEXT', 'FUNCTION', 'GLOBAL', 'GRANT', 'GRANTS', 'GROUP_CONCAT', 'HEAP', 'HIGH_PRIORITY', 'HOSTS', 'HOUR', 'HOUR_MINUTE', 'HOUR_SECOND', 'IDENTIFIED', 'IF', 'IFNULL', 'IGNORE', 'IN', 'INDEX', 'INDEXES', 'INFILE', 'INSERT', 'INSERT_ID', 'INSERT_METHOD', 'INTERVAL', 'INTO', 'INVOKER', 'IS', 'ISOLATION', 'KEY', 'KEYS', 'KILL', 'LAST_INSERT_ID', 'LEADING', 'LEVEL', 'LIKE', 'LINEAR', 'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOCKS', 'LOGS', 'LOW_PRIORITY', 'MARIA', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_HOST', 'MASTER_LOG_FILE', 'MATCH', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MEDIUM', 'MERGE', 'MINUTE', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFY', 'MONTH', 'MRG_MYISAM', 'MYISAM', 'NAMES', 'NATURAL', 'NOT', 'NOW()', 'NULL', 'OFFSET', 'ON DELETE', 'ON UPDATE', 'ON', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTION', 'OPTIONALLY', 'OUTFILE', 'PACK_KEYS', 'PAGE', 'PARTIAL', 'PARTITION', 'PARTITIONS', 'PASSWORD', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE', 'PROCESS', 'PROCESSLIST', 'PURGE', 'QUICK', 'RAID0', 'RAID_CHUNKS', 'RAID_CHUNKSIZE', 'RAID_TYPE', 'RANGE', 'READ', 'READ_ONLY', 'READ_WRITE', 'REFERENCES', 'REGEXP', 'RELOAD', 'RENAME', 'REPAIR', 'REPEATABLE', 'REPLACE', 'REPLICATION', 'RESET', 'RESTORE', 'RESTRICT', 'RETURN', 'RETURNS', 'REVOKE', 'RLIKE', 'ROLLBACK', 'ROW', 'ROWS', 'ROW_FORMAT', 'SECOND', 'SECURITY', 'SEPARATOR', 'SERIALIZABLE', 'SESSION', 'SHARE', 'SHOW', 'SHUTDOWN', 'SLAVE', 'SONAME', 'SOUNDS', 'SQL', 'SQL_AUTO_IS_NULL', 'SQL_BIG_RESULT', 'SQL_BIG_SELECTS', 'SQL_BIG_TABLES', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_LOG_BIN', 'SQL_LOG_OFF', 'SQL_LOG_UPDATE', 'SQL_LOW_PRIORITY_UPDATES', 'SQL_MAX_JOIN_SIZE', 'SQL_NO_CACHE', 'SQL_QUOTE_SHOW_CREATE', 'SQL_SAFE_UPDATES', 'SQL_SELECT_LIMIT', 'SQL_SLAVE_SKIP_COUNTER', 'SQL_SMALL_RESULT', 'SQL_WARNINGS', 'START', 'STARTING', 'STATUS', 'STOP', 'STORAGE', 'STRAIGHT_JOIN', 'STRING', 'STRIPED', 'SUPER', 'TABLE', 'TABLES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TRAILING', 'TRANSACTIONAL', 'TRUE', 'TRUNCATE', 'TYPE', 'TYPES', 'UNCOMMITTED', 'UNIQUE', 'UNLOCK', 'UNSIGNED', 'USAGE', 'USE', 'USING', 'VARIABLES', 'VIEW', 'WHEN', 'WITH', 'WORK', 'WRITE', 'YEAR_MONTH'];\nvar reservedTopLevelWords = ['ADD', 'AFTER', 'ALTER COLUMN', 'ALTER TABLE', 'DELETE FROM', 'EXCEPT', 'FETCH FIRST', 'FROM', 'GROUP BY', 'GO', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'MODIFY', 'ORDER BY', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'UPDATE', 'VALUES', 'WHERE'];\nvar reservedTopLevelWordsNoIndent = ['INTERSECT', 'INTERSECT ALL', 'MINUS', 'UNION', 'UNION ALL'];\nvar reservedNewlineWords = ['AND', 'CROSS APPLY', 'CROSS JOIN', 'ELSE', 'INNER JOIN', 'JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'OR', 'OUTER APPLY', 'OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'WHEN', 'XOR'];\nvar tokenizer;\n\nvar StandardSqlFormatter =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg Different set of configurations\r\n */\n function StandardSqlFormatter(cfg) {\n _classCallCheck(this, StandardSqlFormatter);\n\n this.cfg = cfg;\n }\n /**\r\n * Format the whitespace in a Standard SQL string to make it easier to read\r\n *\r\n * @param {String} query The Standard SQL string\r\n * @return {String} formatted string\r\n */\n\n\n _createClass(StandardSqlFormatter, [{\n key: \"format\",\n value: function format(query) {\n if (!tokenizer) {\n tokenizer = new _Tokenizer[\"default\"]({\n reservedWords: reservedWords,\n reservedTopLevelWords: reservedTopLevelWords,\n reservedNewlineWords: reservedNewlineWords,\n reservedTopLevelWordsNoIndent: reservedTopLevelWordsNoIndent,\n stringTypes: [\"\\\"\\\"\", \"N''\", \"''\", '``', '[]'],\n openParens: ['(', 'CASE'],\n closeParens: [')', 'END'],\n indexedPlaceholderTypes: ['?'],\n namedPlaceholderTypes: ['@', ':'],\n lineCommentTypes: ['#', '--']\n });\n }\n\n return new _Formatter[\"default\"](this.cfg, tokenizer).format(query);\n }\n }]);\n\n return StandardSqlFormatter;\n}();\n\nexports[\"default\"] = StandardSqlFormatter;\nmodule.exports = exports.default;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor;\n\n/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\nfunction baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n}\n\nmodule.exports = baseRepeat;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","import { SyntaxNode } from '@lezer/common';\nimport { LRParser } from '@lezer/lr';\n\nimport { ErrorId } from '../../../querybuilder/parsingUtils';\n\ninterface ParserErrorBoundary {\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n error: string;\n}\n\ninterface ParseError {\n text: string;\n node: SyntaxNode;\n}\n\n/**\n * Conceived to work in combination with the MonacoQueryField component.\n * Given an original query, and it's interpolated version, it will return an array of ParserErrorBoundary\n * objects containing nodes which are actual errors. The interpolated version (even with placeholder variables)\n * is required because variables look like errors for Lezer.\n * @internal\n */\nexport function validateQuery(\n query: string,\n interpolatedQuery: string,\n queryLines: string[],\n parser: LRParser\n): ParserErrorBoundary[] | false {\n if (!query) {\n return false;\n }\n\n /**\n * To provide support to variable interpolation in query validation, we run the parser in the interpolated\n * query. If there are errors there, we trace them back to the original unparsed query, so we can more\n * accurately highlight the error in the query, since it's likely that the variable name and variable value\n * have different lengths. With this, we also exclude irrelevant parser errors that are produced by\n * lezer not understanding $variables and $__variables, which usually generate 2 or 3 error SyntaxNode.\n */\n const interpolatedErrors: ParseError[] = parseQuery(interpolatedQuery, parser);\n if (!interpolatedErrors.length) {\n return false;\n }\n\n let parseErrors: ParseError[] = interpolatedErrors;\n if (query !== interpolatedQuery) {\n const queryErrors: ParseError[] = parseQuery(query, parser);\n parseErrors = interpolatedErrors.flatMap(\n (interpolatedError) =>\n queryErrors.filter((queryError) => interpolatedError.text === queryError.text) || interpolatedError\n );\n }\n\n return parseErrors.map((parseError) => findErrorBoundary(query, queryLines, parseError)).filter(isErrorBoundary);\n}\n\nfunction parseQuery(query: string, parser: LRParser) {\n const parseErrors: ParseError[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: (nodeRef): false | void => {\n if (nodeRef.type.id === ErrorId) {\n const node = nodeRef.node;\n parseErrors.push({\n node: node,\n text: query.substring(node.from, node.to),\n });\n }\n },\n });\n return parseErrors;\n}\n\nfunction findErrorBoundary(query: string, queryLines: string[], parseError: ParseError): ParserErrorBoundary | null {\n if (queryLines.length === 1) {\n const isEmptyString = parseError.node.from === parseError.node.to;\n const errorNode = isEmptyString && parseError.node.parent ? parseError.node.parent : parseError.node;\n const error = isEmptyString ? query.substring(errorNode.from, errorNode.to) : parseError.text;\n return {\n startLineNumber: 1,\n startColumn: errorNode.from + 1,\n endLineNumber: 1,\n endColumn: errorNode.to + 1,\n error,\n };\n }\n\n let startPos = 0,\n endPos = 0;\n for (let line = 0; line < queryLines.length; line++) {\n endPos = startPos + queryLines[line].length;\n\n if (parseError.node.from > endPos) {\n startPos += queryLines[line].length + 1;\n continue;\n }\n\n return {\n startLineNumber: line + 1,\n startColumn: parseError.node.from - startPos + 1,\n endLineNumber: line + 1,\n endColumn: parseError.node.to - startPos + 1,\n error: parseError.text,\n };\n }\n\n return null;\n}\n\nfunction isErrorBoundary(boundary: ParserErrorBoundary | null): boundary is ParserErrorBoundary {\n return boundary !== null;\n}\n\nexport const placeHolderScopedVars = {\n __interval: { text: '1s', value: '1s' },\n __rate_interval: { text: '1s', value: '1s' },\n __auto: { text: '1s', value: '1s' },\n __interval_ms: { text: '1000', value: 1000 },\n __range_ms: { text: '1000', value: 1000 },\n __range_s: { text: '1', value: 1 },\n __range: { text: '1s', value: '1s' },\n};\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","import 'react';\nimport '@grafana/data';\n\nvar QueryEditorMode = /* @__PURE__ */ ((QueryEditorMode2) => {\n QueryEditorMode2[\"Code\"] = \"code\";\n QueryEditorMode2[\"Builder\"] = \"builder\";\n return QueryEditorMode2;\n})(QueryEditorMode || {});\nconst BINARY_OPERATIONS_KEY = \"Binary operations\";\n\nexport { BINARY_OPERATIONS_KEY, QueryEditorMode };\n//# sourceMappingURL=types.js.map\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","module.exports = __WEBPACK_EXTERNAL_MODULE__2007__;","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","import { SyntaxNode, TreeCursor } from '@lezer/common';\n\nimport { QueryBuilderOperation, QueryBuilderOperationParamValue } from '@grafana/plugin-ui';\n\n// Although 0 isn't explicitly provided in the @grafana/lezer-logql library as the error node ID, it does appear to be the ID of error nodes within lezer.\nexport const ErrorId = 0;\n\nexport function getLeftMostChild(cur: SyntaxNode): SyntaxNode {\n return cur.firstChild ? getLeftMostChild(cur.firstChild) : cur;\n}\n\nexport function makeError(expr: string, node: SyntaxNode) {\n return {\n text: getString(expr, node),\n // TODO: this are positions in the string with the replaced variables. Means it cannot be used to show exact\n // placement of the error for the user. We need some translation table to positions before the variable\n // replace.\n from: node.from,\n to: node.to,\n parentType: node.parent?.name,\n };\n}\n\n// Taken from template_srv, but copied so to not mess with the regex.index which is manipulated in the service\n/*\n * This regex matches 3 types of variable reference with an optional format specifier\n * \\$(\\w+) $var1\n * \\[\\[([\\s\\S]+?)(?::(\\w+))?\\]\\] [[var2]] or [[var2:fmt2]]\n * \\${(\\w+)(?::(\\w+))?} ${var3} or ${var3:fmt3}\n */\nexport const variableRegex = /\\$(\\w+)|\\[\\[([\\s\\S]+?)(?::(\\w+))?\\]\\]|\\${(\\w+)(?:\\.([^:^\\}]+))?(?::([^\\}]+))?}/g;\n\n/**\n * As variables with $ are creating parsing errors, we first replace them with magic string that is parsable and at\n * the same time we can get the variable and its format back from it.\n * @param expr\n */\nexport function replaceVariables(expr: string) {\n return expr.replace(variableRegex, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {\n const fmt = fmt2 || fmt3;\n let variable = var1;\n let varType = '0';\n\n if (var2) {\n variable = var2;\n varType = '1';\n }\n\n if (var3) {\n variable = var3;\n varType = '2';\n }\n\n return `__V_${varType}__` + variable + '__V__' + (fmt ? '__F__' + fmt + '__F__' : '');\n });\n}\n\nconst varTypeFunc = [\n (v: string, f?: string) => `\\$${v}`,\n (v: string, f?: string) => `[[${v}${f ? `:${f}` : ''}]]`,\n (v: string, f?: string) => `\\$\\{${v}${f ? `:${f}` : ''}\\}`,\n];\n\n/**\n * Get back the text with variables in their original format.\n * @param expr\n */\nexport function returnVariables(expr: string) {\n return expr.replace(/__V_(\\d)__(.+?)__V__(?:__F__(\\w+)__F__)?/g, (match, type, v, f) => {\n return varTypeFunc[parseInt(type, 10)](v, f);\n });\n}\n\n/**\n * Get the actual string of the expression. That is not stored in the tree so we have to get the indexes from the node\n * and then based on that get it from the expression.\n * @param expr\n * @param node\n */\nexport function getString(expr: string, node: SyntaxNode | TreeCursor | null | undefined) {\n if (!node) {\n return '';\n }\n return returnVariables(expr.substring(node.from, node.to));\n}\n\n/**\n * Create simple scalar binary op object.\n * @param opDef - definition of the op to be created\n * @param expr\n * @param numberNode - the node for the scalar\n * @param hasBool - whether operation has a bool modifier. Is used only for ops for which it makes sense.\n */\nexport function makeBinOp(\n opDef: { id: string; comparison?: boolean },\n expr: string,\n numberNode: SyntaxNode,\n hasBool: boolean\n): QueryBuilderOperation {\n const params: QueryBuilderOperationParamValue[] = [parseFloat(getString(expr, numberNode))];\n if (opDef.comparison) {\n params.push(hasBool);\n }\n return {\n id: opDef.id,\n params,\n };\n}\n\n/**\n * Get all nodes with type in the tree. This traverses the tree so it is safe only when you know there shouldn't be\n * too much nesting but you just want to skip some of the wrappers. For example getting function args this way would\n * not be safe is it would also find arguments of nested functions.\n * @param expr\n * @param cur\n * @param type - can be string or number, some data-sources (loki) haven't migrated over to using numeric constants defined in the lezer parsing library (e.g. lezer-promql).\n * @todo Remove string type definition when all data-sources have migrated to numeric constants\n */\nexport function getAllByType(expr: string, cur: SyntaxNode, type: number | string): string[] {\n if (cur.type.id === type || cur.name === type) {\n return [getString(expr, cur)];\n }\n const values: string[] = [];\n let pos = 0;\n let child = cur.childAfter(pos);\n while (child) {\n values.push(...getAllByType(expr, child, type));\n pos = child.to;\n child = cur.childAfter(pos);\n }\n return values;\n}\n\n/**\n * There aren't any spaces in the metric names, so let's introduce a wildcard into the regex for each space to better facilitate a fuzzy search\n */\nexport const regexifyLabelValuesQueryString = (query: string) => {\n const queryArray = query.split(' ');\n return queryArray.map((query) => `${query}.*`).join('');\n};\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _repeat = _interopRequireDefault(require(\"lodash/repeat\"));\n\nvar _last = _interopRequireDefault(require(\"lodash/last\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar INDENT_TYPE_TOP_LEVEL = 'top-level';\nvar INDENT_TYPE_BLOCK_LEVEL = 'block-level';\n/**\r\n * Manages indentation levels.\r\n *\r\n * There are two types of indentation levels:\r\n *\r\n * - BLOCK_LEVEL : increased by open-parenthesis\r\n * - TOP_LEVEL : increased by RESERVED_TOP_LEVEL words\r\n */\n\nvar Indentation =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {String} indent Indent value, default is \" \" (2 spaces)\r\n */\n function Indentation(indent) {\n _classCallCheck(this, Indentation);\n\n this.indent = indent || ' ';\n this.indentTypes = [];\n }\n /**\r\n * Returns current indentation string.\r\n * @return {String}\r\n */\n\n\n _createClass(Indentation, [{\n key: \"getIndent\",\n value: function getIndent() {\n return (0, _repeat[\"default\"])(this.indent, this.indentTypes.length);\n }\n /**\r\n * Increases indentation by one top-level indent.\r\n */\n\n }, {\n key: \"increaseTopLevel\",\n value: function increaseTopLevel() {\n this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);\n }\n /**\r\n * Increases indentation by one block-level indent.\r\n */\n\n }, {\n key: \"increaseBlockLevel\",\n value: function increaseBlockLevel() {\n this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);\n }\n /**\r\n * Decreases indentation by one top-level indent.\r\n * Does nothing when the previous indent is not top-level.\r\n */\n\n }, {\n key: \"decreaseTopLevel\",\n value: function decreaseTopLevel() {\n if ((0, _last[\"default\"])(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {\n this.indentTypes.pop();\n }\n }\n /**\r\n * Decreases indentation by one block-level indent.\r\n * If there are top-level indents within the block-level indent,\r\n * throws away these as well.\r\n */\n\n }, {\n key: \"decreaseBlockLevel\",\n value: function decreaseBlockLevel() {\n while (this.indentTypes.length > 0) {\n var type = this.indentTypes.pop();\n\n if (type !== INDENT_TYPE_TOP_LEVEL) {\n break;\n }\n }\n }\n }, {\n key: \"resetIndentation\",\n value: function resetIndentation() {\n this.indentTypes = [];\n }\n }]);\n\n return Indentation;\n}();\n\nexports[\"default\"] = Indentation;\nmodule.exports = exports.default;","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","import { useState } from 'react';\n\nimport { DataSourceApi, SelectableValue } from '@grafana/data';\nimport {\n QueryBuilderLabelFilter,\n QueryBuilderOperationParamEditorProps,\n QueryBuilderOperationParamValue,\n VisualQuery,\n VisualQueryModeller,\n} from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\nimport { getOperationParamId } from '../operationUtils';\n\nexport const LabelParamEditor = ({\n onChange,\n index,\n operationId,\n value,\n query,\n datasource,\n queryModeller,\n}: QueryBuilderOperationParamEditorProps) => {\n const [state, setState] = useState<{\n options?: SelectableValue[];\n isLoading?: boolean;\n }>({});\n\n return (\n <Select<QueryBuilderOperationParamValue | undefined>\n inputId={getOperationParamId(operationId, index)}\n autoFocus={value === ''}\n openMenuOnFocus\n onOpenMenu={async () => {\n setState({ isLoading: true });\n const options = await loadGroupByLabels(query, datasource, queryModeller);\n setState({ options, isLoading: undefined });\n }}\n isLoading={state.isLoading}\n allowCustomValue\n noOptionsMessage=\"No labels found\"\n loadingMessage=\"Loading labels\"\n options={state.options}\n value={toOption(value)}\n onChange={(value) => onChange(index, value.value!)}\n />\n );\n};\n\nasync function loadGroupByLabels(\n query: VisualQuery,\n datasource: DataSourceApi,\n queryModeller: VisualQueryModeller\n): Promise<SelectableValue[]> {\n let labels: QueryBuilderLabelFilter[] = query.labels;\n\n const queryString = queryModeller.renderLabels(labels);\n const result: string[] = await datasource.languageProvider.fetchLabels({ streamSelector: queryString });\n\n return result.map((x) => ({\n label: x,\n value: x,\n }));\n}\n\nconst toOption = (\n value: QueryBuilderOperationParamValue | undefined\n): SelectableValue<QueryBuilderOperationParamValue | undefined> => ({ label: value?.toString(), value });\n","import { capitalize } from 'lodash';\nimport pluralize from 'pluralize';\n\nimport {\n QueryBuilderOperation,\n QueryBuilderOperationDefinition,\n QueryBuilderOperationParamDef,\n QueryBuilderOperationParamValue,\n VisualQuery,\n VisualQueryModeller,\n} from '@grafana/plugin-ui';\n\nimport { escapeLabelValueInExactSelector } from '../languageUtils';\nimport { FUNCTIONS } from '../syntax';\n\nimport { LabelParamEditor } from './components/LabelParamEditor';\nimport { LokiOperationId, LokiOperationOrder, LokiVisualQuery, LokiVisualQueryOperationCategory } from './types';\n\nexport function createRangeOperation(\n name: string,\n isRangeOperationWithGrouping?: boolean\n): QueryBuilderOperationDefinition {\n const params = [getRangeVectorParamDef()];\n const defaultParams = ['$__auto'];\n let paramChangedHandler = undefined;\n\n if (name === LokiOperationId.QuantileOverTime) {\n defaultParams.push('0.95');\n params.push({\n name: 'Quantile',\n type: 'number',\n });\n }\n\n if (isRangeOperationWithGrouping) {\n params.push({\n name: 'By label',\n type: 'string',\n restParam: true,\n optional: true,\n });\n\n paramChangedHandler = getOnLabelAddedHandler(`__${name}_by`);\n }\n\n return {\n id: name,\n name: getLokiOperationDisplayName(name),\n params: params,\n defaultParams,\n toggleable: true,\n alternativesKey: 'range function',\n category: LokiVisualQueryOperationCategory.RangeFunctions,\n orderRank: LokiOperationOrder.RangeVectorFunction,\n renderer: operationWithRangeVectorRenderer,\n addOperationHandler: addLokiOperation,\n paramChangedHandler,\n explainHandler: (op, def) => {\n let opDocs = FUNCTIONS.find((x) => x.insertText === op.id)?.documentation ?? '';\n\n if (op.params[0] === '$__auto') {\n return `${opDocs} \\`$__auto\\` is a variable that will be replaced with the [value of step](https://grafana.com/docs/grafana/next/datasources/loki/query-editor/#options) for range queries and with the value of the selected time range (calculated to - from) for instant queries.`;\n } else {\n return `${opDocs} The [range vector](https://grafana.com/docs/loki/latest/logql/metric_queries/#range-vector-aggregation) is set to \\`${op.params[0]}\\`.`;\n }\n },\n };\n}\n\nexport function createRangeOperationWithGrouping(name: string): QueryBuilderOperationDefinition[] {\n const rangeOperation = createRangeOperation(name, true);\n // Copy range operation params without the last param\n const params = rangeOperation.params.slice(0, -1);\n const operations: QueryBuilderOperationDefinition[] = [\n rangeOperation,\n {\n id: `__${name}_by`,\n name: `${getLokiOperationDisplayName(name)} by`,\n params: [\n ...params,\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n editor: LabelParamEditor,\n },\n ],\n defaultParams: [...rangeOperation.defaultParams, ''],\n toggleable: true,\n alternativesKey: 'range function with grouping',\n category: LokiVisualQueryOperationCategory.RangeFunctions,\n renderer: getRangeAggregationWithGroupingRenderer(name, 'by'),\n paramChangedHandler: getLastLabelRemovedHandler(name),\n explainHandler: getAggregationExplainer(name, 'by'),\n addOperationHandler: addLokiOperation,\n hideFromList: true,\n },\n {\n id: `__${name}_without`,\n name: `${getLokiOperationDisplayName(name)} without`,\n params: [\n ...params,\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n editor: LabelParamEditor,\n },\n ],\n defaultParams: [...rangeOperation.defaultParams, ''],\n alternativesKey: 'range function with grouping',\n category: LokiVisualQueryOperationCategory.RangeFunctions,\n renderer: getRangeAggregationWithGroupingRenderer(name, 'without'),\n paramChangedHandler: getLastLabelRemovedHandler(name),\n explainHandler: getAggregationExplainer(name, 'without'),\n addOperationHandler: addLokiOperation,\n hideFromList: true,\n },\n ];\n\n return operations;\n}\n\nexport function getRangeAggregationWithGroupingRenderer(aggregation: string, grouping: 'by' | 'without') {\n return function aggregationRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n const restParamIndex = def.params.findIndex((param) => param.restParam);\n const params = model.params.slice(0, restParamIndex);\n const restParams = model.params.slice(restParamIndex);\n\n if (params.length === 2 && aggregation === LokiOperationId.QuantileOverTime) {\n return `${aggregation}(${params[1]}, ${innerExpr} [${params[0]}]) ${grouping} (${restParams.join(', ')})`;\n }\n\n return `${aggregation}(${innerExpr} [${params[0]}]) ${grouping} (${restParams.join(', ')})`;\n };\n}\n\nfunction operationWithRangeVectorRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n) {\n const params = model.params ?? [];\n const rangeVector = params[0] ?? '$__auto';\n // QuantileOverTime is only range vector with more than one param\n if (params.length === 2 && model.id === LokiOperationId.QuantileOverTime) {\n const quantile = params[1];\n return `${model.id}(${quantile}, ${innerExpr} [${rangeVector}])`;\n }\n\n return `${model.id}(${innerExpr} [${params[0] ?? '$__auto'}])`;\n}\n\nexport function labelFilterRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n) {\n const integerOperators = ['<', '<=', '>', '>='];\n\n if (integerOperators.includes(String(model.params[1]))) {\n return `${innerExpr} | ${model.params[0]} ${model.params[1]} ${model.params[2]}`;\n }\n\n return `${innerExpr} | ${model.params[0]} ${model.params[1]} \\`${model.params[2]}\\``;\n}\n\nexport function isConflictingFilter(\n operation: QueryBuilderOperation,\n queryOperations: QueryBuilderOperation[]\n): boolean {\n if (!operation) {\n return false;\n }\n const operationIsNegative = operation.params[1].toString().startsWith('!');\n\n const candidates = queryOperations.filter(\n (queryOperation) =>\n queryOperation.id === LokiOperationId.LabelFilter &&\n queryOperation.params[0] === operation.params[0] &&\n queryOperation.params[2] === operation.params[2]\n );\n\n const conflict = candidates.some((candidate) => {\n if (operationIsNegative && candidate.params[1].toString().startsWith('!') === false) {\n return true;\n }\n if (operationIsNegative === false && candidate.params[1].toString().startsWith('!')) {\n return true;\n }\n return false;\n });\n\n return conflict;\n}\n\nexport function pipelineRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n) {\n switch (model.id) {\n case LokiOperationId.Logfmt:\n const [strict = false, keepEmpty = false, ...labels] = model.params;\n return `${innerExpr} | logfmt${strict ? ' --strict' : ''}${keepEmpty ? ' --keep-empty' : ''} ${labels\n .filter((label) => label)\n .join(', ')}`.trim();\n case LokiOperationId.Json:\n return `${innerExpr} | json ${model.params.filter((param) => param).join(', ')}`.trim();\n case LokiOperationId.Drop:\n return `${innerExpr} | drop ${model.params.filter((param) => param).join(', ')}`.trim();\n case LokiOperationId.Keep:\n return `${innerExpr} | keep ${model.params.filter((param) => param).join(', ')}`.trim();\n default:\n return `${innerExpr} | ${model.id}`;\n }\n}\n\nfunction isRangeVectorFunction(def: QueryBuilderOperationDefinition) {\n return def.category === LokiVisualQueryOperationCategory.RangeFunctions;\n}\n\nfunction getIndexOfOrLast(\n operations: QueryBuilderOperation[],\n queryModeller: VisualQueryModeller,\n condition: (def: QueryBuilderOperationDefinition) => boolean\n) {\n const index = operations.findIndex((x) => {\n const opDef = queryModeller.getOperationDefinition(x.id);\n if (!opDef) {\n return false;\n }\n return condition(opDef);\n });\n\n return index === -1 ? operations.length : index;\n}\n\nexport function addLokiOperation(\n def: QueryBuilderOperationDefinition,\n query: LokiVisualQuery,\n modeller: VisualQueryModeller\n): LokiVisualQuery {\n const newOperation: QueryBuilderOperation = {\n id: def.id,\n params: def.defaultParams,\n };\n\n const operations = [...query.operations];\n\n const existingRangeVectorFunction = operations.find((x) => {\n const opDef = modeller.getOperationDefinition(x.id);\n if (!opDef) {\n return false;\n }\n return isRangeVectorFunction(opDef);\n });\n\n switch (def.category) {\n case LokiVisualQueryOperationCategory.Aggregations:\n case LokiVisualQueryOperationCategory.Functions:\n // If we are adding a function but we have not range vector function yet add one\n if (!existingRangeVectorFunction) {\n const placeToInsert = getIndexOfOrLast(\n operations,\n modeller,\n (def) => def.category === LokiVisualQueryOperationCategory.Functions\n );\n operations.splice(placeToInsert, 0, { id: LokiOperationId.Rate, params: ['$__auto'] });\n }\n operations.push(newOperation);\n break;\n case LokiVisualQueryOperationCategory.RangeFunctions:\n // If adding a range function and range function is already added replace it\n if (existingRangeVectorFunction) {\n const index = operations.indexOf(existingRangeVectorFunction);\n operations[index] = newOperation;\n break;\n }\n\n // Add range functions after any formats, line filters and label filters\n default:\n const placeToInsert = getIndexOfOrLast(\n operations,\n modeller,\n (x) => (def.orderRank ?? 100) < (x.orderRank ?? 100)\n );\n operations.splice(placeToInsert, 0, newOperation);\n break;\n }\n\n return {\n ...query,\n operations,\n };\n}\n\nexport function addNestedQueryHandler(def: QueryBuilderOperationDefinition, query: LokiVisualQuery): LokiVisualQuery {\n return {\n ...query,\n binaryQueries: [\n ...(query.binaryQueries ?? []),\n {\n operator: '/',\n query,\n },\n ],\n };\n}\n\nexport function getLineFilterRenderer(operation: string, caseInsensitive?: boolean) {\n return function lineFilterRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n const hasBackticks = model.params.some((param) => typeof param === 'string' && param.includes('`'));\n const delimiter = hasBackticks ? '\"' : '`';\n let params;\n if (hasBackticks) {\n params = model.params.map((param) =>\n typeof param === 'string' ? escapeLabelValueInExactSelector(param) : param\n );\n } else {\n params = model.params;\n }\n if (caseInsensitive) {\n return `${innerExpr} ${operation} ${delimiter}(?i)${params.join(`${delimiter} or ${delimiter}(?i)`)}${delimiter}`;\n }\n return `${innerExpr} ${operation} ${delimiter}${params.join(`${delimiter} or ${delimiter}`)}${delimiter}`;\n };\n}\n\nfunction getRangeVectorParamDef(): QueryBuilderOperationParamDef {\n return {\n name: 'Range',\n type: 'string',\n options: ['$__auto'],\n description:\n 'Use the default value \"$__auto\". Change the \"step\" value in the query options to change the bucket size.',\n };\n}\n\nexport function getOperationParamId(operationId: string, paramIndex: number) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n\nexport function getOnLabelAddedHandler(changeToOperationId: string) {\n return function onParamChanged(index: number, op: QueryBuilderOperation, def: QueryBuilderOperationDefinition) {\n // Check if we actually have the label param. As it's optional the aggregation can have one less, which is the\n // case of just simple aggregation without label. When user adds the label it now has the same number of params\n // as its definition, and now we can change it to its `_by` variant.\n if (op.params.length === def.params.length) {\n return {\n ...op,\n id: changeToOperationId,\n };\n }\n return op;\n };\n}\n\n/**\n * Very simple poc implementation, needs to be modified to support all aggregation operators\n */\nexport function getAggregationExplainer(aggregationName: string, mode: 'by' | 'without' | '') {\n return function aggregationExplainer(model: QueryBuilderOperation) {\n const labels = model.params.map((label) => `\\`${label}\\``).join(' and ');\n const labelWord = pluralize('label', model.params.length);\n\n switch (mode) {\n case 'by':\n return `Calculates ${aggregationName} over dimensions while preserving ${labelWord} ${labels}.`;\n case 'without':\n return `Calculates ${aggregationName} over the dimensions ${labels}. All other labels are preserved.`;\n default:\n return `Calculates ${aggregationName} over the dimensions.`;\n }\n };\n}\n\n/**\n * This function will transform operations without labels to their plan aggregation operation\n */\nexport function getLastLabelRemovedHandler(changeToOperationId: string) {\n return function onParamChanged(index: number, op: QueryBuilderOperation, def: QueryBuilderOperationDefinition) {\n // If definition has more params then is defined there are no optional rest params anymore.\n // We then transform this operation into a different one\n if (op.params.length < def.params.length) {\n return {\n ...op,\n id: changeToOperationId,\n };\n }\n\n return op;\n };\n}\n\nexport function getLokiOperationDisplayName(funcName: string) {\n return capitalize(funcName.replace(/_/g, ' '));\n}\n\nexport function defaultAddOperationHandler<T extends VisualQuery>(def: QueryBuilderOperationDefinition, query: T) {\n const newOperation: QueryBuilderOperation = {\n id: def.id,\n params: def.defaultParams,\n };\n\n return {\n ...query,\n operations: [...query.operations, newOperation],\n };\n}\n\nexport function createAggregationOperation(\n name: string,\n overrides: Partial<QueryBuilderOperationDefinition> = {}\n): QueryBuilderOperationDefinition[] {\n const operations: QueryBuilderOperationDefinition[] = [\n {\n id: name,\n name: getLokiOperationDisplayName(name),\n params: [\n {\n name: 'By label',\n type: 'string',\n restParam: true,\n optional: true,\n },\n ],\n defaultParams: [],\n toggleable: true,\n alternativesKey: 'plain aggregations',\n category: LokiVisualQueryOperationCategory.Aggregations,\n renderer: functionRendererLeft,\n paramChangedHandler: getOnLabelAddedHandler(`__${name}_by`),\n explainHandler: getAggregationExplainer(name, ''),\n addOperationHandler: defaultAddOperationHandler,\n ...overrides,\n },\n {\n id: `__${name}_by`,\n name: `${getLokiOperationDisplayName(name)} by`,\n params: [\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n editor: LabelParamEditor,\n },\n ],\n defaultParams: [''],\n alternativesKey: 'aggregations by',\n category: LokiVisualQueryOperationCategory.Aggregations,\n renderer: getAggregationByRenderer(name),\n paramChangedHandler: getLastLabelRemovedHandler(name),\n explainHandler: getAggregationExplainer(name, 'by'),\n addOperationHandler: defaultAddOperationHandler,\n hideFromList: true,\n ...overrides,\n },\n {\n id: `__${name}_without`,\n name: `${getLokiOperationDisplayName(name)} without`,\n params: [\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n editor: LabelParamEditor,\n },\n ],\n defaultParams: [''],\n alternativesKey: 'aggregations by',\n category: LokiVisualQueryOperationCategory.Aggregations,\n renderer: getAggregationWithoutRenderer(name),\n paramChangedHandler: getLastLabelRemovedHandler(name),\n explainHandler: getAggregationExplainer(name, 'without'),\n addOperationHandler: defaultAddOperationHandler,\n hideFromList: true,\n ...overrides,\n },\n ];\n\n return operations;\n}\n\nfunction getAggregationWithoutRenderer(aggregation: string) {\n return function aggregationRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n return `${aggregation} without(${model.params.join(', ')}) (${innerExpr})`;\n };\n}\n\nexport function functionRendererLeft(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n) {\n const params = renderParams(model, def, innerExpr);\n const str = model.id + '(';\n\n if (innerExpr) {\n params.push(innerExpr);\n }\n\n return str + params.join(', ') + ')';\n}\n\nfunction renderParams(model: QueryBuilderOperation, def: QueryBuilderOperationDefinition, innerExpr: string) {\n return (model.params ?? []).map((value, index) => {\n const paramDef = def.params[index];\n if (paramDef.type === 'string') {\n return '\"' + value + '\"';\n }\n\n return value;\n });\n}\n\nfunction getAggregationByRenderer(aggregation: string) {\n return function aggregationRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n return `${aggregation} by(${model.params.join(', ')}) (${innerExpr})`;\n };\n}\n\nexport function createAggregationOperationWithParam(\n name: string,\n paramsDef: { params: QueryBuilderOperationParamDef[]; defaultParams: QueryBuilderOperationParamValue[] },\n overrides: Partial<QueryBuilderOperationDefinition> = {}\n): QueryBuilderOperationDefinition[] {\n const operations = createAggregationOperation(name, overrides);\n operations[0].params.unshift(...paramsDef.params);\n operations[1].params.unshift(...paramsDef.params);\n operations[2].params.unshift(...paramsDef.params);\n operations[0].defaultParams = paramsDef.defaultParams;\n operations[1].defaultParams = [...paramsDef.defaultParams, ''];\n operations[2].defaultParams = [...paramsDef.defaultParams, ''];\n operations[1].renderer = getAggregationByRendererWithParameter(name);\n operations[2].renderer = getAggregationByRendererWithParameter(name);\n return operations;\n}\n\nfunction getAggregationByRendererWithParameter(aggregation: string) {\n return function aggregationRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n const restParamIndex = def.params.findIndex((param) => param.restParam);\n const params = model.params.slice(0, restParamIndex);\n const restParams = model.params.slice(restParamIndex);\n\n return `${aggregation} by(${restParams.join(', ')}) (${params\n .map((param, idx) => (def.params[idx].type === 'string' ? `\\\"${param}\\\"` : param))\n .join(', ')}, ${innerExpr})`;\n };\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3059__;","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _isEmpty = _interopRequireDefault(require(\"lodash/isEmpty\"));\n\nvar _escapeRegExp = _interopRequireDefault(require(\"lodash/escapeRegExp\"));\n\nvar _tokenTypes = _interopRequireDefault(require(\"./tokenTypes\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Tokenizer =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg\r\n * @param {String[]} cfg.reservedWords Reserved words in SQL\r\n * @param {String[]} cfg.reservedTopLevelWords Words that are set to new line separately\r\n * @param {String[]} cfg.reservedNewlineWords Words that are set to newline\r\n * @param {String[]} cfg.reservedTopLevelWordsNoIndent Words that are top level but have no indentation\r\n * @param {String[]} cfg.stringTypes String types to enable: \"\", '', ``, [], N''\r\n * @param {String[]} cfg.openParens Opening parentheses to enable, like (, [\r\n * @param {String[]} cfg.closeParens Closing parentheses to enable, like ), ]\r\n * @param {String[]} cfg.indexedPlaceholderTypes Prefixes for indexed placeholders, like ?\r\n * @param {String[]} cfg.namedPlaceholderTypes Prefixes for named placeholders, like @ and :\r\n * @param {String[]} cfg.lineCommentTypes Line comments to enable, like # and --\r\n * @param {String[]} cfg.specialWordChars Special chars that can be found inside of words, like @ and #\r\n */\n function Tokenizer(cfg) {\n _classCallCheck(this, Tokenizer);\n\n this.WHITESPACE_REGEX = /^([\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]+)/;\n this.NUMBER_REGEX = /^((\\x2D[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*)?[0-9]+(\\.[0-9]+)?|0x[0-9A-Fa-f]+|0b[01]+)\\b/;\n this.OPERATOR_REGEX = /^(!=|<>|==|<=|>=|!<|!>|\\|\\||::|\\x2D>>|\\x2D>|~~\\*|~~|!~~\\*|!~~|~\\*|!~\\*|!~|:=|(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))/;\n this.BLOCK_COMMENT_REGEX = /^(\\/\\*(?:[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*?(?:\\*\\/|$))/;\n this.LINE_COMMENT_REGEX = this.createLineCommentRegex(cfg.lineCommentTypes);\n this.RESERVED_TOP_LEVEL_REGEX = this.createReservedWordRegex(cfg.reservedTopLevelWords);\n this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX = this.createReservedWordRegex(cfg.reservedTopLevelWordsNoIndent);\n this.RESERVED_NEWLINE_REGEX = this.createReservedWordRegex(cfg.reservedNewlineWords);\n this.RESERVED_PLAIN_REGEX = this.createReservedWordRegex(cfg.reservedWords);\n this.WORD_REGEX = this.createWordRegex(cfg.specialWordChars);\n this.STRING_REGEX = this.createStringRegex(cfg.stringTypes);\n this.OPEN_PAREN_REGEX = this.createParenRegex(cfg.openParens);\n this.CLOSE_PAREN_REGEX = this.createParenRegex(cfg.closeParens);\n this.INDEXED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.indexedPlaceholderTypes, '[0-9]*');\n this.IDENT_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.namedPlaceholderTypes, '[a-zA-Z0-9._$]+');\n this.STRING_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.namedPlaceholderTypes, this.createStringPattern(cfg.stringTypes));\n }\n\n _createClass(Tokenizer, [{\n key: \"createLineCommentRegex\",\n value: function createLineCommentRegex(lineCommentTypes) {\n return new RegExp(\"^((?:\".concat(lineCommentTypes.map(function (c) {\n return (0, _escapeRegExp[\"default\"])(c);\n }).join('|'), \").*?(?:\\r\\n|\\r|\\n|$))\"), 'u');\n }\n }, {\n key: \"createReservedWordRegex\",\n value: function createReservedWordRegex(reservedWords) {\n var reservedWordsPattern = reservedWords.join('|').replace(/ /g, '\\\\s+');\n return new RegExp(\"^(\".concat(reservedWordsPattern, \")\\\\b\"), 'iu');\n }\n }, {\n key: \"createWordRegex\",\n value: function createWordRegex() {\n var specialChars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return new RegExp(\"^([\\\\p{Alphabetic}\\\\p{Mark}\\\\p{Decimal_Number}\\\\p{Connector_Punctuation}\\\\p{Join_Control}\".concat(specialChars.join(''), \"]+)\"), 'u');\n }\n }, {\n key: \"createStringRegex\",\n value: function createStringRegex(stringTypes) {\n return new RegExp('^(' + this.createStringPattern(stringTypes) + ')', 'u');\n } // This enables the following string patterns:\n // 1. backtick quoted string using `` to escape\n // 2. square bracket quoted string (SQL Server) using ]] to escape\n // 3. double quoted string using \"\" or \\\" to escape\n // 4. single quoted string using '' or \\' to escape\n // 5. national character quoted string using N'' or N\\' to escape\n\n }, {\n key: \"createStringPattern\",\n value: function createStringPattern(stringTypes) {\n var patterns = {\n '``': '((`[^`]*($|`))+)',\n '[]': '((\\\\[[^\\\\]]*($|\\\\]))(\\\\][^\\\\]]*($|\\\\]))*)',\n '\"\"': '((\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*(\"|$))+)',\n \"''\": \"(('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*('|$))+)\",\n \"N''\": \"((N'[^N'\\\\\\\\]*(?:\\\\\\\\.[^N'\\\\\\\\]*)*('|$))+)\"\n };\n return stringTypes.map(function (t) {\n return patterns[t];\n }).join('|');\n }\n }, {\n key: \"createParenRegex\",\n value: function createParenRegex(parens) {\n var _this = this;\n\n return new RegExp('^(' + parens.map(function (p) {\n return _this.escapeParen(p);\n }).join('|') + ')', 'iu');\n }\n }, {\n key: \"escapeParen\",\n value: function escapeParen(paren) {\n if (paren.length === 1) {\n // A single punctuation character\n return (0, _escapeRegExp[\"default\"])(paren);\n } else {\n // longer word\n return '\\\\b' + paren + '\\\\b';\n }\n }\n }, {\n key: \"createPlaceholderRegex\",\n value: function createPlaceholderRegex(types, pattern) {\n if ((0, _isEmpty[\"default\"])(types)) {\n return false;\n }\n\n var typesRegex = types.map(_escapeRegExp[\"default\"]).join('|');\n return new RegExp(\"^((?:\".concat(typesRegex, \")(?:\").concat(pattern, \"))\"), 'u');\n }\n /**\r\n * Takes a SQL string and breaks it into tokens.\r\n * Each token is an object with type and value.\r\n *\r\n * @param {String} input The SQL string\r\n * @return {Object[]} tokens An array of tokens.\r\n * @return {String} token.type\r\n * @return {String} token.value\r\n */\n\n }, {\n key: \"tokenize\",\n value: function tokenize(input) {\n if (!input) return [];\n var tokens = [];\n var token; // Keep processing the string until it is empty\n\n while (input.length) {\n // Get the next token and the token type\n token = this.getNextToken(input, token); // Advance the string\n\n input = input.substring(token.value.length);\n tokens.push(token);\n }\n\n return tokens;\n }\n }, {\n key: \"getNextToken\",\n value: function getNextToken(input, previousToken) {\n return this.getWhitespaceToken(input) || this.getCommentToken(input) || this.getStringToken(input) || this.getOpenParenToken(input) || this.getCloseParenToken(input) || this.getPlaceholderToken(input) || this.getNumberToken(input) || this.getReservedWordToken(input, previousToken) || this.getWordToken(input) || this.getOperatorToken(input);\n }\n }, {\n key: \"getWhitespaceToken\",\n value: function getWhitespaceToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].WHITESPACE,\n regex: this.WHITESPACE_REGEX\n });\n }\n }, {\n key: \"getCommentToken\",\n value: function getCommentToken(input) {\n return this.getLineCommentToken(input) || this.getBlockCommentToken(input);\n }\n }, {\n key: \"getLineCommentToken\",\n value: function getLineCommentToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].LINE_COMMENT,\n regex: this.LINE_COMMENT_REGEX\n });\n }\n }, {\n key: \"getBlockCommentToken\",\n value: function getBlockCommentToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].BLOCK_COMMENT,\n regex: this.BLOCK_COMMENT_REGEX\n });\n }\n }, {\n key: \"getStringToken\",\n value: function getStringToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].STRING,\n regex: this.STRING_REGEX\n });\n }\n }, {\n key: \"getOpenParenToken\",\n value: function getOpenParenToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].OPEN_PAREN,\n regex: this.OPEN_PAREN_REGEX\n });\n }\n }, {\n key: \"getCloseParenToken\",\n value: function getCloseParenToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].CLOSE_PAREN,\n regex: this.CLOSE_PAREN_REGEX\n });\n }\n }, {\n key: \"getPlaceholderToken\",\n value: function getPlaceholderToken(input) {\n return this.getIdentNamedPlaceholderToken(input) || this.getStringNamedPlaceholderToken(input) || this.getIndexedPlaceholderToken(input);\n }\n }, {\n key: \"getIdentNamedPlaceholderToken\",\n value: function getIdentNamedPlaceholderToken(input) {\n return this.getPlaceholderTokenWithKey({\n input: input,\n regex: this.IDENT_NAMED_PLACEHOLDER_REGEX,\n parseKey: function parseKey(v) {\n return v.slice(1);\n }\n });\n }\n }, {\n key: \"getStringNamedPlaceholderToken\",\n value: function getStringNamedPlaceholderToken(input) {\n var _this2 = this;\n\n return this.getPlaceholderTokenWithKey({\n input: input,\n regex: this.STRING_NAMED_PLACEHOLDER_REGEX,\n parseKey: function parseKey(v) {\n return _this2.getEscapedPlaceholderKey({\n key: v.slice(2, -1),\n quoteChar: v.slice(-1)\n });\n }\n });\n }\n }, {\n key: \"getIndexedPlaceholderToken\",\n value: function getIndexedPlaceholderToken(input) {\n return this.getPlaceholderTokenWithKey({\n input: input,\n regex: this.INDEXED_PLACEHOLDER_REGEX,\n parseKey: function parseKey(v) {\n return v.slice(1);\n }\n });\n }\n }, {\n key: \"getPlaceholderTokenWithKey\",\n value: function getPlaceholderTokenWithKey(_ref) {\n var input = _ref.input,\n regex = _ref.regex,\n parseKey = _ref.parseKey;\n var token = this.getTokenOnFirstMatch({\n input: input,\n regex: regex,\n type: _tokenTypes[\"default\"].PLACEHOLDER\n });\n\n if (token) {\n token.key = parseKey(token.value);\n }\n\n return token;\n }\n }, {\n key: \"getEscapedPlaceholderKey\",\n value: function getEscapedPlaceholderKey(_ref2) {\n var key = _ref2.key,\n quoteChar = _ref2.quoteChar;\n return key.replace(new RegExp((0, _escapeRegExp[\"default\"])('\\\\' + quoteChar), 'gu'), quoteChar);\n } // Decimal, binary, or hex numbers\n\n }, {\n key: \"getNumberToken\",\n value: function getNumberToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].NUMBER,\n regex: this.NUMBER_REGEX\n });\n } // Punctuation and symbols\n\n }, {\n key: \"getOperatorToken\",\n value: function getOperatorToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].OPERATOR,\n regex: this.OPERATOR_REGEX\n });\n }\n }, {\n key: \"getReservedWordToken\",\n value: function getReservedWordToken(input, previousToken) {\n // A reserved word cannot be preceded by a \".\"\n // this makes it so in \"my_table.from\", \"from\" is not considered a reserved word\n if (previousToken && previousToken.value && previousToken.value === '.') {\n return;\n }\n\n return this.getTopLevelReservedToken(input) || this.getNewlineReservedToken(input) || this.getTopLevelReservedTokenNoIndent(input) || this.getPlainReservedToken(input);\n }\n }, {\n key: \"getTopLevelReservedToken\",\n value: function getTopLevelReservedToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].RESERVED_TOP_LEVEL,\n regex: this.RESERVED_TOP_LEVEL_REGEX\n });\n }\n }, {\n key: \"getNewlineReservedToken\",\n value: function getNewlineReservedToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].RESERVED_NEWLINE,\n regex: this.RESERVED_NEWLINE_REGEX\n });\n }\n }, {\n key: \"getTopLevelReservedTokenNoIndent\",\n value: function getTopLevelReservedTokenNoIndent(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].RESERVED_TOP_LEVEL_NO_INDENT,\n regex: this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX\n });\n }\n }, {\n key: \"getPlainReservedToken\",\n value: function getPlainReservedToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].RESERVED,\n regex: this.RESERVED_PLAIN_REGEX\n });\n }\n }, {\n key: \"getWordToken\",\n value: function getWordToken(input) {\n return this.getTokenOnFirstMatch({\n input: input,\n type: _tokenTypes[\"default\"].WORD,\n regex: this.WORD_REGEX\n });\n }\n }, {\n key: \"getTokenOnFirstMatch\",\n value: function getTokenOnFirstMatch(_ref3) {\n var input = _ref3.input,\n type = _ref3.type,\n regex = _ref3.regex;\n var matches = input.match(regex);\n\n if (matches) {\n return {\n type: type,\n value: matches[1]\n };\n }\n }\n }]);\n\n return Tokenizer;\n}();\n\nexports[\"default\"] = Tokenizer;\nmodule.exports = exports.default;","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3241__;","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","import { NodeType, SyntaxNode } from '@lezer/common';\nimport { sortBy } from 'lodash';\n\nimport {\n Identifier,\n LabelFilter,\n LabelParser,\n LineComment,\n LineFilters,\n LogExpr,\n LogRangeExpr,\n Matcher,\n parser,\n PipelineExpr,\n Selector,\n UnwrapExpr,\n String,\n PipelineStage,\n LogfmtParser,\n JsonExpressionParser,\n LogfmtExpressionParser,\n Expr,\n LabelFormatExpr,\n} from '@grafana/lezer-logql';\nimport { QueryBuilderLabelFilter } from '@grafana/plugin-ui';\n\nimport { unescapeLabelValue } from './languageUtils';\nimport { getNodePositionsFromQuery } from './queryUtils';\nimport { lokiQueryModeller as modeller } from './querybuilder/LokiQueryModeller';\nimport { buildVisualQueryFromString, handleQuotes } from './querybuilder/parsing';\nimport { LabelType } from './types';\n\nexport class NodePosition {\n from: number;\n to: number;\n type?: NodeType;\n\n constructor(from: number, to: number, type?: NodeType) {\n this.from = from;\n this.to = to;\n this.type = type;\n }\n\n static fromNode(node: SyntaxNode): NodePosition {\n return new NodePosition(node.from, node.to, node.type);\n }\n\n contains(position: NodePosition): boolean {\n return this.from <= position.from && this.to >= position.to;\n }\n\n getExpression(query: string): string {\n return query.substring(this.from, this.to);\n }\n}\n\n/**\n * Checks for the presence of a given label=value filter in any Matcher expression in the query.\n */\nexport function queryHasFilter(query: string, key: string, operator: string, value: string): boolean {\n const matchers = getMatchersWithFilter(query, key, operator, value);\n return matchers.length > 0;\n}\n\n/**\n * Removes a label=value Matcher expression from the query.\n */\nexport function removeLabelFromQuery(query: string, key: string, operator: string, value: string): string {\n const matchers = getMatchersWithFilter(query, key, operator, value);\n for (const matcher of matchers) {\n query =\n matcher.parent?.type.id === LabelFilter ? removeLabelFilter(query, matcher) : removeSelector(query, matcher);\n }\n return query;\n}\n\nfunction removeLabelFilter(query: string, matcher: SyntaxNode): string {\n const pipelineStage = matcher.parent?.parent;\n if (!pipelineStage || pipelineStage.type.id !== PipelineStage) {\n return query;\n }\n return (query.substring(0, pipelineStage.from) + query.substring(pipelineStage.to)).trim();\n}\n\nfunction removeSelector(query: string, matcher: SyntaxNode): string {\n let selector: SyntaxNode | null = matcher;\n do {\n selector = selector.parent;\n } while (selector && selector.type.id !== Selector);\n const label = matcher.getChild(Identifier);\n if (!selector || !label) {\n return query;\n }\n const labelName = query.substring(label.from, label.to);\n\n const prefix = query.substring(0, selector.from);\n const suffix = query.substring(selector.to);\n\n const matchVisQuery = buildVisualQueryFromString(query.substring(selector.from, selector.to));\n matchVisQuery.query.labels = matchVisQuery.query.labels.filter((label) => label.label !== labelName);\n\n return prefix + modeller.renderQuery(matchVisQuery.query) + suffix;\n}\n\nfunction getMatchersWithFilter(query: string, label: string, operator: string, value: string): SyntaxNode[] {\n const tree = parser.parse(query);\n const matchers: SyntaxNode[] = [];\n tree.iterate({\n enter: ({ type, node }): void => {\n if (type.id === Matcher) {\n matchers.push(node);\n }\n },\n });\n return matchers.filter((matcher) => {\n const labelNode = matcher.getChild(Identifier);\n const opNode = labelNode?.nextSibling;\n const valueNode = matcher.getChild(String);\n if (!labelNode || !opNode || !valueNode) {\n return false;\n }\n const labelName = query.substring(labelNode.from, labelNode.to);\n if (labelName !== label) {\n return false;\n }\n const labelValue = query.substring(valueNode.from, valueNode.to);\n if (handleQuotes(labelValue) !== unescapeLabelValue(value)) {\n return false;\n }\n const labelOperator = query.substring(opNode.from, opNode.to);\n if (labelOperator !== operator) {\n return false;\n }\n return true;\n });\n}\n\n/**\n * Adds label filter to existing query. Useful for query modification for example for ad hoc filters.\n *\n * It uses LogQL parser to find instances of labels, alters them and then splices them back into the query.\n * In a case when we have parser, instead of adding new instance of label it adds label filter after the parser.\n *\n * This operates on substrings of the query with labels and operates just on those. This makes this\n * more robust and can alter even invalid queries, and preserves in general the query structure and whitespace.\n */\nexport function addLabelToQuery(\n query: string,\n key: string,\n operator: string,\n value: string,\n labelType?: LabelType | null\n): string {\n if (!key) {\n throw new Error('Need label to add to query.');\n }\n\n const streamSelectorPositions = getStreamSelectorPositions(query);\n if (!streamSelectorPositions.length) {\n return query;\n }\n\n const parserPositions = getParserPositions(query);\n const labelFilterPositions = getLabelFilterPositions(query);\n const hasStreamSelectorMatchers = getMatcherInStreamPositions(query);\n // For non-indexed labels we want to add them after label_format to, for example, allow ad-hoc filters to use formatted labels\n const labelFormatPositions = getNodePositionsFromQuery(query, [LabelFormatExpr]);\n\n // If the label type wasn't passed in from the calling function, we can use lezer to figure out if this label is already in the stream selectors\n if (!labelType) {\n const identifierSelectorMatchers = getIdentifierInStreamPositions(query);\n const indexedKeys = identifierSelectorMatchers.map((match) => match.getExpression(query));\n if (indexedKeys.includes(key)) {\n labelType = LabelType.Indexed;\n }\n }\n\n const everyStreamSelectorHasMatcher = streamSelectorPositions.every((streamSelectorPosition) =>\n hasStreamSelectorMatchers.some(\n (matcherPosition) =>\n matcherPosition.from >= streamSelectorPosition.from && matcherPosition.to <= streamSelectorPosition.to\n )\n );\n\n const filter = toLabelFilter(key, value, operator);\n if (labelType === LabelType.Parsed || labelType === LabelType.StructuredMetadata) {\n const lastPositionsPerExpression = getLastPositionPerExpression(query, [\n ...streamSelectorPositions,\n ...labelFilterPositions,\n ...parserPositions,\n ...labelFormatPositions,\n ]);\n\n return addFilterAsLabelFilter(query, lastPositionsPerExpression, filter);\n } else if (labelType === LabelType.Indexed) {\n return addFilterToStreamSelector(query, streamSelectorPositions, filter);\n } else {\n // labelType is not set, so we need to figure out where to add the label\n // if we don't have a parser, or have empty stream selectors, we will just add it to the stream selector\n if (parserPositions.length === 0 || everyStreamSelectorHasMatcher === false) {\n return addFilterToStreamSelector(query, streamSelectorPositions, filter);\n } else {\n // If `labelType` is not set, it indicates a potential metric query (`labelType` is present only in log queries that came from a Loki instance supporting the `categorize-labels` API). In case we are not adding the label to stream selectors we need to find the last position to add in each expression.\n // E.g. in `sum(rate({foo=\"bar\"} | logfmt [$__auto])) / sum(rate({foo=\"baz\"} | logfmt [$__auto]))` we need to add the label at two places.\n const lastPositionsPerExpression = getLastPositionPerExpression(query, [\n ...parserPositions,\n ...labelFilterPositions,\n ...labelFormatPositions,\n ]);\n\n return addFilterAsLabelFilter(query, lastPositionsPerExpression, filter);\n }\n }\n}\n\nfunction getLastPositionPerExpression(query: string, positions: NodePosition[]): NodePosition[] {\n const subExpressions = findLeaves(getNodePositionsFromQuery(query, [Expr]));\n const subPositions = [...positions];\n\n // find last position for each subexpression\n const lastPositionsPerExpression = subExpressions.map((subExpression) => {\n return findLastPosition(\n subPositions.filter((p) => {\n return subExpression.contains(p);\n })\n );\n });\n return lastPositionsPerExpression;\n}\n\n/**\n * Adds parser to existing query. Useful for query modification for hints.\n * It uses LogQL parser to find instances of stream selectors or line filters and adds parser after them.\n *\n * @param query\n * @param parser\n */\nexport function addParserToQuery(query: string, parser: string): string {\n const lineFilterPositions = getLineFiltersPositions(query);\n\n if (lineFilterPositions.length) {\n return appendToLogsQuery(query, lineFilterPositions, parser);\n } else {\n const streamSelectorPositions = getStreamSelectorPositions(query);\n if (!streamSelectorPositions.length) {\n return query;\n }\n return appendToLogsQuery(query, streamSelectorPositions, parser);\n }\n}\n\n/**\n * Adds a drop statement to the query.\n * It uses LogQL parser to find instances of stream selectors or line filters and adds parser after them.\n *\n * @param query\n * @param parser\n */\nexport function addDropToQuery(query: string, labelsToDrop: string[]): string {\n const lineFilterPositions = getLineFiltersPositions(query);\n\n if (lineFilterPositions.length) {\n return appendToLogsQuery(query, lineFilterPositions, `drop ${labelsToDrop.join(', ')}`);\n } else {\n const streamSelectorPositions = getStreamSelectorPositions(query);\n if (!streamSelectorPositions.length) {\n return query;\n }\n return appendToLogsQuery(query, streamSelectorPositions, `drop ${labelsToDrop.join(', ')}`);\n }\n}\n\n/**\n * Adds a statement after line filters or stream selectors\n * @param query\n * @param queryPartPositions\n * @param parser\n */\nfunction appendToLogsQuery(query: string, queryPartPositions: NodePosition[], statement: string): string {\n let newQuery = '';\n let prev = 0;\n\n for (let i = 0; i < queryPartPositions.length; i++) {\n // Splice on a string for each matched vector selector\n const match = queryPartPositions[i];\n const isLast = i === queryPartPositions.length - 1;\n\n const start = query.substring(prev, match.to);\n const end = isLast ? query.substring(match.to) : '';\n\n // Add parser\n newQuery += start + ` | ${statement}` + end;\n prev = match.to;\n }\n return newQuery;\n}\n\n/**\n * Adds filtering for pipeline errors to existing query. Useful for query modification for hints.\n * It uses LogQL parser to find parsers and adds pipeline errors filtering after them.\n *\n * @param query\n */\nexport function addNoPipelineErrorToQuery(query: string): string {\n const parserPositions = getParserPositions(query);\n if (!parserPositions.length) {\n return query;\n }\n\n const filter = toLabelFilter('__error__', '', '=');\n return addFilterAsLabelFilter(query, parserPositions, filter);\n}\n\n/**\n * Adds label format to existing query. Useful for query modification for hints.\n * It uses LogQL parser to find log query and add label format at the end.\n *\n * @param query\n * @param labelFormat\n */\nexport function addLabelFormatToQuery(query: string, labelFormat: { originalLabel: string; renameTo: string }): string {\n const logQueryPositions = getLogQueryPositions(query);\n return addLabelFormat(query, logQueryPositions, labelFormat);\n}\n\n/**\n * Removes all comments from query.\n * It uses LogQL parser to find all LineComments and removes them.\n */\nexport function removeCommentsFromQuery(query: string): string {\n const lineCommentPositions = getLineCommentPositions(query);\n\n if (!lineCommentPositions.length) {\n return query;\n }\n\n let newQuery = '';\n let prev = 0;\n\n for (let lineCommentPosition of lineCommentPositions) {\n newQuery = newQuery + query.substring(prev, lineCommentPosition.from);\n prev = lineCommentPosition.to;\n }\n newQuery = newQuery + query.substring(prev);\n return newQuery;\n}\n\n/**\n * Parse the string and get all Selector positions in the query together with parsed representation of the\n * selector.\n * @param query\n */\nexport function getStreamSelectorPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ type, node }): false | void => {\n if (type.id === Selector) {\n positions.push(NodePosition.fromNode(node));\n return false;\n }\n },\n });\n return positions;\n}\n\n/**\n * Parse the string and get all LabelParser positions in the query.\n * @param query\n */\nexport function getParserPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n const parserNodeTypes = [LabelParser, JsonExpressionParser, LogfmtParser, LogfmtExpressionParser];\n tree.iterate({\n enter: ({ type, node }): false | void => {\n if (parserNodeTypes.includes(type.id)) {\n positions.push(NodePosition.fromNode(node));\n return false;\n }\n },\n });\n return positions;\n}\n\n/**\n * Parse the string and get all LabelFilter positions in the query.\n * @param query\n */\nexport function getLabelFilterPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ type, node }): false | void => {\n if (type.id === LabelFilter) {\n positions.push(NodePosition.fromNode(node));\n return false;\n }\n },\n });\n return positions;\n}\n\n/**\n * Parse the string and get all Line filter positions in the query.\n * @param query\n */\nfunction getLineFiltersPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ type, node }): false | void => {\n if (type.id === LineFilters) {\n positions.push(NodePosition.fromNode(node));\n return false;\n }\n },\n });\n return positions;\n}\n\n/**\n * Parse the string and get all Log query positions in the query.\n * @param query\n */\nfunction getLogQueryPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ type, node }): false | void => {\n if (type.id === LogExpr) {\n positions.push(NodePosition.fromNode(node));\n return false;\n }\n\n // This is a case in metrics query\n if (type.id === LogRangeExpr) {\n // Unfortunately, LogRangeExpr includes both log and non-log (e.g. Duration/Range/...) parts of query.\n // We get position of all log-parts within LogRangeExpr: Selector, PipelineExpr and UnwrapExpr.\n const logPartsPositions: NodePosition[] = [];\n const selector = node.getChild(Selector);\n if (selector) {\n logPartsPositions.push(NodePosition.fromNode(selector));\n }\n\n const pipeline = node.getChild(PipelineExpr);\n if (pipeline) {\n logPartsPositions.push(NodePosition.fromNode(pipeline));\n }\n\n const unwrap = node.getChild(UnwrapExpr);\n if (unwrap) {\n logPartsPositions.push(NodePosition.fromNode(unwrap));\n }\n\n // We sort them and then pick \"from\" from first position and \"to\" from last position.\n const sorted = sortBy(logPartsPositions, (position) => position.to);\n positions.push(new NodePosition(sorted[0].from, sorted[sorted.length - 1].to));\n return false;\n }\n },\n });\n return positions;\n}\n\nexport function toLabelFilter(key: string, value: string, operator: string): QueryBuilderLabelFilter {\n // We need to make sure that we convert the value back to string because it may be a number\n return { label: key, op: operator, value };\n}\n\n/**\n * Add filter as to stream selectors\n * @param query\n * @param vectorSelectorPositions\n * @param filter\n */\nfunction addFilterToStreamSelector(\n query: string,\n vectorSelectorPositions: NodePosition[],\n filter: QueryBuilderLabelFilter\n): string {\n let newQuery = '';\n let prev = 0;\n\n for (let i = 0; i < vectorSelectorPositions.length; i++) {\n // This is basically just doing splice on a string for each matched vector selector.\n const match = vectorSelectorPositions[i];\n const isLast = i === vectorSelectorPositions.length - 1;\n\n const start = query.substring(prev, match.from);\n const end = isLast ? query.substring(match.to) : '';\n const matchVisQuery = buildVisualQueryFromString(query.substring(match.from, match.to));\n\n if (!labelExists(matchVisQuery.query.labels, filter)) {\n // We don't want to add duplicate labels.\n matchVisQuery.query.labels.push(filter);\n }\n const newLabels = modeller.renderQuery(matchVisQuery.query);\n newQuery += start + newLabels + end;\n prev = match.to;\n }\n return newQuery;\n}\n\n/**\n * Add filter as label filter after the parsers\n * @param query\n * @param positionsToAddAfter\n * @param filter\n */\nexport function addFilterAsLabelFilter(\n query: string,\n positionsToAddAfter: NodePosition[],\n filter: QueryBuilderLabelFilter\n): string {\n let newQuery = '';\n let prev = 0;\n\n for (let i = 0; i < positionsToAddAfter.length; i++) {\n // This is basically just doing splice on a string for each matched vector selector.\n const match = positionsToAddAfter[i];\n const isLast = i === positionsToAddAfter.length - 1;\n\n const start = query.substring(prev, match.to);\n const end = isLast ? query.substring(match.to) : '';\n\n let labelFilter = '';\n // For < and >, if the value is number, we don't add quotes around it and use it as number\n if (!Number.isNaN(Number(filter.value)) && (filter.op === '<' || filter.op === '>')) {\n labelFilter = ` | ${filter.label}${filter.op}${Number(filter.value)}`;\n } else {\n // we now unescape all escaped values again, because we are using backticks which can handle those cases.\n // we also don't care about the operator here, because we need to unescape for both, regex and equal.\n labelFilter = ` | ${filter.label}${filter.op}\\`${unescapeLabelValue(filter.value)}\\``;\n }\n\n newQuery += start + labelFilter + end;\n prev = match.to;\n }\n return newQuery;\n}\n\n/**\n * Add filter as label filter after the parsers\n * @param query\n * @param logQueryPositions\n * @param labelFormat\n */\nfunction addLabelFormat(\n query: string,\n logQueryPositions: NodePosition[],\n labelFormat: { originalLabel: string; renameTo: string }\n): string {\n let newQuery = '';\n let prev = 0;\n\n for (let i = 0; i < logQueryPositions.length; i++) {\n // This is basically just doing splice on a string for each matched vector selector.\n const match = logQueryPositions[i];\n const isLast = i === logQueryPositions.length - 1;\n\n const start = query.substring(prev, match.to);\n const end = isLast ? query.substring(match.to) : '';\n\n const labelFilter = ` | label_format ${labelFormat.renameTo}=${labelFormat.originalLabel}`;\n newQuery += start + labelFilter + end;\n prev = match.to;\n }\n return newQuery;\n}\n\nexport function addLineFilter(query: string, value = '', operator = '|='): string {\n const streamSelectorPositions = getStreamSelectorPositions(query);\n if (!streamSelectorPositions.length) {\n return query;\n }\n const streamSelectorEnd = streamSelectorPositions[0].to;\n\n const newQueryExpr = query.slice(0, streamSelectorEnd) + ` ${operator} \\`${value}\\`` + query.slice(streamSelectorEnd);\n return newQueryExpr;\n}\n\nfunction getLineCommentPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ type, from, to }): false | void => {\n if (type.id === LineComment) {\n positions.push(new NodePosition(from, to, type));\n return false;\n }\n },\n });\n return positions;\n}\n\n/**\n * Check if label exists in the list of labels but ignore the operator.\n * @param labels\n * @param filter\n */\nfunction labelExists(labels: QueryBuilderLabelFilter[], filter: QueryBuilderLabelFilter) {\n return labels.find((label) => label.label === filter.label && label.value === filter.value);\n}\n\n/**\n * Return the last position based on \"to\" property\n * @param positions\n */\nexport function findLastPosition(positions: NodePosition[]): NodePosition {\n if (!positions.length) {\n return new NodePosition(0, 0);\n }\n return positions.reduce((prev, current) => (prev.to > current.to ? prev : current));\n}\n\n/**\n * Gets all leaves of the nodes given. Leaves are nodes that don't contain any other nodes.\n *\n * @param {NodePosition[]} nodes\n * @return\n */\nfunction findLeaves(nodes: NodePosition[]): NodePosition[] {\n return nodes.filter((node) => nodes.every((n) => node.contains(n) === false || node === n));\n}\n\nfunction getAllPositionsInNodeByType(node: SyntaxNode, type: number): NodePosition[] {\n if (node.type.id === type) {\n return [NodePosition.fromNode(node)];\n }\n\n const positions: NodePosition[] = [];\n let pos = 0;\n let child = node.childAfter(pos);\n while (child) {\n positions.push(...getAllPositionsInNodeByType(child, type));\n pos = child.to;\n child = node.childAfter(pos);\n }\n return positions;\n}\n\nfunction getMatcherInStreamPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ node }): false | void => {\n if (node.type.id === Selector) {\n positions.push(...getAllPositionsInNodeByType(node, Matcher));\n }\n },\n });\n return positions;\n}\n\nexport function getIdentifierInStreamPositions(query: string): NodePosition[] {\n const tree = parser.parse(query);\n const positions: NodePosition[] = [];\n tree.iterate({\n enter: ({ node }): false | void => {\n if (node.type.id === Selector) {\n positions.push(...getAllPositionsInNodeByType(node, Identifier));\n }\n },\n });\n return positions;\n}\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","import { SyntaxNode } from '@lezer/common';\n\nimport {\n And,\n BinOpExpr,\n Bool,\n By,\n ConvOp,\n Decolorize,\n DropLabel,\n DropLabels,\n DropLabelsExpr,\n Filter,\n FilterOp,\n Grouping,\n GroupingLabelList,\n GroupingLabels,\n Identifier,\n Ip,\n IpLabelFilter,\n Json,\n JsonExpressionParser,\n KeepLabel,\n KeepLabels,\n KeepLabelsExpr,\n LabelExtractionExpression,\n LabelFilter,\n LabelFormatMatcher,\n LabelParser,\n LineFilter,\n LineFormatExpr,\n LogfmtExpressionParser,\n LogfmtParser,\n LogRangeExpr,\n Matcher,\n MetricExpr,\n Number as NumberLezer,\n On,\n Or,\n parser,\n ParserFlag,\n Range,\n RangeAggregationExpr,\n RangeOp,\n String,\n UnitFilter,\n Unwrap,\n UnwrapExpr,\n VectorAggregationExpr,\n VectorOp,\n Without,\n BinOpModifier,\n OnOrIgnoringModifier,\n OrFilter,\n} from '@grafana/lezer-logql';\nimport { QueryBuilderLabelFilter, QueryBuilderOperation, QueryBuilderOperationParamValue } from '@grafana/plugin-ui';\n\nimport { binaryScalarDefs } from './binaryScalarOperations';\nimport { checkParamsAreValid, getDefinitionById } from './operations';\nimport {\n ErrorId,\n getAllByType,\n getLeftMostChild,\n getString,\n makeBinOp,\n makeError,\n replaceVariables,\n} from './parsingUtils';\nimport { LokiOperationId, LokiVisualQuery, LokiVisualQueryBinary } from './types';\n\ninterface Context {\n query: LokiVisualQuery;\n errors: ParsingError[];\n}\n\ninterface ParsingError {\n text: string;\n from?: number;\n to?: number;\n parentType?: string;\n}\n\ninterface GetOperationResult {\n operation?: QueryBuilderOperation;\n error?: string;\n}\n\nexport function buildVisualQueryFromString(expr: string): Context {\n const replacedExpr = replaceVariables(expr);\n const tree = parser.parse(replacedExpr);\n const node = tree.topNode;\n\n // This will be modified in the handleExpression\n const visQuery: LokiVisualQuery = {\n labels: [],\n operations: [],\n };\n\n const context: Context = {\n query: visQuery,\n errors: [],\n };\n\n try {\n handleExpression(replacedExpr, node, context);\n } catch (err) {\n // Not ideal to log it here, but otherwise we would lose the stack trace.\n console.error(err);\n if (err instanceof Error) {\n context.errors.push({\n text: err.message,\n });\n }\n }\n\n // If we have empty query, we want to reset errors\n if (isEmptyQuery(context.query)) {\n context.errors = [];\n }\n return context;\n}\n\nexport function handleExpression(expr: string, node: SyntaxNode, context: Context) {\n const visQuery = context.query;\n switch (node.type.id) {\n case Matcher: {\n visQuery.labels.push(getLabel(expr, node));\n const err = node.getChild(ErrorId);\n if (err) {\n context.errors.push(makeError(expr, err));\n }\n break;\n }\n\n case LineFilter: {\n const { operation, error } = getLineFilter(expr, node);\n if (operation) {\n visQuery.operations.push(operation);\n }\n // Show error for query patterns not supported in visual query builder\n if (error) {\n context.errors.push(createNotSupportedError(expr, node, error));\n }\n break;\n }\n\n case LabelParser: {\n visQuery.operations.push(getLabelParser(expr, node));\n break;\n }\n\n case LabelFilter: {\n const { operation, error } = getLabelFilter(expr, node);\n if (operation) {\n visQuery.operations.push(operation);\n }\n // Show error for query patterns not supported in visual query builder\n if (error) {\n context.errors.push(createNotSupportedError(expr, node, error));\n }\n break;\n }\n case JsonExpressionParser: {\n visQuery.operations.push(getJsonExpressionParser(expr, node));\n break;\n }\n\n case LogfmtParser:\n case LogfmtExpressionParser: {\n const { operation, error } = getLogfmtParser(expr, node);\n if (operation) {\n visQuery.operations.push(operation);\n }\n if (error) {\n context.errors.push(createNotSupportedError(expr, node, error));\n }\n break;\n }\n\n case LineFormatExpr: {\n visQuery.operations.push(getLineFormat(expr, node));\n break;\n }\n\n case LabelFormatMatcher: {\n visQuery.operations.push(getLabelFormat(expr, node));\n break;\n }\n\n case UnwrapExpr: {\n const { operation, error } = handleUnwrapExpr(expr, node, context);\n if (operation) {\n visQuery.operations.push(operation);\n }\n // Show error for query patterns not supported in visual query builder\n if (error) {\n context.errors.push(createNotSupportedError(expr, node, error));\n }\n\n break;\n }\n\n case Decolorize: {\n visQuery.operations.push(getDecolorize());\n break;\n }\n\n case RangeAggregationExpr: {\n visQuery.operations.push(handleRangeAggregation(expr, node, context));\n break;\n }\n\n case VectorAggregationExpr: {\n visQuery.operations.push(handleVectorAggregation(expr, node, context));\n break;\n }\n\n case BinOpExpr: {\n handleBinary(expr, node, context);\n break;\n }\n\n case ErrorId: {\n if (isIntervalVariableError(node)) {\n break;\n }\n context.errors.push(makeError(expr, node));\n break;\n }\n\n case DropLabelsExpr: {\n visQuery.operations.push(handleDropFilter(expr, node, context));\n break;\n }\n\n case KeepLabelsExpr: {\n visQuery.operations.push(handleKeepFilter(expr, node, context));\n break;\n }\n\n default: {\n // Any other nodes we just ignore and go to its children. This should be fine as there are lots of wrapper\n // nodes that can be skipped.\n // TODO: there are probably cases where we will just skip nodes we don't support and we should be able to\n // detect those and report back.\n let child = node.firstChild;\n while (child) {\n handleExpression(expr, child, context);\n child = child.nextSibling;\n }\n }\n }\n}\n\nfunction getLabel(expr: string, node: SyntaxNode): QueryBuilderLabelFilter {\n const labelNode = node.getChild(Identifier);\n const label = getString(expr, labelNode);\n const op = getString(expr, labelNode?.nextSibling);\n let value = getString(expr, node.getChild(String));\n // `value` is wrapped in double quotes, so we need to remove them. As a value can contain double quotes, we can't use RegEx here.\n value = value.substring(1, value.length - 1);\n\n return {\n label,\n op,\n value,\n };\n}\n\nfunction getLineFilter(expr: string, node: SyntaxNode): GetOperationResult {\n const filter = getString(expr, node.getChild(Filter));\n const filterExpr = handleQuotes(getString(expr, node.getChild(String)));\n const ipLineFilter = node.getChild(FilterOp)?.getChild(Ip);\n if (ipLineFilter) {\n return {\n operation: {\n id: LokiOperationId.LineFilterIpMatches,\n params: [filter, filterExpr],\n },\n };\n }\n\n const params = [filterExpr];\n let orFilter = node.getChild(OrFilter);\n while (orFilter) {\n params.push(handleQuotes(getString(expr, orFilter.getChild(String))));\n orFilter = orFilter.getChild(OrFilter);\n }\n\n const mapFilter: Record<string, LokiOperationId> = {\n '|=': LokiOperationId.LineContains,\n '!=': LokiOperationId.LineContainsNot,\n '|~': LokiOperationId.LineMatchesRegex,\n '!~': LokiOperationId.LineMatchesRegexNot,\n };\n\n return {\n operation: {\n id: mapFilter[filter],\n params,\n },\n };\n}\n\nfunction getLabelParser(expr: string, node: SyntaxNode): QueryBuilderOperation {\n const parserNode = node.firstChild;\n const parser = getString(expr, parserNode);\n\n const string = handleQuotes(getString(expr, node.getChild(String)));\n let params: QueryBuilderOperationParamValue[] = !!string ? [string] : [];\n const opDef = getDefinitionById(parser);\n if (opDef && !checkParamsAreValid(opDef, params)) {\n params = opDef?.defaultParams || [];\n }\n\n return {\n id: parser,\n params,\n };\n}\n\nfunction getJsonExpressionParser(expr: string, node: SyntaxNode): QueryBuilderOperation {\n const parserNode = node.getChild(Json);\n const parser = getString(expr, parserNode);\n\n const params = [...getAllByType(expr, node, LabelExtractionExpression)];\n return {\n id: parser,\n params,\n };\n}\n\nfunction getLogfmtParser(expr: string, node: SyntaxNode): GetOperationResult {\n const flags: string[] = [];\n const labels: string[] = [];\n let error: string | undefined = undefined;\n\n const offset = node.from;\n node.toTree().iterate({\n enter: (subNode) => {\n if (subNode.type.id === ParserFlag) {\n flags.push(expr.substring(subNode.from + offset, subNode.to + offset));\n } else if (subNode.type.id === LabelExtractionExpression) {\n labels.push(expr.substring(subNode.from + offset, subNode.to + offset));\n } else if (subNode.type.id === ErrorId) {\n error = `Unexpected string \"${expr.substring(subNode.from + offset, subNode.to + offset)}\"`;\n }\n },\n });\n\n const operation = {\n id: LokiOperationId.Logfmt,\n params: [flags.includes('--strict'), flags.includes('--keep-empty'), ...labels],\n };\n\n return {\n operation,\n error,\n };\n}\n\nfunction getLabelFilter(expr: string, node: SyntaxNode): GetOperationResult {\n // Check for nodes not supported in visual builder and return error\n if (node.getChild(Or) || node.getChild(And) || node.getChild('Comma')) {\n return {\n error: 'Label filter with comma, \"and\", \"or\" not supported in query builder',\n };\n }\n if (node.firstChild!.type.id === IpLabelFilter) {\n const ipLabelFilter = node.firstChild;\n const label = ipLabelFilter?.getChild(Identifier);\n const op = label?.nextSibling;\n const value = ipLabelFilter?.getChild(String);\n const valueString = handleQuotes(getString(expr, value));\n\n return {\n operation: {\n id: LokiOperationId.LabelFilterIpMatches,\n params: [getString(expr, label), getString(expr, op), valueString],\n },\n };\n }\n\n const id = LokiOperationId.LabelFilter;\n if (node.firstChild!.type.id === UnitFilter) {\n const filter = node.firstChild!.firstChild;\n const label = filter!.firstChild;\n const op = label!.nextSibling;\n const value = op!.nextSibling;\n const valueString = handleQuotes(getString(expr, value));\n\n return {\n operation: {\n id,\n params: [getString(expr, label), getString(expr, op), valueString],\n },\n };\n }\n // In this case it is Matcher or NumberFilter\n const filter = node.firstChild;\n const label = filter!.firstChild;\n const op = label!.nextSibling;\n const value = op!.nextSibling;\n const params = [getString(expr, label), getString(expr, op), handleQuotes(getString(expr, value))];\n\n // Special case of pipe filtering - no errors\n if (params.join('') === `__error__=`) {\n return {\n operation: {\n id: LokiOperationId.LabelFilterNoErrors,\n params: [],\n },\n };\n }\n\n return {\n operation: {\n id,\n params,\n },\n };\n}\n\nfunction getLineFormat(expr: string, node: SyntaxNode): QueryBuilderOperation {\n const id = LokiOperationId.LineFormat;\n const string = handleQuotes(getString(expr, node.getChild(String)));\n\n return {\n id,\n params: [string],\n };\n}\n\nfunction getLabelFormat(expr: string, node: SyntaxNode): QueryBuilderOperation {\n const id = LokiOperationId.LabelFormat;\n const renameTo = node.getChild(Identifier);\n const op = renameTo!.nextSibling;\n const originalLabel = op!.nextSibling;\n\n return {\n id,\n params: [getString(expr, originalLabel), handleQuotes(getString(expr, renameTo))],\n };\n}\n\nfunction getDecolorize(): QueryBuilderOperation {\n const id = LokiOperationId.Decolorize;\n\n return {\n id,\n params: [],\n };\n}\n\nfunction handleUnwrapExpr(expr: string, node: SyntaxNode, context: Context): GetOperationResult {\n const unwrapExprChild = node.getChild(UnwrapExpr);\n const labelFilterChild = node.getChild(LabelFilter);\n const unwrapChild = node.getChild(Unwrap);\n\n if (unwrapExprChild) {\n handleExpression(expr, unwrapExprChild, context);\n }\n\n if (labelFilterChild) {\n handleExpression(expr, labelFilterChild, context);\n }\n\n if (unwrapChild) {\n if (unwrapChild.nextSibling?.type.id === ConvOp) {\n const convOp = unwrapChild.nextSibling;\n const identifier = convOp.nextSibling;\n return {\n operation: {\n id: LokiOperationId.Unwrap,\n params: [getString(expr, identifier), getString(expr, convOp)],\n },\n };\n }\n\n return {\n operation: {\n id: LokiOperationId.Unwrap,\n params: [getString(expr, unwrapChild?.nextSibling), ''],\n },\n };\n }\n\n return {};\n}\n\nfunction handleRangeAggregation(expr: string, node: SyntaxNode, context: Context) {\n const nameNode = node.getChild(RangeOp);\n const funcName = getString(expr, nameNode);\n const number = node.getChild(NumberLezer);\n const logExpr = node.getChild(LogRangeExpr);\n const params = number !== null && number !== undefined ? [getString(expr, number)] : [];\n const range = logExpr?.getChild(Range);\n const rangeValue = range ? getString(expr, range) : null;\n const grouping = node.getChild(Grouping);\n\n if (rangeValue) {\n params.unshift(rangeValue.substring(1, rangeValue.length - 1));\n }\n\n if (grouping) {\n params.push(...getAllByType(expr, grouping, Identifier));\n }\n\n const op = {\n id: funcName,\n params,\n };\n\n if (logExpr) {\n handleExpression(expr, logExpr, context);\n }\n\n return op;\n}\n\nfunction handleVectorAggregation(expr: string, node: SyntaxNode, context: Context) {\n const nameNode = node.getChild(VectorOp);\n let funcName = getString(expr, nameNode);\n\n const grouping = node.getChild(Grouping);\n const params = [];\n\n const numberNode = node.getChild(NumberLezer);\n const errorNode = node.getChild(ErrorId)?.getChild(Identifier);\n\n if (numberNode) {\n params.push(Number(getString(expr, numberNode)));\n } else if (errorNode) {\n // Variables get parsed as errors, so the value us an identifier within an error node.\n params.push(getString(expr, errorNode));\n }\n\n if (grouping) {\n const byModifier = grouping.getChild(By);\n if (byModifier && funcName) {\n funcName = `__${funcName}_by`;\n }\n\n const withoutModifier = grouping.getChild(Without);\n if (withoutModifier) {\n funcName = `__${funcName}_without`;\n }\n\n params.push(...getAllByType(expr, grouping, Identifier));\n }\n\n const metricExpr = node.getChild(MetricExpr);\n const op: QueryBuilderOperation = { id: funcName, params };\n\n if (metricExpr) {\n // A vector aggregation expression with a child of metric expression with a child of binary expression is ambiguous after being parsed into a visual query\n if (metricExpr.firstChild?.type.id === BinOpExpr) {\n context.errors.push({\n text: 'Query parsing is ambiguous.',\n from: metricExpr.firstChild.from,\n to: metricExpr.firstChild?.to,\n });\n }\n\n handleExpression(expr, metricExpr, context);\n }\n\n return op;\n}\n\nconst operatorToOpName = binaryScalarDefs.reduce<Record<string, { id: string; comparison?: boolean }>>((acc, def) => {\n acc[def.sign] = {\n id: def.id,\n comparison: def.comparison,\n };\n return acc;\n}, {});\n\n/**\n * Right now binary expressions can be represented in 2 way in visual query. As additional operation in case it is\n * just operation with scalar or it creates a binaryQuery when it's 2 queries.\n * @param expr\n * @param node\n * @param context\n */\nfunction handleBinary(expr: string, node: SyntaxNode, context: Context) {\n const visQuery = context.query;\n const left = node.firstChild!;\n const op = getString(expr, left.nextSibling);\n const binModifier = getBinaryModifier(expr, node.getChild(BinOpModifier));\n\n const right = node.lastChild!;\n\n const opDef = operatorToOpName[op];\n\n const leftNumber = getLastChildWithSelector(left, 'MetricExpr.LiteralExpr.Number');\n const rightNumber = getLastChildWithSelector(right, 'MetricExpr.LiteralExpr.Number');\n\n const rightBinary = right.getChild(BinOpExpr);\n\n if (leftNumber) {\n // TODO: this should be already handled in case parent is binary expression as it has to be added to parent\n // if query starts with a number that isn't handled now.\n } else {\n // If this is binary we don't really know if there is a query or just chained scalars. So\n // we have to traverse a bit deeper to know\n handleExpression(expr, left, context);\n }\n\n if (rightNumber) {\n visQuery.operations.push(makeBinOp(opDef, expr, right, !!binModifier?.isBool));\n } else if (rightBinary) {\n // Due to the way binary ops are parsed we can get a binary operation on the right that starts with a number which\n // is a factor for a current binary operation. So we have to add it as an operation now.\n const leftMostChild = getLeftMostChild(right);\n if (leftMostChild?.type.id === NumberLezer) {\n visQuery.operations.push(makeBinOp(opDef, expr, leftMostChild, !!binModifier?.isBool));\n }\n\n // If we added the first number literal as operation here we still can continue and handle the rest as the first\n // number will be just skipped.\n handleExpression(expr, right, context);\n } else {\n visQuery.binaryQueries = visQuery.binaryQueries || [];\n const binQuery: LokiVisualQueryBinary = {\n operator: op,\n query: {\n labels: [],\n operations: [],\n },\n };\n if (binModifier?.isMatcher) {\n binQuery.vectorMatchesType = binModifier.matchType;\n binQuery.vectorMatches = binModifier.matches;\n }\n visQuery.binaryQueries.push(binQuery);\n handleExpression(expr, right, {\n query: binQuery.query,\n errors: context.errors,\n });\n }\n}\n\nfunction getBinaryModifier(\n expr: string,\n node: SyntaxNode | null\n):\n | { isBool: true; isMatcher: false }\n | { isBool: boolean; isMatcher: true; matches: string; matchType: 'ignoring' | 'on' }\n | undefined {\n if (!node) {\n return undefined;\n }\n const matcher = node.getChild(OnOrIgnoringModifier);\n const boolMatcher = node.getChild(Bool);\n\n if (!matcher && boolMatcher) {\n return { isBool: true, isMatcher: false };\n } else {\n if (!matcher) {\n // Not sure what this could be, maybe should be an error.\n return undefined;\n }\n const labels = getString(expr, matcher.getChild(GroupingLabels)?.getChild(GroupingLabelList));\n return {\n isMatcher: true,\n isBool: !!boolMatcher,\n matches: labels,\n matchType: matcher.getChild(On) ? 'on' : 'ignoring',\n };\n }\n}\n\nfunction isIntervalVariableError(node: SyntaxNode) {\n return node?.parent?.type.id === Range;\n}\n\nexport function handleQuotes(string: string) {\n if (string[0] === `\"` && string[string.length - 1] === `\"`) {\n return string\n .substring(1, string.length - 1)\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\');\n }\n return string.replace(/`/g, '');\n}\n\n/**\n * Simple helper to traverse the syntax tree. Instead of node.getChild('foo')?.getChild('bar')?.getChild('baz') you\n * can write getChildWithSelector(node, 'foo.bar.baz')\n * @param node\n * @param selector\n */\nfunction getLastChildWithSelector(node: SyntaxNode, selector: string) {\n let child: SyntaxNode | null = node;\n const children = selector.split('.');\n for (const s of children) {\n child = child.getChild(s);\n if (!child) {\n return null;\n }\n }\n return child;\n}\n\n/**\n * Helper function to enrich error text with information that visual query builder doesn't support that logQL\n * @param expr\n * @param node\n * @param error\n */\nfunction createNotSupportedError(expr: string, node: SyntaxNode, error: string) {\n const err = makeError(expr, node);\n err.text = `${error}: ${err.text}`;\n return err;\n}\n\nfunction isEmptyQuery(query: LokiVisualQuery) {\n if (query.labels.length === 0 && query.operations.length === 0) {\n return true;\n }\n return false;\n}\n\nfunction handleDropFilter(expr: string, node: SyntaxNode, context: Context): QueryBuilderOperation {\n const labels: string[] = [];\n let exploringNode = node.getChild(DropLabels);\n while (exploringNode) {\n const label = getString(expr, exploringNode.getChild(DropLabel));\n if (label) {\n labels.push(label);\n }\n exploringNode = exploringNode?.getChild(DropLabels);\n }\n labels.reverse();\n return {\n id: LokiOperationId.Drop,\n params: labels,\n };\n}\n\nfunction handleKeepFilter(expr: string, node: SyntaxNode, context: Context): QueryBuilderOperation {\n const labels: string[] = [];\n let exploringNode = node.getChild(KeepLabels);\n while (exploringNode) {\n const label = getString(expr, exploringNode.getChild(KeepLabel));\n if (label) {\n labels.push(label);\n }\n exploringNode = exploringNode?.getChild(KeepLabels);\n }\n labels.reverse();\n return {\n id: LokiOperationId.Keep,\n params: labels,\n };\n}\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","import { Registry } from '@grafana/data';\nimport { BINARY_OPERATIONS_KEY } from './types.js';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nclass QueryModellerBase {\n constructor(operationDefinitions, innerQueryPlaceholder) {\n __publicField(this, \"operationsRegistry\");\n __publicField(this, \"categories\", []);\n __publicField(this, \"innerQueryPlaceholder\");\n this.operationsRegistry = new Registry(() => operationDefinitions);\n this.innerQueryPlaceholder = innerQueryPlaceholder || \"<query>\";\n }\n setOperationCategories(categories) {\n this.categories = categories;\n }\n getOperationsForCategory(category) {\n return this.operationsRegistry.list().filter((op) => op.category === category && !op.hideFromList);\n }\n getAlternativeOperations(key) {\n return this.operationsRegistry.list().filter((op) => op.alternativesKey && op.alternativesKey === key);\n }\n getCategories() {\n return this.categories;\n }\n getOperationDefinition(id) {\n return this.operationsRegistry.getIfExists(id);\n }\n hasBinaryOp(query) {\n return query.operations.find((op) => {\n const def = this.getOperationDefinition(op.id);\n return (def == null ? undefined : def.category) === BINARY_OPERATIONS_KEY;\n }) !== undefined;\n }\n}\n\nexport { QueryModellerBase };\n//# sourceMappingURL=QueryModellerBase.js.map\n","import {\n QueryModellerBase,\n QueryBuilderLabelFilter,\n VisualQuery,\n QueryBuilderOperation,\n VisualQueryBinary,\n} from '@grafana/plugin-ui';\n\nimport { operationDefinitions } from './operations';\nimport { LokiOperationId, LokiQueryPattern, LokiQueryPatternType, LokiVisualQueryOperationCategory } from './types';\n\nexport class LokiQueryModeller extends QueryModellerBase {\n constructor() {\n super(operationDefinitions, '<expr>');\n\n this.setOperationCategories([\n LokiVisualQueryOperationCategory.Aggregations,\n LokiVisualQueryOperationCategory.RangeFunctions,\n LokiVisualQueryOperationCategory.Formats,\n LokiVisualQueryOperationCategory.BinaryOps,\n LokiVisualQueryOperationCategory.LabelFilters,\n LokiVisualQueryOperationCategory.LineFilters,\n ]);\n }\n\n renderOperations(queryString: string, operations: QueryBuilderOperation[]): string {\n for (const operation of operations) {\n if (operation.disabled) {\n continue;\n }\n const def = this.operationsRegistry.getIfExists(operation.id);\n if (!def) {\n console.error(`Could not find operation ${operation.id} in the registry`);\n continue;\n }\n queryString = def.renderer(operation, def, queryString);\n }\n return queryString;\n }\n\n renderBinaryQueries(queryString: string, binaryQueries?: Array<VisualQueryBinary<VisualQuery>>) {\n if (binaryQueries) {\n for (const binQuery of binaryQueries) {\n queryString = `${this.renderBinaryQuery(queryString, binQuery)}`;\n }\n }\n return queryString;\n }\n\n private renderBinaryQuery(leftOperand: string, binaryQuery: VisualQueryBinary<VisualQuery>) {\n let result = leftOperand + ` ${binaryQuery.operator} `;\n\n if (binaryQuery.vectorMatches) {\n result += `${binaryQuery.vectorMatchesType}(${binaryQuery.vectorMatches}) `;\n }\n\n return result + this.renderQuery(binaryQuery.query, true);\n }\n\n renderLabels(labels: QueryBuilderLabelFilter[]): string {\n if (labels.length === 0) {\n return '{}';\n }\n\n let expr = '{';\n for (const filter of labels) {\n if (expr !== '{') {\n expr += ', ';\n }\n\n expr += `${filter.label}${filter.op}\"${filter.value}\"`;\n }\n\n return expr + `}`;\n }\n\n renderQuery(query: VisualQuery, nested?: boolean): string {\n let queryString = this.renderLabels(query.labels);\n queryString = this.renderOperations(queryString, query.operations);\n\n if (!nested && this.hasBinaryOp(query) && Boolean(query.binaryQueries?.length)) {\n queryString = `(${queryString})`;\n }\n\n queryString = this.renderBinaryQueries(queryString, query.binaryQueries);\n\n return queryString;\n }\n\n getQueryPatterns(): LokiQueryPattern[] {\n return [\n {\n name: 'Parse log lines with logfmt parser',\n type: LokiQueryPatternType.Log,\n // {} | logfmt | __error__=``\n operations: [\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n ],\n },\n {\n name: 'Parse log lines with JSON parser',\n type: LokiQueryPatternType.Log,\n // {} | json | __error__=``\n operations: [\n { id: LokiOperationId.Json, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n ],\n },\n {\n name: 'Filter log line and parse with logfmt parser',\n type: LokiQueryPatternType.Log,\n // {} |= `` | logfmt | __error__=``\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n ],\n },\n {\n name: 'Filter log lines and parse with json parser',\n type: LokiQueryPatternType.Log,\n // {} |= `` | json | __error__=``\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Json, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n ],\n },\n {\n name: 'Parse log line with logfmt parser and use label filter',\n type: LokiQueryPatternType.Log,\n // {} |= `` | logfmt | __error__=`` | label=`value`\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.LabelFilter, params: ['label', '=', 'value'] },\n ],\n },\n {\n name: 'Parse log lines with nested json',\n type: LokiQueryPatternType.Log,\n // {} |= `` | json | line_format `{{ .message}}` | json\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Json, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.LineFormat, params: ['{{.message}}'] },\n { id: LokiOperationId.Json, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n ],\n },\n {\n name: 'Reformat log lines',\n type: LokiQueryPatternType.Log,\n // {} |= `` | logfmt | line_format `{{.message}}`\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.LineFormat, params: ['{{.message}}'] },\n ],\n },\n {\n name: 'Rename lvl label to level',\n type: LokiQueryPatternType.Log,\n // {} |= `` | logfmt | label_format level=lvl\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.LabelFormat, params: ['lvl', 'level'] },\n ],\n },\n {\n name: 'Query on value inside a log line',\n type: LokiQueryPatternType.Metric,\n // sum(sum_over_time({ | logfmt | __error__=`` | unwrap | __error__=`` [$__auto]))\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.Unwrap, params: [''] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.SumOverTime, params: ['$__auto'] },\n { id: LokiOperationId.Sum, params: [] },\n ],\n },\n {\n name: 'Total requests per label of streams',\n type: LokiQueryPatternType.Metric,\n // sum by() (count_over_time({}[$__auto)\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.CountOverTime, params: ['$__auto'] },\n { id: LokiOperationId.Sum, params: [] },\n ],\n },\n {\n name: 'Total requests per parsed label or label of streams',\n type: LokiQueryPatternType.Metric,\n // sum by() (count_over_time({}| logfmt | __error__=`` [$__auto))\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.CountOverTime, params: ['$__auto'] },\n { id: LokiOperationId.Sum, params: [] },\n ],\n },\n {\n name: 'Bytes used by a log stream',\n type: LokiQueryPatternType.Metric,\n // bytes_over_time({}[$__auto])\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.BytesOverTime, params: ['$__auto'] },\n ],\n },\n {\n name: 'Count of log lines per stream',\n type: LokiQueryPatternType.Metric,\n // count_over_time({}[$__auto])\n operations: [\n { id: LokiOperationId.LineContains, params: [''] },\n { id: LokiOperationId.CountOverTime, params: ['$__auto'] },\n ],\n },\n {\n name: 'Top N results by label or parsed label',\n type: LokiQueryPatternType.Metric,\n // topk(10, sum by () (count_over_time({} | logfmt | __error__=`` [$__auto])))\n operations: [\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.CountOverTime, params: ['$__auto'] },\n { id: LokiOperationId.Sum, params: [] },\n { id: LokiOperationId.TopK, params: [10] },\n ],\n },\n {\n name: 'Extracted quantile',\n type: LokiQueryPatternType.Metric,\n // quantile_over_time(0.5,{} | logfmt | unwrap latency[$__auto]) by ()\n operations: [\n { id: LokiOperationId.Logfmt, params: [] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.Unwrap, params: ['latency'] },\n { id: LokiOperationId.LabelFilterNoErrors, params: [] },\n { id: LokiOperationId.QuantileOverTime, params: ['$__auto', 0.5] },\n { id: LokiOperationId.Sum, params: [] },\n ],\n },\n ];\n }\n}\n\nexport const lokiQueryModeller = new LokiQueryModeller();\n","import { useState } from 'react';\n\nimport { DataSourceApi, SelectableValue, getDefaultTimeRange, toOption } from '@grafana/data';\nimport { QueryBuilderOperationParamEditorProps, VisualQueryModeller } from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\nimport { extractUnwrapLabelKeysFromDataFrame } from '../../responseUtils';\nimport { getOperationParamId } from '../operationUtils';\nimport { LokiVisualQuery } from '../types';\n\nexport function UnwrapParamEditor({\n onChange,\n index,\n operationId,\n value,\n query,\n datasource,\n timeRange,\n queryModeller,\n}: QueryBuilderOperationParamEditorProps) {\n const [state, setState] = useState<{\n options?: Array<SelectableValue<string>>;\n isLoading?: boolean;\n }>({});\n\n return (\n <Select\n inputId={getOperationParamId(operationId, index)}\n onOpenMenu={async () => {\n // This check is always true, we do it to make typescript happy\n setState({ isLoading: true });\n const options = await loadUnwrapOptions(query, datasource, queryModeller, timeRange);\n setState({ options, isLoading: undefined });\n }}\n isLoading={state.isLoading}\n allowCustomValue\n noOptionsMessage=\"No labels found\"\n loadingMessage=\"Loading labels\"\n options={state.options}\n value={value ? toOption(value.toString()) : null}\n onChange={(value) => {\n if (value.value) {\n onChange(index, value.value);\n }\n }}\n />\n );\n}\n\nasync function loadUnwrapOptions(\n query: LokiVisualQuery,\n datasource: DataSourceApi,\n queryModeller: VisualQueryModeller,\n timeRange = getDefaultTimeRange()\n): Promise<Array<SelectableValue<string>>> {\n const queryExpr = queryModeller.renderQuery(query);\n if (!('getDataSamples' in datasource) || typeof datasource.getDataSamples !== 'function') {\n return [];\n }\n // the query is a metric query, we need to set metricQueryToLogConversion to true to getSamples use the log query\n const samples = await datasource.getDataSamples({ expr: queryExpr, refId: 'unwrap_samples' }, timeRange, {\n convertMetricQueryToLogQuery: true,\n });\n const unwrapLabels = extractUnwrapLabelKeysFromDataFrame(samples[0]);\n\n const labelOptions = unwrapLabels.map((label) => ({\n label,\n value: label,\n }));\n\n return labelOptions;\n}\n","import { QueryBuilderOperationDefinition, QueryBuilderOperationParamValue } from '@grafana/plugin-ui';\n\nimport { binaryScalarOperations } from './binaryScalarOperations';\nimport { UnwrapParamEditor } from './components/UnwrapParamEditor';\nimport {\n addLokiOperation,\n addNestedQueryHandler,\n createAggregationOperation,\n createAggregationOperationWithParam,\n createRangeOperation,\n createRangeOperationWithGrouping,\n getLineFilterRenderer,\n labelFilterRenderer,\n pipelineRenderer,\n} from './operationUtils';\nimport { LokiOperationId, LokiOperationOrder, lokiOperators, LokiVisualQueryOperationCategory } from './types';\n\nfunction getOperationDefinitions(): QueryBuilderOperationDefinition[] {\n const aggregations = [\n LokiOperationId.Sum,\n LokiOperationId.Min,\n LokiOperationId.Max,\n LokiOperationId.Avg,\n LokiOperationId.Stddev,\n LokiOperationId.Stdvar,\n LokiOperationId.Count,\n ].flatMap((opId) =>\n createAggregationOperation(opId, {\n addOperationHandler: addLokiOperation,\n orderRank: LokiOperationOrder.Last,\n })\n );\n\n const aggregationsWithParam = [LokiOperationId.TopK, LokiOperationId.BottomK].flatMap((opId) => {\n return createAggregationOperationWithParam(\n opId,\n {\n params: [{ name: 'K-value', type: 'number' }],\n defaultParams: [5],\n },\n {\n addOperationHandler: addLokiOperation,\n orderRank: LokiOperationOrder.Last,\n }\n );\n });\n\n const rangeOperations = [\n createRangeOperation(LokiOperationId.Rate),\n createRangeOperation(LokiOperationId.RateCounter),\n createRangeOperation(LokiOperationId.CountOverTime),\n createRangeOperation(LokiOperationId.SumOverTime),\n createRangeOperation(LokiOperationId.BytesRate),\n createRangeOperation(LokiOperationId.BytesOverTime),\n createRangeOperation(LokiOperationId.AbsentOverTime),\n ];\n\n const rangeOperationsWithGrouping = [\n ...createRangeOperationWithGrouping(LokiOperationId.AvgOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.MaxOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.MinOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.FirstOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.LastOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.StdvarOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.StddevOverTime),\n ...createRangeOperationWithGrouping(LokiOperationId.QuantileOverTime),\n ];\n\n const list: QueryBuilderOperationDefinition[] = [\n ...aggregations,\n ...aggregationsWithParam,\n ...rangeOperations,\n ...rangeOperationsWithGrouping,\n {\n id: LokiOperationId.Json,\n name: 'Json',\n params: [\n {\n name: 'Expression',\n type: 'string',\n restParam: true,\n optional: true,\n minWidth: 18,\n placeholder: 'server=\"servers[0]\"',\n description:\n 'Using expressions with your json parser will extract only the specified json fields to labels. You can specify one or more expressions in this way. All expressions must be quoted.',\n },\n ],\n defaultParams: [],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Parsers,\n renderer: pipelineRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `This will extract keys and values from a [json](https://grafana.com/docs/loki/latest/logql/log_queries/#json) formatted log line as labels. The extracted labels can be used in label filter expressions and used as values for a range aggregation via the unwrap operation.`,\n },\n {\n id: LokiOperationId.Logfmt,\n name: 'Logfmt',\n params: [\n {\n name: 'Strict',\n type: 'boolean',\n optional: true,\n description:\n 'With strict parsing enabled, the logfmt parser immediately stops scanning the log line and returns early with an error when it encounters any poorly formatted key/value pair.',\n },\n {\n name: 'Keep empty',\n type: 'boolean',\n optional: true,\n description:\n 'The logfmt parser retains standalone keys (keys without a value) as labels with its value set to empty string. ',\n },\n {\n name: 'Expression',\n type: 'string',\n optional: true,\n restParam: true,\n minWidth: 18,\n placeholder: 'field_name',\n description:\n 'Using expressions with your logfmt parser will extract and rename (if provided) only the specified fields to labels. You can specify one or more expressions in this way.',\n },\n ],\n defaultParams: [false, false],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Parsers,\n renderer: pipelineRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `This will extract all keys and values from a [logfmt](https://grafana.com/docs/loki/latest/logql/log_queries/#logfmt) formatted log line as labels. The extracted labels can be used in label filter expressions and used as values for a range aggregation via the unwrap operation.`,\n },\n {\n id: LokiOperationId.Regexp,\n name: 'Regexp',\n params: [\n {\n name: 'String',\n type: 'string',\n hideName: true,\n placeholder: '<re>',\n description: 'The regexp expression that matches the structure of a log line.',\n minWidth: 20,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Parsers,\n renderer: (model, def, innerExpr) => `${innerExpr} | regexp \\`${model.params[0]}\\``,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `The [regexp parser](https://grafana.com/docs/loki/latest/logql/log_queries/#regular-expression) takes a single parameter | regexp \"<re>\" which is the regular expression using the Golang RE2 syntax. The regular expression must contain a least one named sub-match (e.g (?P<name>re)), each sub-match will extract a different label. The expression matches the structure of a log line. The extracted labels can be used in label filter expressions and used as values for a range aggregation via the unwrap operation.`,\n },\n {\n id: LokiOperationId.Pattern,\n name: 'Pattern',\n params: [\n {\n name: 'String',\n type: 'string',\n hideName: true,\n placeholder: '<pattern-expression>',\n description: 'The expression that matches the structure of a log line.',\n minWidth: 20,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Parsers,\n renderer: (model, def, innerExpr) => `${innerExpr} | pattern \\`${model.params[0]}\\``,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `The [pattern parser](https://grafana.com/docs/loki/latest/logql/log_queries/#pattern) allows the explicit extraction of fields from log lines by defining a pattern expression (| pattern \\`<pattern-expression>\\`). The expression matches the structure of a log line. The extracted labels can be used in label filter expressions and used as values for a range aggregation via the unwrap operation.`,\n },\n {\n id: LokiOperationId.Unpack,\n name: 'Unpack',\n params: [],\n defaultParams: [],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Parsers,\n renderer: pipelineRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `This will extract all keys and values from a JSON log line, [unpacking](https://grafana.com/docs/loki/latest/logql/log_queries/#unpack) all embedded labels in the pack stage. The extracted labels can be used in label filter expressions and used as values for a range aggregation via the unwrap operation.`,\n },\n {\n id: LokiOperationId.LineFormat,\n name: 'Line format',\n params: [\n {\n name: 'String',\n type: 'string',\n hideName: true,\n placeholder: '{{.status_code}}',\n description: 'A line template that can refer to stream labels and extracted labels.',\n minWidth: 20,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: (model, def, innerExpr) => `${innerExpr} | line_format \\`${model.params[0]}\\``,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `This will replace log line using a specified template. The template can refer to stream labels and extracted labels.\n\nExample: \\`{{.status_code}} - {{.message}}\\`\n\n[Read the docs](https://grafana.com/docs/loki/latest/logql/log_queries/#line-format-expression) for more.\n `,\n },\n {\n id: LokiOperationId.LabelFormat,\n name: 'Label format',\n params: [\n { name: 'Label', type: 'string' },\n { name: 'Rename to', type: 'string' },\n ],\n defaultParams: ['', ''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: (model, def, innerExpr) => `${innerExpr} | label_format ${model.params[1]}=${model.params[0]}`,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n `This will change name of label to desired new label. In the example below, label \"error_level\" will be renamed to \"level\".\n\nExample: \\`\\`error_level=\\`level\\` \\`\\`\n\n[Read the docs](https://grafana.com/docs/loki/latest/logql/log_queries/#labels-format-expression) for more.\n `,\n },\n\n {\n id: LokiOperationId.LineContains,\n name: 'Line contains',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Text to find',\n description: 'Find log lines that contains this text',\n minWidth: 20,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('|='),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines that contain string \\`${op.params?.join('`, or `')}\\`.`,\n },\n {\n id: LokiOperationId.LineContainsNot,\n name: 'Line does not contain',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Text to exclude',\n description: 'Find log lines that does not contain this text',\n minWidth: 26,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('!='),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines that does not contain string \\`${op.params?.join('`, or `')}\\`.`,\n },\n {\n id: LokiOperationId.LineContainsCaseInsensitive,\n name: 'Line contains case insensitive',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Text to find',\n description: 'Find log lines that contains this text',\n minWidth: 33,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('|~', true),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines that match regex \\`(?i)${op.params?.join('`, or `(?i)')}\\`.`,\n },\n {\n id: LokiOperationId.LineContainsNotCaseInsensitive,\n name: 'Line does not contain case insensitive',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Text to exclude',\n description: 'Find log lines that does not contain this text',\n minWidth: 40,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('!~', true),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines that does not match regex \\`(?i)${op.params?.join('`, or `(?i)')}\\`.`,\n },\n {\n id: LokiOperationId.LineMatchesRegex,\n name: 'Line contains regex match',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Pattern to match',\n description: 'Find log lines that match this regex pattern',\n minWidth: 30,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('|~'),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines that match a \\`RE2\\` regex pattern. \\`${op.params?.join('`, or `')}\\`.`,\n },\n {\n id: LokiOperationId.LineMatchesRegexNot,\n name: 'Line does not match regex',\n params: [\n {\n name: '',\n type: 'string',\n hideName: true,\n restParam: true,\n placeholder: 'Pattern to exclude',\n description: 'Find log lines that does not match this regex pattern',\n minWidth: 30,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: getLineFilterRenderer('!~'),\n addOperationHandler: addLokiOperation,\n explainHandler: (op) =>\n `Return log lines that doesn't match a \\`RE2\\` regex pattern. \\`${op.params?.join('`, or `')}\\`.`,\n },\n {\n id: LokiOperationId.LineFilterIpMatches,\n name: 'IP line filter expression',\n params: [\n {\n name: 'Operator',\n type: 'string',\n minWidth: 16,\n options: [lokiOperators.contains, lokiOperators.doesNotContain],\n },\n {\n name: 'Pattern',\n type: 'string',\n placeholder: '<pattern>',\n minWidth: 16,\n runQueryOnEnter: true,\n },\n ],\n defaultParams: ['|=', ''],\n toggleable: true,\n alternativesKey: 'line filter',\n category: LokiVisualQueryOperationCategory.LineFilters,\n orderRank: LokiOperationOrder.LineFilters,\n renderer: (op, def, innerExpr) => `${innerExpr} ${op.params[0]} ip(\\`${op.params[1]}\\`)`,\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines using IP matching of \\`${op.params[1]}\\``,\n },\n {\n id: LokiOperationId.LabelFilter,\n name: 'Label filter expression',\n params: [\n { name: 'Label', type: 'string', minWidth: 14 },\n {\n name: 'Operator',\n type: 'string',\n minWidth: 14,\n options: [\n lokiOperators.equals,\n lokiOperators.doesNotEqual,\n lokiOperators.matchesRegex,\n lokiOperators.doesNotMatchRegex,\n lokiOperators.greaterThan,\n lokiOperators.lessThan,\n lokiOperators.greaterThanOrEqual,\n lokiOperators.lessThanOrEqual,\n ],\n },\n { name: 'Value', type: 'string', minWidth: 14 },\n ],\n defaultParams: ['', '=', ''],\n toggleable: true,\n alternativesKey: 'label filter',\n category: LokiVisualQueryOperationCategory.LabelFilters,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: labelFilterRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () => `Label expression filter allows filtering using original and extracted labels.`,\n },\n {\n id: LokiOperationId.LabelFilterIpMatches,\n name: 'IP label filter expression',\n params: [\n { name: 'Label', type: 'string', minWidth: 14 },\n {\n name: 'Operator',\n type: 'string',\n minWidth: 14,\n options: [lokiOperators.equals, lokiOperators.doesNotEqual],\n },\n { name: 'Value', type: 'string', minWidth: 14 },\n ],\n defaultParams: ['', '=', ''],\n toggleable: true,\n alternativesKey: 'label filter',\n category: LokiVisualQueryOperationCategory.LabelFilters,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: (model, def, innerExpr) =>\n `${innerExpr} | ${model.params[0]} ${model.params[1]} ip(\\`${model.params[2]}\\`)`,\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => `Return log lines using IP matching of \\`${op.params[2]}\\` for \\`${op.params[0]}\\` label`,\n },\n {\n id: LokiOperationId.LabelFilterNoErrors,\n name: 'No pipeline errors',\n params: [],\n defaultParams: [],\n toggleable: true,\n alternativesKey: 'label filter',\n category: LokiVisualQueryOperationCategory.LabelFilters,\n orderRank: LokiOperationOrder.NoErrors,\n renderer: (model, def, innerExpr) => `${innerExpr} | __error__=\\`\\``,\n addOperationHandler: addLokiOperation,\n explainHandler: () => `Filter out all formatting and parsing errors.`,\n },\n {\n id: LokiOperationId.Unwrap,\n name: 'Unwrap',\n params: [\n {\n name: 'Identifier',\n type: 'string',\n hideName: true,\n minWidth: 16,\n placeholder: 'Label key',\n editor: UnwrapParamEditor,\n },\n {\n name: 'Conversion function',\n hideName: true,\n type: 'string',\n options: ['duration', 'duration_seconds', 'bytes'],\n optional: true,\n },\n ],\n defaultParams: ['', ''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.Unwrap,\n renderer: (op, def, innerExpr) =>\n `${innerExpr} | unwrap ${op.params[1] ? `${op.params[1]}(${op.params[0]})` : op.params[0]}`,\n addOperationHandler: addLokiOperation,\n explainHandler: (op) => {\n let label = String(op.params[0]).length > 0 ? op.params[0] : '<label>';\n return `Use the extracted label \\`${label}\\` as sample values instead of log lines for the subsequent range aggregation.${\n op.params[1]\n ? ` Conversion function \\`${op.params[1]}\\` wrapping \\`${label}\\` will attempt to convert this label from a specific format (e.g. 3k, 500ms).`\n : ''\n }`;\n },\n },\n {\n id: LokiOperationId.Decolorize,\n name: 'Decolorize',\n params: [],\n defaultParams: [],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: (op, def, innerExpr) => `${innerExpr} | decolorize`,\n addOperationHandler: addLokiOperation,\n explainHandler: () => `This will remove ANSI color codes from log lines.`,\n },\n {\n id: LokiOperationId.Drop,\n name: 'Drop',\n params: [\n // As drop can support both labels (e.g. job) and expressions (e.g. job=\"grafana\"), we\n // use input and not LabelParamEditor.\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n minWidth: 18,\n placeholder: 'job=\"grafana\"',\n description: 'Specify labels or expressions to drop.',\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: pipelineRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () => 'The drop expression will drop the given labels in the pipeline.',\n },\n {\n id: LokiOperationId.Keep,\n name: 'Keep',\n params: [\n // As keep can support both labels (e.g. job) and expressions (e.g. job=\"grafana\"), we\n // use input and not LabelParamEditor.\n {\n name: 'Label',\n type: 'string',\n restParam: true,\n optional: true,\n minWidth: 18,\n placeholder: 'job=\"grafana\"',\n description: 'Specify labels or expressions to keep.',\n },\n ],\n defaultParams: [''],\n toggleable: true,\n alternativesKey: 'format',\n category: LokiVisualQueryOperationCategory.Formats,\n orderRank: LokiOperationOrder.PipeOperations,\n renderer: pipelineRenderer,\n addOperationHandler: addLokiOperation,\n explainHandler: () =>\n 'The keep expression will keep only the specified labels in the pipeline and drop all the other labels.',\n },\n ...binaryScalarOperations,\n {\n id: LokiOperationId.NestedQuery,\n name: 'Binary operation with query',\n params: [],\n defaultParams: [],\n toggleable: true,\n category: LokiVisualQueryOperationCategory.BinaryOps,\n renderer: (model, def, innerExpr) => innerExpr,\n addOperationHandler: addNestedQueryHandler,\n },\n ];\n\n return list;\n}\n\n// Keeping a local copy as an optimization measure.\nexport const operationDefinitions = getOperationDefinitions();\n\n/**\n * Given an operator, return the corresponding explain.\n * For usage within the Query Editor.\n */\nexport function explainOperator(id: LokiOperationId | string): string {\n const definition = operationDefinitions.find((operation) => operation.id === id);\n\n const explain = definition?.explainHandler?.({ id: '', params: ['<value>'] }) || '';\n\n // Strip markdown links\n return explain.replace(/\\[(.*)\\]\\(.*\\)/g, '$1');\n}\n\nexport function getDefinitionById(id: string): QueryBuilderOperationDefinition | undefined {\n return operationDefinitions.find((x) => x.id === id);\n}\n\nexport function checkParamsAreValid(\n def: QueryBuilderOperationDefinition,\n params: QueryBuilderOperationParamValue[]\n): boolean {\n // For now we only check if the operation has all the required params.\n if (params.length < def.params.filter((param) => !param.optional).length) {\n return false;\n }\n\n return true;\n}\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\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 isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _Formatter = _interopRequireDefault(require(\"../core/Formatter\"));\n\nvar _Tokenizer = _interopRequireDefault(require(\"../core/Tokenizer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar reservedWords = ['ABS', 'ACTIVATE', 'ALIAS', 'ALL', 'ALLOCATE', 'ALLOW', 'ALTER', 'ANY', 'ARE', 'ARRAY', 'AS', 'ASC', 'ASENSITIVE', 'ASSOCIATE', 'ASUTIME', 'ASYMMETRIC', 'AT', 'ATOMIC', 'ATTRIBUTES', 'AUDIT', 'AUTHORIZATION', 'AUX', 'AUXILIARY', 'AVG', 'BEFORE', 'BEGIN', 'BETWEEN', 'BIGINT', 'BINARY', 'BLOB', 'BOOLEAN', 'BOTH', 'BUFFERPOOL', 'BY', 'CACHE', 'CALL', 'CALLED', 'CAPTURE', 'CARDINALITY', 'CASCADED', 'CASE', 'CAST', 'CCSID', 'CEIL', 'CEILING', 'CHAR', 'CHARACTER', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHECK', 'CLOB', 'CLONE', 'CLOSE', 'CLUSTER', 'COALESCE', 'COLLATE', 'COLLECT', 'COLLECTION', 'COLLID', 'COLUMN', 'COMMENT', 'COMMIT', 'CONCAT', 'CONDITION', 'CONNECT', 'CONNECTION', 'CONSTRAINT', 'CONTAINS', 'CONTINUE', 'CONVERT', 'CORR', 'CORRESPONDING', 'COUNT', 'COUNT_BIG', 'COVAR_POP', 'COVAR_SAMP', 'CREATE', 'CROSS', 'CUBE', 'CUME_DIST', 'CURRENT', 'CURRENT_DATE', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_LC_CTYPE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_SERVER', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_TIMEZONE', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURRENT_USER', 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATAPARTITIONNAME', 'DATAPARTITIONNUM', 'DATE', 'DAY', 'DAYS', 'DB2GENERAL', 'DB2GENRL', 'DB2SQL', 'DBINFO', 'DBPARTITIONNAME', 'DBPARTITIONNUM', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFAULTS', 'DEFINITION', 'DELETE', 'DENSERANK', 'DENSE_RANK', 'DEREF', 'DESCRIBE', 'DESCRIPTOR', 'DETERMINISTIC', 'DIAGNOSTICS', 'DISABLE', 'DISALLOW', 'DISCONNECT', 'DISTINCT', 'DO', 'DOCUMENT', 'DOUBLE', 'DROP', 'DSSIZE', 'DYNAMIC', 'EACH', 'EDITPROC', 'ELEMENT', 'ELSE', 'ELSEIF', 'ENABLE', 'ENCODING', 'ENCRYPTION', 'END', 'END-EXEC', 'ENDING', 'ERASE', 'ESCAPE', 'EVERY', 'EXCEPTION', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXECUTE', 'EXISTS', 'EXIT', 'EXP', 'EXPLAIN', 'EXTENDED', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FENCED', 'FETCH', 'FIELDPROC', 'FILE', 'FILTER', 'FINAL', 'FIRST', 'FLOAT', 'FLOOR', 'FOR', 'FOREIGN', 'FREE', 'FULL', 'FUNCTION', 'FUSION', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GRAPHIC', 'GROUP', 'GROUPING', 'HANDLER', 'HASH', 'HASHED_VALUE', 'HINT', 'HOLD', 'HOUR', 'HOURS', 'IDENTITY', 'IF', 'IMMEDIATE', 'IN', 'INCLUDING', 'INCLUSIVE', 'INCREMENT', 'INDEX', 'INDICATOR', 'INDICATORS', 'INF', 'INFINITY', 'INHERIT', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT', 'INT', 'INTEGER', 'INTEGRITY', 'INTERSECTION', 'INTERVAL', 'INTO', 'IS', 'ISOBID', 'ISOLATION', 'ITERATE', 'JAR', 'JAVA', 'KEEP', 'KEY', 'LABEL', 'LANGUAGE', 'LARGE', 'LATERAL', 'LC_CTYPE', 'LEADING', 'LEAVE', 'LEFT', 'LIKE', 'LINKTYPE', 'LN', 'LOCAL', 'LOCALDATE', 'LOCALE', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'LOCATORS', 'LOCK', 'LOCKMAX', 'LOCKSIZE', 'LONG', 'LOOP', 'LOWER', 'MAINTAINED', 'MATCH', 'MATERIALIZED', 'MAX', 'MAXVALUE', 'MEMBER', 'MERGE', 'METHOD', 'MICROSECOND', 'MICROSECONDS', 'MIN', 'MINUTE', 'MINUTES', 'MINVALUE', 'MOD', 'MODE', 'MODIFIES', 'MODULE', 'MONTH', 'MONTHS', 'MULTISET', 'NAN', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEW_TABLE', 'NEXTVAL', 'NO', 'NOCACHE', 'NOCYCLE', 'NODENAME', 'NODENUMBER', 'NOMAXVALUE', 'NOMINVALUE', 'NONE', 'NOORDER', 'NORMALIZE', 'NORMALIZED', 'NOT', 'NULL', 'NULLIF', 'NULLS', 'NUMERIC', 'NUMPARTS', 'OBID', 'OCTET_LENGTH', 'OF', 'OFFSET', 'OLD', 'OLD_TABLE', 'ON', 'ONLY', 'OPEN', 'OPTIMIZATION', 'OPTIMIZE', 'OPTION', 'ORDER', 'OUT', 'OUTER', 'OVER', 'OVERLAPS', 'OVERLAY', 'OVERRIDING', 'PACKAGE', 'PADDED', 'PAGESIZE', 'PARAMETER', 'PART', 'PARTITION', 'PARTITIONED', 'PARTITIONING', 'PARTITIONS', 'PASSWORD', 'PATH', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'PIECESIZE', 'PLAN', 'POSITION', 'POWER', 'PRECISION', 'PREPARE', 'PREVVAL', 'PRIMARY', 'PRIQTY', 'PRIVILEGES', 'PROCEDURE', 'PROGRAM', 'PSID', 'PUBLIC', 'QUERY', 'QUERYNO', 'RANGE', 'RANK', 'READ', 'READS', 'REAL', 'RECOVERY', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REFRESH', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELEASE', 'RENAME', 'REPEAT', 'RESET', 'RESIGNAL', 'RESTART', 'RESTRICT', 'RESULT', 'RESULT_SET_LOCATOR', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUND_CEILING', 'ROUND_DOWN', 'ROUND_FLOOR', 'ROUND_HALF_DOWN', 'ROUND_HALF_EVEN', 'ROUND_HALF_UP', 'ROUND_UP', 'ROUTINE', 'ROW', 'ROWNUMBER', 'ROWS', 'ROWSET', 'ROW_NUMBER', 'RRN', 'RUN', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCRATCHPAD', 'SCROLL', 'SEARCH', 'SECOND', 'SECONDS', 'SECQTY', 'SECURITY', 'SENSITIVE', 'SEQUENCE', 'SESSION', 'SESSION_USER', 'SIGNAL', 'SIMILAR', 'SIMPLE', 'SMALLINT', 'SNAN', 'SOME', 'SOURCE', 'SPECIFIC', 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLID', 'SQLSTATE', 'SQLWARNING', 'SQRT', 'STACKED', 'STANDARD', 'START', 'STARTING', 'STATEMENT', 'STATIC', 'STATMENT', 'STAY', 'STDDEV_POP', 'STDDEV_SAMP', 'STOGROUP', 'STORES', 'STYLE', 'SUBMULTISET', 'SUBSTRING', 'SUM', 'SUMMARY', 'SYMMETRIC', 'SYNONYM', 'SYSFUN', 'SYSIBM', 'SYSPROC', 'SYSTEM', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'TABLESPACE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSLATE', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIM', 'TRUE', 'TRUNCATE', 'TYPE', 'UESCAPE', 'UNDO', 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UNTIL', 'UPPER', 'USAGE', 'USER', 'USING', 'VALIDPROC', 'VALUE', 'VARCHAR', 'VARIABLE', 'VARIANT', 'VARYING', 'VAR_POP', 'VAR_SAMP', 'VCAT', 'VERSION', 'VIEW', 'VOLATILE', 'VOLUMES', 'WHEN', 'WHENEVER', 'WHILE', 'WIDTH_BUCKET', 'WINDOW', 'WITH', 'WITHIN', 'WITHOUT', 'WLM', 'WRITE', 'XMLELEMENT', 'XMLEXISTS', 'XMLNAMESPACES', 'YEAR', 'YEARS'];\nvar reservedTopLevelWords = ['ADD', 'AFTER', 'ALTER COLUMN', 'ALTER TABLE', 'DELETE FROM', 'EXCEPT', 'FETCH FIRST', 'FROM', 'GROUP BY', 'GO', 'HAVING', 'INSERT INTO', 'INTERSECT', 'LIMIT', 'ORDER BY', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'UPDATE', 'VALUES', 'WHERE'];\nvar reservedTopLevelWordsNoIndent = ['INTERSECT', 'INTERSECT ALL', 'MINUS', 'UNION', 'UNION ALL'];\nvar reservedNewlineWords = ['AND', 'CROSS JOIN', 'INNER JOIN', 'JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'OR', 'OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN'];\nvar tokenizer;\n\nvar Db2Formatter =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg Different set of configurations\r\n */\n function Db2Formatter(cfg) {\n _classCallCheck(this, Db2Formatter);\n\n this.cfg = cfg;\n }\n /**\r\n * Formats DB2 query to make it easier to read\r\n *\r\n * @param {String} query The DB2 query string\r\n * @return {String} formatted string\r\n */\n\n\n _createClass(Db2Formatter, [{\n key: \"format\",\n value: function format(query) {\n if (!tokenizer) {\n tokenizer = new _Tokenizer[\"default\"]({\n reservedWords: reservedWords,\n reservedTopLevelWords: reservedTopLevelWords,\n reservedNewlineWords: reservedNewlineWords,\n reservedTopLevelWordsNoIndent: reservedTopLevelWordsNoIndent,\n stringTypes: [\"\\\"\\\"\", \"''\", '``', '[]'],\n openParens: ['('],\n closeParens: [')'],\n indexedPlaceholderTypes: ['?'],\n namedPlaceholderTypes: [':'],\n lineCommentTypes: ['--'],\n specialWordChars: ['#', '@']\n });\n }\n\n return new _Formatter[\"default\"](this.cfg, tokenizer).format(query);\n }\n }]);\n\n return Db2Formatter;\n}();\n\nexports[\"default\"] = Db2Formatter;\nmodule.exports = exports.default;","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","export function isLogLineJSON(line: string): boolean {\n let parsed;\n try {\n parsed = JSON.parse(line);\n } catch (error) {}\n // The JSON parser should only be used for log lines that are valid serialized JSON objects.\n return typeof parsed === 'object';\n}\n\n// This matches:\n// first a label from start of the string or first white space, then any word chars until \"=\"\n// second either an empty quotes, or anything that starts with quote and ends with unescaped quote,\n// or any non whitespace chars that do not start with quote\nconst LOGFMT_REGEXP = /(?:^|\\s)([\\w\\(\\)\\[\\]\\{\\}]+)=(\"\"|(?:\".*?[^\\\\]\"|[^\"\\s]\\S*))/;\n\nexport function isLogLineLogfmt(line: string): boolean {\n return LOGFMT_REGEXP.test(line);\n}\n\nexport function isLogLinePacked(line: string): boolean {\n let parsed;\n try {\n parsed = JSON.parse(line);\n return parsed.hasOwnProperty('_entry');\n } catch (error) {\n return false;\n }\n}\n","import { DataFrame, DataQueryResponse, FieldType, isValidGoDuration, Labels } from '@grafana/data';\n\nimport { isBytesString, processLabels } from './languageUtils';\nimport { isLogLineJSON, isLogLineLogfmt, isLogLinePacked } from './lineParser';\nimport { LabelType } from './types';\n\nexport function dataFrameHasLokiError(frame: DataFrame): boolean {\n const labelSets: Labels[] = frame.fields.find((f) => f.name === 'labels')?.values ?? [];\n return labelSets.some((labels) => labels.__error__ !== undefined);\n}\n\nexport function dataFrameHasLevelLabel(frame: DataFrame): boolean {\n const labelSets: Labels[] = frame.fields.find((f) => f.name === 'labels')?.values ?? [];\n return labelSets.some((labels) => labels.level !== undefined);\n}\n\nexport function extractLogParserFromDataFrame(frame: DataFrame): {\n hasLogfmt: boolean;\n hasJSON: boolean;\n hasPack: boolean;\n} {\n const lineField = frame.fields.find((field) => field.type === FieldType.string);\n if (lineField == null) {\n return { hasJSON: false, hasLogfmt: false, hasPack: false };\n }\n\n const logLines: string[] = lineField.values;\n\n let hasJSON = false;\n let hasLogfmt = false;\n let hasPack = false;\n\n logLines.forEach((line) => {\n if (isLogLineJSON(line)) {\n hasJSON = true;\n\n hasPack = isLogLinePacked(line);\n }\n if (isLogLineLogfmt(line)) {\n hasLogfmt = true;\n }\n });\n\n return { hasLogfmt, hasJSON, hasPack };\n}\n\nexport function extractLabelKeysFromDataFrame(frame: DataFrame, type: LabelType = LabelType.Indexed): string[] {\n const labelsArray: Array<{ [key: string]: string }> | undefined =\n frame?.fields?.find((field) => field.name === 'labels')?.values ?? [];\n const labelTypeArray: Array<{ [key: string]: string }> | undefined =\n frame?.fields?.find((field) => field.name === 'labelTypes')?.values ?? [];\n\n if (!labelsArray?.length) {\n return [];\n }\n\n // if there are no label types and type is LabelType.Indexed return all label keys\n if (!labelTypeArray?.length) {\n if (type === LabelType.Indexed) {\n const { keys: labelKeys } = processLabels(labelsArray);\n return labelKeys;\n }\n return [];\n }\n\n // If we have label types, we can return only label keys that match type\n let labelsSet = new Set<string>();\n for (let i = 0; i < labelsArray.length; i++) {\n const labels = labelsArray[i];\n const labelsType = labelTypeArray[i];\n\n const allLabelKeys = Object.keys(labels).filter((key) => labelsType[key] === type);\n labelsSet = new Set([...labelsSet, ...allLabelKeys]);\n }\n\n return Array.from(labelsSet);\n}\n\nexport function extractUnwrapLabelKeysFromDataFrame(frame: DataFrame): string[] {\n const labelsArray: Array<{ [key: string]: string }> | undefined =\n frame?.fields?.find((field) => field.name === 'labels')?.values ?? [];\n\n if (!labelsArray?.length) {\n return [];\n }\n\n // We do this only for first label object, because we want to consider only labels that are present in all log lines\n // possibleUnwrapLabels are labels with 1. number value OR 2. value that is valid go duration OR 3. bytes string value\n const possibleUnwrapLabels = Object.keys(labelsArray[0]).filter((key) => {\n const value = labelsArray[0][key];\n if (!value) {\n return false;\n }\n return !isNaN(Number(value)) || isValidGoDuration(value) || isBytesString(value);\n });\n\n // Add only labels that are present in every line to unwrapLabels\n return possibleUnwrapLabels.filter((label) => labelsArray.every((obj) => obj[label]));\n}\n\nexport function extractHasErrorLabelFromDataFrame(frame: DataFrame): boolean {\n const labelField = frame.fields.find((field) => field.name === 'labels' && field.type === FieldType.other);\n if (labelField == null) {\n return false;\n }\n\n const labels: Array<{ [key: string]: string }> = labelField.values;\n return labels.some((label) => label['__error__']);\n}\n\nexport function extractLevelLikeLabelFromDataFrame(frame: DataFrame): string | null {\n const labelField = frame.fields.find((field) => field.name === 'labels' && field.type === FieldType.other);\n if (labelField == null) {\n return null;\n }\n\n // Depending on number of labels, this can be pretty heavy operation.\n // Let's just look at first 2 lines If needed, we can introduce more later.\n const labelsArray: Array<{ [key: string]: string }> = labelField.values.slice(0, 2);\n let levelLikeLabel: string | null = null;\n\n // Find first level-like label\n for (let labels of labelsArray) {\n const label = Object.keys(labels).find(\n (label) => label === 'level' || label === 'detected_level' || label === 'lvl' || label.includes('level')\n );\n if (label) {\n levelLikeLabel = label;\n break;\n }\n }\n return levelLikeLabel;\n}\n\nexport function isRetriableError(errorResponse: DataQueryResponse) {\n const message = errorResponse.errors\n ? (errorResponse.errors[0].message ?? '').toLowerCase()\n : (errorResponse.error?.message ?? '');\n if (message.includes('timeout')) {\n return true;\n } else if (errorResponse.data.length > 0 && errorResponse.data[0].fields.length > 0) {\n // Error response but we're receiving data, continue querying.\n return false;\n }\n throw new Error(message);\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n constructor(from, to) {\n this.from = from;\n this.to = to;\n }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n /**\n Create a new node prop type.\n */\n constructor(config = {}) {\n this.id = nextPropID++;\n this.perNode = !!config.perNode;\n this.deserialize = config.deserialize || (() => {\n throw new Error(\"This node type doesn't define a deserialize function\");\n });\n }\n /**\n This is meant to be used with\n [`NodeSet.extend`](#common.NodeSet.extend) or\n [`LRParser.configure`](#lr.ParserConfig.props) to compute\n prop values for each node type in the set. Takes a [match\n object](#common.NodeType^match) or function that returns undefined\n if the node type doesn't get this prop, and the prop's value if\n it does.\n */\n add(match) {\n if (this.perNode)\n throw new RangeError(\"Can't add per-node props to node types\");\n if (typeof match != \"function\")\n match = NodeType.match(match);\n return (type) => {\n let result = match(type);\n return result === undefined ? null : [this, result];\n };\n }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n throw new RangeError(\"Invalid value for isolate: \" + value);\n return value || \"auto\";\n } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n constructor(\n /**\n The inner tree.\n */\n tree, \n /**\n If this is null, this tree replaces the entire node (it will\n be included in the regular iteration instead of its host\n node). If not, only the given ranges are considered to be\n covered by this tree. This is used for trees that are mixed in\n a way that isn't strictly hierarchical. Such mounted trees are\n only entered by [`resolveInner`](#common.Tree.resolveInner)\n and [`enter`](#common.SyntaxNode.enter).\n */\n overlay, \n /**\n The parser used to create this subtree.\n */\n parser) {\n this.tree = tree;\n this.overlay = overlay;\n this.parser = parser;\n }\n /**\n @internal\n */\n static get(tree) {\n return tree && tree.props && tree.props[NodeProp.mounted.id];\n }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the node type. Not necessarily unique, but if the\n grammar was written properly, different node types with the\n same name within a node set should play the same semantic\n role.\n */\n name, \n /**\n @internal\n */\n props, \n /**\n The id of this node in its set. Corresponds to the term ids\n used in the parser.\n */\n id, \n /**\n @internal\n */\n flags = 0) {\n this.name = name;\n this.props = props;\n this.id = id;\n this.flags = flags;\n }\n /**\n Define a node type.\n */\n static define(spec) {\n let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n if (spec.props)\n for (let src of spec.props) {\n if (!Array.isArray(src))\n src = src(type);\n if (src) {\n if (src[0].perNode)\n throw new RangeError(\"Can't store a per-node prop on a node type\");\n props[src[0].id] = src[1];\n }\n }\n return type;\n }\n /**\n Retrieves a node prop for this type. Will return `undefined` if\n the prop isn't present on this node.\n */\n prop(prop) { return this.props[prop.id]; }\n /**\n True when this is the top node of a grammar.\n */\n get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n /**\n True when this node is produced by a skip rule.\n */\n get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n /**\n Indicates whether this is an error node.\n */\n get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n /**\n When true, this node type doesn't correspond to a user-declared\n named node, for example because it is used to cache repetition.\n */\n get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n /**\n Returns true when this node's name or one of its\n [groups](#common.NodeProp^group) matches the given string.\n */\n is(name) {\n if (typeof name == 'string') {\n if (this.name == name)\n return true;\n let group = this.prop(NodeProp.group);\n return group ? group.indexOf(name) > -1 : false;\n }\n return this.id == name;\n }\n /**\n Create a function from node types to arbitrary values by\n specifying an object whose property names are node or\n [group](#common.NodeProp^group) names. Often useful with\n [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n names, separated by spaces, in a single property name to map\n multiple node names to a single value.\n */\n static match(map) {\n let direct = Object.create(null);\n for (let prop in map)\n for (let name of prop.split(\" \"))\n direct[name] = map[prop];\n return (node) => {\n for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n let found = direct[i < 0 ? node.name : groups[i]];\n if (found)\n return found;\n }\n };\n }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n /**\n Create a set with the given types. The `id` property of each\n type should correspond to its position within the array.\n */\n constructor(\n /**\n The node types in this set, by id.\n */\n types) {\n this.types = types;\n for (let i = 0; i < types.length; i++)\n if (types[i].id != i)\n throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n }\n /**\n Create a copy of this set with some node properties added. The\n arguments to this method can be created with\n [`NodeProp.add`](#common.NodeProp.add).\n */\n extend(...props) {\n let newTypes = [];\n for (let type of this.types) {\n let newProps = null;\n for (let source of props) {\n let add = source(type);\n if (add) {\n if (!newProps)\n newProps = Object.assign({}, type.props);\n newProps[add[0].id] = add[1];\n }\n }\n newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n }\n return new NodeSet(newTypes);\n }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n /**\n When enabled, iteration will only visit [`Tree`](#common.Tree)\n objects, not nodes packed into\n [`TreeBuffer`](#common.TreeBuffer)s.\n */\n IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n /**\n Enable this to make iteration include anonymous nodes (such as\n the nodes that wrap repeated grammar constructs into a balanced\n tree).\n */\n IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n /**\n By default, regular [mounted](#common.NodeProp^mounted) nodes\n replace their base node in iteration. Enable this to ignore them\n instead.\n */\n IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n /**\n This option only applies in\n [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n library to not enter mounted overlays if one covers the given\n position.\n */\n IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n /**\n Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n */\n constructor(\n /**\n The type of the top node.\n */\n type, \n /**\n This node's child nodes.\n */\n children, \n /**\n The positions (offsets relative to the start of this tree) of\n the children.\n */\n positions, \n /**\n The total length of this tree\n */\n length, \n /**\n Per-node [node props](#common.NodeProp) to associate with this node.\n */\n props) {\n this.type = type;\n this.children = children;\n this.positions = positions;\n this.length = length;\n /**\n @internal\n */\n this.props = null;\n if (props && props.length) {\n this.props = Object.create(null);\n for (let [prop, value] of props)\n this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n }\n }\n /**\n @internal\n */\n toString() {\n let mounted = MountedTree.get(this);\n if (mounted && !mounted.overlay)\n return mounted.tree.toString();\n let children = \"\";\n for (let ch of this.children) {\n let str = ch.toString();\n if (str) {\n if (children)\n children += \",\";\n children += str;\n }\n }\n return !this.type.name ? children :\n (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n (children.length ? \"(\" + children + \")\" : \"\");\n }\n /**\n Get a [tree cursor](#common.TreeCursor) positioned at the top of\n the tree. Mode can be used to [control](#common.IterMode) which\n nodes the cursor visits.\n */\n cursor(mode = 0) {\n return new TreeCursor(this.topNode, mode);\n }\n /**\n Get a [tree cursor](#common.TreeCursor) pointing into this tree\n at the given position and side (see\n [`moveTo`](#common.TreeCursor.moveTo).\n */\n cursorAt(pos, side = 0, mode = 0) {\n let scope = CachedNode.get(this) || this.topNode;\n let cursor = new TreeCursor(scope);\n cursor.moveTo(pos, side);\n CachedNode.set(this, cursor._tree);\n return cursor;\n }\n /**\n Get a [syntax node](#common.SyntaxNode) object for the top of the\n tree.\n */\n get topNode() {\n return new TreeNode(this, 0, 0, null);\n }\n /**\n Get the [syntax node](#common.SyntaxNode) at the given position.\n If `side` is -1, this will move into nodes that end at the\n position. If 1, it'll move into nodes that start at the\n position. With 0, it'll only enter nodes that cover the position\n from both sides.\n \n Note that this will not enter\n [overlays](#common.MountedTree.overlay), and you often want\n [`resolveInner`](#common.Tree.resolveInner) instead.\n */\n resolve(pos, side = 0) {\n let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n CachedNode.set(this, node);\n return node;\n }\n /**\n Like [`resolve`](#common.Tree.resolve), but will enter\n [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n pointing into the innermost overlaid tree at the given position\n (with parent links going through all parent structure, including\n the host trees).\n */\n resolveInner(pos, side = 0) {\n let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n CachedInnerNode.set(this, node);\n return node;\n }\n /**\n In some situations, it can be useful to iterate through all\n nodes around a position, including those in overlays that don't\n directly cover the position. This method gives you an iterator\n that will produce all nodes, from small to big, around the given\n position.\n */\n resolveStack(pos, side = 0) {\n return stackIterator(this, pos, side);\n }\n /**\n Iterate over the tree and its children, calling `enter` for any\n node that touches the `from`/`to` region (if given) before\n running over such a node's children, and `leave` (if given) when\n leaving the node. When `enter` returns `false`, that node will\n not have its children iterated over (or `leave` called).\n */\n iterate(spec) {\n let { enter, leave, from = 0, to = this.length } = spec;\n let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n let entered = false;\n if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n if (c.firstChild())\n continue;\n entered = true;\n }\n for (;;) {\n if (entered && leave && (anon || !c.type.isAnonymous))\n leave(c);\n if (c.nextSibling())\n break;\n if (!c.parent())\n return;\n entered = true;\n }\n }\n }\n /**\n Get the value of the given [node prop](#common.NodeProp) for this\n node. Works with both per-node and per-type props.\n */\n prop(prop) {\n return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n }\n /**\n Returns the node's [per-node props](#common.NodeProp.perNode) in a\n format that can be passed to the [`Tree`](#common.Tree)\n constructor.\n */\n get propValues() {\n let result = [];\n if (this.props)\n for (let id in this.props)\n result.push([+id, this.props[id]]);\n return result;\n }\n /**\n Balance the direct children of this tree, producing a copy of\n which may have children grouped into subtrees with type\n [`NodeType.none`](#common.NodeType^none).\n */\n balance(config = {}) {\n return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n }\n /**\n Build a tree from a postfix-ordered buffer of node information,\n or a cursor over such a buffer.\n */\n static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n constructor(buffer, index) {\n this.buffer = buffer;\n this.index = index;\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n get pos() { return this.index; }\n next() { this.index -= 4; }\n fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n /**\n Create a tree buffer.\n */\n constructor(\n /**\n The buffer's content.\n */\n buffer, \n /**\n The total length of the group of nodes in the buffer.\n */\n length, \n /**\n The node set used in this buffer.\n */\n set) {\n this.buffer = buffer;\n this.length = length;\n this.set = set;\n }\n /**\n @internal\n */\n get type() { return NodeType.none; }\n /**\n @internal\n */\n toString() {\n let result = [];\n for (let index = 0; index < this.buffer.length;) {\n result.push(this.childString(index));\n index = this.buffer[index + 3];\n }\n return result.join(\",\");\n }\n /**\n @internal\n */\n childString(index) {\n let id = this.buffer[index], endIndex = this.buffer[index + 3];\n let type = this.set.types[id], result = type.name;\n if (/\\W/.test(result) && !type.isError)\n result = JSON.stringify(result);\n index += 4;\n if (endIndex == index)\n return result;\n let children = [];\n while (index < endIndex) {\n children.push(this.childString(index));\n index = this.buffer[index + 3];\n }\n return result + \"(\" + children.join(\",\") + \")\";\n }\n /**\n @internal\n */\n findChild(startIndex, endIndex, dir, pos, side) {\n let { buffer } = this, pick = -1;\n for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n pick = i;\n if (dir > 0)\n break;\n }\n }\n return pick;\n }\n /**\n @internal\n */\n slice(startI, endI, from) {\n let b = this.buffer;\n let copy = new Uint16Array(endI - startI), len = 0;\n for (let i = startI, j = 0; i < endI;) {\n copy[j++] = b[i++];\n copy[j++] = b[i++] - from;\n let to = copy[j++] = b[i++] - from;\n copy[j++] = b[i++] - startI;\n len = Math.max(len, to);\n }\n return new TreeBuffer(copy, len, this.set);\n }\n}\nfunction checkSide(side, pos, from, to) {\n switch (side) {\n case -2 /* Side.Before */: return from < pos;\n case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n case 0 /* Side.Around */: return from < pos && to > pos;\n case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n case 2 /* Side.After */: return to > pos;\n case 4 /* Side.DontCare */: return true;\n }\n}\nfunction resolveNode(node, pos, side, overlays) {\n var _a;\n // Move up to a node that actually holds the position, if possible\n while (node.from == node.to ||\n (side < 1 ? node.from >= pos : node.from > pos) ||\n (side > -1 ? node.to <= pos : node.to < pos)) {\n let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n if (!parent)\n return node;\n node = parent;\n }\n let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n // Must go up out of overlays when those do not overlap with pos\n if (overlays)\n for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n node = parent;\n }\n for (;;) {\n let inner = node.enter(pos, side, mode);\n if (!inner)\n return node;\n node = inner;\n }\n}\nclass BaseNode {\n cursor(mode = 0) { return new TreeCursor(this, mode); }\n getChild(type, before = null, after = null) {\n let r = getChildren(this, type, before, after);\n return r.length ? r[0] : null;\n }\n getChildren(type, before = null, after = null) {\n return getChildren(this, type, before, after);\n }\n resolve(pos, side = 0) {\n return resolveNode(this, pos, side, false);\n }\n resolveInner(pos, side = 0) {\n return resolveNode(this, pos, side, true);\n }\n matchContext(context) {\n return matchNodeContext(this.parent, context);\n }\n enterUnfinishedNodesBefore(pos) {\n let scan = this.childBefore(pos), node = this;\n while (scan) {\n let last = scan.lastChild;\n if (!last || last.to != scan.to)\n break;\n if (last.type.isError && last.from == last.to) {\n node = scan;\n scan = last.prevSibling;\n }\n else {\n scan = last;\n }\n }\n return node;\n }\n get node() { return this; }\n get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n constructor(_tree, from, \n // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n index, _parent) {\n super();\n this._tree = _tree;\n this.from = from;\n this.index = index;\n this._parent = _parent;\n }\n get type() { return this._tree.type; }\n get name() { return this._tree.type.name; }\n get to() { return this.from + this._tree.length; }\n nextChild(i, dir, pos, side, mode = 0) {\n for (let parent = this;;) {\n for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n let next = children[i], start = positions[i] + parent.from;\n if (!checkSide(side, pos, start, start + next.length))\n continue;\n if (next instanceof TreeBuffer) {\n if (mode & IterMode.ExcludeBuffers)\n continue;\n let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n if (index > -1)\n return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n }\n else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n let mounted;\n if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n return new TreeNode(mounted.tree, start, i, parent);\n let inner = new TreeNode(next, start, i, parent);\n return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n }\n }\n if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n return null;\n if (parent.index >= 0)\n i = parent.index + dir;\n else\n i = dir < 0 ? -1 : parent._parent._tree.children.length;\n parent = parent._parent;\n if (!parent)\n return null;\n }\n }\n get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n enter(pos, side, mode = 0) {\n let mounted;\n if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n let rPos = pos - this.from;\n for (let { from, to } of mounted.overlay) {\n if ((side > 0 ? from <= rPos : from < rPos) &&\n (side < 0 ? to >= rPos : to > rPos))\n return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n }\n }\n return this.nextChild(0, 1, pos, side, mode);\n }\n nextSignificantParent() {\n let val = this;\n while (val.type.isAnonymous && val._parent)\n val = val._parent;\n return val;\n }\n get parent() {\n return this._parent ? this._parent.nextSignificantParent() : null;\n }\n get nextSibling() {\n return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n }\n get prevSibling() {\n return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n }\n get tree() { return this._tree; }\n toTree() { return this._tree; }\n /**\n @internal\n */\n toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n let cur = node.cursor(), result = [];\n if (!cur.firstChild())\n return result;\n if (before != null)\n for (let found = false; !found;) {\n found = cur.type.is(before);\n if (!cur.nextSibling())\n return result;\n }\n for (;;) {\n if (after != null && cur.type.is(after))\n return result;\n if (cur.type.is(type))\n result.push(cur.node);\n if (!cur.nextSibling())\n return after == null ? result : [];\n }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n for (let p = node; i >= 0; p = p.parent) {\n if (!p)\n return false;\n if (!p.type.isAnonymous) {\n if (context[i] && context[i] != p.name)\n return false;\n i--;\n }\n }\n return true;\n}\nclass BufferContext {\n constructor(parent, buffer, index, start) {\n this.parent = parent;\n this.buffer = buffer;\n this.index = index;\n this.start = start;\n }\n}\nclass BufferNode extends BaseNode {\n get name() { return this.type.name; }\n get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n constructor(context, _parent, index) {\n super();\n this.context = context;\n this._parent = _parent;\n this.index = index;\n this.type = context.buffer.set.types[context.buffer.buffer[index]];\n }\n child(dir, pos, side) {\n let { buffer } = this.context;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n return index < 0 ? null : new BufferNode(this.context, this, index);\n }\n get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n enter(pos, side, mode = 0) {\n if (mode & IterMode.ExcludeBuffers)\n return null;\n let { buffer } = this.context;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n return index < 0 ? null : new BufferNode(this.context, this, index);\n }\n get parent() {\n return this._parent || this.context.parent.nextSignificantParent();\n }\n externalSibling(dir) {\n return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n }\n get nextSibling() {\n let { buffer } = this.context;\n let after = buffer.buffer[this.index + 3];\n if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n return new BufferNode(this.context, this._parent, after);\n return this.externalSibling(1);\n }\n get prevSibling() {\n let { buffer } = this.context;\n let parentStart = this._parent ? this._parent.index + 4 : 0;\n if (this.index == parentStart)\n return this.externalSibling(-1);\n return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n }\n get tree() { return null; }\n toTree() {\n let children = [], positions = [];\n let { buffer } = this.context;\n let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n if (endI > startI) {\n let from = buffer.buffer[this.index + 1];\n children.push(buffer.slice(startI, endI, from));\n positions.push(0);\n }\n return new Tree(this.type, children, positions, this.to - this.from);\n }\n /**\n @internal\n */\n toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n if (!heads.length)\n return null;\n let pick = 0, picked = heads[0];\n for (let i = 1; i < heads.length; i++) {\n let node = heads[i];\n if (node.from > picked.from || node.to < picked.to) {\n picked = node;\n pick = i;\n }\n }\n let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n let newHeads = heads.slice();\n if (next)\n newHeads[pick] = next;\n else\n newHeads.splice(pick, 1);\n return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n constructor(heads, node) {\n this.heads = heads;\n this.node = node;\n }\n get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n let inner = tree.resolveInner(pos, side), layers = null;\n for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n if (scan.index < 0) { // This is an overlay root\n let parent = scan.parent;\n (layers || (layers = [inner])).push(parent.resolve(pos, side));\n scan = parent;\n }\n else {\n let mount = MountedTree.get(scan.tree);\n // Relevant overlay branching off\n if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n }\n }\n }\n return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n /**\n Shorthand for `.type.name`.\n */\n get name() { return this.type.name; }\n /**\n @internal\n */\n constructor(node, \n /**\n @internal\n */\n mode = 0) {\n this.mode = mode;\n /**\n @internal\n */\n this.buffer = null;\n this.stack = [];\n /**\n @internal\n */\n this.index = 0;\n this.bufferNode = null;\n if (node instanceof TreeNode) {\n this.yieldNode(node);\n }\n else {\n this._tree = node.context.parent;\n this.buffer = node.context;\n for (let n = node._parent; n; n = n._parent)\n this.stack.unshift(n.index);\n this.bufferNode = node;\n this.yieldBuf(node.index);\n }\n }\n yieldNode(node) {\n if (!node)\n return false;\n this._tree = node;\n this.type = node.type;\n this.from = node.from;\n this.to = node.to;\n return true;\n }\n yieldBuf(index, type) {\n this.index = index;\n let { start, buffer } = this.buffer;\n this.type = type || buffer.set.types[buffer.buffer[index]];\n this.from = start + buffer.buffer[index + 1];\n this.to = start + buffer.buffer[index + 2];\n return true;\n }\n /**\n @internal\n */\n yield(node) {\n if (!node)\n return false;\n if (node instanceof TreeNode) {\n this.buffer = null;\n return this.yieldNode(node);\n }\n this.buffer = node.context;\n return this.yieldBuf(node.index, node.type);\n }\n /**\n @internal\n */\n toString() {\n return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n }\n /**\n @internal\n */\n enterChild(dir, pos, side) {\n if (!this.buffer)\n return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n let { buffer } = this.buffer;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n if (index < 0)\n return false;\n this.stack.push(this.index);\n return this.yieldBuf(index);\n }\n /**\n Move the cursor to this node's first child. When this returns\n false, the node has no child, and the cursor has not been moved.\n */\n firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n /**\n Move the cursor to this node's last child.\n */\n lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n /**\n Move the cursor to the first child that ends after `pos`.\n */\n childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n /**\n Move to the last child that starts before `pos`.\n */\n childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n /**\n Move the cursor to the child around `pos`. If side is -1 the\n child may end at that position, when 1 it may start there. This\n will also enter [overlaid](#common.MountedTree.overlay)\n [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n set to false.\n */\n enter(pos, side, mode = this.mode) {\n if (!this.buffer)\n return this.yield(this._tree.enter(pos, side, mode));\n return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n }\n /**\n Move to the node's parent node, if this isn't the top node.\n */\n parent() {\n if (!this.buffer)\n return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n if (this.stack.length)\n return this.yieldBuf(this.stack.pop());\n let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n this.buffer = null;\n return this.yieldNode(parent);\n }\n /**\n @internal\n */\n sibling(dir) {\n if (!this.buffer)\n return !this._tree._parent ? false\n : this.yield(this._tree.index < 0 ? null\n : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n let { buffer } = this.buffer, d = this.stack.length - 1;\n if (dir < 0) {\n let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n if (this.index != parentStart)\n return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n }\n else {\n let after = buffer.buffer[this.index + 3];\n if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n return this.yieldBuf(after);\n }\n return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n }\n /**\n Move to this node's next sibling, if any.\n */\n nextSibling() { return this.sibling(1); }\n /**\n Move to this node's previous sibling, if any.\n */\n prevSibling() { return this.sibling(-1); }\n atLastNode(dir) {\n let index, parent, { buffer } = this;\n if (buffer) {\n if (dir > 0) {\n if (this.index < buffer.buffer.buffer.length)\n return false;\n }\n else {\n for (let i = 0; i < this.index; i++)\n if (buffer.buffer.buffer[i + 3] < this.index)\n return false;\n }\n ({ index, parent } = buffer);\n }\n else {\n ({ index, _parent: parent } = this._tree);\n }\n for (; parent; { index, _parent: parent } = parent) {\n if (index > -1)\n for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n let child = parent._tree.children[i];\n if ((this.mode & IterMode.IncludeAnonymous) ||\n child instanceof TreeBuffer ||\n !child.type.isAnonymous ||\n hasChild(child))\n return false;\n }\n }\n return true;\n }\n move(dir, enter) {\n if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n return true;\n for (;;) {\n if (this.sibling(dir))\n return true;\n if (this.atLastNode(dir) || !this.parent())\n return false;\n }\n }\n /**\n Move to the next node in a\n [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n traversal, going from a node to its first child or, if the\n current node is empty or `enter` is false, its next sibling or\n the next sibling of the first parent node that has one.\n */\n next(enter = true) { return this.move(1, enter); }\n /**\n Move to the next node in a last-to-first pre-order traversal. A\n node is followed by its last child or, if it has none, its\n previous sibling or the previous sibling of the first parent\n node that has one.\n */\n prev(enter = true) { return this.move(-1, enter); }\n /**\n Move the cursor to the innermost node that covers `pos`. If\n `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n it will enter nodes that start at `pos`.\n */\n moveTo(pos, side = 0) {\n // Move up to a node that actually holds the position, if possible\n while (this.from == this.to ||\n (side < 1 ? this.from >= pos : this.from > pos) ||\n (side > -1 ? this.to <= pos : this.to < pos))\n if (!this.parent())\n break;\n // Then scan down into child nodes as far as possible\n while (this.enterChild(1, pos, side)) { }\n return this;\n }\n /**\n Get a [syntax node](#common.SyntaxNode) at the cursor's current\n position.\n */\n get node() {\n if (!this.buffer)\n return this._tree;\n let cache = this.bufferNode, result = null, depth = 0;\n if (cache && cache.context == this.buffer) {\n scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n for (let c = cache; c; c = c._parent)\n if (c.index == index) {\n if (index == this.index)\n return c;\n result = c;\n depth = d + 1;\n break scan;\n }\n index = this.stack[--d];\n }\n }\n for (let i = depth; i < this.stack.length; i++)\n result = new BufferNode(this.buffer, result, this.stack[i]);\n return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n }\n /**\n Get the [tree](#common.Tree) that represents the current node, if\n any. Will return null when the node is in a [tree\n buffer](#common.TreeBuffer).\n */\n get tree() {\n return this.buffer ? null : this._tree._tree;\n }\n /**\n Iterate over the current node and all its descendants, calling\n `enter` when entering a node and `leave`, if given, when leaving\n one. When `enter` returns `false`, any children of that node are\n skipped, and `leave` isn't called for it.\n */\n iterate(enter, leave) {\n for (let depth = 0;;) {\n let mustLeave = false;\n if (this.type.isAnonymous || enter(this) !== false) {\n if (this.firstChild()) {\n depth++;\n continue;\n }\n if (!this.type.isAnonymous)\n mustLeave = true;\n }\n for (;;) {\n if (mustLeave && leave)\n leave(this);\n mustLeave = this.type.isAnonymous;\n if (!depth)\n return;\n if (this.nextSibling())\n break;\n this.parent();\n depth--;\n mustLeave = true;\n }\n }\n }\n /**\n Test whether the current node matches a given context—a sequence\n of direct parent node names. Empty strings in the context array\n are treated as wildcards.\n */\n matchContext(context) {\n if (!this.buffer)\n return matchNodeContext(this.node.parent, context);\n let { buffer } = this.buffer, { types } = buffer.set;\n for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n if (d < 0)\n return matchNodeContext(this._tree, context, i);\n let type = types[buffer.buffer[this.stack[d]]];\n if (!type.isAnonymous) {\n if (context[i] && context[i] != type.name)\n return false;\n i--;\n }\n }\n return true;\n }\n}\nfunction hasChild(tree) {\n return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n var _a;\n let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n let types = nodeSet.types;\n let contextHash = 0, lookAhead = 0;\n function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n let { id, start, end, size } = cursor;\n let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n while (size < 0) {\n cursor.next();\n if (size == -1 /* SpecialRecord.Reuse */) {\n let node = reused[id];\n children.push(node);\n positions.push(start - parentStart);\n return;\n }\n else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n contextHash = id;\n return;\n }\n else if (size == -4 /* SpecialRecord.LookAhead */) {\n lookAhead = id;\n return;\n }\n else {\n throw new RangeError(`Unrecognized record size: ${size}`);\n }\n }\n let type = types[id], node, buffer;\n let startPos = start - parentStart;\n if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n // Small enough for a buffer, and no reused nodes inside\n let data = new Uint16Array(buffer.size - buffer.skip);\n let endPos = cursor.pos - buffer.size, index = data.length;\n while (cursor.pos > endPos)\n index = copyToBuffer(buffer.start, data, index);\n node = new TreeBuffer(data, end - buffer.start, nodeSet);\n startPos = buffer.start - parentStart;\n }\n else { // Make it a node\n let endPos = cursor.pos - size;\n cursor.next();\n let localChildren = [], localPositions = [];\n let localInRepeat = id >= minRepeatType ? id : -1;\n let lastGroup = 0, lastEnd = end;\n while (cursor.pos > endPos) {\n if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n if (cursor.end <= lastEnd - maxBufferLength) {\n makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n lastGroup = localChildren.length;\n lastEnd = cursor.end;\n }\n cursor.next();\n }\n else if (depth > 2500 /* CutOff.Depth */) {\n takeFlatNode(start, endPos, localChildren, localPositions);\n }\n else {\n takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n }\n }\n if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n localChildren.reverse();\n localPositions.reverse();\n if (localInRepeat > -1 && lastGroup > 0) {\n let make = makeBalanced(type, contextAtStart);\n node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n }\n else {\n node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n }\n }\n children.push(node);\n positions.push(startPos);\n }\n function takeFlatNode(parentStart, minPos, children, positions) {\n let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n let nodeCount = 0, stopAt = -1;\n while (cursor.pos > minPos) {\n let { id, start, end, size } = cursor;\n if (size > 4) { // Not a leaf\n cursor.next();\n }\n else if (stopAt > -1 && start < stopAt) {\n break;\n }\n else {\n if (stopAt < 0)\n stopAt = end - maxBufferLength;\n nodes.push(id, start, end);\n nodeCount++;\n cursor.next();\n }\n }\n if (nodeCount) {\n let buffer = new Uint16Array(nodeCount * 4);\n let start = nodes[nodes.length - 2];\n for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n buffer[j++] = nodes[i];\n buffer[j++] = nodes[i + 1] - start;\n buffer[j++] = nodes[i + 2] - start;\n buffer[j++] = j;\n }\n children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n positions.push(start - parentStart);\n }\n }\n function makeBalanced(type, contextHash) {\n return (children, positions, length) => {\n let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n if (!lastI && last.type == type && last.length == length)\n return last;\n if (lookAheadProp = last.prop(NodeProp.lookAhead))\n lookAhead = positions[lastI] + last.length + lookAheadProp;\n }\n return makeTree(type, children, positions, length, lookAhead, contextHash);\n };\n }\n function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n let localChildren = [], localPositions = [];\n while (children.length > i) {\n localChildren.push(children.pop());\n localPositions.push(positions.pop() + base - from);\n }\n children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n positions.push(from - base);\n }\n function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n if (contextHash) {\n let pair = [NodeProp.contextHash, contextHash];\n props = props ? [pair].concat(props) : [pair];\n }\n if (lookAhead > 25) {\n let pair = [NodeProp.lookAhead, lookAhead];\n props = props ? [pair].concat(props) : [pair];\n }\n return new Tree(type, children, positions, length, props);\n }\n function findBufferSize(maxSize, inRepeat) {\n // Scan through the buffer to find previous siblings that fit\n // together in a TreeBuffer, and don't contain any reused nodes\n // (which can't be stored in a buffer).\n // If `inRepeat` is > -1, ignore node boundaries of that type for\n // nesting, but make sure the end falls either at the start\n // (`maxSize`) or before such a node.\n let fork = cursor.fork();\n let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n let result = { size: 0, start: 0, skip: 0 };\n scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n let nodeSize = fork.size;\n // Pretend nested repeat nodes of the same type don't exist\n if (fork.id == inRepeat && nodeSize >= 0) {\n // Except that we store the current state as a valid return\n // value.\n result.size = size;\n result.start = start;\n result.skip = skip;\n skip += 4;\n size += 4;\n fork.next();\n continue;\n }\n let startPos = fork.pos - nodeSize;\n if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n break;\n let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n let nodeStart = fork.start;\n fork.next();\n while (fork.pos > startPos) {\n if (fork.size < 0) {\n if (fork.size == -3 /* SpecialRecord.ContextChange */)\n localSkipped += 4;\n else\n break scan;\n }\n else if (fork.id >= minRepeatType) {\n localSkipped += 4;\n }\n fork.next();\n }\n start = nodeStart;\n size += nodeSize;\n skip += localSkipped;\n }\n if (inRepeat < 0 || size == maxSize) {\n result.size = size;\n result.start = start;\n result.skip = skip;\n }\n return result.size > 4 ? result : undefined;\n }\n function copyToBuffer(bufferStart, buffer, index) {\n let { id, start, end, size } = cursor;\n cursor.next();\n if (size >= 0 && id < minRepeatType) {\n let startIndex = index;\n if (size > 4) {\n let endPos = cursor.pos - (size - 4);\n while (cursor.pos > endPos)\n index = copyToBuffer(bufferStart, buffer, index);\n }\n buffer[--index] = startIndex;\n buffer[--index] = end - bufferStart;\n buffer[--index] = start - bufferStart;\n buffer[--index] = id;\n }\n else if (size == -3 /* SpecialRecord.ContextChange */) {\n contextHash = id;\n }\n else if (size == -4 /* SpecialRecord.LookAhead */) {\n lookAhead = id;\n }\n return index;\n }\n let children = [], positions = [];\n while (cursor.pos > 0)\n takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n return 1;\n let size = nodeSizeCache.get(node);\n if (size == null) {\n size = 1;\n for (let child of node.children) {\n if (child.type != balanceType || !(child instanceof Tree)) {\n size = 1;\n break;\n }\n size += nodeSize(balanceType, child);\n }\n nodeSizeCache.set(node, size);\n }\n return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n let total = 0;\n for (let i = from; i < to; i++)\n total += nodeSize(balanceType, children[i]);\n let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n let localChildren = [], localPositions = [];\n function divide(children, positions, from, to, offset) {\n for (let i = from; i < to;) {\n let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n i++;\n for (; i < to; i++) {\n let nextSize = nodeSize(balanceType, children[i]);\n if (groupSize + nextSize >= maxChild)\n break;\n groupSize += nextSize;\n }\n if (i == groupFrom + 1) {\n if (groupSize > maxChild) {\n let only = children[groupFrom]; // Only trees can have a size > 1\n divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n continue;\n }\n localChildren.push(children[groupFrom]);\n }\n else {\n let length = positions[i - 1] + children[i - 1].length - groupStart;\n localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n }\n localPositions.push(groupStart + offset - start);\n }\n }\n divide(children, positions, from, to, 0);\n return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n constructor() {\n this.map = new WeakMap();\n }\n setBuffer(buffer, index, value) {\n let inner = this.map.get(buffer);\n if (!inner)\n this.map.set(buffer, inner = new Map);\n inner.set(index, value);\n }\n getBuffer(buffer, index) {\n let inner = this.map.get(buffer);\n return inner && inner.get(index);\n }\n /**\n Set the value for this syntax node.\n */\n set(node, value) {\n if (node instanceof BufferNode)\n this.setBuffer(node.context.buffer, node.index, value);\n else if (node instanceof TreeNode)\n this.map.set(node.tree, value);\n }\n /**\n Retrieve value for this syntax node, if it exists in the map.\n */\n get(node) {\n return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n }\n /**\n Set the value for the node that a cursor currently points to.\n */\n cursorSet(cursor, value) {\n if (cursor.buffer)\n this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n else\n this.map.set(cursor.tree, value);\n }\n /**\n Retrieve the value for the node that a cursor currently points\n to.\n */\n cursorGet(cursor) {\n return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n /**\n Construct a tree fragment. You'll usually want to use\n [`addTree`](#common.TreeFragment^addTree) and\n [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n calling this directly.\n */\n constructor(\n /**\n The start of the unchanged range pointed to by this fragment.\n This refers to an offset in the _updated_ document (as opposed\n to the original tree).\n */\n from, \n /**\n The end of the unchanged range.\n */\n to, \n /**\n The tree that this fragment is based on.\n */\n tree, \n /**\n The offset between the fragment's tree and the document that\n this fragment can be used against. Add this when going from\n document to tree positions, subtract it to go from tree to\n document positions.\n */\n offset, openStart = false, openEnd = false) {\n this.from = from;\n this.to = to;\n this.tree = tree;\n this.offset = offset;\n this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n }\n /**\n Whether the start of the fragment represents the start of a\n parse, or the end of a change. (In the second case, it may not\n be safe to reuse some nodes at the start, depending on the\n parsing algorithm.)\n */\n get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n /**\n Whether the end of the fragment represents the end of a\n full-document parse, or the start of a change.\n */\n get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n /**\n Create a set of fragments from a freshly parsed tree, or update\n an existing set of fragments by replacing the ones that overlap\n with a tree with content from the new tree. When `partial` is\n true, the parse is treated as incomplete, and the resulting\n fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n true.\n */\n static addTree(tree, fragments = [], partial = false) {\n let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n for (let f of fragments)\n if (f.to > tree.length)\n result.push(f);\n return result;\n }\n /**\n Apply a set of edits to an array of fragments, removing or\n splitting fragments as necessary to remove edited ranges, and\n adjusting offsets for fragments that moved.\n */\n static applyChanges(fragments, changes, minGap = 128) {\n if (!changes.length)\n return fragments;\n let result = [];\n let fI = 1, nextF = fragments.length ? fragments[0] : null;\n for (let cI = 0, pos = 0, off = 0;; cI++) {\n let nextC = cI < changes.length ? changes[cI] : null;\n let nextPos = nextC ? nextC.fromA : 1e9;\n if (nextPos - pos >= minGap)\n while (nextF && nextF.from < nextPos) {\n let cut = nextF;\n if (pos >= cut.from || nextPos <= cut.to || off) {\n let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n }\n if (cut)\n result.push(cut);\n if (nextF.to > nextPos)\n break;\n nextF = fI < fragments.length ? fragments[fI++] : null;\n }\n if (!nextC)\n break;\n pos = nextC.toA;\n off = nextC.toA - nextC.toB;\n }\n return result;\n }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n /**\n Start a parse, returning a [partial parse](#common.PartialParse)\n object. [`fragments`](#common.TreeFragment) can be passed in to\n make the parse incremental.\n \n By default, the entire input is parsed. You can pass `ranges`,\n which should be a sorted array of non-empty, non-overlapping\n ranges, to parse only those ranges. The tree returned in that\n case will start at `ranges[0].from`.\n */\n startParse(input, fragments, ranges) {\n if (typeof input == \"string\")\n input = new StringInput(input);\n ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n return this.createParse(input, fragments || [], ranges);\n }\n /**\n Run a full parse, returning the resulting tree.\n */\n parse(input, fragments, ranges) {\n let parse = this.startParse(input, fragments, ranges);\n for (;;) {\n let done = parse.advance();\n if (done)\n return done;\n }\n }\n}\nclass StringInput {\n constructor(string) {\n this.string = string;\n }\n get length() { return this.string.length; }\n chunk(from) { return this.string.slice(from); }\n get lineChunks() { return false; }\n read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n constructor(parser, parse, overlay, target, from) {\n this.parser = parser;\n this.parse = parse;\n this.overlay = overlay;\n this.target = target;\n this.from = from;\n }\n}\nfunction checkRanges(ranges) {\n if (!ranges.length || ranges.some(r => r.from >= r.to))\n throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n constructor(parser, predicate, mounts, index, start, target, prev) {\n this.parser = parser;\n this.predicate = predicate;\n this.mounts = mounts;\n this.index = index;\n this.start = start;\n this.target = target;\n this.prev = prev;\n this.depth = 0;\n this.ranges = [];\n }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n constructor(base, nest, input, fragments, ranges) {\n this.nest = nest;\n this.input = input;\n this.fragments = fragments;\n this.ranges = ranges;\n this.inner = [];\n this.innerDone = 0;\n this.baseTree = null;\n this.stoppedAt = null;\n this.baseParse = base;\n }\n advance() {\n if (this.baseParse) {\n let done = this.baseParse.advance();\n if (!done)\n return null;\n this.baseParse = null;\n this.baseTree = done;\n this.startInner();\n if (this.stoppedAt != null)\n for (let inner of this.inner)\n inner.parse.stopAt(this.stoppedAt);\n }\n if (this.innerDone == this.inner.length) {\n let result = this.baseTree;\n if (this.stoppedAt != null)\n result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n return result;\n }\n let inner = this.inner[this.innerDone], done = inner.parse.advance();\n if (done) {\n this.innerDone++;\n // This is a somewhat dodgy but super helpful hack where we\n // patch up nodes created by the inner parse (and thus\n // presumably not aliased anywhere else) to hold the information\n // about the inner parse.\n let props = Object.assign(Object.create(null), inner.target.props);\n props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n inner.target.props = props;\n }\n return null;\n }\n get parsedPos() {\n if (this.baseParse)\n return 0;\n let pos = this.input.length;\n for (let i = this.innerDone; i < this.inner.length; i++) {\n if (this.inner[i].from < pos)\n pos = Math.min(pos, this.inner[i].parse.parsedPos);\n }\n return pos;\n }\n stopAt(pos) {\n this.stoppedAt = pos;\n if (this.baseParse)\n this.baseParse.stopAt(pos);\n else\n for (let i = this.innerDone; i < this.inner.length; i++)\n this.inner[i].parse.stopAt(pos);\n }\n startInner() {\n let fragmentCursor = new FragmentCursor(this.fragments);\n let overlay = null;\n let covered = null;\n let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n scan: for (let nest, isCovered;;) {\n let enter = true, range;\n if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n enter = false;\n }\n else if (fragmentCursor.hasNode(cursor)) {\n if (overlay) {\n let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n if (match)\n for (let r of match.mount.overlay) {\n let from = r.from + match.pos, to = r.to + match.pos;\n if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n overlay.ranges.push({ from, to });\n }\n }\n enter = false;\n }\n else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n enter = isCovered != 2 /* Cover.Full */;\n }\n else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n (cursor.from < cursor.to || !nest.overlay)) {\n if (!cursor.tree)\n materialize(cursor);\n let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n if (typeof nest.overlay == \"function\") {\n overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n }\n else {\n let ranges = punchRanges(this.ranges, nest.overlay ||\n (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n if (ranges.length)\n checkRanges(ranges);\n if (ranges.length || !nest.overlay)\n this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n if (!nest.overlay)\n enter = false;\n else if (ranges.length)\n covered = { ranges, depth: 0, prev: covered };\n }\n }\n else if (overlay && (range = overlay.predicate(cursor))) {\n if (range === true)\n range = new Range(cursor.from, cursor.to);\n if (range.from < range.to) {\n let last = overlay.ranges.length - 1;\n if (last >= 0 && overlay.ranges[last].to == range.from)\n overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n else\n overlay.ranges.push(range);\n }\n }\n if (enter && cursor.firstChild()) {\n if (overlay)\n overlay.depth++;\n if (covered)\n covered.depth++;\n }\n else {\n for (;;) {\n if (cursor.nextSibling())\n break;\n if (!cursor.parent())\n break scan;\n if (overlay && !--overlay.depth) {\n let ranges = punchRanges(this.ranges, overlay.ranges);\n if (ranges.length) {\n checkRanges(ranges);\n this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n }\n overlay = overlay.prev;\n }\n if (covered && !--covered.depth)\n covered = covered.prev;\n }\n }\n }\n }\n}\nfunction checkCover(covered, from, to) {\n for (let range of covered) {\n if (range.from >= to)\n break;\n if (range.to > from)\n return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n }\n return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n if (startI < endI) {\n let from = buf.buffer[startI + 1];\n nodes.push(buf.slice(startI, endI, from));\n positions.push(from - off);\n }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n let { node } = cursor, stack = [];\n let buffer = node.context.buffer;\n // Scan up to the nearest tree\n do {\n stack.push(cursor.index);\n cursor.parent();\n } while (!cursor.tree);\n // Find the index of the buffer in that tree\n let base = cursor.tree, i = base.children.indexOf(buffer);\n let buf = base.children[i], b = buf.buffer, newStack = [i];\n // Split a level in the buffer, putting the nodes before and after\n // the child that contains `node` into new buffers.\n function split(startI, endI, type, innerOffset, length, stackPos) {\n let targetI = stack[stackPos];\n let children = [], positions = [];\n sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n let from = b[targetI + 1], to = b[targetI + 2];\n newStack.push(children.length);\n let child = stackPos\n ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n : node.toTree();\n children.push(child);\n positions.push(from - innerOffset);\n sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n return new Tree(type, children, positions, length);\n }\n base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n // Move the cursor back to the target node\n for (let index of newStack) {\n let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n }\n}\nclass StructureCursor {\n constructor(root, offset) {\n this.offset = offset;\n this.done = false;\n this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n }\n // Move to the first node (in pre-order) that starts at or after `pos`.\n moveTo(pos) {\n let { cursor } = this, p = pos - this.offset;\n while (!this.done && cursor.from < p) {\n if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n else if (!cursor.next(false))\n this.done = true;\n }\n }\n hasNode(cursor) {\n this.moveTo(cursor.from);\n if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n for (let tree = this.cursor.tree;;) {\n if (tree == cursor.tree)\n return true;\n if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n tree = tree.children[0];\n else\n break;\n }\n }\n return false;\n }\n}\nclass FragmentCursor {\n constructor(fragments) {\n var _a;\n this.fragments = fragments;\n this.curTo = 0;\n this.fragI = 0;\n if (fragments.length) {\n let first = this.curFrag = fragments[0];\n this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n this.inner = new StructureCursor(first.tree, -first.offset);\n }\n else {\n this.curFrag = this.inner = null;\n }\n }\n hasNode(node) {\n while (this.curFrag && node.from >= this.curTo)\n this.nextFrag();\n return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n }\n nextFrag() {\n var _a;\n this.fragI++;\n if (this.fragI == this.fragments.length) {\n this.curFrag = this.inner = null;\n }\n else {\n let frag = this.curFrag = this.fragments[this.fragI];\n this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n this.inner = new StructureCursor(frag.tree, -frag.offset);\n }\n }\n findMounts(pos, parser) {\n var _a;\n let result = [];\n if (this.inner) {\n this.inner.cursor.moveTo(pos, 1);\n for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n if (mount && mount.parser == parser) {\n for (let i = this.fragI; i < this.fragments.length; i++) {\n let frag = this.fragments[i];\n if (frag.from >= pos.to)\n break;\n if (frag.tree == this.curFrag.tree)\n result.push({\n frag,\n pos: pos.from - frag.offset,\n mount\n });\n }\n }\n }\n }\n return result;\n }\n}\nfunction punchRanges(outer, ranges) {\n let copy = null, current = ranges;\n for (let i = 1, j = 0; i < outer.length; i++) {\n let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n for (; j < current.length; j++) {\n let r = current[j];\n if (r.from >= gapTo)\n break;\n if (r.to <= gapFrom)\n continue;\n if (!copy)\n current = copy = ranges.slice();\n if (r.from < gapFrom) {\n copy[j] = new Range(r.from, gapFrom);\n if (r.to > gapTo)\n copy.splice(j + 1, 0, new Range(gapTo, r.to));\n }\n else if (r.to > gapTo) {\n copy[j--] = new Range(gapTo, r.to);\n }\n else {\n copy.splice(j--, 1);\n }\n }\n }\n return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n let result = [];\n for (;;) {\n let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n if (inA != inB) {\n let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n if (start < end)\n result.push(new Range(start, end));\n }\n pos = Math.min(nextA, nextB);\n if (pos == 1e9)\n break;\n if (nextA == pos) {\n if (!inA)\n inA = true;\n else {\n inA = false;\n iA++;\n }\n }\n if (nextB == pos) {\n if (!inB)\n inB = true;\n else {\n inB = false;\n iB++;\n }\n }\n }\n return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n let result = [];\n for (let { pos, mount, frag } of mounts) {\n let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n if (mount.overlay) {\n let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n let changes = findCoverChanges(ranges, overlay, from, to);\n for (let i = 0, pos = from;; i++) {\n let last = i == changes.length, end = last ? to : changes[i].from;\n if (end > pos)\n result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n if (last)\n break;\n pos = changes[i].to;\n }\n }\n else {\n result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n }\n }\n return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n","import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n /**\n @internal\n */\n constructor(\n /**\n The parse that this stack is part of @internal\n */\n p, \n /**\n Holds state, input pos, buffer index triplets for all but the\n top state @internal\n */\n stack, \n /**\n The current parse state @internal\n */\n state, \n // The position at which the next reduce should take place. This\n // can be less than `this.pos` when skipped expressions have been\n // added to the stack (which should be moved outside of the next\n // reduction)\n /**\n @internal\n */\n reducePos, \n /**\n The input position up to which this stack has parsed.\n */\n pos, \n /**\n The dynamic score of the stack, including dynamic precedence\n and error-recovery penalties\n @internal\n */\n score, \n // The output buffer. Holds (type, start, end, size) quads\n // representing nodes created by the parser, where `size` is\n // amount of buffer array entries covered by this node.\n /**\n @internal\n */\n buffer, \n // The base offset of the buffer. When stacks are split, the split\n // instance shared the buffer history with its parent up to\n // `bufferBase`, which is the absolute offset (including the\n // offset of previous splits) into the buffer at which this stack\n // starts writing.\n /**\n @internal\n */\n bufferBase, \n /**\n @internal\n */\n curContext, \n /**\n @internal\n */\n lookAhead = 0, \n // A parent stack from which this was split off, if any. This is\n // set up so that it always points to a stack that has some\n // additional buffer content, never to a stack with an equal\n // `bufferBase`.\n /**\n @internal\n */\n parent) {\n this.p = p;\n this.stack = stack;\n this.state = state;\n this.reducePos = reducePos;\n this.pos = pos;\n this.score = score;\n this.buffer = buffer;\n this.bufferBase = bufferBase;\n this.curContext = curContext;\n this.lookAhead = lookAhead;\n this.parent = parent;\n }\n /**\n @internal\n */\n toString() {\n return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n }\n // Start an empty stack\n /**\n @internal\n */\n static start(p, state, pos = 0) {\n let cx = p.parser.context;\n return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n }\n /**\n The stack's current [context](#lr.ContextTracker) value, if\n any. Its type will depend on the context tracker's type\n parameter, or it will be `null` if there is no context\n tracker.\n */\n get context() { return this.curContext ? this.curContext.context : null; }\n // Push a state onto the stack, tracking its start position as well\n // as the buffer base at that point.\n /**\n @internal\n */\n pushState(state, start) {\n this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n this.state = state;\n }\n // Apply a reduce action\n /**\n @internal\n */\n reduce(action) {\n var _a;\n let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n let { parser } = this.p;\n let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */;\n if (lookaheadRecord)\n this.setLookAhead(this.pos);\n let dPrec = parser.dynamicPrecedence(type);\n if (dPrec)\n this.score += dPrec;\n if (depth == 0) {\n this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n // Zero-depth reductions are a special case—they add stuff to\n // the stack without popping anything off.\n if (type < parser.minRepeatTerm)\n this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);\n this.reduceContext(type, this.reducePos);\n return;\n }\n // Find the base index into `this.stack`, content after which will\n // be dropped. Note that with `StayFlag` reductions we need to\n // consume two extra frames (the dummy parent node for the skipped\n // expression and the state that we'll be staying in, which should\n // be moved to `this.state`).\n let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n // This is a kludge to try and detect overly deep left-associative\n // trees, which will not increase the parse stack depth and thus\n // won't be caught by the regular stack-depth limit check.\n if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n if (start == this.p.lastBigReductionStart) {\n this.p.bigReductionCount++;\n this.p.lastBigReductionSize = size;\n }\n else if (this.p.lastBigReductionSize < size) {\n this.p.bigReductionCount = 1;\n this.p.lastBigReductionStart = start;\n this.p.lastBigReductionSize = size;\n }\n }\n let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n // Store normal terms or `R -> R R` repeat reductions\n if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n this.storeNode(type, start, pos, count + 4, true);\n }\n if (action & 262144 /* Action.StayFlag */) {\n this.state = this.stack[base];\n }\n else {\n let baseStateID = this.stack[base - 3];\n this.state = parser.getGoto(baseStateID, type, true);\n }\n while (this.stack.length > base)\n this.stack.pop();\n this.reduceContext(type, start);\n }\n // Shift a value into the buffer\n /**\n @internal\n */\n storeNode(term, start, end, size = 4, mustSink = false) {\n if (term == 0 /* Term.Err */ &&\n (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n // Try to omit/merge adjacent error nodes\n let cur = this, top = this.buffer.length;\n if (top == 0 && cur.parent) {\n top = cur.bufferBase - cur.parent.bufferBase;\n cur = cur.parent;\n }\n if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n if (start == end)\n return;\n if (cur.buffer[top - 2] >= start) {\n cur.buffer[top - 2] = end;\n return;\n }\n }\n }\n if (!mustSink || this.pos == end) { // Simple case, just append\n this.buffer.push(term, start, end, size);\n }\n else { // There may be skipped nodes that have to be moved forward\n let index = this.buffer.length;\n if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) {\n let mustMove = false;\n for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) {\n if (this.buffer[scan - 1] >= 0) {\n mustMove = true;\n break;\n }\n }\n if (mustMove)\n while (index > 0 && this.buffer[index - 2] > end) {\n // Move this record forward\n this.buffer[index] = this.buffer[index - 4];\n this.buffer[index + 1] = this.buffer[index - 3];\n this.buffer[index + 2] = this.buffer[index - 2];\n this.buffer[index + 3] = this.buffer[index - 1];\n index -= 4;\n if (size > 4)\n size -= 4;\n }\n }\n this.buffer[index] = term;\n this.buffer[index + 1] = start;\n this.buffer[index + 2] = end;\n this.buffer[index + 3] = size;\n }\n }\n // Apply a shift action\n /**\n @internal\n */\n shift(action, type, start, end) {\n if (action & 131072 /* Action.GotoFlag */) {\n this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n }\n else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n let nextState = action, { parser } = this.p;\n if (end > this.pos || type <= parser.maxNode) {\n this.pos = end;\n if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n this.reducePos = end;\n }\n this.pushState(nextState, start);\n this.shiftContext(type, start);\n if (type <= parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n else { // Shift-and-stay, which means this is a skipped token\n this.pos = end;\n this.shiftContext(type, start);\n if (type <= this.p.parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n }\n // Apply an action\n /**\n @internal\n */\n apply(action, next, nextStart, nextEnd) {\n if (action & 65536 /* Action.ReduceFlag */)\n this.reduce(action);\n else\n this.shift(action, next, nextStart, nextEnd);\n }\n // Add a prebuilt (reused) node into the buffer.\n /**\n @internal\n */\n useNode(value, next) {\n let index = this.p.reused.length - 1;\n if (index < 0 || this.p.reused[index] != value) {\n this.p.reused.push(value);\n index++;\n }\n let start = this.pos;\n this.reducePos = this.pos = start + value.length;\n this.pushState(next, start);\n this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n }\n // Split the stack. Due to the buffer sharing and the fact\n // that `this.stack` tends to stay quite shallow, this isn't very\n // expensive.\n /**\n @internal\n */\n split() {\n let parent = this;\n let off = parent.buffer.length;\n // Because the top of the buffer (after this.pos) may be mutated\n // to reorder reductions and skipped tokens, and shared buffers\n // should be immutable, this copies any outstanding skipped tokens\n // to the new buffer, and puts the base pointer before them.\n while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n off -= 4;\n let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n // Make sure parent points to an actual parent with content, if there is such a parent.\n while (parent && base == parent.bufferBase)\n parent = parent.parent;\n return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n }\n // Try to recover from an error by 'deleting' (ignoring) one token.\n /**\n @internal\n */\n recoverByDelete(next, nextEnd) {\n let isNode = next <= this.p.parser.maxNode;\n if (isNode)\n this.storeNode(next, this.pos, nextEnd, 4);\n this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n this.pos = this.reducePos = nextEnd;\n this.score -= 190 /* Recover.Delete */;\n }\n /**\n Check if the given term would be able to be shifted (optionally\n after some reductions) on this stack. This can be useful for\n external tokenizers that want to make sure they only provide a\n given token when it applies.\n */\n canShift(term) {\n for (let sim = new SimulatedStack(this);;) {\n let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n if (action == 0)\n return false;\n if ((action & 65536 /* Action.ReduceFlag */) == 0)\n return true;\n sim.reduce(action);\n }\n }\n // Apply up to Recover.MaxNext recovery actions that conceptually\n // inserts some missing token or rule.\n /**\n @internal\n */\n recoverByInsert(next) {\n if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n return [];\n let nextStates = this.p.parser.nextStates(this.state);\n if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n let best = [];\n for (let i = 0, s; i < nextStates.length; i += 2) {\n if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n best.push(nextStates[i], s);\n }\n if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n let s = nextStates[i + 1];\n if (!best.some((v, i) => (i & 1) && v == s))\n best.push(nextStates[i], s);\n }\n nextStates = best;\n }\n let result = [];\n for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n let s = nextStates[i + 1];\n if (s == this.state)\n continue;\n let stack = this.split();\n stack.pushState(s, this.pos);\n stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n stack.shiftContext(nextStates[i], this.pos);\n stack.reducePos = this.pos;\n stack.score -= 200 /* Recover.Insert */;\n result.push(stack);\n }\n return result;\n }\n // Force a reduce, if possible. Return false if that can't\n // be done.\n /**\n @internal\n */\n forceReduce() {\n let { parser } = this.p;\n let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n return false;\n if (!parser.validAction(this.state, reduce)) {\n let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n let target = this.stack.length - depth * 3;\n if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n let backup = this.findForcedReduction();\n if (backup == null)\n return false;\n reduce = backup;\n }\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.score -= 100 /* Recover.Reduce */;\n }\n this.reducePos = this.pos;\n this.reduce(reduce);\n return true;\n }\n /**\n Try to scan through the automaton to find some kind of reduction\n that can be applied. Used when the regular ForcedReduce field\n isn't a valid action. @internal\n */\n findForcedReduction() {\n let { parser } = this.p, seen = [];\n let explore = (state, depth) => {\n if (seen.includes(state))\n return;\n seen.push(state);\n return parser.allActions(state, (action) => {\n if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n else if (action & 65536 /* Action.ReduceFlag */) {\n let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n if (rDepth > 1) {\n let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n }\n }\n else {\n let found = explore(action, depth + 1);\n if (found != null)\n return found;\n }\n });\n };\n return explore(this.state, 0);\n }\n /**\n @internal\n */\n forceAll() {\n while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n if (!this.forceReduce()) {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n break;\n }\n }\n return this;\n }\n /**\n Check whether this state has no further actions (assumed to be a direct descendant of the\n top state, since any other states must be able to continue\n somehow). @internal\n */\n get deadEnd() {\n if (this.stack.length != 3)\n return false;\n let { parser } = this.p;\n return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n }\n /**\n Restart the stack (put it back in its start state). Only safe\n when this.stack.length == 3 (state is directly below the top\n state). @internal\n */\n restart() {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.state = this.stack[0];\n this.stack.length = 0;\n }\n /**\n @internal\n */\n sameState(other) {\n if (this.state != other.state || this.stack.length != other.stack.length)\n return false;\n for (let i = 0; i < this.stack.length; i += 3)\n if (this.stack[i] != other.stack[i])\n return false;\n return true;\n }\n /**\n Get the parser used by this stack.\n */\n get parser() { return this.p.parser; }\n /**\n Test whether a given dialect (by numeric ID, as exported from\n the terms file) is enabled.\n */\n dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n shiftContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n reduceContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n /**\n @internal\n */\n emitContext() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -3)\n this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n }\n /**\n @internal\n */\n emitLookAhead() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -4)\n this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n }\n updateContext(context) {\n if (context != this.curContext.context) {\n let newCx = new StackContext(this.curContext.tracker, context);\n if (newCx.hash != this.curContext.hash)\n this.emitContext();\n this.curContext = newCx;\n }\n }\n /**\n @internal\n */\n setLookAhead(lookAhead) {\n if (lookAhead > this.lookAhead) {\n this.emitLookAhead();\n this.lookAhead = lookAhead;\n }\n }\n /**\n @internal\n */\n close() {\n if (this.curContext && this.curContext.tracker.strict)\n this.emitContext();\n if (this.lookAhead > 0)\n this.emitLookAhead();\n }\n}\nclass StackContext {\n constructor(tracker, context) {\n this.tracker = tracker;\n this.context = context;\n this.hash = tracker.strict ? tracker.hash(context) : 0;\n }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n constructor(start) {\n this.start = start;\n this.state = start.state;\n this.stack = start.stack;\n this.base = this.stack.length;\n }\n reduce(action) {\n let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n if (depth == 0) {\n if (this.stack == this.start.stack)\n this.stack = this.stack.slice();\n this.stack.push(this.state, 0, 0);\n this.base += 3;\n }\n else {\n this.base -= (depth - 1) * 3;\n }\n let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n this.state = goto;\n }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n constructor(stack, pos, index) {\n this.stack = stack;\n this.pos = pos;\n this.index = index;\n this.buffer = stack.buffer;\n if (this.index == 0)\n this.maybeNext();\n }\n static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n }\n maybeNext() {\n let next = this.stack.parent;\n if (next != null) {\n this.index = this.stack.bufferBase - next.bufferBase;\n this.stack = next;\n this.buffer = next.buffer;\n }\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n next() {\n this.index -= 4;\n this.pos -= 4;\n if (this.index == 0)\n this.maybeNext();\n }\n fork() {\n return new StackBufferCursor(this.stack, this.pos, this.index);\n }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n if (typeof input != \"string\")\n return input;\n let array = null;\n for (let pos = 0, out = 0; pos < input.length;) {\n let value = 0;\n for (;;) {\n let next = input.charCodeAt(pos++), stop = false;\n if (next == 126 /* Encode.BigValCode */) {\n value = 65535 /* Encode.BigVal */;\n break;\n }\n if (next >= 92 /* Encode.Gap2 */)\n next--;\n if (next >= 34 /* Encode.Gap1 */)\n next--;\n let digit = next - 32 /* Encode.Start */;\n if (digit >= 46 /* Encode.Base */) {\n digit -= 46 /* Encode.Base */;\n stop = true;\n }\n value += digit;\n if (stop)\n break;\n value *= 46 /* Encode.Base */;\n }\n if (array)\n array[out++] = value;\n else\n array = new Type(value);\n }\n return array;\n}\n\nclass CachedToken {\n constructor() {\n this.start = -1;\n this.value = -1;\n this.end = -1;\n this.extended = -1;\n this.lookAhead = 0;\n this.mask = 0;\n this.context = 0;\n }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n input, \n /**\n @internal\n */\n ranges) {\n this.input = input;\n this.ranges = ranges;\n /**\n @internal\n */\n this.chunk = \"\";\n /**\n @internal\n */\n this.chunkOff = 0;\n /**\n Backup chunk\n */\n this.chunk2 = \"\";\n this.chunk2Pos = 0;\n /**\n The character code of the next code unit in the input, or -1\n when the stream is at the end of the input.\n */\n this.next = -1;\n /**\n @internal\n */\n this.token = nullToken;\n this.rangeIndex = 0;\n this.pos = this.chunkPos = ranges[0].from;\n this.range = ranges[0];\n this.end = ranges[ranges.length - 1].to;\n this.readNext();\n }\n /**\n @internal\n */\n resolveOffset(offset, assoc) {\n let range = this.range, index = this.rangeIndex;\n let pos = this.pos + offset;\n while (pos < range.from) {\n if (!index)\n return null;\n let next = this.ranges[--index];\n pos -= range.from - next.to;\n range = next;\n }\n while (assoc < 0 ? pos > range.to : pos >= range.to) {\n if (index == this.ranges.length - 1)\n return null;\n let next = this.ranges[++index];\n pos += next.from - range.to;\n range = next;\n }\n return pos;\n }\n /**\n @internal\n */\n clipPos(pos) {\n if (pos >= this.range.from && pos < this.range.to)\n return pos;\n for (let range of this.ranges)\n if (range.to > pos)\n return Math.max(pos, range.from);\n return this.end;\n }\n /**\n Look at a code unit near the stream position. `.peek(0)` equals\n `.next`, `.peek(-1)` gives you the previous character, and so\n on.\n \n Note that looking around during tokenizing creates dependencies\n on potentially far-away content, which may reduce the\n effectiveness incremental parsing—when looking forward—or even\n cause invalid reparses when looking backward more than 25 code\n units, since the library does not track lookbehind.\n */\n peek(offset) {\n let idx = this.chunkOff + offset, pos, result;\n if (idx >= 0 && idx < this.chunk.length) {\n pos = this.pos + offset;\n result = this.chunk.charCodeAt(idx);\n }\n else {\n let resolved = this.resolveOffset(offset, 1);\n if (resolved == null)\n return -1;\n pos = resolved;\n if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n }\n else {\n let i = this.rangeIndex, range = this.range;\n while (range.to <= pos)\n range = this.ranges[++i];\n this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n if (pos + this.chunk2.length > range.to)\n this.chunk2 = this.chunk2.slice(0, range.to - pos);\n result = this.chunk2.charCodeAt(0);\n }\n }\n if (pos >= this.token.lookAhead)\n this.token.lookAhead = pos + 1;\n return result;\n }\n /**\n Accept a token. By default, the end of the token is set to the\n current stream position, but you can pass an offset (relative to\n the stream position) to change that.\n */\n acceptToken(token, endOffset = 0) {\n let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n if (end == null || end < this.token.start)\n throw new RangeError(\"Token end out of bounds\");\n this.token.value = token;\n this.token.end = end;\n }\n /**\n Accept a token ending at a specific given position.\n */\n acceptTokenTo(token, endPos) {\n this.token.value = token;\n this.token.end = endPos;\n }\n getChunk() {\n if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n let { chunk, chunkPos } = this;\n this.chunk = this.chunk2;\n this.chunkPos = this.chunk2Pos;\n this.chunk2 = chunk;\n this.chunk2Pos = chunkPos;\n this.chunkOff = this.pos - this.chunkPos;\n }\n else {\n this.chunk2 = this.chunk;\n this.chunk2Pos = this.chunkPos;\n let nextChunk = this.input.chunk(this.pos);\n let end = this.pos + nextChunk.length;\n this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n this.chunkPos = this.pos;\n this.chunkOff = 0;\n }\n }\n readNext() {\n if (this.chunkOff >= this.chunk.length) {\n this.getChunk();\n if (this.chunkOff == this.chunk.length)\n return this.next = -1;\n }\n return this.next = this.chunk.charCodeAt(this.chunkOff);\n }\n /**\n Move the stream forward N (defaults to 1) code units. Returns\n the new value of [`next`](#lr.InputStream.next).\n */\n advance(n = 1) {\n this.chunkOff += n;\n while (this.pos + n >= this.range.to) {\n if (this.rangeIndex == this.ranges.length - 1)\n return this.setDone();\n n -= this.range.to - this.pos;\n this.range = this.ranges[++this.rangeIndex];\n this.pos = this.range.from;\n }\n this.pos += n;\n if (this.pos >= this.token.lookAhead)\n this.token.lookAhead = this.pos + 1;\n return this.readNext();\n }\n setDone() {\n this.pos = this.chunkPos = this.end;\n this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n this.chunk = \"\";\n return this.next = -1;\n }\n /**\n @internal\n */\n reset(pos, token) {\n if (token) {\n this.token = token;\n token.start = pos;\n token.lookAhead = pos + 1;\n token.value = token.extended = -1;\n }\n else {\n this.token = nullToken;\n }\n if (this.pos != pos) {\n this.pos = pos;\n if (pos == this.end) {\n this.setDone();\n return this;\n }\n while (pos < this.range.from)\n this.range = this.ranges[--this.rangeIndex];\n while (pos >= this.range.to)\n this.range = this.ranges[++this.rangeIndex];\n if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n this.chunkOff = pos - this.chunkPos;\n }\n else {\n this.chunk = \"\";\n this.chunkOff = 0;\n }\n this.readNext();\n }\n return this;\n }\n /**\n @internal\n */\n read(from, to) {\n if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n if (from >= this.range.from && to <= this.range.to)\n return this.input.read(from, to);\n let result = \"\";\n for (let r of this.ranges) {\n if (r.from >= to)\n break;\n if (r.to > from)\n result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n }\n return result;\n }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n constructor(data, id) {\n this.data = data;\n this.id = id;\n }\n token(input, stack) {\n let { parser } = stack.p;\n readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n constructor(data, precTable, elseToken) {\n this.precTable = precTable;\n this.elseToken = elseToken;\n this.data = typeof data == \"string\" ? decodeArray(data) : data;\n }\n token(input, stack) {\n let start = input.pos, skipped = 0;\n for (;;) {\n let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n readToken(this.data, input, stack, 0, this.data, this.precTable);\n if (input.token.value > -1)\n break;\n if (this.elseToken == null)\n return;\n if (!atEof)\n skipped++;\n if (nextPos == null)\n break;\n input.reset(nextPos, input.token);\n }\n if (skipped) {\n input.reset(start, input.token);\n input.acceptToken(this.elseToken, skipped);\n }\n }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n /**\n Create a tokenizer. The first argument is the function that,\n given an input stream, scans for the types of tokens it\n recognizes at the stream's position, and calls\n [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n one.\n */\n constructor(\n /**\n @internal\n */\n token, options = {}) {\n this.token = token;\n this.contextual = !!options.contextual;\n this.fallback = !!options.fallback;\n this.extend = !!options.extend;\n }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n// - A group bitmask, indicating what token groups are reachable from\n// this state, so that paths that can only lead to tokens not in\n// any of the current groups can be cut off early.\n//\n// - The position of the end of the state's sequence of accepting\n// tokens\n//\n// - The number of outgoing edges for the state\n//\n// - The accepting tokens, as (token id, group mask) pairs\n//\n// - The outgoing edges, as (start character, end character, state\n// index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n scan: for (;;) {\n if ((groupMask & data[state]) == 0)\n break;\n let accEnd = data[state + 1];\n // Check whether this state can lead to a token in the current group\n // Accept tokens in this state, possibly overwriting\n // lower-precedence / shorter tokens\n for (let i = state + 3; i < accEnd; i += 2)\n if ((data[i + 1] & groupMask) > 0) {\n let term = data[i];\n if (dialect.allows(term) &&\n (input.token.value == -1 || input.token.value == term ||\n overrides(term, input.token.value, precTable, precOffset))) {\n input.acceptToken(term);\n break;\n }\n }\n let next = input.next, low = 0, high = data[state + 2];\n // Special case for EOF\n if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n state = data[accEnd + high * 3 - 1];\n continue scan;\n }\n // Do a binary search on the state's edges\n for (; low < high;) {\n let mid = (low + high) >> 1;\n let index = accEnd + mid + (mid << 1);\n let from = data[index], to = data[index + 1] || 0x10000;\n if (next < from)\n high = mid;\n else if (next >= to)\n low = mid + 1;\n else {\n state = data[index + 2];\n input.advance();\n continue scan;\n }\n }\n break;\n }\n}\nfunction findOffset(data, start, term) {\n for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n if (next == term)\n return i - start;\n return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n let iPrev = findOffset(tableData, tableOffset, prev);\n return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n let cursor = tree.cursor(IterMode.IncludeAnonymous);\n cursor.moveTo(pos);\n for (;;) {\n if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n for (;;) {\n if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))\n : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));\n if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n break;\n if (!cursor.parent())\n return side < 0 ? 0 : tree.length;\n }\n }\n}\nclass FragmentCursor {\n constructor(fragments, nodeSet) {\n this.fragments = fragments;\n this.nodeSet = nodeSet;\n this.i = 0;\n this.fragment = null;\n this.safeFrom = -1;\n this.safeTo = -1;\n this.trees = [];\n this.start = [];\n this.index = [];\n this.nextFragment();\n }\n nextFragment() {\n let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n if (fr) {\n this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n while (this.trees.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n }\n this.trees.push(fr.tree);\n this.start.push(-fr.offset);\n this.index.push(0);\n this.nextStart = this.safeFrom;\n }\n else {\n this.nextStart = 1e9;\n }\n }\n // `pos` must be >= any previously given `pos` for this cursor\n nodeAt(pos) {\n if (pos < this.nextStart)\n return null;\n while (this.fragment && this.safeTo <= pos)\n this.nextFragment();\n if (!this.fragment)\n return null;\n for (;;) {\n let last = this.trees.length - 1;\n if (last < 0) { // End of tree\n this.nextFragment();\n return null;\n }\n let top = this.trees[last], index = this.index[last];\n if (index == top.children.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n continue;\n }\n let next = top.children[index];\n let start = this.start[last] + top.positions[index];\n if (start > pos) {\n this.nextStart = start;\n return null;\n }\n if (next instanceof Tree) {\n if (start == pos) {\n if (start < this.safeFrom)\n return null;\n let end = start + next.length;\n if (end <= this.safeTo) {\n let lookAhead = next.prop(NodeProp.lookAhead);\n if (!lookAhead || end + lookAhead < this.fragment.to)\n return next;\n }\n }\n this.index[last]++;\n if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n this.trees.push(next);\n this.start.push(start);\n this.index.push(0);\n }\n }\n else {\n this.index[last]++;\n this.nextStart = start + next.length;\n }\n }\n }\n}\nclass TokenCache {\n constructor(parser, stream) {\n this.stream = stream;\n this.tokens = [];\n this.mainToken = null;\n this.actions = [];\n this.tokens = parser.tokenizers.map(_ => new CachedToken);\n }\n getActions(stack) {\n let actionIndex = 0;\n let main = null;\n let { parser } = stack.p, { tokenizers } = parser;\n let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n let context = stack.curContext ? stack.curContext.hash : 0;\n let lookAhead = 0;\n for (let i = 0; i < tokenizers.length; i++) {\n if (((1 << i) & mask) == 0)\n continue;\n let tokenizer = tokenizers[i], token = this.tokens[i];\n if (main && !tokenizer.fallback)\n continue;\n if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n this.updateCachedToken(token, tokenizer, stack);\n token.mask = mask;\n token.context = context;\n }\n if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)\n lookAhead = Math.max(token.lookAhead, lookAhead);\n if (token.value != 0 /* Term.Err */) {\n let startIndex = actionIndex;\n if (token.extended > -1)\n actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n if (!tokenizer.extend) {\n main = token;\n if (actionIndex > startIndex)\n break;\n }\n }\n }\n while (this.actions.length > actionIndex)\n this.actions.pop();\n if (lookAhead)\n stack.setLookAhead(lookAhead);\n if (!main && stack.pos == this.stream.end) {\n main = new CachedToken;\n main.value = stack.p.parser.eofTerm;\n main.start = main.end = stack.pos;\n actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n }\n this.mainToken = main;\n return this.actions;\n }\n getMainToken(stack) {\n if (this.mainToken)\n return this.mainToken;\n let main = new CachedToken, { pos, p } = stack;\n main.start = pos;\n main.end = Math.min(pos + 1, p.stream.end);\n main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n return main;\n }\n updateCachedToken(token, tokenizer, stack) {\n let start = this.stream.clipPos(stack.pos);\n tokenizer.token(this.stream.reset(start, token), stack);\n if (token.value > -1) {\n let { parser } = stack.p;\n for (let i = 0; i < parser.specialized.length; i++)\n if (parser.specialized[i] == token.value) {\n let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n if ((result & 1) == 0 /* Specialize.Specialize */)\n token.value = result >> 1;\n else\n token.extended = result >> 1;\n break;\n }\n }\n }\n else {\n token.value = 0 /* Term.Err */;\n token.end = this.stream.clipPos(start + 1);\n }\n }\n putAction(action, token, end, index) {\n // Don't add duplicate actions\n for (let i = 0; i < index; i += 3)\n if (this.actions[i] == action)\n return index;\n this.actions[index++] = action;\n this.actions[index++] = token;\n this.actions[index++] = end;\n return index;\n }\n addActions(stack, token, end, index) {\n let { state } = stack, { parser } = stack.p, { data } = parser;\n for (let set = 0; set < 2; set++) {\n for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n if (data[i] == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */) {\n i = pair(data, i + 2);\n }\n else {\n if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n index = this.putAction(pair(data, i + 2), token, end, index);\n break;\n }\n }\n if (data[i] == token)\n index = this.putAction(pair(data, i + 1), token, end, index);\n }\n }\n return index;\n }\n}\nclass Parse {\n constructor(parser, input, fragments, ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.recovering = 0;\n this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n this.minStackPos = 0;\n this.reused = [];\n this.stoppedAt = null;\n this.lastBigReductionStart = -1;\n this.lastBigReductionSize = 0;\n this.bigReductionCount = 0;\n this.stream = new InputStream(input, ranges);\n this.tokens = new TokenCache(parser, this.stream);\n this.topTerm = parser.top[1];\n let { from } = ranges[0];\n this.stacks = [Stack.start(this, parser.top[0], from)];\n this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n ? new FragmentCursor(fragments, parser.nodeSet) : null;\n }\n get parsedPos() {\n return this.minStackPos;\n }\n // Move the parser forward. This will process all parse stacks at\n // `this.pos` and try to advance them to a further position. If no\n // stack for such a position is found, it'll start error-recovery.\n //\n // When the parse is finished, this will return a syntax tree. When\n // not, it returns `null`.\n advance() {\n let stacks = this.stacks, pos = this.minStackPos;\n // This will hold stacks beyond `pos`.\n let newStacks = this.stacks = [];\n let stopped, stoppedTokens;\n // If a large amount of reductions happened with the same start\n // position, force the stack out of that production in order to\n // avoid creating a tree too deep to recurse through.\n // (This is an ugly kludge, because unfortunately there is no\n // straightforward, cheap way to check for this happening, due to\n // the history of reductions only being available in an\n // expensive-to-access format in the stack buffers.)\n if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n let [s] = stacks;\n while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n this.bigReductionCount = this.lastBigReductionSize = 0;\n }\n // Keep advancing any stacks at `pos` until they either move\n // forward or can't be advanced. Gather stacks that can't be\n // advanced further in `stopped`.\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i];\n for (;;) {\n this.tokens.mainToken = null;\n if (stack.pos > pos) {\n newStacks.push(stack);\n }\n else if (this.advanceStack(stack, newStacks, stacks)) {\n continue;\n }\n else {\n if (!stopped) {\n stopped = [];\n stoppedTokens = [];\n }\n stopped.push(stack);\n let tok = this.tokens.getMainToken(stack);\n stoppedTokens.push(tok.value, tok.end);\n }\n break;\n }\n }\n if (!newStacks.length) {\n let finished = stopped && findFinished(stopped);\n if (finished) {\n if (verbose)\n console.log(\"Finish with \" + this.stackID(finished));\n return this.stackToTree(finished);\n }\n if (this.parser.strict) {\n if (verbose && stopped)\n console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n throw new SyntaxError(\"No parse at \" + pos);\n }\n if (!this.recovering)\n this.recovering = 5 /* Rec.Distance */;\n }\n if (this.recovering && stopped) {\n let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n : this.runRecovery(stopped, stoppedTokens, newStacks);\n if (finished) {\n if (verbose)\n console.log(\"Force-finish \" + this.stackID(finished));\n return this.stackToTree(finished.forceAll());\n }\n }\n if (this.recovering) {\n let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n if (newStacks.length > maxRemaining) {\n newStacks.sort((a, b) => b.score - a.score);\n while (newStacks.length > maxRemaining)\n newStacks.pop();\n }\n if (newStacks.some(s => s.reducePos > pos))\n this.recovering--;\n }\n else if (newStacks.length > 1) {\n // Prune stacks that are in the same state, or that have been\n // running without splitting for a while, to avoid getting stuck\n // with multiple successful stacks running endlessly on.\n outer: for (let i = 0; i < newStacks.length - 1; i++) {\n let stack = newStacks[i];\n for (let j = i + 1; j < newStacks.length; j++) {\n let other = newStacks[j];\n if (stack.sameState(other) ||\n stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n newStacks.splice(j--, 1);\n }\n else {\n newStacks.splice(i--, 1);\n continue outer;\n }\n }\n }\n }\n if (newStacks.length > 12 /* Rec.MaxStackCount */)\n newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n }\n this.minStackPos = newStacks[0].pos;\n for (let i = 1; i < newStacks.length; i++)\n if (newStacks[i].pos < this.minStackPos)\n this.minStackPos = newStacks[i].pos;\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n // Returns an updated version of the given stack, or null if the\n // stack can't advance normally. When `split` and `stacks` are\n // given, stacks split off by ambiguous operations will be pushed to\n // `split`, or added to `stacks` if they move `pos` forward.\n advanceStack(stack, stacks, split) {\n let start = stack.pos, { parser } = this;\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (this.stoppedAt != null && start > this.stoppedAt)\n return stack.forceReduce() ? stack : null;\n if (this.fragments) {\n let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n for (let cached = this.fragments.nodeAt(start); cached;) {\n let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n stack.useNode(cached, match);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n return true;\n }\n if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n break;\n let inner = cached.children[0];\n if (inner instanceof Tree && cached.positions[0] == 0)\n cached = inner;\n else\n break;\n }\n }\n let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n if (defaultReduce > 0) {\n stack.reduce(defaultReduce);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n return true;\n }\n if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n }\n let actions = this.tokens.getActions(stack);\n for (let i = 0; i < actions.length;) {\n let action = actions[i++], term = actions[i++], end = actions[i++];\n let last = i == actions.length || !split;\n let localStack = last ? stack : stack.split();\n let main = this.tokens.mainToken;\n localStack.apply(action, term, main ? main.start : localStack.pos, end);\n if (verbose)\n console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n if (last)\n return true;\n else if (localStack.pos > start)\n stacks.push(localStack);\n else\n split.push(localStack);\n }\n return false;\n }\n // Advance a given stack forward as far as it will go. Returns the\n // (possibly updated) stack if it got stuck, or null if it moved\n // forward and was given to `pushStackDedup`.\n advanceFully(stack, newStacks) {\n let pos = stack.pos;\n for (;;) {\n if (!this.advanceStack(stack, null, null))\n return false;\n if (stack.pos > pos) {\n pushStackDedup(stack, newStacks);\n return true;\n }\n }\n }\n runRecovery(stacks, tokens, newStacks) {\n let finished = null, restarted = false;\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (stack.deadEnd) {\n if (restarted)\n continue;\n restarted = true;\n stack.restart();\n if (verbose)\n console.log(base + this.stackID(stack) + \" (restarted)\");\n let done = this.advanceFully(stack, newStacks);\n if (done)\n continue;\n }\n let force = stack.split(), forceBase = base;\n for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n if (verbose)\n console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n let done = this.advanceFully(force, newStacks);\n if (done)\n break;\n if (verbose)\n forceBase = this.stackID(force) + \" -> \";\n }\n for (let insert of stack.recoverByInsert(token)) {\n if (verbose)\n console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n this.advanceFully(insert, newStacks);\n }\n if (this.stream.end > stack.pos) {\n if (tokenEnd == stack.pos) {\n tokenEnd++;\n token = 0 /* Term.Err */;\n }\n stack.recoverByDelete(token, tokenEnd);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n pushStackDedup(stack, newStacks);\n }\n else if (!finished || finished.score < stack.score) {\n finished = stack;\n }\n }\n return finished;\n }\n // Convert the stack's buffer to a syntax tree.\n stackToTree(stack) {\n stack.close();\n return Tree.build({ buffer: StackBufferCursor.create(stack),\n nodeSet: this.parser.nodeSet,\n topID: this.topTerm,\n maxBufferLength: this.parser.bufferLength,\n reused: this.reused,\n start: this.ranges[0].from,\n length: stack.pos - this.ranges[0].from,\n minRepeatType: this.parser.minRepeatTerm });\n }\n stackID(stack) {\n let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n if (!id)\n stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n return id + stack;\n }\n}\nfunction pushStackDedup(stack, newStacks) {\n for (let i = 0; i < newStacks.length; i++) {\n let other = newStacks[i];\n if (other.pos == stack.pos && other.sameState(stack)) {\n if (newStacks[i].score < stack.score)\n newStacks[i] = stack;\n return;\n }\n }\n newStacks.push(stack);\n}\nclass Dialect {\n constructor(source, flags, disabled) {\n this.source = source;\n this.flags = flags;\n this.disabled = disabled;\n }\n allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n /**\n Define a context tracker.\n */\n constructor(spec) {\n this.start = spec.start;\n this.shift = spec.shift || id;\n this.reduce = spec.reduce || id;\n this.reuse = spec.reuse || id;\n this.hash = spec.hash || (() => 0);\n this.strict = spec.strict !== false;\n }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n /**\n @internal\n */\n constructor(spec) {\n super();\n /**\n @internal\n */\n this.wrappers = [];\n if (spec.version != 14 /* File.Version */)\n throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n let nodeNames = spec.nodeNames.split(\" \");\n this.minRepeatTerm = nodeNames.length;\n for (let i = 0; i < spec.repeatNodeCount; i++)\n nodeNames.push(\"\");\n let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n let nodeProps = [];\n for (let i = 0; i < nodeNames.length; i++)\n nodeProps.push([]);\n function setProp(nodeID, prop, value) {\n nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n }\n if (spec.nodeProps)\n for (let propSpec of spec.nodeProps) {\n let prop = propSpec[0];\n if (typeof prop == \"string\")\n prop = NodeProp[prop];\n for (let i = 1; i < propSpec.length;) {\n let next = propSpec[i++];\n if (next >= 0) {\n setProp(next, prop, propSpec[i++]);\n }\n else {\n let value = propSpec[i + -next];\n for (let j = -next; j > 0; j--)\n setProp(propSpec[i++], prop, value);\n i++;\n }\n }\n }\n this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n name: i >= this.minRepeatTerm ? undefined : name,\n id: i,\n props: nodeProps[i],\n top: topTerms.indexOf(i) > -1,\n error: i == 0,\n skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n })));\n if (spec.propSources)\n this.nodeSet = this.nodeSet.extend(...spec.propSources);\n this.strict = false;\n this.bufferLength = DefaultBufferLength;\n let tokenArray = decodeArray(spec.tokenData);\n this.context = spec.context;\n this.specializerSpecs = spec.specialized || [];\n this.specialized = new Uint16Array(this.specializerSpecs.length);\n for (let i = 0; i < this.specializerSpecs.length; i++)\n this.specialized[i] = this.specializerSpecs[i].term;\n this.specializers = this.specializerSpecs.map(getSpecializer);\n this.states = decodeArray(spec.states, Uint32Array);\n this.data = decodeArray(spec.stateData);\n this.goto = decodeArray(spec.goto);\n this.maxTerm = spec.maxTerm;\n this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n this.topRules = spec.topRules;\n this.dialects = spec.dialects || {};\n this.dynamicPrecedences = spec.dynamicPrecedences || null;\n this.tokenPrecTable = spec.tokenPrec;\n this.termNames = spec.termNames || null;\n this.maxNode = this.nodeSet.types.length - 1;\n this.dialect = this.parseDialect();\n this.top = this.topRules[Object.keys(this.topRules)[0]];\n }\n createParse(input, fragments, ranges) {\n let parse = new Parse(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /**\n Get a goto table entry @internal\n */\n getGoto(state, term, loose = false) {\n let table = this.goto;\n if (term >= table[0])\n return -1;\n for (let pos = table[term + 1];;) {\n let groupTag = table[pos++], last = groupTag & 1;\n let target = table[pos++];\n if (last && loose)\n return target;\n for (let end = pos + (groupTag >> 1); pos < end; pos++)\n if (table[pos] == state)\n return target;\n if (last)\n return -1;\n }\n }\n /**\n Check if this state has an action for a given terminal @internal\n */\n hasAction(state, terminal) {\n let data = this.data;\n for (let set = 0; set < 2; set++) {\n for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n if ((next = data[i]) == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */)\n next = data[i = pair(data, i + 2)];\n else if (data[i + 1] == 2 /* Seq.Other */)\n return pair(data, i + 2);\n else\n break;\n }\n if (next == terminal || next == 0 /* Term.Err */)\n return pair(data, i + 1);\n }\n }\n return 0;\n }\n /**\n @internal\n */\n stateSlot(state, slot) {\n return this.states[(state * 6 /* ParseState.Size */) + slot];\n }\n /**\n @internal\n */\n stateFlag(state, flag) {\n return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n }\n /**\n @internal\n */\n validAction(state, action) {\n return !!this.allActions(state, a => a == action ? true : null);\n }\n /**\n @internal\n */\n allActions(state, action) {\n let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n let result = deflt ? action(deflt) : undefined;\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n result = action(pair(this.data, i + 1));\n }\n return result;\n }\n /**\n Get the states that can follow this one through shift actions or\n goto jumps. @internal\n */\n nextStates(state) {\n let result = [];\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n let value = this.data[i + 1];\n if (!result.some((v, i) => (i & 1) && v == value))\n result.push(this.data[i], value);\n }\n }\n return result;\n }\n /**\n Configure the parser. Returns a new parser instance that has the\n given settings modified. Settings not provided in `config` are\n kept from the original parser.\n */\n configure(config) {\n // Hideous reflection-based kludge to make it easy to create a\n // slightly modified copy of a parser.\n let copy = Object.assign(Object.create(LRParser.prototype), this);\n if (config.props)\n copy.nodeSet = this.nodeSet.extend(...config.props);\n if (config.top) {\n let info = this.topRules[config.top];\n if (!info)\n throw new RangeError(`Invalid top rule name ${config.top}`);\n copy.top = info;\n }\n if (config.tokenizers)\n copy.tokenizers = this.tokenizers.map(t => {\n let found = config.tokenizers.find(r => r.from == t);\n return found ? found.to : t;\n });\n if (config.specializers) {\n copy.specializers = this.specializers.slice();\n copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n let found = config.specializers.find(r => r.from == s.external);\n if (!found)\n return s;\n let spec = Object.assign(Object.assign({}, s), { external: found.to });\n copy.specializers[i] = getSpecializer(spec);\n return spec;\n });\n }\n if (config.contextTracker)\n copy.context = config.contextTracker;\n if (config.dialect)\n copy.dialect = this.parseDialect(config.dialect);\n if (config.strict != null)\n copy.strict = config.strict;\n if (config.wrap)\n copy.wrappers = copy.wrappers.concat(config.wrap);\n if (config.bufferLength != null)\n copy.bufferLength = config.bufferLength;\n return copy;\n }\n /**\n Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n are registered for this parser.\n */\n hasWrappers() {\n return this.wrappers.length > 0;\n }\n /**\n Returns the name associated with a given term. This will only\n work for all terms when the parser was generated with the\n `--names` option. By default, only the names of tagged terms are\n stored.\n */\n getName(term) {\n return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n }\n /**\n The eof term id is always allocated directly after the node\n types. @internal\n */\n get eofTerm() { return this.maxNode + 1; }\n /**\n The type of top node produced by the parser.\n */\n get topNode() { return this.nodeSet.types[this.top[1]]; }\n /**\n @internal\n */\n dynamicPrecedence(term) {\n let prec = this.dynamicPrecedences;\n return prec == null ? 0 : prec[term] || 0;\n }\n /**\n @internal\n */\n parseDialect(dialect) {\n let values = Object.keys(this.dialects), flags = values.map(() => false);\n if (dialect)\n for (let part of dialect.split(\" \")) {\n let id = values.indexOf(part);\n if (id >= 0)\n flags[id] = true;\n }\n let disabled = null;\n for (let i = 0; i < values.length; i++)\n if (!flags[i]) {\n for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n }\n return new Dialect(dialect, flags, disabled);\n }\n /**\n Used by the output of the parser generator. Not available to\n user code. @hide\n */\n static deserialize(spec) {\n return new LRParser(spec);\n }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n let best = null;\n for (let stack of stacks) {\n let stopped = stack.p.stoppedAt;\n if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n (!best || best.score < stack.score))\n best = stack;\n }\n return best;\n}\nfunction getSpecializer(spec) {\n if (spec.external) {\n let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n return (value, stack) => (spec.external(value, stack) << 1) | mask;\n }\n return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n","import { LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst Json$1 = 1,\n Logfmt$1 = 2,\n Unpack$1 = 3,\n Pattern$1 = 4,\n Regexp$1 = 5,\n Unwrap$1 = 6,\n LabelFormat$1 = 7,\n LineFormat$1 = 8,\n LabelReplace$1 = 9,\n Vector$1 = 10,\n Offset$1 = 11,\n Bool$1 = 12,\n On$1 = 13,\n Ignoring$1 = 14,\n GroupLeft$1 = 15,\n GroupRight$1 = 16,\n Decolorize$1 = 17,\n Drop$1 = 18,\n Keep$1 = 19,\n By$1 = 20,\n Without$1 = 21,\n And$1 = 22,\n Or$1 = 23,\n Unless$1 = 24,\n Sum$1 = 25,\n Avg$1 = 26,\n Count$1 = 27,\n Max$1 = 28,\n Min$1 = 29,\n Stddev$1 = 30,\n Stdvar$1 = 31,\n Bottomk$1 = 32,\n Topk$1 = 33,\n Sort$1 = 34,\n Sort_Desc$1 = 35;\n\nconst keywordTokens = {\n json: Json$1,\n logfmt: Logfmt$1,\n unpack: Unpack$1,\n pattern: Pattern$1,\n regexp: Regexp$1,\n label_format: LabelFormat$1,\n line_format: LineFormat$1,\n label_replace: LabelReplace$1,\n vector: Vector$1,\n offset: Offset$1,\n bool: Bool$1,\n on: On$1,\n ignoring: Ignoring$1,\n group_left: GroupLeft$1,\n group_right: GroupRight$1,\n unwrap: Unwrap$1,\n decolorize: Decolorize$1,\n drop: Drop$1,\n keep: Keep$1,\n};\n\nconst specializeIdentifier = (value) => {\n return keywordTokens[value.toLowerCase()] || -1;\n};\n\nconst contextualKeywordTokens = {\n by: By$1,\n without: Without$1,\n and: And$1,\n or: Or$1,\n unless: Unless$1,\n sum: Sum$1,\n avg: Avg$1,\n count: Count$1,\n max: Max$1,\n min: Min$1,\n stddev: Stddev$1,\n stdvar: Stdvar$1,\n bottomk: Bottomk$1,\n topk: Topk$1,\n sort: Sort$1,\n sort_desc: Sort_Desc$1,\n};\n\nconst extendIdentifier = (value) => {\n return contextualKeywordTokens[value.toLowerCase()] || -1;\n};\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Identifier = {__proto__:null,ip:295, count_over_time:301, rate:303, rate_counter:305, bytes_over_time:307, bytes_rate:309, avg_over_time:311, sum_over_time:313, min_over_time:315, max_over_time:317, stddev_over_time:319, stdvar_over_time:321, quantile_over_time:323, first_over_time:325, last_over_time:327, absent_over_time:329, bytes:335, duration:337, duration_seconds:339};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"EtOYQPOOO#cQPO'#DUOOQO'#ER'#ERO#hQPO'#ERO$}QPO'#DTOYQPO'#DTOOQO'#Ed'#EdO%[QPO'#EcOOQO'#FP'#FPO%aQPO'#FOQ%lQPOOO&mQPO'#F]O&rQPO'#F^OOQO'#Eb'#EbOOQO'#DS'#DSOOQO'#Ee'#EeOOQO'#Ef'#EfOOQO'#Eg'#EgOOQO'#Eh'#EhOOQO'#Ei'#EiOOQO'#Ej'#EjOOQO'#Ek'#EkOOQO'#El'#ElOOQO'#Em'#EmOOQO'#En'#EnOOQO'#Eo'#EoOOQO'#Ep'#EpOOQO'#Eq'#EqOOQO'#Er'#ErOOQO'#Es'#EsO&wQPO'#DWOOQO'#DV'#DVO'VQPO,59pOOQO,5:m,5:mOOQO'#Dc'#DcO'_QPO'#DbO'gQPO'#DaO)lQPO'#D`O*{QPO'#D`OOQO'#D_'#D_O+sQPO,59oO-}QPO,59oO.UQPO,5:|O.]QPO,5:}O.hQPO'#E|O0sQPO,5;jO0zQPO,5;jO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lOYQPO,5;wO3cQPO,5;xO3hQPO,59rO#cQPO,59qOOQO1G/[1G/[OOQO'#Dh'#DhO3mQPO,59|O5^QPO,59|OOQO'#Di'#DiO5cQPO,59{OOQO,59{,59{O5kQPO'#DWO6YQPO'#DlO8PQPO'#DoO9sQPO'#DoOOQO'#Do'#DoOOQO'#Dv'#DvOOQO'#Dt'#DtO+kQPO'#DtO9xQPO,59zO;iQPO'#EVO;nQPO'#EWOOQO'#EZ'#EZO;sQPO'#E[O;xQPO'#E_OOQO,59z,59zOOQO,59y,59yOOQO1G/Z1G/ZOOQO1G0h1G0hO;}QPO'#EtO.`QPO'#EtO<XQPO1G0iO<^QPO1G0iO<cQPO,5;hO=oQPO1G1UO=vQPO1G1UO=}QPO1G1UO>UQPO'#FSO@dQPO'#FRO@nQPO'#FROYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WO@xQPO1G1cOAPQPO1G1dOOQO1G/^1G/^OOQO1G/]1G/]O5cQPO1G/hOAUQPO1G/hOAZQPO'#DjOBzQPO'#DjOOQO1G/g1G/gOCbQPO,59rOCPQPO,5:cOOQO'#Dm'#DmOClQPO,5:WOEcQPO'#DrOOQO'#Dq'#DqOGVQPO,5:_OHvQPO,5:[OOQO,5:Z,5:ZOJgQPO,5:`O+kQPO,5:`O+kQPO,5:`OOQO,5:q,5:qOJuQPO'#EYOOQO'#EX'#EXOJzQPO,5:rOLkQPO'#E^OOQO'#E^'#E^OOQO'#E]'#E]ONbQPO,5:vO!!RQPO'#EaOOQO'#Ea'#EaOOQO'#E`'#E`O!#xQPO,5:yO!%iQPO'#D`O;}QPO,5;`O!%pQPO'#EuO!%uQPO,5;`O!%}QPO,5;`O!&[QPO,5;`O!&iQPO,5;`O!&nQPO7+&TO.`QPO7+&TOOQO'#E}'#E}O!(OQPO1G1SOOQO1G1S1G1SOYQPO7+&pO!(WQPO7+&pO!)hQPO7+&pO!)oQPO7+&pO!)vQQO'#FTOOQO,5;n,5;nO!,UQPO,5;mO!,]QPO,5;mO!-nQPO7+&rO!-uQPO7+&rOOQO7+&r7+&rO!.SQPO7+&rO!.ZQPO7+&rO!/`QPO7+&rO!/pQPO7+&}OOQO7+'O7+'OOOQO7+%S7+%SO!/uQPO7+%SO5cQPO,5:UO!/zQPO,5:UO!0PQPO1G/{OOQO1G/}1G/}OOQO1G0U1G0UOOQO1G0W1G0WOOQO,5:X,5:XO!0UQPO1G/yO!1uQPO,5:^O!1zQPO,5:]OOQO1G/z1G/zO!2PQPO1G/zO!3pQPO,5:tO;nQPO,5:sO;sQPO,5:wO;xQPO,5:zO!3xQPO,5;cO!%uQPO1G0zO!4WQPO1G0zO!4`QPO,5;aO+kQPO,5;cO!4eQPO1G0zO!4oQPO'#EvO!4tQPO1G0zO!4eQPO1G0zO!4|QPO1G0zO!5ZQPO1G0zO!%xQPO1G0zOOQO1G0z1G0zOOQO<<Io<<IoO!5fQPO<<IoO!5kQPO,5;iOOQO7+&n7+&nO!5pQPO<<J[OOQO<<J[<<J[OYQPO<<J[OOQO'#FV'#FVO!5wQPO,5;oOOQO'#FU'#FUOOQO,5;o,5;oOOQO1G1X1G1XO!6PQPO1G1XO!8YQPO<<JiOOQO<<Hn<<HnOOQO1G/p1G/pO!8_QPO1G/pO!8dQPO7+%gOOQO1G/x1G/xOOQO1G/w1G/wOOQO1G0`1G0`OOQO1G0_1G0_OOQO1G0c1G0cOOQO1G0f1G0fOOQO'#Ex'#ExOOQO1G0}1G0}O!8iQPO1G0}OOQO'#Ey'#EyOOQO'#Ez'#EzOOQO'#E{'#E{OOQO7+&f7+&fOOQO1G0{1G0{O!8nQPO1G0}O!9SQPO7+&fOOQO,5;b,5;bO!9[QPO7+&fO!%xQPO7+&fO!9fQPO7+&fO!9qQPOAN?ZOOQO1G1T1G1TO!;RQPOAN?vO!<cQPOAN?vO!<jQQO1G1ZOOQO1G1Z1G1ZOOQO7+&s7+&sO!<rQPOAN@TOOQO7+%[7+%[O!<wQPO<<IRO!<|QPO7+&iO!=RQPO<<JQO!=ZQPO<<JQO!=cQPO'#EwO!=hQPO<<JQOOQOG24uG24uOOQOG25bG25bOOQO1G1[1G1[OOQO7+&u7+&uO!=pQPOG25oOOQOAN>mAN>mO!=uQPO<<JTOOQOAN?lAN?lO!=zQPOAN?lO!>SQPOLD+ZOOQOAN?oAN?oOOQO,5:r,5:rO!>XQPO!$'NuO!>^QPO!)9DaO!>cQPO!.K9{OOQO!4//g!4//gO;nQPO'#EWO!>hQPO'#D`O!?`QPO,59oO!@fQPO'#DTOYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WOYQPO1G1WO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO1PQPO,5;lO!AqQPO7+&rO!AxQPO7+&rO!BVQPO7+&rO!C_QPO7+&rO!CfQPO7+&rO!B^QPO'#FQ\",\n stateData: \"!Cs~O$TOStOS~OXZOY[OiWOjWOkWOlWOmWOnWOoWOpWOqWOrWOsWO!vQO!wRO!xRO$UPO$YTO$[_O$]`O$^aO$_bO$`cO$adO$beO$cfO$dgO$ehO$fiO$gjO$hkO$ilO$jmO~O{nO~O!vqO~O!OrO!QrO!WrO!XrO!YrO!ZrOfwXgwXhwX!lwX!nwX!owX!pwX!qwX!wwX!xwX#{wX#|wX#}wX$OwX~O!_vO$RwX$ZwX~P#mO$Y{O~Od|Oe|O$Y}O~Of!QOg!POh!QO!O!UO!l!UO!n!UO!o!UO!p!UO!q!UO!w!RO!x!RO#{!SO#|!SO#}!SO$O!TO~O$Y!VO~O$Y!WO~O|!XO!O!XO!P!XO!Q!XO~O$V!YO$W!ZO~O}!]O$X!_O~Og!`Of!TXh!TX!O!TX!Q!TX!W!TX!X!TX!Y!TX!Z!TX!_!TX!l!TX!n!TX!o!TX!p!TX!q!TX!w!TX!x!TX#{!TX#|!TX#}!TX$O!TX$R!TX$Z!TX$k!TX$V!TX~O!OrO!QrO!WrO!XrO!YrO!ZrO~Of!SXg!SXh!SX!_!SX!l!SX!n!SX!o!SX!p!SX!q!SX!w!SX!x!SX#{!SX#|!SX#}!SX$O!SX$R!SX$Z!SX$k!SX$V!SX~P)WOP!dOQ!cOR!fOS!eOT!eOV!lOW!kOa!mOb!nOc!oO{!bO$Y!iO~O!_vOfwagwahwa!lwa!nwa!owa!pwa!qwa!wwa!xwa#{wa#|wa#}wa$Owa$Rwa$Zwa~P)WOfvXgvXhvX!OvX!lvX!nvX!ovX!pvX!qvX!wvX!xvX#{vX#|vX#}vX$OvX~O$Z!rO~P,|O$Z!sO~P,|O!v!wO$UPO$Y!uO~O$Y!xO~OXZOY[OiWOjWOkWOlWOmWOnWOoWOpWOqWOrWOsWO!wRO!xRO$UPO$YTO$[_O$]`O$^aO$_bO$`cO$adO$beO$cfO$dgO$ehO$fiO$gjO$hkO$ilO$jmO~O!v!yO~P.mO$Y!{O~O[#OO]!|O^!|OX#uPY#uPi#uPj#uPk#uPl#uPm#uPn#uPo#uPp#uPq#uPr#uPs#uP!v#uP!w#uP!x#uP$U#uP$Y#uP$[#uP$]#uP$^#uP$_#uP$`#uP$a#uP$b#uP$c#uP$d#uP$e#uP$f#uP$g#uP$h#uP$i#uP$j#uP~O!v#WO~O}#XO~Og#ZOf!Uah!Ua!O!Ua!Q!Ua!W!Ua!X!Ua!Y!Ua!Z!Ua!_!Ua!l!Ua!n!Ua!o!Ua!p!Ua!q!Ua!w!Ua!x!Ua#{!Ua#|!Ua#}!Ua$O!Ua$R!Ua$Z!Ua$k!Ua$V!Ua~O$Y#[O~O}#]O$X!_O~O|#`O!O#`O!P!XO!Q!XO!l#aO!n#aO!o#aO!p#aO!q#aO~O{#dO!b#bOf!`Xg!`Xh!`X!O!`X!Q!`X!W!`X!X!`X!Y!`X!Z!`X!_!`X!l!`X!n!`X!o!`X!p!`X!q!`X!w!`X!x!`X#{!`X#|!`X#}!`X$O!`X$R!`X$Z!`X$k!`X$V!`X~O{#dOf!cXg!cXh!cX!O!cX!Q!cX!W!cX!X!cX!Y!cX!Z!cX!_!cX!l!cX!n!cX!o!cX!p!cX!q!cX!w!cX!x!cX#{!cX#|!cX#}!cX$O!cX$R!cX$Z!cX$k!cX$V!cX~O}#hO~Of#jOg#kO$V#jOh!Sa!O!Sa!Q!Sa!W!Sa!X!Sa!Y!Sa!Z!Sa!_!Sa!l!Sa!n!Sa!o!Sa!p!Sa!q!Sa!w!Sa!x!Sa#{!Sa#|!Sa#}!Sa$O!Sa$R!Sa$Z!Sa$k!Sa~O}#lO~O{#mO~O{#pO~O{#tO~O!_#xO$k#zO~P)WO$Z$PO~O$V$QO~O{$RO$Z$TO~Of!uXg!uXh!uX!O!uX!l!uX!n!uX!o!uX!p!uX!q!uX!w!uX!x!uX#{!uX#|!uX#}!uX$O!uX$Z!uX~O$V$UO~P<kO$Z$VO~P,|O!v$WO~P.mO$Y$YO~OX#uXY#uXi#uXj#uXk#uXl#uXm#uXn#uXo#uXp#uXq#uXr#uXs#uX!v#uX!w#uX!x#uX$U#uX$Y#uX$[#uX$]#uX$^#uX$_#uX$`#uX$a#uX$b#uX$c#uX$d#uX$e#uX$f#uX$g#uX$h#uX$i#uX$j#uX~O_$[O`$[O~P>ZO]!|O^!|O~P>ZO$V$dO~P,|O$Z$eO~O}$gO~Og$hOf!^Xh!^X!O!^X!Q!^X!W!^X!X!^X!Y!^X!Z!^X!_!^X!l!^X!n!^X!o!^X!p!^X!q!^X!w!^X!x!^X#{!^X#|!^X#}!^X$O!^X$R!^X$Z!^X$k!^X$V!^X~O$Y$iO~O!m$kO!s$lO!vQO!wRO!xRO~O}#XO$X!_O~PCPO{#dO!b$nOf!`ag!`ah!`a!O!`a!Q!`a!W!`a!X!`a!Y!`a!Z!`a!_!`a!l!`a!n!`a!o!`a!p!`a!q!`a!w!`a!x!`a#{!`a#|!`a#}!`a$O!`a$R!`a$Z!`a$k!`a$V!`a~O|$pOf!fXg!fXh!fX!O!fX!Q!fX!W!fX!X!fX!Y!fX!Z!fX!_!fX!l!fX!n!fX!o!fX!p!fX!q!fX!w!fX!x!fX#{!fX#|!fX#}!fX$O!fX$R!fX$V!fX$Z!fX$k!fX~O$V$qOf!gag!gah!ga!O!ga!Q!ga!W!ga!X!ga!Y!ga!Z!ga!_!ga!l!ga!n!ga!o!ga!p!ga!q!ga!w!ga!x!ga#{!ga#|!ga#}!ga$O!ga$R!ga$Z!ga$k!ga~O$V$qOf!dag!dah!da!O!da!Q!da!W!da!X!da!Y!da!Z!da!_!da!l!da!n!da!o!da!p!da!q!da!w!da!x!da#{!da#|!da#}!da$O!da$R!da$Z!da$k!da~Of#jOg#kO$V#jO$Z$rO~O|$tO~O$V$uOf!zag!zah!za!O!za!Q!za!W!za!X!za!Y!za!Z!za!_!za!l!za!n!za!o!za!p!za!q!za!w!za!x!za#{!za#|!za#}!za$O!za$R!za$Z!za$k!za~O|!XO!O!XO!P!XO!Q!XOf#QXg#QXh#QX!W#QX!X#QX!Y#QX!Z#QX!_#QX!l#QX!n#QX!o#QX!p#QX!q#QX!w#QX!x#QX#{#QX#|#QX#}#QX$O#QX$R#QX$V#QX$Z#QX$k#QX~O$V$vOf#Oag#Oah#Oa!O#Oa!Q#Oa!W#Oa!X#Oa!Y#Oa!Z#Oa!_#Oa!l#Oa!n#Oa!o#Oa!p#Oa!q#Oa!w#Oa!x#Oa#{#Oa#|#Oa#}#Oa$O#Oa$R#Oa$Z#Oa$k#Oa~O|!XO!O!XO!P!XO!Q!XOf#TXg#TXh#TX!W#TX!X#TX!Y#TX!Z#TX!_#TX!l#TX!n#TX!o#TX!p#TX!q#TX!w#TX!x#TX#{#TX#|#TX#}#TX$O#TX$R#TX$V#TX$Z#TX$k#TX~O$V$wOf#Rag#Rah#Ra!O#Ra!Q#Ra!W#Ra!X#Ra!Y#Ra!Z#Ra!_#Ra!l#Ra!n#Ra!o#Ra!p#Ra!q#Ra!w#Ra!x#Ra#{#Ra#|#Ra#}#Ra$O#Ra$R#Ra$Z#Ra$k#Ra~OU$xO~P*{O!m${O~O!_$|O$k#zO~OZ%OO!_#xO$Z#ha~P)WO!_#xO$Z%TO$k#zO~P)WO$Z%UO~Od|Oe|Of#Vqg#Vqh#Vq!O#Vq!l#Vq!n#Vq!o#Vq!p#Vq!q#Vq!w#Vq!x#Vq#{#Vq#|#Vq#}#Vq$O#Vq$R#Vq$Z#Vq$V#Vq~O$V%XO$Z%YO~Od|Oe|Of#rqg#rqh#rq!O#rq!l#rq!n#rq!o#rq!p#rq!q#rq!w#rq!x#rq#{#rq#|#rq#}#rq$O#rq$R#rq$Z#rq$V#rq~O$V%]O~P<kO$Z%[O~P,|O#z%^O$Z%aO~OX#uaY#uai#uaj#uak#ual#uam#uan#uao#uap#uaq#uar#uas#ua!v#ua!w#ua!x#ua$U#ua$[#ua$]#ua$^#ua$_#ua$`#ua$a#ua$b#ua$c#ua$d#ua$e#ua$f#ua$g#ua$h#ua$i#ua$j#ua~O$Y$YO~P!*OO_%cO`%cO$Y#ua~P!*OOf!QOh!QO!O!UO!l!UO!n!UO!o!UO!p!UO!q!UO!w!RO!x!RO#{#tq#|#tq#}#tq$O#tq$R#tq$Z#tq~Og#tq~P!,jOf#tqg#tqh#tq~P!,pOg!PO~P!,jO$R#tq$Z#tq~P%lOf#tqg#tqh#tq!O#tq!l#tq!n#tq!o#tq!p#tq!q#tq#{#tq#|#tq#}#tq$O#tq~O!w!RO!x!RO$R#tq$Z#tq~P!.eO}%dO~O$Z%eO~O}%gO~O$Y%hO~O$V$qOf!gig!gih!gi!O!gi!Q!gi!W!gi!X!gi!Y!gi!Z!gi!_!gi!l!gi!n!gi!o!gi!p!gi!q!gi!w!gi!x!gi#{!gi#|!gi#}!gi$O!gi$R!gi$Z!gi$k!gi~O}%iO~O{#dO~Of#jO$V#jOg!hih!hi!O!hi!Q!hi!W!hi!X!hi!Y!hi!Z!hi!_!hi!l!hi!n!hi!o!hi!p!hi!q!hi!w!hi!x!hi#{!hi#|!hi#}!hi$O!hi$R!hi$Z!hi$k!hi~O{%kO}%kO~O{%pO$m%rO$n%sO$o%tO~OZ%OO$Z#hi~O$l%vO~O!_#xO$Z#hi~P)WO!m%yO~O!_$|O$Z#hi~O!_#xO$Z%{O$k#zO~P)WO!_$|O$Z%{O$k#zO~O$Z%}O~O{&OO~O$Z&PO~P,|O$V&RO$Z&SO~O$Y$YOX#uiY#uii#uij#uik#uil#uim#uin#uio#uip#uiq#uir#uis#ui!v#ui!w#ui!x#ui$U#ui$[#ui$]#ui$^#ui$_#ui$`#ui$a#ui$b#ui$c#ui$d#ui$e#ui$f#ui$g#ui$h#ui$i#ui$j#ui~O$V&UO~O$Z&VO~O}&WO~O$Y&XO~Of#jOg#kO$V#jO!_#ki$k#ki$Z#ki~O!_$|O$Z#hq~O!_#xO$Z#hq~P)WOZ%OO!_&[O$Z#hq~Od|Oe|Of#V!Rg#V!Rh#V!R!O#V!R!l#V!R!n#V!R!o#V!R!p#V!R!q#V!R!w#V!R!x#V!R#{#V!R#|#V!R#}#V!R$O#V!R$R#V!R$Z#V!R$V#V!R~Od|Oe|Of#r!Rg#r!Rh#r!R!O#r!R!l#r!R!n#r!R!o#r!R!p#r!R!q#r!R!w#r!R!x#r!R#{#r!R#|#r!R#}#r!R$O#r!R$R#r!R$Z#r!R$V#r!R~O$Z&_O~P,|O#z%^O$Z&aO~O}&bO~O$Z&cO~O{&dO~O!_$|O$Z#hy~OZ%OO$Z#hy~OU$xO~O!_&[O$Z#hy~O$V&gO~O$Z&hO~O!_$|O$Z#h!R~O}&jO~O$V&kO~O}&lO~O$Z&mO~OP!dOQ!cOR!fOS!eOT!eOV&nOW!kOa!mOb!nOc!oO{!bO$Y!iO~O!_&oOfwagwahwa!lwa!nwa!owa!pwa!qwa!wwa!xwa#{wa#|wa#}wa$Owa$Vwa~P)WO!_&oO$VwX~P#mOf&yOh&yO!O&}O!l&}O!n&}O!o&}O!p&}O!q&}O!w&zO!x&zO#{#tq#|#tq#}#tq$O#tq$V#tq~Og#tq~P!@pOf#tqg#tqh#tq~P!@vOg&xO~P!@pOf&yOg&xOh&yO!O&}O!l&}O!n&}O!o&}O!p&}O!q&}O!w&zO!x&zO#{&{O#|&{O#}&{O$O&|O~O$V#tq~P!B^O!w&zO!x&zO$V#tq~P!.eO\",\n goto: \"1l$RPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP$S%R%j&Y&]PPPPPP&t'W'h'v(XPPPP(h(p(yP)S)XP)S)S)[)e)S)m*O*O*XPPPPPP*XP*O*bPPP)S)S*{+R)S)S+Y+])S+c+f+l,_,t-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-p-y.^.j/S/V/V/V/Y/i,_/l,_0R0w1Y1c1fPPPPP,_,_[YOT}!{$U%]Q$^#PQ$_#QS$`#R&tQ$a#SQ$b#TQ$c#UQ'O&rQ'P&sQ'Q&uQ'R&vQ'S&wR'T!Vt^O}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wRyTjSOT}!V!{#P#Q#R#S#T#U$U%]S!t{$QQ#}!u]&q&r&s&t&u&v&wRpPQoP^!hv!i#j#k#x$|&oQ#Y!YS#q!n$vT#u!o$wQxSQ#y!tQ$}#|Q%R#}Q%z%QR&p&q[wS!t#|#}%Q&q]!qx#y$}%R%z&piuSx!t#y#|#}$}%Q%R%z&p&qhtSx!t#y#|#}$}%Q%R%z&p&qR!auksSux!t#y#|#}$}%Q%R%z&p&qQ!^sV#^!`#Z$hW![s!`#Z$hR$j#`Q#_!`Q$f#ZR%f$hV!pv#x&oR#c!cQ#f!cQ#g!dR$o#cU#e!c!d#cR%j$qU!jv#x&oQ#i!iQ$r#jQ$s#kR%w$|_!hv!i#j#k#x$|&o_!gv!i#j#k#x$|&ov]OT}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wT$m#`#aQ#o!lR&i&nS#n!l&nR%l$uR#s!nQ#r!nR%m$vR#w!oQ#v!oR%n$wj^O#P#Q#R#S#T#U&r&s&t&u&v&wQzTQ!z}Q#V!VQ$X!{Q%Z$UR&Q%]w]OT}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wwVOT}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wwUOT}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wQ!v{Q$O!uR%W$QS#|!t#}W$z#y#{%R%SQ%u$yQ%|%TR&Z%{Q%Q#|Q%u$zQ&]%|R&e&ZQ#{!tS$y#y%RQ%P#|Q%S#}S%x$}%QS&Y%z%|R&f&]R%q$xR%o$xQ!OXQ%V$PQ%[$VQ&^%}R&_&PR$S!xwXOT}!V!{#P#Q#R#S#T#U$U%]&r&s&t&u&v&wQ#P!PQ#Q!QQ#R!RQ#S!SQ#T!TQ#U!UQ&r&xQ&s&yQ&t&zQ&u&{Q&v&|R&w&}h!}!P!Q!R!S!T!U&x&y&z&{&|&}R$]#OQ$Z!|Q%b$[R&T%cR%_$YQ%`$YR&`&R\",\n nodeNames: \"⚠ Json Logfmt Unpack Pattern Regexp Unwrap LabelFormat LineFormat LabelReplace Vector Offset Bool On Ignoring GroupLeft GroupRight Decolorize Drop Keep By Without And Or Unless Sum Avg Count Max Min Stddev Stdvar Bottomk Topk Sort Sort_Desc LineComment LogQL Expr LogExpr Selector Matchers Matcher Identifier Eq String Neq Re Nre PipelineExpr PipelineStage LineFilters LineFilter Filter PipeExact PipeMatch PipePattern Npa FilterOp Ip OrFilter Pipe LogfmtParser LogfmtParserFlags ParserFlag LabelParser JsonExpressionParser LabelExtractionExpressionList LabelExtractionExpression LogfmtExpressionParser LabelFilter IpLabelFilter UnitFilter DurationFilter Gtr Duration Gte Lss Lte Eql BytesFilter Bytes NumberFilter LiteralExpr Number Add Sub LineFormatExpr LabelFormatExpr LabelsFormat LabelFormatMatcher DecolorizeExpr DropLabelsExpr DropLabels DropLabel KeepLabelsExpr KeepLabels KeepLabel MetricExpr RangeAggregationExpr RangeOp CountOverTime Rate RateCounter BytesOverTime BytesRate AvgOverTime SumOverTime MinOverTime MaxOverTime StddevOverTime StdvarOverTime QuantileOverTime FirstOverTime LastOverTime AbsentOverTime LogRangeExpr Range OffsetExpr UnwrapExpr ConvOp BytesConv DurationConv DurationSecondsConv Grouping Labels VectorAggregationExpr VectorOp BinOpExpr BinOpModifier OnOrIgnoringModifier GroupingLabels GroupingLabelList GroupingLabel LabelName Mul Div Mod Pow LabelReplaceExpr VectorExpr\",\n maxTerm: 169,\n skippedNodes: [0,36],\n repeatNodeCount: 0,\n tokenData: \"<n~RvX^#ipq#iqr$^rs$yst%kuv%vxy%{yz&Qz{&V{|&[|}&a}!O&f!O!P2v!P!Q3v!Q!R3{!R![7^![!]9]!^!_9q!_!`:O!`!a:e!c!}:r!}#O;Y#P#Q;_#Q#R;d#R#S:r#S#T;i#T#o:r#o#p;u#p#q;z#q#r<i#y#z#i$f$g#i#BY#BZ#i$IS$I_#i$I|$JO#i$JT$JU#i$KV$KW#i&FU&FV#i~#nY$T~X^#ipq#i#y#z#i$f$g#i#BY#BZ#i$IS$I_#i$I|$JO#i$JT$JU#i$KV$KW#i&FU&FV#i~$aR!_!`$j!`!a$o#r#s$t~$oO!O~~$tO!Z~~$yO!Q~~$|UOY$yZr$yrs%`s#O$y#O#P%e#P~$y~%eO}~~%hPO~$y~%pQt~OY%kZ~%k~%{O#}~~&QO$Y~~&VO$Z~~&[O#{~~&aO!w~~&fO$V~~&kQ!x~}!O&q!Q![(w~&tQ#_#`&z#g#h(X~&}P#X#Y'Q~'TP#X#Y'W~'ZP#d#e'^~'aP}!O'd~'gP#X#Y'j~'mP#a#b'p~'sP#d#e'v~'yP#h#i'|~(PP#m#n(S~(XO!b~~([P#h#i(_~(bP#f#g(e~(hP#]#^(k~(nP#V#W(q~(tP#h#i(S~(zZ!O!P)m!Q![(w#W#X0`#[#]*]#a#b+j#b#c.R#g#h/X#i#j.^#k#l1T#m#n1{${$|.^~)pP!Q![)s~)vV!Q![)s#[#]*]#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~*bP!m~!Q![*e~*hV!O!P*}!Q![*e#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~+QP!Q![+T~+WU!Q![+T#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~+oQ!m~!Q![+u#g#h-Q~+xV!O!P,_!Q![+u#a#b,z#b#c.R#g#h/X#i#j.^${$|.^~,bP!Q![,e~,hU!Q![,e#a#b,z#b#c.R#g#h/X#i#j.^${$|.^~,}P#g#h-Q~-VP!m~!Q![-Y~-]T!O!P-l!Q![-Y#b#c.R#i#j.^${$|.^~-oP!Q![-r~-uS!Q![-r#b#c.R#i#j.^${$|.^~.UP#g#h.X~.^O!m~~.aP#g#h.d~.iP!m~!Q![.l~.oR!O!P.x!Q![.l#b#c.R~.{P!Q![/O~/RQ!Q![/O#b#c.R~/^P!m~!Q![/a~/dU!O!P/v!Q![/a#a#b,z#b#c.R#i#j.^${$|.^~/yP!Q![/|~0PT!Q![/|#a#b,z#b#c.R#i#j.^${$|.^~0eP!m~!Q![0h~0kW!O!P)m!Q![0h#[#]*]#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~1YP!m~!Q![1]~1`X!O!P)m!Q![1]#W#X0`#[#]*]#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~2QP!m~!Q![2T~2WY!O!P)m!Q![2T#W#X0`#[#]*]#a#b+j#b#c.R#g#h/X#i#j.^#k#l1T${$|.^~2yP!Q![2|~3RR!v~!Q![2|!g!h3[#X#Y3[~3_R{|3h}!O3h!Q![3n~3kP!Q![3n~3sP!v~!Q![3n~3{O#|~~4Qe!v~!O!P5c!Q![7^!d!e6x!g!h3[!i!j6}!m!n6}!o!p6}!r!s6}!v!w6}#W#X0`#X#Y3[#[#]*]#_#`7W#a#b+j#b#c.R#g#h/X#i#j.^#k#l1T#l#m8q#m#n1{${$|.^~5hR!v~!Q![5q!g!h3[#X#Y3[~5v`!v~!Q![5q!d!e6x!g!h3[!i!j6}!m!n6}!o!p6}!r!s6}!v!w6}#X#Y3[#[#]*]#_#`7W#a#b+j#b#c.R#g#h/X#i#j.^${$|.^~6}O!s~~7QQ!d!e6x#]#^7W~7ZP!d!e6x~7cd!v~!O!P5c!Q![7^!d!e6x!g!h3[!i!j6}!m!n6}!o!p6}!r!s6}!v!w6}#W#X0`#X#Y3[#[#]*]#_#`7W#a#b+j#b#c.R#g#h/X#i#j.^#k#l1T#m#n1{${$|.^~8tR!Q![8}!c!i8}#T#Z8}~9SR!v~!Q![8}!c!i8}#T#Z8}P9bT{P!Q![9]![!]9]!c!}9]#R#S9]#T#o9]~9vP!o~!_!`9y~:OO!p~~:TQ|~!_!`:Z#r#s:`~:`O!q~~:eO!P~~:jP!l~!_!`:m~:rO!n~R:yT{P#zQ!Q![:r![!]9]!c!}:r#R#S:r#T#o:r~;_O$k~~;dO$l~~;iO$O~~;lRO#S;i#S#T%`#T~;i~;zO$U~~<PR!_~!_!`<Y!`!a<_#r#s<d~<_O!W~~<dO!Y~~<iO!X~~<nO$W~\",\n tokenizers: [0, 1],\n topRules: {\"LogQL\":[0,37]},\n specialized: [{term: 43, get: (value, stack) => (specializeIdentifier(value) << 1)},{term: 43, get: (value, stack) => (extendIdentifier(value) << 1) | 1},{term: 43, get: value => spec_Identifier[value] || -1}],\n tokenPrec: 0\n});\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst Json = 1,\n Logfmt = 2,\n Unpack = 3,\n Pattern = 4,\n Regexp = 5,\n Unwrap = 6,\n LabelFormat = 7,\n LineFormat = 8,\n LabelReplace = 9,\n Vector = 10,\n Offset = 11,\n Bool = 12,\n On = 13,\n Ignoring = 14,\n GroupLeft = 15,\n GroupRight = 16,\n Decolorize = 17,\n Drop = 18,\n Keep = 19,\n By = 20,\n Without = 21,\n And = 22,\n Or = 23,\n Unless = 24,\n Sum = 25,\n Avg = 26,\n Count = 27,\n Max = 28,\n Min = 29,\n Stddev = 30,\n Stdvar = 31,\n Bottomk = 32,\n Topk = 33,\n Sort = 34,\n Sort_Desc = 35,\n LineComment = 36,\n LogQL = 37,\n Expr = 38,\n LogExpr = 39,\n Selector = 40,\n Matchers = 41,\n Matcher = 42,\n Identifier = 43,\n Eq = 44,\n String = 45,\n Neq = 46,\n Re = 47,\n Nre = 48,\n PipelineExpr = 49,\n PipelineStage = 50,\n LineFilters = 51,\n LineFilter = 52,\n Filter = 53,\n PipeExact = 54,\n PipeMatch = 55,\n PipePattern = 56,\n Npa = 57,\n FilterOp = 58,\n Ip = 59,\n OrFilter = 60,\n Pipe = 61,\n LogfmtParser = 62,\n LogfmtParserFlags = 63,\n ParserFlag = 64,\n LabelParser = 65,\n JsonExpressionParser = 66,\n LabelExtractionExpressionList = 67,\n LabelExtractionExpression = 68,\n LogfmtExpressionParser = 69,\n LabelFilter = 70,\n IpLabelFilter = 71,\n UnitFilter = 72,\n DurationFilter = 73,\n Gtr = 74,\n Duration = 75,\n Gte = 76,\n Lss = 77,\n Lte = 78,\n Eql = 79,\n BytesFilter = 80,\n Bytes = 81,\n NumberFilter = 82,\n LiteralExpr = 83,\n Number = 84,\n Add = 85,\n Sub = 86,\n LineFormatExpr = 87,\n LabelFormatExpr = 88,\n LabelsFormat = 89,\n LabelFormatMatcher = 90,\n DecolorizeExpr = 91,\n DropLabelsExpr = 92,\n DropLabels = 93,\n DropLabel = 94,\n KeepLabelsExpr = 95,\n KeepLabels = 96,\n KeepLabel = 97,\n MetricExpr = 98,\n RangeAggregationExpr = 99,\n RangeOp = 100,\n CountOverTime = 101,\n Rate = 102,\n RateCounter = 103,\n BytesOverTime = 104,\n BytesRate = 105,\n AvgOverTime = 106,\n SumOverTime = 107,\n MinOverTime = 108,\n MaxOverTime = 109,\n StddevOverTime = 110,\n StdvarOverTime = 111,\n QuantileOverTime = 112,\n FirstOverTime = 113,\n LastOverTime = 114,\n AbsentOverTime = 115,\n LogRangeExpr = 116,\n Range = 117,\n OffsetExpr = 118,\n UnwrapExpr = 119,\n ConvOp = 120,\n BytesConv = 121,\n DurationConv = 122,\n DurationSecondsConv = 123,\n Grouping = 124,\n Labels = 125,\n VectorAggregationExpr = 126,\n VectorOp = 127,\n BinOpExpr = 128,\n BinOpModifier = 129,\n OnOrIgnoringModifier = 130,\n GroupingLabels = 131,\n GroupingLabelList = 132,\n GroupingLabel = 133,\n LabelName = 134,\n Mul = 135,\n Div = 136,\n Mod = 137,\n Pow = 138,\n LabelReplaceExpr = 139,\n VectorExpr = 140;\n\nexport { AbsentOverTime, Add, And, Avg, AvgOverTime, BinOpExpr, BinOpModifier, Bool, Bottomk, By, Bytes, BytesConv, BytesFilter, BytesOverTime, BytesRate, ConvOp, Count, CountOverTime, Decolorize, DecolorizeExpr, Div, Drop, DropLabel, DropLabels, DropLabelsExpr, Duration, DurationConv, DurationFilter, DurationSecondsConv, Eq, Eql, Expr, Filter, FilterOp, FirstOverTime, GroupLeft, GroupRight, Grouping, GroupingLabel, GroupingLabelList, GroupingLabels, Gte, Gtr, Identifier, Ignoring, Ip, IpLabelFilter, Json, JsonExpressionParser, Keep, KeepLabel, KeepLabels, KeepLabelsExpr, LabelExtractionExpression, LabelExtractionExpressionList, LabelFilter, LabelFormat, LabelFormatExpr, LabelFormatMatcher, LabelName, LabelParser, LabelReplace, LabelReplaceExpr, Labels, LabelsFormat, LastOverTime, LineComment, LineFilter, LineFilters, LineFormat, LineFormatExpr, LiteralExpr, LogExpr, LogQL, LogRangeExpr, Logfmt, LogfmtExpressionParser, LogfmtParser, LogfmtParserFlags, Lss, Lte, Matcher, Matchers, Max, MaxOverTime, MetricExpr, Min, MinOverTime, Mod, Mul, Neq, Npa, Nre, Number, NumberFilter, Offset, OffsetExpr, On, OnOrIgnoringModifier, Or, OrFilter, ParserFlag, Pattern, Pipe, PipeExact, PipeMatch, PipePattern, PipelineExpr, PipelineStage, Pow, QuantileOverTime, Range, RangeAggregationExpr, RangeOp, Rate, RateCounter, Re, Regexp, Selector, Sort, Sort_Desc, Stddev, StddevOverTime, Stdvar, StdvarOverTime, String, Sub, Sum, SumOverTime, Topk, UnitFilter, Unless, Unpack, Unwrap, UnwrapExpr, Vector, VectorAggregationExpr, VectorExpr, VectorOp, Without, parser };\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5959__;","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6089__;","import { SyntaxNode } from '@lezer/common';\nimport { escapeRegExp } from 'lodash';\n\nimport {\n parser,\n LineFilter,\n PipeExact,\n PipeMatch,\n Filter,\n String,\n LabelFormatExpr,\n Selector,\n PipelineExpr,\n LabelParser,\n JsonExpressionParser,\n LabelFilter,\n MetricExpr,\n Matcher,\n Identifier,\n Range,\n Logfmt,\n Json,\n OrFilter,\n FilterOp,\n RangeOp,\n VectorOp,\n BinOpExpr,\n} from '@grafana/lezer-logql';\nimport { DataQuery } from '@grafana/schema';\n\nimport { addDropToQuery, addLabelToQuery, getStreamSelectorPositions, NodePosition } from './modifyQuery';\nimport { ErrorId } from './querybuilder/parsingUtils';\nimport { LabelType, LokiQuery, LokiQueryDirection, LokiQueryType } from './types';\n\n/**\n * Returns search terms from a LogQL query.\n * E.g., `{} |= \"foo\" |= \"bar\" != \"baz\"` returns `['foo', 'bar']`.\n */\nexport function getHighlighterExpressionsFromQuery(input = ''): string[] {\n const results: string[] = [];\n\n const filters = getNodesFromQuery(input, [LineFilter]);\n\n for (const filter of filters) {\n const pipeExact = filter.getChild(Filter)?.getChild(PipeExact);\n const pipeMatch = filter.getChild(Filter)?.getChild(PipeMatch);\n const strings = getStringsFromLineFilter(filter);\n\n if ((!pipeExact && !pipeMatch) || !strings.length) {\n continue;\n }\n\n for (const string of strings) {\n const filterTerm = input.substring(string.from, string.to).trim();\n const backtickedTerm = filterTerm[0] === '`';\n const unwrappedFilterTerm = filterTerm.substring(1, filterTerm.length - 1);\n\n if (!unwrappedFilterTerm) {\n continue;\n }\n\n let resultTerm = '';\n\n // Only filter expressions with |~ operator are treated as regular expressions\n if (pipeMatch) {\n // When using backticks, Loki doesn't require to escape special characters and we can just push regular expression to highlights array\n // When using quotes, we have extra backslash escaping and we need to replace \\\\ with \\\n resultTerm = backtickedTerm ? unwrappedFilterTerm : unwrappedFilterTerm.replace(/\\\\\\\\/g, '\\\\');\n } else {\n // We need to escape this string so it is not matched as regular expression\n resultTerm = escapeRegExp(unwrappedFilterTerm);\n }\n\n if (resultTerm) {\n results.push(resultTerm);\n }\n }\n }\n return results;\n}\n\nexport function getExpressionFromExecutedQuery(executedQueryString: string) {\n return executedQueryString.replace('Expr: ', '');\n}\n\nexport function getStringsFromLineFilter(filter: SyntaxNode): SyntaxNode[] {\n const nodes: SyntaxNode[] = [];\n let node: SyntaxNode | null = filter;\n do {\n const string = node.getChild(String);\n if (string && !node.getChild(FilterOp)) {\n nodes.push(string);\n }\n node = node.getChild(OrFilter);\n } while (node != null);\n\n return nodes;\n}\n\nexport function getNormalizedLokiQuery(query: LokiQuery): LokiQuery {\n let queryType = getLokiQueryType(query);\n // instant and range are deprecated, we want to remove them\n const { instant, range, ...rest } = query;\n\n // if `query.expr` is not parsable this might throw an error\n try {\n if (isLogsQuery(query.expr) && queryType === LokiQueryType.Instant) {\n queryType = LokiQueryType.Range;\n }\n } catch (e) {}\n return { ...rest, queryType };\n}\n\nexport function getLokiQueryType(query: LokiQuery): LokiQueryType {\n // we are migrating from `.instant` and `.range` to `.queryType`\n // this function returns the correct query type\n const { queryType } = query;\n const hasValidQueryType =\n queryType === LokiQueryType.Range || queryType === LokiQueryType.Instant || queryType === LokiQueryType.Stream;\n\n // if queryType exists, it is respected\n if (hasValidQueryType) {\n return queryType;\n }\n\n // if no queryType, and instant===true, it's instant\n if (query.instant === true) {\n return LokiQueryType.Instant;\n }\n\n // otherwise it is range\n return LokiQueryType.Range;\n}\n\nconst tagsToObscure = ['String', 'Identifier', 'LineComment', 'Number'];\nconst partsToKeep = ['__error__', '__interval', '__interval_ms', '__auto'];\nexport function obfuscate(query: string): string {\n let obfuscatedQuery: string = query;\n const tree = parser.parse(query);\n tree.iterate({\n enter: ({ name, from, to }): false | void => {\n const queryPart = query.substring(from, to);\n if (tagsToObscure.includes(name) && !partsToKeep.includes(queryPart)) {\n obfuscatedQuery = obfuscatedQuery.replace(queryPart, name);\n }\n },\n });\n return obfuscatedQuery;\n}\n\nexport function parseToNodeNamesArray(query: string): string[] {\n const queryParts: string[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: ({ name }): false | void => {\n queryParts.push(name);\n },\n });\n return queryParts;\n}\n\nexport function isQueryWithNode(query: string, nodeType: number): boolean {\n let isQueryWithNode = false;\n const tree = parser.parse(query);\n tree.iterate({\n enter: ({ type }): false | void => {\n if (type.id === nodeType) {\n isQueryWithNode = true;\n return false;\n }\n },\n });\n return isQueryWithNode;\n}\n\nexport function getNodesFromQuery(query: string, nodeTypes?: number[]): SyntaxNode[] {\n const nodes: SyntaxNode[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: (node): false | void => {\n if (nodeTypes === undefined || nodeTypes.includes(node.type.id)) {\n nodes.push(node.node);\n }\n },\n });\n return nodes;\n}\n\nexport function getNodePositionsFromQuery(query: string, nodeTypes?: number[]): NodePosition[] {\n const positions: NodePosition[] = [];\n const tree = parser.parse(query);\n tree.iterate({\n enter: (node): false | void => {\n if (nodeTypes === undefined || nodeTypes.includes(node.type.id)) {\n positions.push(NodePosition.fromNode(node.node));\n }\n },\n });\n return positions;\n}\n\nexport function getNodeFromQuery(query: string, nodeType: number): SyntaxNode | undefined {\n const nodes = getNodesFromQuery(query, [nodeType]);\n return nodes.length > 0 ? nodes[0] : undefined;\n}\n\n/**\n * Parses the query and looks for error nodes. If there is at least one, it returns true.\n * Grafana variables are considered errors, so if you need to validate a query\n * with variables you should interpolate it first.\n */\nexport function isQueryWithError(query: string): boolean {\n return isQueryWithNode(query, ErrorId);\n}\n\nexport function isLogsQuery(query: string): boolean {\n // As a safeguard we are checking for a length of 2, because at least the query should be `{}`\n return query.trim().length > 2 && !isQueryWithNode(query, MetricExpr);\n}\n\nexport function isQueryWithParser(query: string): { queryWithParser: boolean; parserCount: number } {\n const nodes = getNodesFromQuery(query, [LabelParser, JsonExpressionParser, Logfmt]);\n const parserCount = nodes.length;\n return { queryWithParser: parserCount > 0, parserCount };\n}\n\nexport function getParserFromQuery(query: string): string | undefined {\n const parsers = getNodesFromQuery(query, [LabelParser, Json, Logfmt]);\n return parsers.length > 0 ? query.substring(parsers[0].from, parsers[0].to).trim() : undefined;\n}\n\nexport function isQueryPipelineErrorFiltering(query: string): boolean {\n const labels = getNodesFromQuery(query, [LabelFilter]);\n for (const node of labels) {\n const label = node.getChild(Matcher)?.getChild(Identifier);\n if (label) {\n const labelName = query.substring(label.from, label.to);\n if (labelName === '__error__') {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isQueryWithLabelFormat(query: string): boolean {\n return isQueryWithNode(query, LabelFormatExpr);\n}\n\nexport function getLogQueryFromMetricsQuery(query: string): string {\n if (isLogsQuery(query)) {\n return query;\n }\n\n // Log query in metrics query composes of Selector & PipelineExpr\n const selectorNode = getNodeFromQuery(query, Selector);\n if (!selectorNode) {\n return '';\n }\n const selector = query.substring(selectorNode.from, selectorNode.to);\n\n const pipelineExprNode = getNodeFromQuery(query, PipelineExpr);\n const pipelineExpr = pipelineExprNode ? query.substring(pipelineExprNode.from, pipelineExprNode.to) : '';\n\n return `${selector} ${pipelineExpr}`.trim();\n}\n\nexport function getLogQueryFromMetricsQueryAtPosition(query: string, position: number): string {\n if (isLogsQuery(query)) {\n return query;\n }\n\n const metricQuery = getNodesFromQuery(query, [MetricExpr])\n .reverse() // So we don't get the root metric node\n .find((node) => node.from <= position && node.to >= position);\n if (!metricQuery) {\n return '';\n }\n return getLogQueryFromMetricsQuery(query.substring(metricQuery.from, metricQuery.to));\n}\n\nexport function isQueryWithLabelFilter(query: string): boolean {\n return isQueryWithNode(query, LabelFilter);\n}\n\nexport function isQueryWithLineFilter(query: string): boolean {\n return isQueryWithNode(query, LineFilter);\n}\n\nexport function isQueryWithRangeVariable(query: string): boolean {\n const rangeNodes = getNodesFromQuery(query, [Range]);\n for (const node of rangeNodes) {\n if (query.substring(node.from, node.to).match(/\\[\\$__range(_s|_ms)?/)) {\n return true;\n }\n }\n return false;\n}\n\nexport function getStreamSelectorsFromQuery(query: string): string[] {\n const labelMatcherPositions = getStreamSelectorPositions(query);\n\n const labelMatchers = labelMatcherPositions.map((labelMatcher) => {\n return query.slice(labelMatcher.from, labelMatcher.to);\n });\n\n return labelMatchers;\n}\n\nexport function requestSupportsSplitting(allQueries: LokiQuery[]) {\n const queries = allQueries\n .filter((query) => !query.hide)\n .filter((query) => !query.refId.includes('do-not-chunk'))\n .filter((query) => query.expr);\n\n return queries.length > 0;\n}\n\nexport function requestSupportsSharding(allQueries: LokiQuery[]) {\n const queries = allQueries\n .filter((query) => !query.hide)\n .filter((query) => query.queryType !== LokiQueryType.Instant)\n .filter((query) => !query.refId.includes('do-not-shard'))\n .filter((query) => query.expr)\n .filter(\n (query) =>\n (query.direction === LokiQueryDirection.Scan && isLogsQuery(query.expr)) || metricSupportsSharding(query.expr)\n );\n\n return queries.length > 0;\n}\n\nfunction metricSupportsSharding(query: string) {\n if (isLogsQuery(query)) {\n return false;\n }\n query = query.trim().toLowerCase();\n\n const disallowed = getNodesFromQuery(query, [BinOpExpr]);\n if (disallowed.length > 0) {\n return false;\n }\n\n /**\n * If there are VectorAggregationExpr, we want to make sure that the leftmost VectorOp is sum, meaning that\n * it's wrapped in a sum. E.g.\n * Disallowed: avg(sum by (level) (avg_over_time({place=\"luna\"}[1m])))\n * Allowed: sum(sum by (level) (avg_over_time({place=\"luna\"}[1m])))\n */\n const vectorOps = getNodesFromQuery(query, [VectorOp]);\n const supportedVectorOps = vectorOps.filter((node) => getNodeString(query, node) === 'sum');\n const unsupportedVectorOps = vectorOps.filter((node) => getNodeString(query, node) !== 'sum');\n const supportedWrappingVectorOpps = supportedVectorOps.filter((supportedOp) =>\n unsupportedVectorOps.every((unsupportedOp) => supportedOp.from < unsupportedOp.from)\n );\n if (unsupportedVectorOps.length > 0) {\n return supportedWrappingVectorOpps.length > 0;\n }\n\n const rangeOps = getNodesFromQuery(query, [RangeOp]);\n const supportedRangeOps = ['count_over_time', 'sum_over_time', 'bytes_over_time'];\n for (const node of rangeOps) {\n if (!supportedRangeOps.includes(getNodeString(query, node))) {\n return supportedWrappingVectorOpps.length > 0;\n }\n }\n\n return true;\n}\n\nfunction getNodeString(query: string, node: SyntaxNode) {\n return query.substring(node.from, node.to);\n}\n\nexport const isLokiQuery = (query: DataQuery): query is LokiQuery => {\n if (!query) {\n return false;\n }\n\n return 'expr' in query && query.expr !== undefined;\n};\n\nexport const getLokiQueryFromDataQuery = (query?: DataQuery): LokiQuery | undefined => {\n if (!query || !isLokiQuery(query)) {\n return undefined;\n }\n\n return query;\n};\n\nexport const interpolateShardingSelector = (queries: LokiQuery[], shards: number[]) => {\n if (shards.length === 0) {\n return queries;\n }\n\n let shardValue = shards.join('|');\n\n // -1 means empty shard value\n if (shardValue === '-1' || shards.length === 1) {\n shardValue = shardValue === '-1' ? '' : shardValue;\n return queries.map((query) => ({\n ...query,\n expr: addStreamShardLabelsToQuery(query.expr, '=', shardValue),\n }));\n }\n\n return queries.map((query) => ({\n ...query,\n expr: addStreamShardLabelsToQuery(query.expr, '=~', shardValue),\n }));\n};\n\nfunction addStreamShardLabelsToQuery(query: string, operator: string, shardValue: string) {\n const shardedQuery = addLabelToQuery(query, '__stream_shard__', operator, shardValue, LabelType.Indexed);\n if (!isLogsQuery(query)) {\n return addDropToQuery(shardedQuery, ['__stream_shard__']);\n }\n return shardedQuery;\n}\n\nexport const getSelectorForShardValues = (query: string) => {\n const selector = getNodesFromQuery(query, [Selector]);\n if (selector.length > 0) {\n return query.substring(selector[0].from, selector[0].to);\n }\n return '';\n};\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.format = void 0;\n\nvar _Db2Formatter = _interopRequireDefault(require(\"./languages/Db2Formatter\"));\n\nvar _N1qlFormatter = _interopRequireDefault(require(\"./languages/N1qlFormatter\"));\n\nvar _PlSqlFormatter = _interopRequireDefault(require(\"./languages/PlSqlFormatter\"));\n\nvar _StandardSqlFormatter = _interopRequireDefault(require(\"./languages/StandardSqlFormatter\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\r\n * Format whitespace in a query to make it easier to read.\r\n *\r\n * @param {String} query\r\n * @param {Object} cfg\r\n * @param {String} cfg.language Query language, default is Standard SQL\r\n * @param {String} cfg.indent Characters used for indentation, default is \" \" (2 spaces)\r\n * @param {Bool} cfg.uppercase Converts keywords to uppercase\r\n * @param {Integer} cfg.linesBetweenQueries How many line breaks between queries\r\n * @param {Object} cfg.params Collection of params for placeholder replacement\r\n * @return {String}\r\n */\nvar format = function format(query) {\n var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n switch (cfg.language) {\n case 'db2':\n return new _Db2Formatter[\"default\"](cfg).format(query);\n\n case 'n1ql':\n return new _N1qlFormatter[\"default\"](cfg).format(query);\n\n case 'pl/sql':\n return new _PlSqlFormatter[\"default\"](cfg).format(query);\n\n case 'sql':\n case undefined:\n return new _StandardSqlFormatter[\"default\"](cfg).format(query);\n\n default:\n throw Error(\"Unsupported SQL dialect: \".concat(cfg.language));\n }\n};\n\nexports.format = format;\nvar _default = {\n format: format\n};\nexports[\"default\"] = _default;","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7694__;","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7781__;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _Formatter = _interopRequireDefault(require(\"../core/Formatter\"));\n\nvar _Tokenizer = _interopRequireDefault(require(\"../core/Tokenizer\"));\n\nvar _tokenTypes = _interopRequireDefault(require(\"../core/tokenTypes\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar reservedWords = ['A', 'ACCESSIBLE', 'AGENT', 'AGGREGATE', 'ALL', 'ALTER', 'ANY', 'ARRAY', 'AS', 'ASC', 'AT', 'ATTRIBUTE', 'AUTHID', 'AVG', 'BETWEEN', 'BFILE_BASE', 'BINARY_INTEGER', 'BINARY', 'BLOB_BASE', 'BLOCK', 'BODY', 'BOOLEAN', 'BOTH', 'BOUND', 'BREADTH', 'BULK', 'BY', 'BYTE', 'C', 'CALL', 'CALLING', 'CASCADE', 'CASE', 'CHAR_BASE', 'CHAR', 'CHARACTER', 'CHARSET', 'CHARSETFORM', 'CHARSETID', 'CHECK', 'CLOB_BASE', 'CLONE', 'CLOSE', 'CLUSTER', 'CLUSTERS', 'COALESCE', 'COLAUTH', 'COLLECT', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPILED', 'COMPRESS', 'CONNECT', 'CONSTANT', 'CONSTRUCTOR', 'CONTEXT', 'CONTINUE', 'CONVERT', 'COUNT', 'CRASH', 'CREATE', 'CREDENTIAL', 'CURRENT', 'CURRVAL', 'CURSOR', 'CUSTOMDATUM', 'DANGLING', 'DATA', 'DATE_BASE', 'DATE', 'DAY', 'DECIMAL', 'DEFAULT', 'DEFINE', 'DELETE', 'DEPTH', 'DESC', 'DETERMINISTIC', 'DIRECTORY', 'DISTINCT', 'DO', 'DOUBLE', 'DROP', 'DURATION', 'ELEMENT', 'ELSIF', 'EMPTY', 'END', 'ESCAPE', 'EXCEPTIONS', 'EXCLUSIVE', 'EXECUTE', 'EXISTS', 'EXIT', 'EXTENDS', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL', 'FIRST', 'FIXED', 'FLOAT', 'FOR', 'FORALL', 'FORCE', 'FROM', 'FUNCTION', 'GENERAL', 'GOTO', 'GRANT', 'GROUP', 'HASH', 'HEAP', 'HIDDEN', 'HOUR', 'IDENTIFIED', 'IF', 'IMMEDIATE', 'IN', 'INCLUDING', 'INDEX', 'INDEXES', 'INDICATOR', 'INDICES', 'INFINITE', 'INSTANTIABLE', 'INT', 'INTEGER', 'INTERFACE', 'INTERVAL', 'INTO', 'INVALIDATE', 'IS', 'ISOLATION', 'JAVA', 'LANGUAGE', 'LARGE', 'LEADING', 'LENGTH', 'LEVEL', 'LIBRARY', 'LIKE', 'LIKE2', 'LIKE4', 'LIKEC', 'LIMITED', 'LOCAL', 'LOCK', 'LONG', 'MAP', 'MAX', 'MAXLEN', 'MEMBER', 'MERGE', 'MIN', 'MINUTE', 'MLSLABEL', 'MOD', 'MODE', 'MONTH', 'MULTISET', 'NAME', 'NAN', 'NATIONAL', 'NATIVE', 'NATURAL', 'NATURALN', 'NCHAR', 'NEW', 'NEXTVAL', 'NOCOMPRESS', 'NOCOPY', 'NOT', 'NOWAIT', 'NULL', 'NULLIF', 'NUMBER_BASE', 'NUMBER', 'OBJECT', 'OCICOLL', 'OCIDATE', 'OCIDATETIME', 'OCIDURATION', 'OCIINTERVAL', 'OCILOBLOCATOR', 'OCINUMBER', 'OCIRAW', 'OCIREF', 'OCIREFCURSOR', 'OCIROWID', 'OCISTRING', 'OCITYPE', 'OF', 'OLD', 'ON', 'ONLY', 'OPAQUE', 'OPEN', 'OPERATOR', 'OPTION', 'ORACLE', 'ORADATA', 'ORDER', 'ORGANIZATION', 'ORLANY', 'ORLVARY', 'OTHERS', 'OUT', 'OVERLAPS', 'OVERRIDING', 'PACKAGE', 'PARALLEL_ENABLE', 'PARAMETER', 'PARAMETERS', 'PARENT', 'PARTITION', 'PASCAL', 'PCTFREE', 'PIPE', 'PIPELINED', 'PLS_INTEGER', 'PLUGGABLE', 'POSITIVE', 'POSITIVEN', 'PRAGMA', 'PRECISION', 'PRIOR', 'PRIVATE', 'PROCEDURE', 'PUBLIC', 'RAISE', 'RANGE', 'RAW', 'READ', 'REAL', 'RECORD', 'REF', 'REFERENCE', 'RELEASE', 'RELIES_ON', 'REM', 'REMAINDER', 'RENAME', 'RESOURCE', 'RESULT_CACHE', 'RESULT', 'RETURN', 'RETURNING', 'REVERSE', 'REVOKE', 'ROLLBACK', 'ROW', 'ROWID', 'ROWNUM', 'ROWTYPE', 'SAMPLE', 'SAVE', 'SAVEPOINT', 'SB1', 'SB2', 'SB4', 'SEARCH', 'SECOND', 'SEGMENT', 'SELF', 'SEPARATE', 'SEQUENCE', 'SERIALIZABLE', 'SHARE', 'SHORT', 'SIZE_T', 'SIZE', 'SMALLINT', 'SOME', 'SPACE', 'SPARSE', 'SQL', 'SQLCODE', 'SQLDATA', 'SQLERRM', 'SQLNAME', 'SQLSTATE', 'STANDARD', 'START', 'STATIC', 'STDDEV', 'STORED', 'STRING', 'STRUCT', 'STYLE', 'SUBMULTISET', 'SUBPARTITION', 'SUBSTITUTABLE', 'SUBTYPE', 'SUCCESSFUL', 'SUM', 'SYNONYM', 'SYSDATE', 'TABAUTH', 'TABLE', 'TDO', 'THE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_ABBR', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TIMEZONE_REGION', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSACTIONAL', 'TRIGGER', 'TRUE', 'TRUSTED', 'TYPE', 'UB1', 'UB2', 'UB4', 'UID', 'UNDER', 'UNIQUE', 'UNPLUG', 'UNSIGNED', 'UNTRUSTED', 'USE', 'USER', 'USING', 'VALIDATE', 'VALIST', 'VALUE', 'VARCHAR', 'VARCHAR2', 'VARIABLE', 'VARIANCE', 'VARRAY', 'VARYING', 'VIEW', 'VIEWS', 'VOID', 'WHENEVER', 'WHILE', 'WITH', 'WORK', 'WRAPPED', 'WRITE', 'YEAR', 'ZONE'];\nvar reservedTopLevelWords = ['ADD', 'ALTER COLUMN', 'ALTER TABLE', 'BEGIN', 'CONNECT BY', 'DECLARE', 'DELETE FROM', 'DELETE', 'END', 'EXCEPT', 'EXCEPTION', 'FETCH FIRST', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'LOOP', 'MODIFY', 'ORDER BY', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'START WITH', 'UPDATE', 'VALUES', 'WHERE'];\nvar reservedTopLevelWordsNoIndent = ['INTERSECT', 'INTERSECT ALL', 'MINUS', 'UNION', 'UNION ALL'];\nvar reservedNewlineWords = ['AND', 'CROSS APPLY', 'CROSS JOIN', 'ELSE', 'END', 'INNER JOIN', 'JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'OR', 'OUTER APPLY', 'OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'WHEN', 'XOR'];\n\nvar tokenOverride = function tokenOverride(token, previousReservedToken) {\n if (token.type === _tokenTypes[\"default\"].RESERVED_TOP_LEVEL && token.value === 'SET' && previousReservedToken.value === 'BY') {\n token.type = _tokenTypes[\"default\"].RESERVED;\n return token;\n }\n};\n\nvar tokenizer;\n\nvar PlSqlFormatter =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg Different set of configurations\r\n */\n function PlSqlFormatter(cfg) {\n _classCallCheck(this, PlSqlFormatter);\n\n this.cfg = cfg;\n }\n /**\r\n * Format the whitespace in a PL/SQL string to make it easier to read\r\n *\r\n * @param {String} query The PL/SQL string\r\n * @return {String} formatted string\r\n */\n\n\n _createClass(PlSqlFormatter, [{\n key: \"format\",\n value: function format(query) {\n if (!tokenizer) {\n tokenizer = new _Tokenizer[\"default\"]({\n reservedWords: reservedWords,\n reservedTopLevelWords: reservedTopLevelWords,\n reservedNewlineWords: reservedNewlineWords,\n reservedTopLevelWordsNoIndent: reservedTopLevelWordsNoIndent,\n stringTypes: [\"\\\"\\\"\", \"N''\", \"''\", '``'],\n openParens: ['(', 'CASE', 'BEGIN'],\n closeParens: [')', 'END'],\n indexedPlaceholderTypes: ['?'],\n namedPlaceholderTypes: [':'],\n lineCommentTypes: ['--'],\n specialWordChars: ['_', '$', '#', '.', '@']\n });\n }\n\n return new _Formatter[\"default\"](this.cfg, tokenizer, tokenOverride).format(query);\n }\n }]);\n\n return PlSqlFormatter;\n}();\n\nexports[\"default\"] = PlSqlFormatter;\nmodule.exports = exports.default;","import { invert } from 'lodash';\n\nimport { AbstractLabelMatcher, AbstractLabelOperator, AbstractQuery, DataFrame, TimeRange } from '@grafana/data';\n\nimport { LabelType } from './types';\n\nfunction roundMsToMin(milliseconds: number): number {\n return roundSecToMin(milliseconds / 1000);\n}\n\nfunction roundSecToMin(seconds: number): number {\n return Math.floor(seconds / 60);\n}\n\nexport function shouldRefreshLabels(range?: TimeRange, prevRange?: TimeRange): boolean {\n if (range && prevRange) {\n const sameMinuteFrom = roundMsToMin(range.from.valueOf()) === roundMsToMin(prevRange.from.valueOf());\n const sameMinuteTo = roundMsToMin(range.to.valueOf()) === roundMsToMin(prevRange.to.valueOf());\n // If both are same, don't need to refresh\n return !(sameMinuteFrom && sameMinuteTo);\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function unescapeLabelValue(labelValue: string): string {\n return labelValue.replace(/\\\\n/g, '\\n').replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function escapeLabelValueInSelector(labelValue: string, selector?: string): string {\n return isRegexSelector(selector)\n ? escapeLabelValueInRegexSelector(labelValue)\n : escapeLabelValueInExactSelector(labelValue);\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\nexport function isBytesString(string: string) {\n const BYTES_KEYWORDS = [\n 'b',\n 'kib',\n 'Kib',\n 'kb',\n 'KB',\n 'mib',\n 'Mib',\n 'mb',\n 'MB',\n 'gib',\n 'Gib',\n 'gb',\n 'GB',\n 'tib',\n 'Tib',\n 'tb',\n 'TB',\n 'pib',\n 'Pib',\n 'pb',\n 'PB',\n 'eib',\n 'Eib',\n 'eb',\n 'EB',\n ];\n const regex = new RegExp(`^(?:-?\\\\d+(?:\\\\.\\\\d+)?)(?:${BYTES_KEYWORDS.join('|')})$`);\n const match = string.match(regex);\n return !!match;\n}\n\nexport function getLabelTypeFromFrame(labelKey: string, frame?: DataFrame, index?: number): null | LabelType {\n if (!frame || index === undefined) {\n return null;\n }\n\n const typeField = frame.fields.find((field) => field.name === 'labelTypes')?.values[index];\n if (!typeField) {\n return null;\n }\n switch (typeField[labelKey]) {\n case 'I':\n return LabelType.Indexed;\n case 'S':\n return LabelType.StructuredMetadata;\n case 'P':\n return LabelType.Parsed;\n default:\n return null;\n }\n}\n\nexport const mapOpToAbstractOp: Record<AbstractLabelOperator, string> = {\n [AbstractLabelOperator.Equal]: '=',\n [AbstractLabelOperator.NotEqual]: '!=',\n [AbstractLabelOperator.EqualRegEx]: '=~',\n [AbstractLabelOperator.NotEqualRegEx]: '!~',\n};\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const mapAbstractOperatorsToOp = invert(mapOpToAbstractOp) as Record<string, AbstractLabelOperator>;\n\nexport function abstractQueryToExpr(labelBasedQuery: AbstractQuery): string {\n const expr = labelBasedQuery.labelMatchers\n .map((selector: AbstractLabelMatcher) => {\n const operator = mapOpToAbstractOp[selector.operator];\n if (operator) {\n return `${selector.name}${operator}\"${selector.value}\"`;\n } else {\n return '';\n }\n })\n .filter((e: string) => e !== '')\n .join(', ');\n\n return expr ? `{${expr}}` : '';\n}\n\nexport function processLabels(labels: Array<{ [key: string]: string }>) {\n const valueSet: { [key: string]: Set<string> } = {};\n labels.forEach((label) => {\n Object.keys(label).forEach((key) => {\n if (!valueSet[key]) {\n valueSet[key] = new Set();\n }\n if (!valueSet[key].has(label[key])) {\n valueSet[key].add(label[key]);\n }\n });\n });\n\n const valueArray: { [key: string]: string[] } = {};\n limitSuggestions(Object.keys(valueSet)).forEach((key) => {\n valueArray[key] = limitSuggestions(Array.from(valueSet[key]));\n });\n\n return { values: valueArray, keys: Object.keys(valueArray) };\n}\n\n// Max number of items (metrics, labels, values) that we display as suggestions. Prevents from running out of memory.\nexport const SUGGESTIONS_LIMIT = 10000;\nexport function limitSuggestions(items: string[]) {\n return items.slice(0, SUGGESTIONS_LIMIT);\n}\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","/**\n * @license React\n * react-jsx-runtime.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 f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","import {\n VisualQueryBinary,\n QueryBuilderLabelFilter,\n QueryBuilderOperation,\n BINARY_OPERATIONS_KEY,\n} from '@grafana/plugin-ui';\n\n/**\n * Visual query model\n */\nexport interface LokiVisualQuery {\n labels: QueryBuilderLabelFilter[];\n operations: QueryBuilderOperation[];\n binaryQueries?: LokiVisualQueryBinary[];\n}\n\nexport type LokiVisualQueryBinary = VisualQueryBinary<LokiVisualQuery>;\nexport enum LokiQueryPatternType {\n Log = 'log',\n Metric = 'metric',\n}\n\nexport interface LokiQueryPattern {\n name: string;\n operations: QueryBuilderOperation[];\n type: LokiQueryPatternType;\n}\n\nexport enum LokiVisualQueryOperationCategory {\n Aggregations = 'Aggregations',\n RangeFunctions = 'Range functions',\n Functions = 'Functions',\n Formats = 'Formats',\n LineFilters = 'Line filters',\n LabelFilters = 'Label filters',\n BinaryOps = `${BINARY_OPERATIONS_KEY}`,\n}\n\nexport enum LokiOperationId {\n Json = 'json',\n Logfmt = 'logfmt',\n Regexp = 'regexp',\n Pattern = 'pattern',\n Unpack = 'unpack',\n LineFormat = 'line_format',\n LabelFormat = 'label_format',\n Decolorize = 'decolorize',\n Drop = 'drop',\n Keep = 'keep',\n Rate = 'rate',\n RateCounter = 'rate_counter',\n CountOverTime = 'count_over_time',\n SumOverTime = 'sum_over_time',\n AvgOverTime = 'avg_over_time',\n MaxOverTime = 'max_over_time',\n MinOverTime = 'min_over_time',\n FirstOverTime = 'first_over_time',\n LastOverTime = 'last_over_time',\n StdvarOverTime = 'stdvar_over_time',\n StddevOverTime = 'stddev_over_time',\n QuantileOverTime = 'quantile_over_time',\n BytesRate = 'bytes_rate',\n BytesOverTime = 'bytes_over_time',\n AbsentOverTime = 'absent_over_time',\n Sum = 'sum',\n Avg = 'avg',\n Min = 'min',\n Max = 'max',\n Stddev = 'stddev',\n Stdvar = 'stdvar',\n Count = 'count',\n TopK = 'topk',\n BottomK = 'bottomk',\n LineContains = '__line_contains',\n LineContainsNot = '__line_contains_not',\n LineContainsCaseInsensitive = '__line_contains_case_insensitive',\n LineContainsNotCaseInsensitive = '__line_contains_not_case_insensitive',\n LineMatchesRegex = '__line_matches_regex',\n LineMatchesRegexNot = '__line_matches_regex_not',\n LineFilterIpMatches = '__line_filter_ip_matches',\n LabelFilter = '__label_filter',\n LabelFilterNoErrors = '__label_filter_no_errors',\n LabelFilterIpMatches = '__label_filter_ip_marches',\n Unwrap = 'unwrap',\n SumBy = '__sum_by',\n SumWithout = '__sum_without',\n // Binary ops\n Addition = '__addition',\n Subtraction = '__subtraction',\n MultiplyBy = '__multiply_by',\n DivideBy = '__divide_by',\n Modulo = '__modulo',\n Exponent = '__exponent',\n NestedQuery = '__nested_query',\n EqualTo = '__equal_to',\n NotEqualTo = '__not_equal_to',\n GreaterThan = '__greater_than',\n LessThan = '__less_than',\n GreaterOrEqual = '__greater_or_equal',\n LessOrEqual = '__less_or_equal',\n}\n\nexport enum LokiOperationOrder {\n LineFilters = 1,\n Parsers = 2,\n PipeOperations = 3,\n // Unwrap is a special case, as it is usually the last operation, so the order is after pipeOperations\n Unwrap = 4,\n NoErrors = 5,\n RangeVectorFunction = 5,\n Last = 6,\n}\n\nexport const lokiOperators = {\n equals: { label: '=', value: '=', description: 'Equals', isMultiValue: false },\n doesNotEqual: { label: '!=', value: '!=', description: 'Does not equal', isMultiValue: false },\n matchesRegex: { label: '=~', value: '=~', description: 'Matches regex', isMultiValue: true },\n doesNotMatchRegex: { label: '!~', value: '!~', description: 'Does not match regex', isMultiValue: true },\n greaterThan: { label: '>', value: '>', description: 'Greater than', isMultiValue: false },\n greaterThanOrEqual: { label: '>=', value: '>=', description: 'Greater than or equal to', isMultiValue: false },\n lessThan: { label: '<', value: '<', description: 'Less than', isMultiValue: false },\n lessThanOrEqual: { label: '<=', value: '<=', description: 'Less than or equal to', isMultiValue: false },\n contains: { label: '|=', value: '|=', description: 'Contains', isMultiValue: false },\n doesNotContain: { label: '!=', value: '!=', description: 'Does not contain', isMultiValue: false },\n};\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8146__;","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8398__;","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","var toString = require('./toString');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8531__;","import {\n QueryBuilderOperation,\n QueryBuilderOperationDefinition,\n QueryBuilderOperationParamDef,\n} from '@grafana/plugin-ui';\n\nimport { defaultAddOperationHandler } from './operationUtils';\nimport { LokiOperationId, LokiVisualQueryOperationCategory } from './types';\n\nexport const binaryScalarDefs = [\n {\n id: LokiOperationId.Addition,\n name: 'Add scalar',\n sign: '+',\n },\n {\n id: LokiOperationId.Subtraction,\n name: 'Subtract scalar',\n sign: '-',\n },\n {\n id: LokiOperationId.MultiplyBy,\n name: 'Multiply by scalar',\n sign: '*',\n },\n {\n id: LokiOperationId.DivideBy,\n name: 'Divide by scalar',\n sign: '/',\n },\n {\n id: LokiOperationId.Modulo,\n name: 'Modulo by scalar',\n sign: '%',\n },\n {\n id: LokiOperationId.Exponent,\n name: 'Exponent',\n sign: '^',\n },\n {\n id: LokiOperationId.EqualTo,\n name: 'Equal to',\n sign: '==',\n comparison: true,\n },\n {\n id: LokiOperationId.NotEqualTo,\n name: 'Not equal to',\n sign: '!=',\n comparison: true,\n },\n {\n id: LokiOperationId.GreaterThan,\n name: 'Greater than',\n sign: '>',\n comparison: true,\n },\n {\n id: LokiOperationId.LessThan,\n name: 'Less than',\n sign: '<',\n comparison: true,\n },\n {\n id: LokiOperationId.GreaterOrEqual,\n name: 'Greater or equal to',\n sign: '>=',\n comparison: true,\n },\n {\n id: LokiOperationId.LessOrEqual,\n name: 'Less or equal to',\n sign: '<=',\n comparison: true,\n },\n];\n\n// Not sure about this one. It could also be a more generic 'Simple math operation' where user specifies\n// both the operator and the operand in a single input\nexport const binaryScalarOperations: QueryBuilderOperationDefinition[] = binaryScalarDefs.map((opDef) => {\n const params: QueryBuilderOperationParamDef[] = [{ name: 'Value', type: 'number' }];\n let defaultParams: [number] | [number, boolean] = [2];\n if (opDef.comparison) {\n params.push({\n name: 'Bool',\n type: 'boolean',\n description: 'If checked comparison will return 0 or 1 for the value rather than filtering.',\n });\n defaultParams = [2, false];\n }\n\n return {\n id: opDef.id,\n name: opDef.name,\n params,\n defaultParams,\n toggleable: true,\n alternativesKey: 'binary scalar operations',\n category: LokiVisualQueryOperationCategory.BinaryOps,\n renderer: getSimpleBinaryRenderer(opDef.sign),\n addOperationHandler: defaultAddOperationHandler,\n };\n});\n\nfunction getSimpleBinaryRenderer(operator: string) {\n return function binaryRenderer(\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerExpr: string\n ) {\n let param = model.params[0];\n let bool = '';\n if (model.params.length === 2) {\n bool = model.params[1] ? ' bool' : '';\n }\n\n return `${innerExpr} ${operator}${bool} ${param}`;\n };\n}\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","import { gte, compare, valid } from 'semver';\n\nimport {\n FunctionSelector,\n Selectors,\n SelectorsOf,\n StringSelector,\n VersionedSelectorGroup,\n VersionedSelectors,\n CssSelector,\n UrlSelector,\n FunctionSelectorTwoArgs,\n} from './types';\n\n/**\n * Resolves selectors based on the Grafana version\n */\nexport function resolveSelectors<T extends VersionedSelectorGroup>(\n versionedSelectors: T,\n grafanaVersion = 'latest'\n): SelectorsOf<T> {\n const version = grafanaVersion.replace(/\\-.*/, '');\n\n return resolveSelectorGroup(versionedSelectors, version);\n}\n\nfunction resolveSelectorGroup<T extends VersionedSelectorGroup>(group: T, grafanaVersion: string): SelectorsOf<T> {\n const result: Selectors = {};\n\n for (const [key, value] of Object.entries(group)) {\n if (isVersionedSelectorGroup(value)) {\n result[key] = resolveSelectorGroup(value, grafanaVersion);\n } else {\n assertIsSemverValid(value, key);\n result[key] = resolveSelector(value, grafanaVersion);\n }\n }\n\n return result as SelectorsOf<T>;\n}\n\nfunction isVersionedSelectorGroup(\n target: VersionedSelectors | VersionedSelectorGroup\n): target is VersionedSelectorGroup {\n if (typeof target === 'object') {\n const [first] = Object.keys(target);\n return !valid(first);\n }\n\n return false;\n}\n\nfunction resolveSelector(\n versionedSelector: VersionedSelectors,\n grafanaVersion: string\n): StringSelector | FunctionSelector | FunctionSelectorTwoArgs | CssSelector | UrlSelector {\n let versionToUse;\n let versions = Object.keys(versionedSelector).sort(compare);\n\n if (grafanaVersion === 'latest') {\n return versionedSelector[versions[versions.length - 1]];\n }\n\n for (const version of versions) {\n if (gte(grafanaVersion, version)) {\n versionToUse = version;\n }\n }\n\n if (!versionToUse) {\n versionToUse = versions[versions.length - 1];\n }\n\n return versionedSelector[versionToUse];\n}\n\nfunction assertIsSemverValid(versionedSelector: VersionedSelectors, selectorName: string) {\n if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n throw new Error(`Invalid semver version: '${selectorName}'`);\n }\n}\n","export const MIN_GRAFANA_VERSION = '8.5.0';\n","// NOTE: by default Component string selectors are set up to be aria-labels,\n// however there are many cases where your component may not need an aria-label\n// (a <button> with clear text, for example, does not need an aria-label as it's already labeled)\n// but you still might need to select it for testing,\n// in that case please add the attribute data-testid={selector} in the component and\n// prefix your selector string with 'data-testid' so that when create the selectors we know to search for it on the right attribute\n\nimport { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Components\n */\nexport const versionedComponents = {\n RadioButton: {\n container: {\n '10.2.3': 'data-testid radio-button',\n },\n },\n Breadcrumbs: {\n breadcrumb: {\n '9.4.0': (title: string) => `data-testid ${title} breadcrumb`,\n },\n },\n CanvasGridAddActions: {\n addPanel: {\n '12.1.0': 'data-testid CanvasGridAddActions add-panel',\n },\n groupPanels: {\n '12.1.0': 'data-testid CanvasGridAddActions group-panels',\n },\n ungroup: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup',\n },\n ungroupRows: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup-rows',\n },\n addRow: {\n '12.1.0': 'data-testid CanvasGridAddActions add-row',\n },\n pasteRow: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-row',\n },\n addTab: {\n '12.1.0': 'data-testid CanvasGridAddActions add-tab',\n },\n pasteTab: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-tab',\n },\n pastePanel: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-panel',\n },\n },\n DashboardEditPaneSplitter: {\n primaryBody: {\n '12.1.0': 'data-testid DashboardEditPaneSplitter primary body',\n },\n },\n EditPaneHeader: {\n deleteButton: {\n '12.1.0': 'data-testid EditPaneHeader delete panel',\n },\n copyDropdown: {\n '12.1.0': 'data-testid EditPaneHeader copy dropdown',\n },\n copy: {\n '12.1.0': 'data-testid EditPaneHeader copy',\n },\n duplicate: {\n '12.1.0': 'data-testid EditPaneHeader duplicate',\n },\n backButton: {\n '12.1.0': 'data-testid EditPaneHeader back',\n },\n },\n TimePicker: {\n openButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker Open Button',\n },\n overlayContent: {\n '10.2.3': 'data-testid TimePicker Overlay Content',\n },\n fromField: {\n '10.2.3': 'data-testid Time Range from field',\n [MIN_GRAFANA_VERSION]: 'Time Range from field',\n },\n toField: {\n '10.2.3': 'data-testid Time Range to field',\n [MIN_GRAFANA_VERSION]: 'Time Range to field',\n },\n applyTimeRange: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker submit button',\n },\n copyTimeRange: {\n '10.4.0': 'data-testid TimePicker copy button',\n },\n pasteTimeRange: {\n '10.4.0': 'data-testid TimePicker paste button',\n },\n calendar: {\n label: {\n '10.2.3': 'data-testid Time Range calendar',\n [MIN_GRAFANA_VERSION]: 'Time Range calendar',\n },\n openButton: {\n '10.2.3': 'data-testid Open time range calendar',\n [MIN_GRAFANA_VERSION]: 'Open time range calendar',\n },\n closeButton: {\n '10.2.3': 'data-testid Close time range Calendar',\n [MIN_GRAFANA_VERSION]: 'Close time range Calendar',\n },\n },\n absoluteTimeRangeTitle: {\n [MIN_GRAFANA_VERSION]: 'data-testid-absolute-time-range-narrow',\n },\n },\n DataSourcePermissions: {\n form: { '9.5.0': () => 'form[name=\"addPermission\"]' },\n roleType: {\n '9.5.0': 'Role to add new permission to',\n },\n rolePicker: {\n '9.5.0': 'Built-in role picker',\n },\n permissionLevel: {\n '12.0.0': 'Permission level',\n '9.5.0': 'Permission Level',\n },\n },\n DateTimePicker: {\n input: {\n '10.2.3': 'data-testid date-time-input',\n },\n },\n DataSource: {\n TestData: {\n QueryTab: {\n scenarioSelectContainer: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select container',\n },\n scenarioSelect: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select',\n },\n max: {\n [MIN_GRAFANA_VERSION]: 'TestData max',\n },\n min: {\n [MIN_GRAFANA_VERSION]: 'TestData min',\n },\n noise: {\n [MIN_GRAFANA_VERSION]: 'TestData noise',\n },\n seriesCount: {\n [MIN_GRAFANA_VERSION]: 'TestData series count',\n },\n spread: {\n [MIN_GRAFANA_VERSION]: 'TestData spread',\n },\n startValue: {\n [MIN_GRAFANA_VERSION]: 'TestData start value',\n },\n drop: {\n [MIN_GRAFANA_VERSION]: 'TestData drop values',\n },\n },\n },\n DataSourceHttpSettings: {\n urlInput: {\n '10.4.0': 'data-testid Datasource HTTP settings url',\n [MIN_GRAFANA_VERSION]: 'Datasource HTTP settings url',\n },\n },\n Jaeger: {\n traceIDInput: {\n [MIN_GRAFANA_VERSION]: 'Trace ID',\n },\n },\n Prometheus: {\n configPage: {\n connectionSettings: {\n [MIN_GRAFANA_VERSION]: 'Data source connection URL', // aria-label in grafana experimental\n },\n manageAlerts: {\n '10.4.0': 'prometheus-alerts-manager', // id for switch component\n },\n allowAsRecordingRulesTarget: {\n '12.1.0': 'prometheus-recording-rules-target',\n },\n scrapeInterval: {\n '10.4.0': 'data-testid scrape interval',\n },\n queryTimeout: {\n '10.4.0': 'data-testid query timeout',\n },\n defaultEditor: {\n '10.4.0': 'data-testid default editor',\n },\n disableMetricLookup: {\n '10.4.0': 'disable-metric-lookup', // id for switch component\n },\n prometheusType: {\n '10.4.0': 'data-testid prometheus type',\n },\n prometheusVersion: {\n '10.4.0': 'data-testid prometheus version',\n },\n cacheLevel: {\n '10.4.0': 'data-testid cache level',\n },\n incrementalQuerying: {\n '10.4.0': 'prometheus-incremental-querying', // id for switch component\n },\n queryOverlapWindow: {\n '10.4.0': 'data-testid query overlap window',\n },\n disableRecordingRules: {\n '10.4.0': 'disable-recording-rules', // id for switch component\n },\n customQueryParameters: {\n '10.4.0': 'data-testid custom query parameters',\n },\n httpMethod: {\n '10.4.0': 'data-testid http method',\n },\n exemplarsAddButton: {\n '10.3.0': 'data-testid Add exemplar config button',\n [MIN_GRAFANA_VERSION]: 'Add exemplar config button',\n },\n internalLinkSwitch: {\n '10.3.0': 'data-testid Internal link switch',\n [MIN_GRAFANA_VERSION]: 'Internal link switch',\n },\n codeModeMetricNamesSuggestionLimit: {\n '11.1.0': 'data-testid code mode metric names suggestion limit',\n },\n seriesLimit: {\n '12.0.2': 'data-testid maximum series limit',\n },\n },\n queryEditor: {\n explain: {\n '10.4.0': 'data-testid prometheus explain switch wrapper',\n },\n editorToggle: {\n '10.4.0': 'data-testid QueryEditorModeToggle', // wrapper for toggle\n },\n options: {\n '10.4.0': 'data-testid prometheus options', // wrapper for options group\n },\n legend: {\n '10.4.0': 'data-testid prometheus legend wrapper', // wrapper for multiple compomnents\n },\n format: {\n '10.4.0': 'data-testid prometheus format',\n },\n step: {\n '10.4.0': 'data-testid prometheus-step', // id for autosize component\n },\n type: {\n '10.4.0': 'data-testid prometheus type', //wrapper for radio button group\n },\n exemplars: {\n '10.4.0': 'data-testid prometheus-exemplars', // id for editor switch component\n },\n builder: {\n // see QueryBuilder below for commented selectors\n metricSelect: {\n '10.4.0': 'data-testid metric select',\n },\n hints: {\n '10.4.0': 'data-testid prometheus hints', // wrapper for hints component\n },\n metricsExplorer: {\n '10.4.0': 'data-testid metrics explorer',\n },\n queryAdvisor: {\n '10.4.0': 'data-testid query advisor',\n },\n },\n code: {\n queryField: {\n '10.4.0': 'data-testid prometheus query field',\n },\n metricsCountInfo: {\n '11.1.0': 'data-testid metrics count disclaimer',\n },\n metricsBrowser: {\n openButton: {\n '10.4.0': 'data-testid open metrics browser',\n },\n selectMetric: {\n '10.4.0': 'data-testid select a metric',\n },\n seriesLimit: {\n '10.3.1': 'data-testid series limit',\n },\n metricList: {\n '10.4.0': 'data-testid metric list',\n },\n labelNamesFilter: {\n '10.4.0': 'data-testid label names filter',\n },\n labelValuesFilter: {\n '10.4.0': 'data-testid label values filter',\n },\n useQuery: {\n '10.4.0': 'data-testid use query',\n },\n useAsRateQuery: {\n '10.4.0': 'data-testid use as rate query',\n },\n validateSelector: {\n '10.4.0': 'data-testid validate selector',\n },\n clear: {\n '10.4.0': 'data-testid clear',\n },\n },\n },\n },\n exemplarMarker: {\n '10.3.0': 'data-testid Exemplar marker',\n [MIN_GRAFANA_VERSION]: 'Exemplar marker',\n },\n variableQueryEditor: {\n queryType: {\n '10.4.0': 'data-testid query type',\n },\n labelnames: {\n metricRegex: {\n '10.4.0': 'data-testid label names metric regex',\n },\n },\n labelValues: {\n labelSelect: {\n '10.4.0': 'data-testid label values label select',\n },\n },\n metricNames: {\n metricRegex: {\n '10.4.0': 'data-testid metric names metric regex',\n },\n },\n varQueryResult: {\n '10.4.0': 'data-testid variable query result',\n },\n seriesQuery: {\n '10.4.0': 'data-testid prometheus series query',\n },\n classicQuery: {\n '10.4.0': 'data-testid prometheus classic query',\n },\n },\n annotations: {\n minStep: {\n '10.4.0': 'data-testid prometheus-annotation-min-step', // id for autosize input\n },\n title: {\n '10.4.0': 'data-testid prometheus annotation title',\n },\n tags: {\n '10.4.0': 'data-testid prometheus annotation tags',\n },\n text: {\n '10.4.0': 'data-testid prometheus annotation text',\n },\n seriesValueAsTimestamp: {\n '10.4.0': 'data-testid prometheus annotation series value as timestamp',\n },\n },\n },\n },\n Menu: {\n MenuComponent: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu`,\n },\n MenuGroup: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu group`,\n },\n MenuItem: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu item`,\n },\n SubMenu: {\n container: {\n '10.3.0': 'data-testid SubMenu container',\n [MIN_GRAFANA_VERSION]: 'SubMenu container',\n },\n icon: {\n '10.3.0': 'data-testid SubMenu icon',\n [MIN_GRAFANA_VERSION]: 'SubMenu icon',\n },\n },\n },\n Panels: {\n Panel: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid Panel header ${title}`,\n },\n content: {\n '11.1.0': 'data-testid panel content',\n },\n headerContainer: {\n '9.5.0': 'data-testid header-container',\n },\n headerItems: {\n '10.2.0': (item: string) => `data-testid Panel header item ${item}`,\n },\n menuItems: {\n '9.5.0': (item: string) => `data-testid Panel menu item ${item}`,\n },\n menu: {\n '9.5.0': (title: string) => `data-testid Panel menu ${title}`,\n },\n containerByTitle: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} panel`,\n },\n headerCornerInfo: {\n [MIN_GRAFANA_VERSION]: (mode: string) => `Panel header ${mode}`,\n },\n status: {\n '10.2.0': (status: string) => `data-testid Panel status ${status}`,\n [MIN_GRAFANA_VERSION]: (_: string) => 'Panel status',\n },\n loadingBar: {\n '10.0.0': () => `Panel loading bar`,\n },\n HoverWidget: {\n container: {\n '10.1.0': 'data-testid hover-header-container',\n [MIN_GRAFANA_VERSION]: 'hover-header-container',\n },\n dragIcon: {\n '10.0.0': 'data-testid drag-icon',\n },\n },\n PanelDataErrorMessage: {\n '10.4.0': 'data-testid Panel data error message',\n },\n },\n Visualization: {\n Graph: {\n container: {\n '9.5.0': 'Graph container',\n },\n VisualizationTab: {\n legendSection: {\n [MIN_GRAFANA_VERSION]: 'Legend section',\n },\n },\n Legend: {\n legendItemAlias: {\n [MIN_GRAFANA_VERSION]: (name: string) => `gpl alias ${name}`,\n },\n showLegendSwitch: {\n [MIN_GRAFANA_VERSION]: 'gpl show legend',\n },\n },\n xAxis: {\n labels: {\n [MIN_GRAFANA_VERSION]: () => 'div.flot-x-axis > div.flot-tick-label',\n },\n },\n },\n BarGauge: {\n valueV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Bar gauge value',\n },\n },\n PieChart: {\n svgSlice: {\n '10.3.0': 'data testid Pie Chart Slice',\n },\n },\n Text: {\n container: { [MIN_GRAFANA_VERSION]: () => '.markdown-html' },\n },\n Table: {\n header: {\n [MIN_GRAFANA_VERSION]: 'table header',\n },\n footer: {\n [MIN_GRAFANA_VERSION]: 'table-footer',\n },\n body: {\n '10.2.0': 'data-testid table body',\n },\n },\n TableNG: {\n Filters: {\n HeaderButton: {\n '12.1.0': 'data-testid tableng header filter',\n },\n Container: {\n '12.1.0': 'data-testid tablenf filter container',\n },\n SelectAll: {\n '12.1.0': 'data-testid tableng filter select-all',\n },\n },\n Tooltip: {\n Wrapper: {\n '12.2.0': 'data-testid tableng tooltip wrapper',\n },\n Caret: {\n '12.2.0': 'data-testid tableng tooltip caret',\n },\n },\n Footer: {\n ReducerLabel: {\n '12.2.0': 'data-testid tableng footer reducer-label',\n },\n Value: {\n '12.2.0': 'data-testid tableng footer value',\n },\n },\n },\n Tooltip: {\n Wrapper: {\n '12.3.0': 'data-testid viz-tooltip-wrapper',\n },\n },\n },\n },\n VizLegend: {\n seriesName: {\n '10.3.0': (name: string) => `data-testid VizLegend series ${name}`,\n },\n },\n Drawer: {\n General: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Drawer title ${title}`,\n },\n expand: {\n [MIN_GRAFANA_VERSION]: 'Drawer expand',\n },\n contract: {\n [MIN_GRAFANA_VERSION]: 'Drawer contract',\n },\n close: {\n '10.3.0': 'data-testid Drawer close',\n [MIN_GRAFANA_VERSION]: 'Drawer close',\n },\n rcContentWrapper: { '9.4.0': () => '.rc-drawer-content-wrapper' },\n subtitle: {\n '10.4.0': 'data-testid drawer subtitle',\n },\n },\n DashboardSaveDrawer: {\n saveButton: {\n '11.1.0': 'data-testid Save dashboard drawer button',\n },\n saveAsButton: {\n '11.1.0': 'data-testid Save as dashboard drawer button',\n },\n saveAsTitleInput: {\n '11.1.0': 'Save dashboard title field',\n },\n },\n },\n PanelEditor: {\n General: {\n content: {\n '11.1.0': 'data-testid Panel editor content',\n '8.0.0': 'Panel editor content',\n },\n },\n OptionsPane: {\n content: {\n '11.1.0': 'data-testid Panel editor option pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane content',\n },\n select: {\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane select',\n },\n fieldLabel: {\n [MIN_GRAFANA_VERSION]: (type: string) => `${type} field property editor`,\n },\n fieldInput: {\n '11.0.0': (title: string) => `data-testid Panel editor option pane field input ${title}`,\n },\n },\n DataPane: {\n content: {\n '11.1.0': 'data-testid Panel editor data pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor data pane content',\n },\n },\n applyButton: {\n '9.2.0': 'data-testid Apply changes and go back to dashboard',\n '9.1.0': 'Apply changes and go back to dashboard',\n '8.0.0': 'panel editor apply',\n },\n toggleVizPicker: {\n '10.0.0': 'data-testid toggle-viz-picker',\n '8.0.0': 'toggle-viz-picker',\n },\n toggleVizOptions: {\n '10.1.0': 'data-testid toggle-viz-options',\n [MIN_GRAFANA_VERSION]: 'toggle-viz-options',\n },\n toggleTableView: {\n '11.1.0': 'data-testid toggle-table-view',\n [MIN_GRAFANA_VERSION]: 'toggle-table-view',\n },\n\n // [Geomap] Map controls\n showZoomField: {\n '10.2.0': 'Map controls Show zoom control field property editor',\n },\n showAttributionField: {\n '10.2.0': 'Map controls Show attribution field property editor',\n },\n showScaleField: {\n '10.2.0': 'Map controls Show scale field property editor',\n },\n showMeasureField: {\n '10.2.0': 'Map controls Show measure tools field property editor',\n },\n showDebugField: {\n '10.2.0': 'Map controls Show debug field property editor',\n },\n\n measureButton: {\n '12.1.0': 'data-testid panel-editor-measure-button',\n '9.2.0': 'show measure tools',\n },\n\n Outline: {\n section: {\n '12.0.0': 'data-testid Outline section',\n },\n node: {\n '12.0.0': (type: string) => `data-testid outline node ${type}`,\n },\n item: {\n '12.0.0': (type: string) => `data-testid outline item ${type}`,\n },\n },\n ElementEditPane: {\n variableType: {\n '12.0.0': (type?: string) => `data-testid variable type ${type}`,\n },\n addVariableButton: {\n '12.0.0': 'data-testid add variable button',\n },\n variableNameInput: {\n '12.0.0': 'data-testid variable name input',\n },\n variableLabelInput: {\n '12.0.0': 'data-testid variable label input',\n },\n AutoGridLayout: {\n minColumnWidth: {\n '12.1.0': 'data-testid min column width selector',\n },\n customMinColumnWidth: {\n '12.1.0': 'data-testid custom min column width input',\n },\n clearCustomMinColumnWidth: {\n '12.1.0': 'data-testid clear custom min column width input',\n },\n maxColumns: {\n '12.1.0': 'data-testid max columns selector',\n },\n rowHeight: {\n '12.1.0': 'data-testid row height selector',\n },\n customRowHeight: {\n '12.1.0': 'data-testid custom row height input',\n },\n clearCustomRowHeight: {\n '12.1.0': 'data-testid clear custom row height input',\n },\n fillScreen: {\n '12.1.0': 'data-testid fill screen switch',\n },\n },\n TabsLayout: {\n titleInput: {\n '12.2.0': 'data-testid tab title input',\n },\n },\n },\n },\n PanelInspector: {\n Data: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Data content',\n },\n },\n Stats: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Stats content',\n },\n },\n Json: {\n content: {\n '11.1.0': 'data-testid Panel inspector Json content',\n [MIN_GRAFANA_VERSION]: 'Panel inspector Json content',\n },\n },\n Query: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query content',\n },\n refreshButton: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query refresh button',\n },\n jsonObjectKeys: {\n [MIN_GRAFANA_VERSION]: () => '.json-formatter-key',\n },\n },\n },\n Tab: {\n title: {\n '11.2.0': (title: string) => `data-testid Tab ${title}`,\n },\n active: { [MIN_GRAFANA_VERSION]: () => '[class*=\"-activeTabStyle\"]' },\n },\n RefreshPicker: {\n runButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker run button',\n },\n intervalButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker interval button',\n },\n },\n QueryTab: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Query editor tab content',\n },\n queryInspectorButton: {\n [MIN_GRAFANA_VERSION]: 'Query inspector button',\n },\n queryHistoryButton: {\n '10.2.0': 'data-testid query-history-button',\n [MIN_GRAFANA_VERSION]: 'query-history-button',\n },\n addQuery: {\n '10.2.0': 'data-testid query-tab-add-query',\n [MIN_GRAFANA_VERSION]: 'Query editor add query button',\n },\n addQueryFromLibrary: {\n '11.5.0': 'data-testid query-tab-add-query-from-library',\n },\n queryGroupTopSection: {\n '11.2.0': 'data-testid query group top section',\n },\n addExpression: {\n '11.2.0': 'data-testid query-tab-add-expression',\n },\n },\n QueryHistory: {\n queryText: {\n '9.0.0': 'Query text',\n },\n },\n QueryEditorRows: {\n rows: {\n [MIN_GRAFANA_VERSION]: 'Query editor row',\n },\n },\n QueryEditorRow: {\n actionButton: {\n '10.4.0': (title: string) => `data-testid ${title}`,\n },\n title: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row title ${refId}`,\n },\n container: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row ${refId}`,\n },\n },\n AlertTab: {\n content: {\n '10.2.3': 'data-testid Alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Alert editor tab content',\n },\n },\n AlertRules: {\n groupToggle: {\n '11.0.0': 'data-testid group-collapse-toggle',\n },\n toggle: {\n '11.0.0': 'data-testid collapse-toggle',\n },\n expandedContent: {\n '11.0.0': 'data-testid expanded-content',\n },\n previewButton: {\n '11.1.0': 'data-testid alert-rule preview-button',\n },\n ruleNameField: {\n '11.1.0': 'data-testid alert-rule name-field',\n },\n newFolderButton: {\n '11.1.0': 'data-testid alert-rule new-folder-button',\n },\n newFolderNameField: {\n '11.1.0': 'data-testid alert-rule name-folder-name-field',\n },\n newFolderNameCreateButton: {\n '11.1.0': 'data-testid alert-rule name-folder-name-create-button',\n },\n newEvaluationGroupButton: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-button',\n },\n newEvaluationGroupName: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-name',\n },\n newEvaluationGroupInterval: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-interval',\n },\n newEvaluationGroupCreate: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-create-button',\n },\n step: {\n '11.5.0': (stepNo: string) => `data-testid alert-rule step-${stepNo}`,\n },\n stepAdvancedModeSwitch: {\n '11.5.0': (stepNo: string) => `data-testid advanced-mode-switch step-${stepNo}`,\n },\n },\n Alert: {\n alertV2: {\n [MIN_GRAFANA_VERSION]: (severity: string) => `data-testid Alert ${severity}`,\n },\n },\n TransformTab: {\n content: {\n '10.1.0': 'data-testid Transform editor tab content',\n [MIN_GRAFANA_VERSION]: 'Transform editor tab content',\n },\n newTransform: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n transformationEditor: {\n '10.1.0': (name: string) => `data-testid Transformation editor ${name}`,\n },\n transformationEditorDebugger: {\n '10.1.0': (name: string) => `data-testid Transformation editor debugger ${name}`,\n },\n },\n Transforms: {\n card: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n disableTransformationButton: {\n '10.4.0': 'data-testid Disable transformation button',\n },\n Reduce: {\n modeLabel: {\n '10.2.3': 'data-testid Transform mode label',\n [MIN_GRAFANA_VERSION]: 'Transform mode label',\n },\n calculationsLabel: {\n '10.2.3': 'data-testid Transform calculations label',\n [MIN_GRAFANA_VERSION]: 'Transform calculations label',\n },\n },\n SpatialOperations: {\n actionLabel: {\n '9.1.2': 'root Action field property editor',\n },\n locationLabel: {\n '10.2.0': 'root Location Mode field property editor',\n },\n location: {\n autoOption: {\n '9.1.2': 'Auto location option',\n },\n coords: {\n option: {\n '9.1.2': 'Coords location option',\n },\n latitudeFieldLabel: {\n '9.1.2': 'root Latitude field field property editor',\n },\n longitudeFieldLabel: {\n '9.1.2': 'root Longitude field field property editor',\n },\n },\n geohash: {\n option: {\n '9.1.2': 'Geohash location option',\n },\n geohashFieldLabel: {\n '9.1.2': 'root Geohash field field property editor',\n },\n },\n lookup: {\n option: {\n '9.1.2': 'Lookup location option',\n },\n lookupFieldLabel: {\n '9.1.2': 'root Lookup field field property editor',\n },\n gazetteerFieldLabel: {\n '9.1.2': 'root Gazetteer field property editor',\n },\n },\n },\n },\n searchInput: {\n '10.2.3': 'data-testid search transformations',\n [MIN_GRAFANA_VERSION]: 'search transformations',\n },\n noTransformationsMessage: {\n '10.2.3': 'data-testid no transformations message',\n },\n addTransformationButton: {\n '10.1.0': 'data-testid add transformation button',\n [MIN_GRAFANA_VERSION]: 'add transformation button',\n },\n removeAllTransformationsButton: {\n '10.4.0': 'data-testid remove all transformations button',\n },\n },\n NavBar: {\n Configuration: {\n button: {\n '9.5.0': 'Configuration',\n },\n },\n Toggle: {\n button: {\n '10.2.3': 'data-testid Toggle menu',\n [MIN_GRAFANA_VERSION]: 'Toggle menu',\n },\n },\n Reporting: {\n button: {\n '9.5.0': 'Reporting',\n },\n },\n },\n NavMenu: {\n Menu: {\n '10.2.3': 'data-testid navigation mega-menu',\n },\n item: {\n '9.5.0': 'data-testid Nav menu item',\n },\n },\n NavToolbar: {\n container: {\n '9.4.0': 'data-testid Nav toolbar',\n },\n commandPaletteTrigger: {\n '11.5.0': 'data-testid Command palette trigger',\n },\n shareDashboard: {\n '11.1.0': 'data-testid Share dashboard',\n },\n markAsFavorite: {\n '11.1.0': 'data-testid Mark as favorite',\n },\n editDashboard: {\n editButton: {\n '11.1.0': 'data-testid Edit dashboard button',\n },\n saveButton: {\n '11.1.0': 'data-testid Save dashboard button',\n },\n exitButton: {\n '11.1.0': 'data-testid Exit edit mode button',\n },\n settingsButton: {\n '11.1.0': 'data-testid Dashboard settings',\n },\n addRowButton: {\n '11.1.0': 'data-testid Add row button',\n },\n addLibraryPanelButton: {\n '11.1.0': 'data-testid Add a panel from the panel library button',\n },\n addVisualizationButton: {\n '11.1.0': 'data-testid Add new visualization menu item',\n },\n pastePanelButton: {\n '11.1.0': 'data-testid Paste panel button',\n },\n discardChangesButton: {\n '11.1.0': 'data-testid Discard changes button',\n },\n discardLibraryPanelButton: {\n '11.1.0': 'data-testid Discard library panel button',\n },\n unlinkLibraryPanelButton: {\n '11.1.0': 'data-testid Unlink library panel button',\n },\n saveLibraryPanelButton: {\n '11.1.0': 'data-testid Save library panel button',\n },\n backToDashboardButton: {\n '11.1.0': 'data-testid Back to dashboard button',\n },\n },\n },\n\n PageToolbar: {\n container: { [MIN_GRAFANA_VERSION]: () => '.page-toolbar' },\n item: {\n [MIN_GRAFANA_VERSION]: (tooltip: string) => `${tooltip}`,\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n },\n QueryEditorToolbarItem: {\n button: {\n [MIN_GRAFANA_VERSION]: (title: string) => `QueryEditor toolbar item button ${title}`,\n },\n },\n BackButton: {\n backArrow: {\n '10.3.0': 'data-testid Go Back',\n [MIN_GRAFANA_VERSION]: 'Go Back',\n },\n },\n OptionsGroup: {\n group: {\n '11.1.0': (title?: string) => (title ? `data-testid Options group ${title}` : 'data-testid Options group'),\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title}` : 'Options group'),\n },\n toggle: {\n '11.1.0': (title?: string) =>\n title ? `data-testid Options group ${title} toggle` : 'data-testid Options group toggle',\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title} toggle` : 'Options group toggle'),\n },\n },\n PluginVisualization: {\n item: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Plugin visualization item ${title}`,\n },\n current: {\n [MIN_GRAFANA_VERSION]: () => '[class*=\"-currentVisualizationItem\"]',\n },\n },\n Select: {\n menu: {\n '11.5.0': 'data-testid Select menu',\n [MIN_GRAFANA_VERSION]: 'Select options menu',\n },\n option: {\n '11.1.0': 'data-testid Select option',\n [MIN_GRAFANA_VERSION]: 'Select option',\n },\n toggleAllOptions: {\n '11.3.0': 'data-testid toggle all options',\n },\n input: {\n [MIN_GRAFANA_VERSION]: () => 'input[id*=\"time-options-input\"]',\n },\n singleValue: {\n [MIN_GRAFANA_VERSION]: () => 'div[class*=\"-singleValue\"]',\n },\n },\n FieldConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field config editor content',\n },\n },\n OverridesConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field overrides editor content',\n },\n },\n FolderPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Folder picker select container',\n },\n input: {\n '10.4.0': 'data-testid folder-picker-input',\n },\n },\n ReadonlyFolderPicker: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Readonly folder picker select container',\n },\n },\n DataSourcePicker: {\n container: {\n '10.0.0': 'data-testid Data source picker select container',\n '8.0.0': 'Data source picker select container',\n },\n inputV2: {\n '10.1.0': 'data-testid Select a data source',\n [MIN_GRAFANA_VERSION]: 'Select a data source',\n },\n dataSourceList: {\n '10.4.0': 'data-testid Data source list dropdown',\n },\n advancedModal: {\n dataSourceList: {\n '10.4.0': 'data-testid Data source list',\n },\n builtInDataSourceList: {\n '10.4.0': 'data-testid Built in data source list',\n },\n },\n },\n TimeZonePicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Time zone picker select container',\n },\n changeTimeSettingsButton: {\n '11.0.0': 'data-testid Time zone picker Change time settings button',\n },\n },\n WeekStartPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Choose starting day of the week',\n },\n placeholder: {\n [MIN_GRAFANA_VERSION]: 'Choose starting day of the week',\n },\n },\n TraceViewer: {\n spanBar: {\n '9.0.0': 'data-testid SpanBar--wrapper',\n },\n },\n QueryField: {\n container: {\n '10.3.0': 'data-testid Query field',\n [MIN_GRAFANA_VERSION]: 'Query field',\n },\n },\n QueryBuilder: {\n queryPatterns: {\n '10.3.0': 'data-testid Query patterns',\n [MIN_GRAFANA_VERSION]: 'Query patterns',\n },\n labelSelect: {\n '10.3.0': 'data-testid Select label',\n [MIN_GRAFANA_VERSION]: 'Select label',\n },\n inputSelect: {\n '11.1.0': 'data-testid Select label-input',\n },\n valueSelect: {\n '10.3.0': 'data-testid Select value',\n [MIN_GRAFANA_VERSION]: 'Select value',\n },\n matchOperatorSelect: {\n '10.3.0': 'data-testid Select match operator',\n [MIN_GRAFANA_VERSION]: 'Select match operator',\n },\n },\n ValuePicker: {\n button: {\n '10.3.0': (name: string) => `data-testid Value picker button ${name}`,\n },\n select: {\n '10.3.0': (name: string) => `data-testid Value picker select ${name}`,\n },\n },\n Search: {\n sectionV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search section',\n },\n itemsV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search items',\n },\n cards: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search cards',\n },\n collapseFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Collapse folder ${sectionId}`,\n },\n expandFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Expand folder ${sectionId}`,\n },\n dashboardItem: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard search item ${item}`,\n },\n dashboardCard: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Search card ${item}`,\n },\n folderHeader: {\n '9.3.0': (folderName: string) => `data-testid Folder header ${folderName}`,\n },\n folderContent: {\n '9.3.0': (folderName: string) => `data-testid Folder content ${folderName}`,\n },\n dashboardItems: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard search item',\n },\n },\n DashboardLinks: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link container',\n },\n dropDown: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link dropdown',\n },\n link: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link',\n },\n },\n LoadingIndicator: {\n icon: {\n '10.4.0': 'data-testid Loading indicator',\n [MIN_GRAFANA_VERSION]: 'Loading indicator',\n },\n },\n CallToActionCard: {\n buttonV2: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid Call to action button ${name}`,\n },\n },\n DataLinksContextMenu: {\n singleLink: {\n '10.3.0': 'data-testid Data link',\n [MIN_GRAFANA_VERSION]: 'Data link',\n },\n },\n DataLinksActionsTooltip: {\n tooltipWrapper: {\n '12.1.0': 'data-testid Data links actions tooltip wrapper',\n },\n },\n CodeEditor: {\n container: {\n '10.2.3': 'data-testid Code editor container',\n [MIN_GRAFANA_VERSION]: 'Code editor container',\n },\n },\n ReactMonacoEditor: {\n editorLazy: {\n '11.1.0': 'data-testid ReactMonacoEditor editorLazy',\n },\n },\n DashboardImportPage: {\n textarea: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-textarea',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-load-dashboard',\n },\n },\n ImportDashboardForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-title',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-submit',\n },\n },\n PanelAlertTabContent: {\n content: {\n '10.2.3': 'data-testid Unified alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Unified alert editor tab content',\n },\n },\n VisualizationPreview: {\n card: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid suggestion-${name}`,\n },\n },\n ColorSwatch: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-colorswatch',\n },\n },\n DashboardRow: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid dashboard-row-title-${title}`,\n },\n wrapper: {\n '12.1.0': (title: string) => `data-testid dashboard-row-wrapper-for-${title}`,\n },\n },\n UserProfile: {\n profileSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-profile-save',\n },\n preferencesSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-shared-prefs-save',\n },\n orgsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-orgs-table',\n },\n sessionsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-sessions-table',\n },\n extensionPointTabs: {\n '10.2.3': 'data-testid-extension-point-tabs',\n },\n extensionPointTab: {\n '10.2.3': (tabId: string) => `data-testid-extension-point-tab-${tabId}`,\n },\n },\n FileUpload: {\n inputField: {\n '9.0.0': 'data-testid-file-upload-input-field',\n },\n fileNameSpan: {\n '9.0.0': 'data-testid-file-upload-file-name',\n },\n },\n DebugOverlay: {\n wrapper: {\n '9.2.0': 'debug-overlay',\n },\n },\n OrgRolePicker: {\n input: {\n '9.5.0': 'Role',\n },\n },\n AnalyticsToolbarButton: {\n button: {\n '9.5.0': 'Dashboard insights',\n },\n },\n Variables: {\n variableOption: {\n '9.5.0': 'data-testid variable-option',\n },\n variableLinkWrapper: {\n '11.1.1': 'data-testid variable-link-wrapper',\n },\n },\n Annotations: {\n annotationsTypeInput: {\n '11.1.0': 'data-testid annotations-type-input',\n [MIN_GRAFANA_VERSION]: 'annotations-type-input',\n },\n annotationsChoosePanelInput: {\n '11.1.0': 'data-testid choose-panels-input',\n [MIN_GRAFANA_VERSION]: 'choose-panels-input',\n },\n editor: {\n testButton: {\n '11.0.0': 'data-testid annotations-test-button',\n },\n resultContainer: {\n '11.0.0': 'data-testid annotations-query-result-container',\n },\n },\n },\n Tooltip: {\n container: {\n '10.2.0': 'data-testid tooltip',\n },\n },\n ReturnToPrevious: {\n buttonGroup: {\n '11.0.0': 'data-testid dismissable button group',\n },\n backButton: {\n '11.0.0': 'data-testid back',\n },\n dismissButton: {\n '11.0.0': 'data-testid dismiss',\n },\n },\n SQLQueryEditor: {\n selectColumn: {\n '11.0.0': 'data-testid select-column',\n },\n selectColumnInput: { '11.0.0': 'data-testid select-column-input' },\n selectFunctionParameter: { '11.0.0': (name: string) => `data-testid select-function-parameter-${name}` },\n selectAggregation: {\n '11.0.0': 'data-testid select-aggregation',\n },\n selectAggregationInput: { '11.0.0': 'data-testid select-aggregation-input' },\n selectAlias: {\n '11.0.0': 'data-testid select-alias',\n },\n selectAliasInput: { '11.0.0': 'data-testid select-alias-input' },\n selectInputParameter: { '11.0.0': 'data-testid select-input-parameter' },\n filterConjunction: {\n '11.0.0': 'data-testid filter-conjunction',\n },\n filterField: {\n '11.0.0': 'data-testid filter-field',\n },\n filterOperator: {\n '11.0.0': 'data-testid filter-operator',\n },\n headerTableSelector: {\n '11.0.0': 'data-testid header-table-selector',\n },\n headerFilterSwitch: {\n '11.0.0': 'data-testid header-filter-switch',\n },\n headerGroupSwitch: {\n '11.0.0': 'data-testid header-group-switch',\n },\n headerOrderSwitch: {\n '11.0.0': 'data-testid header-order-switch',\n },\n headerPreviewSwitch: {\n '11.0.0': 'data-testid header-preview-switch',\n },\n },\n EntityNotFound: {\n container: {\n '11.2.0': 'data-testid entity-not-found',\n },\n },\n Portal: {\n container: {\n '11.5.0': 'data-testid portal-container',\n },\n },\n ExportImage: {\n formatOptions: {\n container: {\n ['12.1.0']: 'data-testid export-image-format-options',\n },\n png: {\n ['12.1.0']: 'data-testid export-image-format-png',\n },\n jpg: {\n ['12.1.0']: 'data-testid export-image-format-jpg',\n },\n },\n rendererAlert: {\n container: {\n ['12.1.0']: 'data-testid export-image-renderer-alert',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-title',\n },\n description: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-description',\n },\n },\n buttons: {\n generate: {\n ['12.1.0']: 'data-testid export-image-generate-button',\n },\n download: {\n ['12.1.0']: 'data-testid export-image-download-button',\n },\n cancel: {\n ['12.1.0']: 'data-testid export-image-cancel-button',\n },\n },\n preview: {\n container: {\n ['12.1.0']: 'data-testid export-image-preview-container',\n },\n loading: {\n ['12.1.0']: 'data-testid export-image-preview-loading',\n },\n image: {\n ['12.1.0']: 'data-testid export-image-preview',\n },\n error: {\n container: {\n ['12.1.0']: 'data-testid export-image-error',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-error-title',\n },\n message: {\n ['12.1.0']: 'data-testid export-image-error-message',\n },\n },\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedComponents = typeof versionedComponents;\n","import { resolveSelectors } from '../resolver';\nimport { E2ESelectors } from '../types';\n\nimport { versionedComponents, VersionedComponents } from './components';\nimport { versionedPages, VersionedPages } from './pages';\n\nconst Pages = resolveSelectors(versionedPages);\nconst Components = resolveSelectors(versionedComponents);\nconst selectors = { pages: Pages, components: Components };\n\n/**\n * Exposes Pages, Component selectors and E2ESelectors type in package for easy use in e2e tests and in production code\n */\nexport {\n Pages,\n Components,\n selectors,\n versionedComponents,\n versionedPages,\n resolveSelectors,\n type VersionedPages,\n type VersionedComponents,\n type E2ESelectors,\n};\n","import { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Pages\n */\nexport const versionedPages = {\n Alerting: {\n AddAlertRule: {\n url: {\n '10.1.0': '/alerting/new/alerting',\n [MIN_GRAFANA_VERSION]: '/alerting/new',\n },\n },\n EditAlertRule: {\n url: {\n [MIN_GRAFANA_VERSION]: (alertRuleUid: string) => `alerting/${alertRuleUid}/edit`,\n },\n },\n },\n Login: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login',\n },\n username: {\n '10.2.3': 'data-testid Username input field',\n [MIN_GRAFANA_VERSION]: 'Username input field',\n },\n password: {\n '10.2.3': 'data-testid Password input field',\n [MIN_GRAFANA_VERSION]: 'Password input field',\n },\n submit: {\n '10.2.3': 'data-testid Login button',\n [MIN_GRAFANA_VERSION]: 'Login button',\n },\n skip: {\n '10.2.3': 'data-testid Skip change password button',\n },\n },\n PasswordlessLogin: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login/passwordless/authenticate',\n },\n email: {\n '10.2.3': 'data-testid Email input field',\n [MIN_GRAFANA_VERSION]: 'Email input field',\n },\n submit: {\n '10.2.3': 'data-testid PasswordlessLogin button',\n [MIN_GRAFANA_VERSION]: 'PasswordlessLogin button',\n },\n },\n Home: {\n url: {\n [MIN_GRAFANA_VERSION]: '/',\n },\n },\n DataSource: {\n name: {\n '10.3.0': 'data-testid Data source settings page name input field',\n [MIN_GRAFANA_VERSION]: 'Data source settings page name input field',\n },\n delete: {\n [MIN_GRAFANA_VERSION]: 'Data source settings page Delete button',\n },\n readOnly: {\n '10.3.0': 'data-testid Data source settings page read only message',\n [MIN_GRAFANA_VERSION]: 'Data source settings page read only message',\n },\n saveAndTest: {\n '10.0.0': 'data-testid Data source settings page Save and Test button',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Save and Test button',\n },\n alert: {\n '10.3.0': 'data-testid Data source settings page Alert',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Alert',\n },\n },\n DataSources: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources',\n },\n dataSources: {\n [MIN_GRAFANA_VERSION]: (dataSourceName: string) => `Data source list item ${dataSourceName}`,\n },\n },\n EditDataSource: {\n url: {\n '9.5.0': (dataSourceUid: string) => `/datasources/edit/${dataSourceUid}`,\n },\n settings: {\n '9.5.0': 'Datasource settings page basic settings',\n },\n },\n AddDataSource: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources/new',\n },\n dataSourcePluginsV2: {\n '9.3.1': (pluginName: string) => `Add new data source ${pluginName}`,\n [MIN_GRAFANA_VERSION]: (pluginName: string) => `Data source plugin item ${pluginName}`,\n },\n },\n ConfirmModal: {\n delete: {\n '10.0.0': 'data-testid Confirm Modal Danger Button',\n [MIN_GRAFANA_VERSION]: 'Confirm Modal Danger Button',\n },\n input: {\n '12.2.0': 'data-testid Confirm Modal Input',\n },\n },\n SecretsManagement: {\n SecretForm: {\n '12.2.0': 'data-testid Secret Form',\n },\n },\n AddDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new',\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n addNewPanel: {\n '11.1.0': 'data-testid Add new panel',\n '8.0.0': 'Add new panel',\n [MIN_GRAFANA_VERSION]: 'Add new panel',\n },\n itemButtonAddViz: {\n [MIN_GRAFANA_VERSION]: 'Add new visualization menu item',\n },\n addNewRow: {\n '11.1.0': 'data-testid Add new row',\n [MIN_GRAFANA_VERSION]: 'Add new row',\n },\n addNewPanelLibrary: {\n '11.1.0': 'data-testid Add new panel from panel library',\n [MIN_GRAFANA_VERSION]: 'Add new panel from panel library',\n },\n Settings: {\n Annotations: {\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=annotations',\n },\n },\n Edit: {\n url: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) =>\n `/dashboard/new?editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': '/dashboard/new?orgId=1&editview=variables',\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=templating',\n },\n },\n Edit: {\n url: {\n '11.3.0': (editIndex: string) => `/dashboard/new?orgId=1&editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) =>\n `/dashboard/new?orgId=1&editview=templating&editIndex=${editIndex}`,\n },\n },\n },\n },\n },\n ImportDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/import',\n },\n },\n Dashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: (uid: string) => `/d/${uid}`,\n },\n DashNav: {\n nav: {\n [MIN_GRAFANA_VERSION]: 'Dashboard navigation',\n },\n navV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard navigation',\n },\n publicDashboardTag: {\n '9.1.0': 'data-testid public dashboard tag',\n },\n shareButton: {\n '10.4.0': 'data-testid share-button',\n },\n scrollContainer: {\n '11.1.0': 'data-testid Dashboard canvas scroll container',\n },\n newShareButton: {\n container: {\n '11.1.0': 'data-testid new share button',\n },\n shareLink: {\n '11.1.0': 'data-testid new share link-button',\n },\n arrowMenu: {\n '11.1.0': 'data-testid new share button arrow menu',\n },\n menu: {\n container: {\n '11.1.0': 'data-testid new share button menu',\n },\n shareInternally: {\n '11.1.0': 'data-testid new share button share internally',\n },\n shareExternally: {\n '11.1.1': 'data-testid new share button share externally',\n },\n shareSnapshot: {\n '11.2.0': 'data-testid new share button share snapshot',\n },\n },\n },\n NewExportButton: {\n container: {\n '11.2.0': 'data-testid new export button',\n },\n arrowMenu: {\n '11.2.0': 'data-testid new export button arrow menu',\n },\n Menu: {\n container: {\n '11.2.0': 'data-testid new export button menu',\n },\n exportAsJson: {\n '11.2.0': 'data-testid new export button export as json',\n },\n exportAsImage: {\n '12.1.0': 'data-testid new export button export as image',\n },\n },\n },\n playlistControls: {\n prev: {\n '11.0.0': 'data-testid playlist previous dashboard button',\n },\n stop: {\n '11.0.0': 'data-testid playlist stop dashboard button',\n },\n next: {\n '11.0.0': 'data-testid playlist next dashboard button',\n },\n },\n },\n Controls: {\n '11.1.0': 'data-testid dashboard controls',\n },\n SubMenu: {\n submenu: {\n [MIN_GRAFANA_VERSION]: 'Dashboard submenu',\n },\n submenuItem: {\n [MIN_GRAFANA_VERSION]: 'data-testid template variable',\n },\n submenuItemLabels: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard template variables submenu Label ${item}`,\n },\n submenuItemValueDropDownValueLinkTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown value link text ${item}`,\n },\n submenuItemValueDropDownDropDown: {\n [MIN_GRAFANA_VERSION]: 'Variable options',\n },\n submenuItemValueDropDownOptionTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown option text ${item}`,\n },\n Annotations: {\n annotationsWrapper: {\n '10.0.0': 'data-testid annotation-wrapper',\n },\n annotationLabel: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Label ${label}`,\n },\n annotationToggle: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Toggle ${label}`,\n },\n },\n },\n Settings: {\n Actions: {\n close: {\n '9.5.0': 'data-testid dashboard-settings-close',\n },\n },\n General: {\n deleteDashBoard: {\n '11.1.0': 'data-testid Dashboard settings page delete dashboard button',\n },\n sectionItems: {\n [MIN_GRAFANA_VERSION]: (item: string) => `Dashboard settings section item ${item}`,\n },\n saveDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save button',\n },\n saveAsDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save As button',\n },\n title: {\n '11.2.0': 'General',\n },\n },\n Annotations: {\n Edit: {\n urlParams: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) => `editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=annotations`,\n },\n addAnnotationCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add annotation query',\n },\n annotations: {\n '10.4.0': 'data-testid list-annotations',\n },\n },\n Settings: {\n name: {\n '11.1.0': 'data-testid Annotations settings name input',\n [MIN_GRAFANA_VERSION]: 'Annotations settings name input',\n },\n },\n NewAnnotation: {\n panelFilterSelect: {\n '10.0.0': 'data-testid annotations-panel-filter',\n },\n showInLabel: {\n '11.1.0': 'data-testid show-in-label',\n },\n previewInDashboard: {\n '10.0.0': 'data-testid annotations-preview',\n },\n delete: {\n '10.4.0': 'data-testid annotations-delete',\n },\n apply: {\n '10.4.0': 'data-testid annotations-apply',\n },\n enable: {\n '10.4.0': 'data-testid annotation-enable',\n },\n hide: {\n '10.4.0': 'data-testid annotation-hide',\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': (dashboardUid: string) => `/d/${dashboardUid}?editview=variables`,\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=templating`,\n },\n addVariableCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add variable',\n },\n newButton: {\n [MIN_GRAFANA_VERSION]: 'Variable editor New variable button',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Table',\n },\n tableRowNameFields: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Name field ${variableName}`,\n },\n tableRowDefinitionFields: {\n '10.1.0': (variableName: string) => `Variable editor Table Definition field ${variableName}`,\n },\n tableRowArrowUpButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowUp button ${variableName}`,\n },\n tableRowArrowDownButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowDown button ${variableName}`,\n },\n tableRowDuplicateButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Duplicate button ${variableName}`,\n },\n tableRowRemoveButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Remove button ${variableName}`,\n },\n },\n Edit: {\n urlParams: {\n '11.3.0': (editIndex: string) => `editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) => `editview=templating&editIndex=${editIndex}`,\n },\n General: {\n headerLink: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header link',\n },\n modeLabelNew: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode New',\n },\n /**\n * @deprecated\n */\n modeLabelEdit: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode Edit',\n },\n generalNameInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Name field',\n },\n generalNameInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Name field',\n },\n generalTypeSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Type select',\n },\n generalTypeSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Type select',\n },\n generalLabelInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Label field',\n },\n generalLabelInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Label field',\n },\n generalHideSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Hide select',\n },\n generalHideSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Hide select',\n },\n selectionOptionsAllowCustomValueSwitch: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Allow Custom Value switch',\n },\n selectionOptionsMultiSwitch: {\n '10.4.0': 'data-testid Variable editor Form Multi switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Multi switch',\n },\n selectionOptionsIncludeAllSwitch: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll switch',\n },\n selectionOptionsCustomAllInput: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll field',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll field',\n },\n previewOfValuesOption: {\n '10.4.0': 'data-testid Variable editor Preview of Values option',\n [MIN_GRAFANA_VERSION]: 'Variable editor Preview of Values option',\n },\n submitButton: {\n '10.4.0': 'data-testid Variable editor Run Query button',\n [MIN_GRAFANA_VERSION]: 'Variable editor Submit button',\n },\n applyButton: {\n '9.3.0': 'data-testid Variable editor Apply button',\n },\n },\n QueryVariable: {\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor close button',\n },\n editor: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor',\n },\n previewButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor preview button',\n },\n queryOptionsDataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n '10.0.0': 'data-testid Data source picker select container',\n [MIN_GRAFANA_VERSION]: 'Data source picker select container',\n },\n queryOptionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor open button',\n },\n queryOptionsRefreshSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Refresh select',\n },\n queryOptionsRefreshSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Refresh select',\n },\n queryOptionsRegExInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query RegEx field',\n },\n queryOptionsRegExInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query RegEx field',\n },\n queryOptionsSortSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Sort select',\n },\n queryOptionsSortSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Sort select',\n },\n queryOptionsQueryInput: {\n '10.4.0': 'data-testid Variable editor Form Default Variable Query Editor textarea',\n },\n queryOptionsStaticOptionsToggle: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options toggle',\n },\n queryOptionsStaticOptionsOrderDropdown: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options Order dropdown',\n },\n valueGroupsTagsEnabledSwitch: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query UseTags switch',\n },\n valueGroupsTagsTagsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsQuery field',\n },\n valueGroupsTagsTagsValuesQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsValuesQuery field',\n },\n },\n ConstantVariable: {\n constantOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Constant Query field',\n },\n constantOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Constant Query field',\n },\n },\n DatasourceVariable: {\n datasourceSelect: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource type',\n },\n nameFilter: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource name filter',\n },\n },\n TextBoxVariable: {\n textBoxOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form TextBox Query field',\n },\n textBoxOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form TextBox Query field',\n },\n },\n CustomVariable: {\n customValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-input',\n },\n optionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-options-open-button',\n },\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-close-button',\n },\n },\n IntervalVariable: {\n intervalsValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid interval variable intervals input',\n },\n autoEnabledCheckbox: {\n '10.4.0': 'data-testid interval variable auto value checkbox',\n },\n stepCountIntervalSelect: {\n '10.4.0': 'data-testid interval variable step count input',\n },\n minIntervalInput: {\n '10.4.0': 'data-testid interval variable mininum interval input',\n },\n },\n GroupByVariable: {\n dataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid group by variable info text',\n },\n modeToggle: {\n '10.4.0': 'data-testid group by variable mode toggle',\n },\n },\n AdHocFiltersVariable: {\n datasourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid ad-hoc filters variable info text',\n },\n modeToggle: {\n '11.0.0': 'data-testid ad-hoc filters variable mode toggle',\n },\n },\n SwitchVariable: {\n valuePairTypeSelect: {\n ['12.3.0']: 'data-testid switch variable value pair type select',\n },\n enabledValueInput: {\n ['12.3.0']: 'data-testid switch variable enabled value input',\n },\n disabledValueInput: {\n ['12.3.0']: 'data-testid switch variable disabled value input',\n },\n },\n StaticOptionsEditor: {\n addButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Add button',\n },\n labelInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Label input',\n },\n valueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Value input',\n },\n moveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Move button',\n },\n deleteButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Delete button',\n },\n row: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Row',\n },\n },\n },\n },\n },\n Annotations: {\n marker: {\n '10.0.0': 'data-testid annotation-marker',\n },\n },\n Rows: {\n Repeated: {\n ConfigSection: {\n warningMessage: {\n '10.2.0': 'data-testid Repeated rows warning message',\n },\n },\n },\n },\n },\n Dashboards: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboards',\n },\n dashboards: {\n '10.2.0': (title: string) => `Dashboard search item ${title}`,\n },\n toggleView: {\n [MIN_GRAFANA_VERSION]: 'data-testid radio-button',\n },\n },\n SaveDashboardAsModal: {\n newName: {\n '10.2.0': 'Save dashboard title field',\n },\n save: {\n '10.2.0': 'Save dashboard button',\n },\n },\n SaveDashboardModal: {\n save: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save button',\n },\n saveVariables: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save variables checkbox',\n },\n saveTimerange: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save timerange checkbox',\n },\n saveRefresh: {\n '11.1.0': 'Dashboard settings Save Dashboard Modal Save refresh checkbox',\n },\n variablesWarningAlert: {\n '12.2.0': 'Dashboard settings Save Dashboard Modal Save variables Variables With Errors Warning Alert',\n },\n },\n SharePanelModal: {\n linkToRenderedImage: {\n [MIN_GRAFANA_VERSION]: 'Link to rendered image',\n },\n },\n ShareDashboardModal: {\n PublicDashboard: {\n WillBePublicCheckbox: {\n '9.1.0': 'data-testid public dashboard will be public checkbox',\n },\n LimitedDSCheckbox: {\n '9.1.0': 'data-testid public dashboard limited datasources checkbox',\n },\n CostIncreaseCheckbox: {\n '9.1.0': 'data-testid public dashboard cost may increase checkbox',\n },\n PauseSwitch: {\n '9.5.0': 'data-testid public dashboard pause switch',\n },\n EnableAnnotationsSwitch: {\n '9.3.0': 'data-testid public dashboard on off switch for annotations',\n },\n CreateButton: {\n '9.5.0': 'data-testid public dashboard create button',\n },\n DeleteButton: {\n '9.3.0': 'data-testid public dashboard delete button',\n },\n CopyUrlInput: {\n '9.1.0': 'data-testid public dashboard copy url input',\n },\n CopyUrlButton: {\n '9.1.0': 'data-testid public dashboard copy url button',\n },\n SettingsDropdown: {\n '10.1.0': 'data-testid public dashboard settings dropdown',\n },\n TemplateVariablesWarningAlert: {\n '9.1.0': 'data-testid public dashboard disabled template variables alert',\n },\n UnsupportedDataSourcesWarningAlert: {\n '9.5.0': 'data-testid public dashboard unsupported data sources alert',\n },\n NoUpsertPermissionsWarningAlert: {\n '9.5.0': 'data-testid public dashboard no upsert permissions alert',\n },\n EnableTimeRangeSwitch: {\n '9.4.0': 'data-testid public dashboard on off switch for time range',\n },\n EmailSharingConfiguration: {\n Container: {\n '9.5.0': 'data-testid email sharing config container',\n },\n ShareType: {\n '9.5.0': 'data-testid public dashboard share type',\n },\n EmailSharingInput: {\n '9.5.0': 'data-testid public dashboard email sharing input',\n },\n EmailSharingInviteButton: {\n '9.5.0': 'data-testid public dashboard email sharing invite button',\n },\n EmailSharingList: {\n '9.5.0': 'data-testid public dashboard email sharing list',\n },\n DeleteEmail: {\n '9.5.0': 'data-testid public dashboard delete email button',\n },\n ReshareLink: {\n '9.5.0': 'data-testid public dashboard reshare link button',\n },\n },\n },\n SnapshotScene: {\n url: {\n '11.1.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n PublishSnapshot: {\n '11.1.0': 'data-testid publish snapshot button',\n },\n CopyUrlButton: {\n '11.1.0': 'data-testid snapshot copy url button',\n },\n CopyUrlInput: {\n '11.1.0': 'data-testid snapshot copy url input',\n },\n },\n },\n ShareDashboardDrawer: {\n ShareInternally: {\n container: {\n '11.3.0': 'data-testid share internally drawer container',\n },\n lockTimeRangeSwitch: {\n '11.3.0': 'data-testid share internally lock time range switch',\n },\n shortenUrlSwitch: {\n '11.3.0': 'data-testid share internally shorten url switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share internally copy url button',\n },\n SharePanel: {\n preview: {\n '11.5.0': 'data-testid share panel internally image generation preview',\n },\n widthInput: {\n '11.5.0': 'data-testid share panel internally width input',\n },\n heightInput: {\n '11.5.0': 'data-testid share panel internally height input',\n },\n scaleFactorInput: {\n '11.5.0': 'data-testid share panel internally scale factor input',\n },\n generateImageButton: {\n '11.5.0': 'data-testid share panel internally generate image button',\n },\n downloadImageButton: {\n '11.5.0': 'data-testid share panel internally download image button',\n },\n },\n },\n ShareExternally: {\n container: {\n '11.3.0': 'data-testid share externally drawer container',\n },\n publicAlert: {\n '11.3.0': 'data-testid public share alert',\n },\n emailSharingAlert: {\n '11.3.0': 'data-testid email share alert',\n },\n shareTypeSelect: {\n '11.3.0': 'data-testid share externally share type select',\n },\n Creation: {\n PublicShare: {\n createButton: {\n '11.3.0': 'data-testid public share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid public share dashboard cancel button',\n },\n },\n EmailShare: {\n createButton: {\n '11.3.0': 'data-testid email share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid email share dashboard cancel button',\n },\n },\n willBePublicCheckbox: {\n '11.3.0': 'data-testid share dashboard will be public checkbox',\n },\n },\n Configuration: {\n enableTimeRangeSwitch: {\n '11.3.0': 'data-testid share externally enable time range switch',\n },\n enableAnnotationsSwitch: {\n '11.3.0': 'data-testid share externally enable annotations switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share externally copy url button',\n },\n revokeAccessButton: {\n '11.3.0': 'data-testid share externally revoke access button',\n },\n toggleAccessButton: {\n '11.3.0': 'data-testid share externally pause or resume access button',\n },\n },\n },\n ShareSnapshot: {\n url: {\n '11.3.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n container: {\n '11.3.0': 'data-testid share snapshot drawer container',\n },\n publishSnapshot: {\n '11.3.0': 'data-testid share snapshot publish button',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share snapshot copy url button',\n },\n },\n },\n ExportDashboardDrawer: {\n ExportAsJson: {\n container: {\n '11.3.0': 'data-testid export as json drawer container',\n },\n codeEditor: {\n '11.3.0': 'data-testid export as json code editor',\n },\n exportExternallyToggle: {\n '11.3.0': 'data-testid export as json externally switch',\n },\n saveToFileButton: {\n '11.3.0': 'data-testid export as json save to file button',\n },\n copyToClipboardButton: {\n '11.3.0': 'data-testid export as json copy to clipboard button',\n },\n cancelButton: {\n '11.3.0': 'data-testid export as json cancel button',\n },\n },\n },\n PublicDashboard: {\n page: {\n '9.5.0': 'public-dashboard-page',\n },\n NotAvailable: {\n container: {\n '9.5.0': 'public-dashboard-not-available',\n },\n title: {\n '9.5.0': 'public-dashboard-title',\n },\n pausedDescription: {\n '9.5.0': 'public-dashboard-paused-description',\n },\n },\n footer: {\n '11.0.0': 'public-dashboard-footer',\n },\n },\n PublicDashboardScene: {\n loadingPage: {\n '11.0.0': 'public-dashboard-scene-loading-page',\n },\n page: {\n '11.0.0': 'public-dashboard-scene-page',\n },\n controls: {\n '11.0.0': 'public-dashboard-controls',\n },\n },\n RequestViewAccess: {\n form: {\n '9.5.0': 'request-view-access-form',\n },\n recipientInput: {\n '9.5.0': 'request-view-access-recipient-input',\n },\n submitButton: {\n '9.5.0': 'request-view-access-submit-button',\n },\n },\n PublicDashboardConfirmAccess: {\n submitButton: {\n '10.2.0': 'data-testid confirm-access-submit-button',\n },\n },\n Explore: {\n url: {\n [MIN_GRAFANA_VERSION]: '/explore',\n },\n General: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Explore',\n },\n graph: {\n [MIN_GRAFANA_VERSION]: 'Explore Graph',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Explore Table',\n },\n scrollView: {\n '9.0.0': 'data-testid explorer scroll view',\n },\n addFromQueryLibrary: {\n '11.5.0': 'data-testid explore add from query library button',\n },\n },\n QueryHistory: {\n container: {\n '11.1.0': 'data-testid QueryHistory',\n },\n },\n },\n SoloPanel: {\n url: {\n [MIN_GRAFANA_VERSION]: (page: string) => `/d-solo/${page}`,\n },\n },\n PluginsList: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugins list page',\n },\n list: {\n [MIN_GRAFANA_VERSION]: 'Plugins list',\n },\n listItem: {\n [MIN_GRAFANA_VERSION]: 'Plugins list item',\n },\n signatureErrorNotice: {\n '10.3.0': 'data-testid Unsigned plugins notice',\n [MIN_GRAFANA_VERSION]: 'Unsigned plugins notice',\n },\n },\n PluginPage: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugin page',\n },\n signatureInfo: {\n '10.3.0': 'data-testid Plugin signature info',\n [MIN_GRAFANA_VERSION]: 'Plugin signature info',\n },\n disabledInfo: {\n '10.3.0': 'data-testid Plugin disabled info',\n [MIN_GRAFANA_VERSION]: 'Plugin disabled info',\n },\n },\n PlaylistForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'Playlist name',\n },\n interval: {\n [MIN_GRAFANA_VERSION]: 'Playlist interval',\n },\n itemDelete: {\n '10.2.0': 'data-testid playlist-form-delete-item',\n },\n },\n BrowseDashboards: {\n table: {\n body: {\n '10.2.0': 'data-testid browse-dashboards-table',\n },\n row: {\n '10.2.0': (name: string) => `data-testid browse dashboards row ${name}`,\n },\n checkbox: {\n '10.0.0': (uid: string) => `data-testid ${uid} checkbox`,\n },\n },\n NewFolderForm: {\n form: {\n '10.2.0': 'data-testid new folder form',\n },\n nameInput: {\n '10.2.0': 'data-testid new-folder-name-input',\n },\n createButton: {\n '10.2.0': 'data-testid new-folder-create-button',\n },\n },\n },\n SearchDashboards: {\n table: {\n '10.2.0': 'Search results table',\n },\n },\n Search: {\n url: {\n '9.3.0': '/?search=openn',\n },\n FolderView: {\n url: {\n '9.3.0': '/?search=open&layout=folders',\n },\n },\n },\n PublicDashboards: {\n ListItem: {\n linkButton: {\n '9.3.0': 'public-dashboard-link-button',\n },\n configButton: {\n '9.3.0': 'public-dashboard-configuration-button',\n },\n trashcanButton: {\n '9.3.0': 'public-dashboard-remove-button',\n },\n pauseSwitch: {\n '10.1.0': 'data-testid public dashboard pause switch',\n },\n },\n },\n UserListPage: {\n tabs: {\n allUsers: {\n '10.0.0': 'data-testid all-users-tab',\n },\n orgUsers: {\n '10.0.0': 'data-testid org-users-tab',\n },\n anonUserDevices: {\n '10.2.3': 'data-testid anon-user-devices-tab',\n },\n publicDashboardsUsers: {\n '10.0.0': 'data-testid public-dashboards-users-tab',\n },\n users: {\n '10.0.0': 'data-testid users-tab',\n },\n },\n org: {\n url: {\n '10.2.0': '/admin/users',\n '9.5.0': '/org/users',\n },\n },\n admin: {\n url: {\n '9.5.0': '/admin/users',\n },\n },\n publicDashboards: {\n container: {\n '11.1.0': 'data-testid public-dashboards-users-list',\n },\n },\n UserListAdminPage: {\n container: {\n '10.0.0': 'data-testid user-list-admin-page',\n },\n },\n UsersListPage: {\n container: {\n '10.0.0': 'data-testid users-list-page',\n },\n },\n UserAnonListPage: {\n container: {\n '10.4.0': 'data-testid user-anon-list-page',\n },\n },\n UsersListPublicDashboardsPage: {\n container: {\n '10.0.0': 'data-testid users-list-public-dashboards-page',\n },\n DashboardsListModal: {\n listItem: {\n '10.0.0': (uid: string) => `data-testid dashboards-list-item-${uid}`,\n },\n },\n },\n },\n ProfilePage: {\n url: {\n '10.2.0': '/profile',\n },\n },\n Plugin: {\n url: {\n [MIN_GRAFANA_VERSION]: (pluginId: string) => `/plugins/${pluginId}`,\n },\n },\n MigrateToCloud: {\n url: {\n '11.2.0': '/admin/migrate-to-cloud',\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedPages = typeof versionedPages;\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport enum QueryEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport enum LokiQueryType {\n Instant = 'instant',\n Range = 'range',\n Stream = 'stream',\n}\n\nexport enum SupportingQueryType {\n DataSample = 'dataSample',\n InfiniteScroll = 'infiniteScroll',\n LogsSample = 'logsSample',\n LogsVolume = 'logsVolume',\n}\n\nexport enum LokiQueryDirection {\n Backward = 'backward',\n Forward = 'forward',\n Scan = 'scan',\n}\n\nexport interface LokiDataQuery extends common.DataQuery {\n editorMode?: QueryEditorMode;\n /**\n * The LogQL query.\n */\n expr: string;\n /**\n * @deprecated, now use queryType.\n */\n instant?: boolean;\n /**\n * Used to override the name of the series.\n */\n legendFormat?: string;\n /**\n * Used to limit the number of log rows returned.\n */\n maxLines?: number;\n /**\n * @deprecated, now use queryType.\n */\n range?: boolean;\n /**\n * @deprecated, now use step.\n */\n resolution?: number;\n /**\n * Used to set step value for range queries.\n */\n step?: string;\n}\n","import { DataQuery, DataQueryRequest, DataSourceJsonData, TimeRange } from '@grafana/data';\n\nimport {\n LokiDataQuery as LokiQueryFromSchema,\n LokiQueryType,\n SupportingQueryType,\n LokiQueryDirection,\n} from './dataquery.gen';\n\nexport { LokiQueryDirection, LokiQueryType, SupportingQueryType };\n\nexport enum LokiResultType {\n Stream = 'streams',\n Vector = 'vector',\n Matrix = 'matrix',\n}\n\nexport enum LabelType {\n Indexed = 'I',\n StructuredMetadata = 'S',\n Parsed = 'P',\n}\n\nexport interface LokiQuery extends LokiQueryFromSchema {\n direction?: LokiQueryDirection;\n /** Used only to identify supporting queries, e.g. logs volume, logs sample and data sample */\n supportingQueryType?: SupportingQueryType;\n // CUE autogenerates `queryType` as `?string`, as that's how it is defined\n // in the parent-interface (in DataQuery).\n // the temporary fix (until this gets improved in the codegen), is to\n // override it here\n queryType?: LokiQueryType;\n}\n\nexport interface LokiOptions extends DataSourceJsonData {\n maxLines?: string;\n derivedFields?: DerivedFieldConfig[];\n alertmanager?: string;\n keepCookies?: string[];\n}\n\nexport interface LokiStreamResult {\n stream: Record<string, string>;\n values: Array<[string, string]>;\n}\n\nexport interface LokiTailResponse {\n streams: LokiStreamResult[];\n dropped_entries?: Array<{\n labels: Record<string, string>;\n timestamp: string;\n }> | null;\n}\n\nexport type DerivedFieldConfig = {\n matcherRegex: string;\n name: string;\n url?: string;\n urlDisplayLabel?: string;\n datasourceUid?: string;\n matcherType?: 'label' | 'regex';\n targetBlank?: boolean;\n};\n\nexport enum LokiVariableQueryType {\n LabelNames,\n LabelValues,\n}\n\nexport interface LokiVariableQuery extends DataQuery {\n type: LokiVariableQueryType;\n label?: string;\n stream?: string;\n}\n\nexport interface QueryStats {\n streams: number;\n chunks: number;\n bytes: number;\n entries: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n}\n\nexport interface ContextFilter {\n enabled: boolean;\n label: string;\n value: string;\n nonIndexed: boolean;\n}\n\nexport interface ParserAndLabelKeysResult {\n extractedLabelKeys: string[];\n structuredMetadataKeys: string[];\n hasJSON: boolean;\n hasLogfmt: boolean;\n hasPack: boolean;\n unwrapLabelKeys: string[];\n}\n\nexport interface DetectedFieldsResult {\n fields: Array<{\n label: string;\n type: 'bytes' | 'float' | 'int' | 'string' | 'duration';\n cardinality: number;\n parsers: Array<'logfmt' | 'json'> | null;\n }>;\n limit: number;\n}\n\nexport type LokiGroupedRequest = { request: DataQueryRequest<LokiQuery>; partition: TimeRange[] };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _tokenTypes = _interopRequireDefault(require(\"./tokenTypes\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar INLINE_MAX_LENGTH = 50;\n/**\r\n * Bookkeeper for inline blocks.\r\n *\r\n * Inline blocks are parenthesized expressions that are shorter than INLINE_MAX_LENGTH.\r\n * These blocks are formatted on a single line, unlike longer parenthesized\r\n * expressions where open-parenthesis causes newline and increase of indentation.\r\n */\n\nvar InlineBlock =\n/*#__PURE__*/\nfunction () {\n function InlineBlock() {\n _classCallCheck(this, InlineBlock);\n\n this.level = 0;\n }\n /**\r\n * Begins inline block when lookahead through upcoming tokens determines\r\n * that the block would be smaller than INLINE_MAX_LENGTH.\r\n * @param {Object[]} tokens Array of all tokens\r\n * @param {Number} index Current token position\r\n */\n\n\n _createClass(InlineBlock, [{\n key: \"beginIfPossible\",\n value: function beginIfPossible(tokens, index) {\n if (this.level === 0 && this.isInlineBlock(tokens, index)) {\n this.level = 1;\n } else if (this.level > 0) {\n this.level++;\n } else {\n this.level = 0;\n }\n }\n /**\r\n * Finishes current inline block.\r\n * There might be several nested ones.\r\n */\n\n }, {\n key: \"end\",\n value: function end() {\n this.level--;\n }\n /**\r\n * True when inside an inline block\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isActive\",\n value: function isActive() {\n return this.level > 0;\n } // Check if this should be an inline parentheses block\n // Examples are \"NOW()\", \"COUNT(*)\", \"int(10)\", key(`some_column`), DECIMAL(7,2)\n\n }, {\n key: \"isInlineBlock\",\n value: function isInlineBlock(tokens, index) {\n var length = 0;\n var level = 0;\n\n for (var i = index; i < tokens.length; i++) {\n var token = tokens[i];\n length += token.value.length; // Overran max length\n\n if (length > INLINE_MAX_LENGTH) {\n return false;\n }\n\n if (token.type === _tokenTypes[\"default\"].OPEN_PAREN) {\n level++;\n } else if (token.type === _tokenTypes[\"default\"].CLOSE_PAREN) {\n level--;\n\n if (level === 0) {\n return true;\n }\n }\n\n if (this.isForbiddenToken(token)) {\n return false;\n }\n }\n\n return false;\n } // Reserved words that cause newlines, comments and semicolons\n // are not allowed inside inline parentheses block\n\n }, {\n key: \"isForbiddenToken\",\n value: function isForbiddenToken(_ref) {\n var type = _ref.type,\n value = _ref.value;\n return type === _tokenTypes[\"default\"].RESERVED_TOP_LEVEL || type === _tokenTypes[\"default\"].RESERVED_NEWLINE || type === _tokenTypes[\"default\"].COMMENT || type === _tokenTypes[\"default\"].BLOCK_COMMENT || value === ';';\n }\n }]);\n\n return InlineBlock;\n}();\n\nexports[\"default\"] = InlineBlock;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _includes = _interopRequireDefault(require(\"lodash/includes\"));\n\nvar _tokenTypes = _interopRequireDefault(require(\"./tokenTypes\"));\n\nvar _Indentation = _interopRequireDefault(require(\"./Indentation\"));\n\nvar _InlineBlock = _interopRequireDefault(require(\"./InlineBlock\"));\n\nvar _Params = _interopRequireDefault(require(\"./Params\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar trimSpacesEnd = function trimSpacesEnd(str) {\n return str.replace(/[\\t ]+$/, '');\n};\n\nvar Formatter =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg\r\n * @param {String} cfg.language\r\n * @param {String} cfg.indent\r\n * @param {Bool} cfg.uppercase\r\n * @param {Integer} cfg.linesBetweenQueries\r\n * @param {Object} cfg.params\r\n * @param {Tokenizer} tokenizer\r\n */\n function Formatter(cfg, tokenizer, tokenOverride) {\n _classCallCheck(this, Formatter);\n\n this.cfg = cfg || {};\n this.indentation = new _Indentation[\"default\"](this.cfg.indent);\n this.inlineBlock = new _InlineBlock[\"default\"]();\n this.params = new _Params[\"default\"](this.cfg.params);\n this.tokenizer = tokenizer;\n this.tokenOverride = tokenOverride;\n this.previousReservedWord = {};\n this.tokens = [];\n this.index = 0;\n }\n /**\r\n * Formats whitespace in a SQL string to make it easier to read.\r\n *\r\n * @param {String} query The SQL query string\r\n * @return {String} formatted query\r\n */\n\n\n _createClass(Formatter, [{\n key: \"format\",\n value: function format(query) {\n this.tokens = this.tokenizer.tokenize(query);\n var formattedQuery = this.getFormattedQueryFromTokens();\n return formattedQuery.trim();\n }\n }, {\n key: \"getFormattedQueryFromTokens\",\n value: function getFormattedQueryFromTokens() {\n var _this = this;\n\n var formattedQuery = '';\n this.tokens.forEach(function (token, index) {\n _this.index = index;\n if (_this.tokenOverride) token = _this.tokenOverride(token, _this.previousReservedWord) || token;\n\n if (token.type === _tokenTypes[\"default\"].WHITESPACE) {// ignore (we do our own whitespace formatting)\n } else if (token.type === _tokenTypes[\"default\"].LINE_COMMENT) {\n formattedQuery = _this.formatLineComment(token, formattedQuery);\n } else if (token.type === _tokenTypes[\"default\"].BLOCK_COMMENT) {\n formattedQuery = _this.formatBlockComment(token, formattedQuery);\n } else if (token.type === _tokenTypes[\"default\"].RESERVED_TOP_LEVEL) {\n formattedQuery = _this.formatTopLevelReservedWord(token, formattedQuery);\n _this.previousReservedWord = token;\n } else if (token.type === _tokenTypes[\"default\"].RESERVED_TOP_LEVEL_NO_INDENT) {\n formattedQuery = _this.formatTopLevelReservedWordNoIndent(token, formattedQuery);\n _this.previousReservedWord = token;\n } else if (token.type === _tokenTypes[\"default\"].RESERVED_NEWLINE) {\n formattedQuery = _this.formatNewlineReservedWord(token, formattedQuery);\n _this.previousReservedWord = token;\n } else if (token.type === _tokenTypes[\"default\"].RESERVED) {\n formattedQuery = _this.formatWithSpaces(token, formattedQuery);\n _this.previousReservedWord = token;\n } else if (token.type === _tokenTypes[\"default\"].OPEN_PAREN) {\n formattedQuery = _this.formatOpeningParentheses(token, formattedQuery);\n } else if (token.type === _tokenTypes[\"default\"].CLOSE_PAREN) {\n formattedQuery = _this.formatClosingParentheses(token, formattedQuery);\n } else if (token.type === _tokenTypes[\"default\"].PLACEHOLDER) {\n formattedQuery = _this.formatPlaceholder(token, formattedQuery);\n } else if (token.value === ',') {\n formattedQuery = _this.formatComma(token, formattedQuery);\n } else if (token.value === ':') {\n formattedQuery = _this.formatWithSpaceAfter(token, formattedQuery);\n } else if (token.value === '.') {\n formattedQuery = _this.formatWithoutSpaces(token, formattedQuery);\n } else if (token.value === ';') {\n formattedQuery = _this.formatQuerySeparator(token, formattedQuery);\n } else {\n formattedQuery = _this.formatWithSpaces(token, formattedQuery);\n }\n });\n return formattedQuery;\n }\n }, {\n key: \"formatLineComment\",\n value: function formatLineComment(token, query) {\n return this.addNewline(query + token.value);\n }\n }, {\n key: \"formatBlockComment\",\n value: function formatBlockComment(token, query) {\n return this.addNewline(this.addNewline(query) + this.indentComment(token.value));\n }\n }, {\n key: \"indentComment\",\n value: function indentComment(comment) {\n return comment.replace(/\\n[\\t ]*/g, '\\n' + this.indentation.getIndent() + ' ');\n }\n }, {\n key: \"formatTopLevelReservedWordNoIndent\",\n value: function formatTopLevelReservedWordNoIndent(token, query) {\n this.indentation.decreaseTopLevel();\n query = this.addNewline(query) + this.equalizeWhitespace(this.formatReservedWord(token.value));\n return this.addNewline(query);\n }\n }, {\n key: \"formatTopLevelReservedWord\",\n value: function formatTopLevelReservedWord(token, query) {\n this.indentation.decreaseTopLevel();\n query = this.addNewline(query);\n this.indentation.increaseTopLevel();\n query += this.equalizeWhitespace(this.formatReservedWord(token.value));\n return this.addNewline(query);\n }\n }, {\n key: \"formatNewlineReservedWord\",\n value: function formatNewlineReservedWord(token, query) {\n return this.addNewline(query) + this.equalizeWhitespace(this.formatReservedWord(token.value)) + ' ';\n } // Replace any sequence of whitespace characters with single space\n\n }, {\n key: \"equalizeWhitespace\",\n value: function equalizeWhitespace(string) {\n return string.replace(/[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]+/g, ' ');\n } // Opening parentheses increase the block indent level and start a new line\n\n }, {\n key: \"formatOpeningParentheses\",\n value: function formatOpeningParentheses(token, query) {\n // Take out the preceding space unless there was whitespace there in the original query\n // or another opening parens or line comment\n var preserveWhitespaceFor = [_tokenTypes[\"default\"].WHITESPACE, _tokenTypes[\"default\"].OPEN_PAREN, _tokenTypes[\"default\"].LINE_COMMENT];\n\n if (!(0, _includes[\"default\"])(preserveWhitespaceFor, this.previousToken().type)) {\n query = trimSpacesEnd(query);\n }\n\n query += this.cfg.uppercase ? token.value.toUpperCase() : token.value;\n this.inlineBlock.beginIfPossible(this.tokens, this.index);\n\n if (!this.inlineBlock.isActive()) {\n this.indentation.increaseBlockLevel();\n query = this.addNewline(query);\n }\n\n return query;\n } // Closing parentheses decrease the block indent level\n\n }, {\n key: \"formatClosingParentheses\",\n value: function formatClosingParentheses(token, query) {\n token.value = this.cfg.uppercase ? token.value.toUpperCase() : token.value;\n\n if (this.inlineBlock.isActive()) {\n this.inlineBlock.end();\n return this.formatWithSpaceAfter(token, query);\n } else {\n this.indentation.decreaseBlockLevel();\n return this.formatWithSpaces(token, this.addNewline(query));\n }\n }\n }, {\n key: \"formatPlaceholder\",\n value: function formatPlaceholder(token, query) {\n return query + this.params.get(token) + ' ';\n } // Commas start a new line (unless within inline parentheses or SQL \"LIMIT\" clause)\n\n }, {\n key: \"formatComma\",\n value: function formatComma(token, query) {\n query = trimSpacesEnd(query) + token.value + ' ';\n\n if (this.inlineBlock.isActive()) {\n return query;\n } else if (/^LIMIT$/i.test(this.previousReservedWord.value)) {\n return query;\n } else {\n return this.addNewline(query);\n }\n }\n }, {\n key: \"formatWithSpaceAfter\",\n value: function formatWithSpaceAfter(token, query) {\n return trimSpacesEnd(query) + token.value + ' ';\n }\n }, {\n key: \"formatWithoutSpaces\",\n value: function formatWithoutSpaces(token, query) {\n return trimSpacesEnd(query) + token.value;\n }\n }, {\n key: \"formatWithSpaces\",\n value: function formatWithSpaces(token, query) {\n var value = token.type === 'reserved' ? this.formatReservedWord(token.value) : token.value;\n return query + value + ' ';\n }\n }, {\n key: \"formatReservedWord\",\n value: function formatReservedWord(value) {\n return this.cfg.uppercase ? value.toUpperCase() : value;\n }\n }, {\n key: \"formatQuerySeparator\",\n value: function formatQuerySeparator(token, query) {\n this.indentation.resetIndentation();\n return trimSpacesEnd(query) + token.value + '\\n'.repeat(this.cfg.linesBetweenQueries || 1);\n }\n }, {\n key: \"addNewline\",\n value: function addNewline(query) {\n query = trimSpacesEnd(query);\n if (!query.endsWith('\\n')) query += '\\n';\n return query + this.indentation.getIndent();\n }\n }, {\n key: \"previousToken\",\n value: function previousToken() {\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return this.tokens[this.index - offset] || {};\n }\n }]);\n\n return Formatter;\n}();\n\nexports[\"default\"] = Formatter;\nmodule.exports = exports.default;","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\r\n * Handles placeholder replacement with given params.\r\n */\nvar Params =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} params\r\n */\n function Params(params) {\n _classCallCheck(this, Params);\n\n this.params = params;\n this.index = 0;\n }\n /**\r\n * Returns param value that matches given placeholder with param key.\r\n * @param {Object} token\r\n * @param {String} token.key Placeholder key\r\n * @param {String} token.value Placeholder value\r\n * @return {String} param or token.value when params are missing\r\n */\n\n\n _createClass(Params, [{\n key: \"get\",\n value: function get(_ref) {\n var key = _ref.key,\n value = _ref.value;\n\n if (!this.params) {\n return value;\n }\n\n if (key) {\n return this.params[key];\n }\n\n return this.params[this.index++];\n }\n }]);\n\n return Params;\n}();\n\nexports[\"default\"] = Params;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _Formatter = _interopRequireDefault(require(\"../core/Formatter\"));\n\nvar _Tokenizer = _interopRequireDefault(require(\"../core/Tokenizer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar reservedWords = ['ALL', 'ALTER', 'ANALYZE', 'AND', 'ANY', 'ARRAY', 'AS', 'ASC', 'BEGIN', 'BETWEEN', 'BINARY', 'BOOLEAN', 'BREAK', 'BUCKET', 'BUILD', 'BY', 'CALL', 'CASE', 'CAST', 'CLUSTER', 'COLLATE', 'COLLECTION', 'COMMIT', 'CONNECT', 'CONTINUE', 'CORRELATE', 'COVER', 'CREATE', 'DATABASE', 'DATASET', 'DATASTORE', 'DECLARE', 'DECREMENT', 'DELETE', 'DERIVED', 'DESC', 'DESCRIBE', 'DISTINCT', 'DO', 'DROP', 'EACH', 'ELEMENT', 'ELSE', 'END', 'EVERY', 'EXCEPT', 'EXCLUDE', 'EXECUTE', 'EXISTS', 'EXPLAIN', 'FALSE', 'FETCH', 'FIRST', 'FLATTEN', 'FOR', 'FORCE', 'FROM', 'FUNCTION', 'GRANT', 'GROUP', 'GSI', 'HAVING', 'IF', 'IGNORE', 'ILIKE', 'IN', 'INCLUDE', 'INCREMENT', 'INDEX', 'INFER', 'INLINE', 'INNER', 'INSERT', 'INTERSECT', 'INTO', 'IS', 'JOIN', 'KEY', 'KEYS', 'KEYSPACE', 'KNOWN', 'LAST', 'LEFT', 'LET', 'LETTING', 'LIKE', 'LIMIT', 'LSM', 'MAP', 'MAPPING', 'MATCHED', 'MATERIALIZED', 'MERGE', 'MISSING', 'NAMESPACE', 'NEST', 'NOT', 'NULL', 'NUMBER', 'OBJECT', 'OFFSET', 'ON', 'OPTION', 'OR', 'ORDER', 'OUTER', 'OVER', 'PARSE', 'PARTITION', 'PASSWORD', 'PATH', 'POOL', 'PREPARE', 'PRIMARY', 'PRIVATE', 'PRIVILEGE', 'PROCEDURE', 'PUBLIC', 'RAW', 'REALM', 'REDUCE', 'RENAME', 'RETURN', 'RETURNING', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'SATISFIES', 'SCHEMA', 'SELECT', 'SELF', 'SEMI', 'SET', 'SHOW', 'SOME', 'START', 'STATISTICS', 'STRING', 'SYSTEM', 'THEN', 'TO', 'TRANSACTION', 'TRIGGER', 'TRUE', 'TRUNCATE', 'UNDER', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UNSET', 'UPDATE', 'UPSERT', 'USE', 'USER', 'USING', 'VALIDATE', 'VALUE', 'VALUED', 'VALUES', 'VIA', 'VIEW', 'WHEN', 'WHERE', 'WHILE', 'WITH', 'WITHIN', 'WORK', 'XOR'];\nvar reservedTopLevelWords = ['DELETE FROM', 'EXCEPT ALL', 'EXCEPT', 'EXPLAIN DELETE FROM', 'EXPLAIN UPDATE', 'EXPLAIN UPSERT', 'FROM', 'GROUP BY', 'HAVING', 'INFER', 'INSERT INTO', 'LET', 'LIMIT', 'MERGE', 'NEST', 'ORDER BY', 'PREPARE', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'UNNEST', 'UPDATE', 'UPSERT', 'USE KEYS', 'VALUES', 'WHERE'];\nvar reservedTopLevelWordsNoIndent = ['INTERSECT', 'INTERSECT ALL', 'MINUS', 'UNION', 'UNION ALL'];\nvar reservedNewlineWords = ['AND', 'INNER JOIN', 'JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'OR', 'OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'XOR'];\nvar tokenizer;\n\nvar N1qlFormatter =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {Object} cfg Different set of configurations\r\n */\n function N1qlFormatter(cfg) {\n _classCallCheck(this, N1qlFormatter);\n\n this.cfg = cfg;\n }\n /**\r\n * Format the whitespace in a N1QL string to make it easier to read\r\n *\r\n * @param {String} query The N1QL string\r\n * @return {String} formatted string\r\n */\n\n\n _createClass(N1qlFormatter, [{\n key: \"format\",\n value: function format(query) {\n if (!tokenizer) {\n tokenizer = new _Tokenizer[\"default\"]({\n reservedWords: reservedWords,\n reservedTopLevelWords: reservedTopLevelWords,\n reservedNewlineWords: reservedNewlineWords,\n reservedTopLevelWordsNoIndent: reservedTopLevelWordsNoIndent,\n stringTypes: [\"\\\"\\\"\", \"''\", '``'],\n openParens: ['(', '[', '{'],\n closeParens: [')', ']', '}'],\n namedPlaceholderTypes: ['$'],\n lineCommentTypes: ['#', '--']\n });\n }\n\n return new _Formatter[\"default\"](this.cfg, tokenizer).format(query);\n }\n }]);\n\n return N1qlFormatter;\n}();\n\nexports[\"default\"] = N1qlFormatter;\nmodule.exports = exports.default;","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","var baseRepeat = require('./_baseRepeat'),\n isIterateeCall = require('./_isIterateeCall'),\n toInteger = require('./toInteger'),\n toString = require('./toString');\n\n/**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\nfunction repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n}\n\nmodule.exports = repeat;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"loki-query-field\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"public/plugins/loki/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t231: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkloki\"] = globalThis[\"webpackChunkloki\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","\n import amdMetaModule from 'amd-module';\n\n __webpack_public_path__ =\n amdMetaModule && amdMetaModule.uri\n ? amdMetaModule.uri.slice(0, amdMetaModule.uri.lastIndexOf('/') + 1)\n : 'public/plugins/loki/';\n ","import { css } from '@emotion/css';\nimport { shuffle } from 'lodash';\nimport { PureComponent } from 'react';\n\nimport { GrafanaTheme2, QueryEditorHelpProps } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { TextLink, Themeable2, withTheme2 } from '@grafana/ui';\n\nimport LokiLanguageProvider from '../LanguageProvider';\nimport { escapeLabelValueInExactSelector } from '../languageUtils';\nimport { LokiQuery } from '../types';\n\nconst DEFAULT_EXAMPLES = ['{job=\"default/prometheus\"}'];\nconst PREFERRED_LABELS = ['job', 'app', 'k8s_app'];\nconst EXAMPLES_LIMIT = 5;\n\nconst LOGQL_EXAMPLES = [\n {\n title: 'Log pipeline',\n expression: '{job=\"mysql\"} |= \"metrics\" | logfmt | duration > 10s',\n label:\n 'This query targets the MySQL job, keeps logs that contain the substring \"metrics\", and then parses and filters the logs further.',\n },\n {\n title: 'Count over time',\n expression: 'count_over_time({job=\"mysql\"}[5m])',\n label: 'This query counts all the log lines within the last five minutes for the MySQL job.',\n },\n {\n title: 'Rate',\n expression: 'rate(({job=\"mysql\"} |= \"error\" != \"timeout\")[10s])',\n label:\n 'This query gets the per-second rate of all non-timeout errors within the last ten seconds for the MySQL job.',\n },\n {\n title: 'Aggregate, count, and group',\n expression: 'sum(count_over_time({job=\"mysql\"}[5m])) by (level)',\n label: 'Get the count of logs during the last five minutes, grouping by level.',\n },\n];\n\nclass UnthemedLokiCheatSheet extends PureComponent<\n QueryEditorHelpProps<LokiQuery> & Themeable2,\n { userExamples: string[] }\n> {\n declare userLabelTimer: ReturnType<typeof setTimeout>;\n state = {\n userExamples: [],\n };\n\n componentDidMount() {\n this.scheduleUserLabelChecking();\n reportInteraction('grafana_loki_cheatsheet_opened', {});\n }\n\n componentWillUnmount() {\n clearTimeout(this.userLabelTimer);\n }\n\n scheduleUserLabelChecking() {\n this.userLabelTimer = setTimeout(this.checkUserLabels, 1000);\n }\n\n checkUserLabels = async () => {\n // Set example from user labels\n const provider: LokiLanguageProvider = this.props.datasource?.languageProvider;\n if (provider.started) {\n const labels = provider.getLabelKeys() || [];\n const preferredLabel = PREFERRED_LABELS.find((l) => labels.includes(l));\n if (preferredLabel) {\n const values = await provider.fetchLabelValues(preferredLabel);\n const userExamples = shuffle(values)\n .slice(0, EXAMPLES_LIMIT)\n .map((value) => `{${preferredLabel}=\"${escapeLabelValueInExactSelector(value)}\"}`);\n this.setState({ userExamples });\n }\n } else {\n this.scheduleUserLabelChecking();\n }\n };\n\n renderExpression(expr: string) {\n const { onClickExample, theme } = this.props;\n const styles = getStyles(theme);\n const onClick = (query: LokiQuery) => {\n onClickExample(query);\n reportInteraction('grafana_loki_cheatsheet_example_clicked', {});\n };\n\n return (\n <button\n type=\"button\"\n className={styles.cheatSheetExample}\n key={expr}\n onClick={() => onClick({ refId: 'A', expr })}\n >\n <code>{expr}</code>\n </button>\n );\n }\n\n render() {\n const { userExamples } = this.state;\n const { theme } = this.props;\n const hasUserExamples = userExamples.length > 0;\n const styles = getStyles(theme);\n\n return (\n <div>\n <h2>Loki Cheat Sheet</h2>\n <div className={styles.cheatSheetItem}>\n <div className={styles.cheatSheetItemTitle}>See your logs</div>\n Start by selecting a log stream from the Label browser, or alternatively you can write a stream selector into\n the query field.\n {hasUserExamples ? (\n <div>\n Here are some example streams from your logs:\n {userExamples.map((example) => this.renderExpression(example))}\n </div>\n ) : (\n <div>\n Here is an example of a log stream:\n {this.renderExpression(DEFAULT_EXAMPLES[0])}\n </div>\n )}\n </div>\n <div className={styles.cheatSheetItem}>\n <div className={styles.cheatSheetItemTitle}>Combine stream selectors</div>\n {this.renderExpression('{app=\"cassandra\",namespace=\"prod\"}')}\n Returns all log lines from streams that have both labels.\n </div>\n\n <div className={styles.cheatSheetItem}>\n <div className={styles.cheatSheetItemTitle}>Filtering for search terms.</div>\n {this.renderExpression('{app=\"cassandra\"} |~ \"(duration|latency)s*(=|is|of)s*[d.]+\"')}\n {this.renderExpression('{app=\"cassandra\"} |= \"exact match\"')}\n {this.renderExpression('{app=\"cassandra\"} != \"do not match\"')}\n <TextLink href=\"https://grafana.com/docs/loki/latest/logql/#log-pipeline\" external>\n LogQL\n </TextLink>{' '}\n supports exact and regular expression filters.\n </div>\n {LOGQL_EXAMPLES.map((item) => (\n <div className={styles.cheatSheetItem} key={item.expression}>\n <div className={styles.cheatSheetItemTitle}>{item.title}</div>\n {this.renderExpression(item.expression)}\n {item.label}\n </div>\n ))}\n </div>\n );\n }\n}\n\nexport default withTheme2(UnthemedLokiCheatSheet);\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n cheatSheetItem: css({\n margin: theme.spacing(3, 0),\n }),\n cheatSheetItemTitle: css({\n fontSize: theme.typography.h3.fontSize,\n }),\n cheatSheetExample: css({\n margin: theme.spacing(0.5, 0),\n // element is interactive, clear button styles\n textAlign: 'left',\n border: 'none',\n background: 'transparent',\n display: 'block',\n }),\n});\n","import { useEffect, useRef } from 'react';\nexport default function usePrevious(state) {\n var ref = useRef();\n useEffect(function () {\n ref.current = state;\n });\n return ref.current;\n}\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst EditorHeader = ({ children }) => {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, children);\n};\nconst getStyles = (theme) => ({\n root: css({\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: theme.spacing(3),\n minHeight: theme.spacing(4)\n })\n});\n\nexport { EditorHeader };\n//# sourceMappingURL=EditorHeader.js.map\n","import React__default from 'react';\nimport { Stack } from '@grafana/ui';\nimport '@grafana/data';\n\nconst EditorStack = ({ children, wrap: wrapItems = true, ...props }) => {\n var _a, _b;\n return /* @__PURE__ */ React__default.createElement(Stack, { wrap: wrapItems ? \"wrap\" : undefined, direction: (_a = props.direction) != null ? _a : \"row\", gap: (_b = props.gap) != null ? _b : 2, ...props }, children);\n};\n\nexport { EditorStack };\n//# sourceMappingURL=EditorStack.js.map\n","import { Component, createElement } from 'react';\n\n/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n * 5) Use 'export' statement over 'module.exports' assignment\n **/\n\n// Check `document` and `window` in case of server-side rendering\nlet windowObject;\nif (typeof window !== \"undefined\") {\n windowObject = window;\n\n // eslint-disable-next-line no-restricted-globals\n} else if (typeof self !== \"undefined\") {\n // eslint-disable-next-line no-restricted-globals\n windowObject = self;\n} else {\n windowObject = global;\n}\nlet cancelFrame = null;\nlet requestFrame = null;\nconst TIMEOUT_DURATION = 20;\nconst clearTimeoutFn = windowObject.clearTimeout;\nconst setTimeoutFn = windowObject.setTimeout;\nconst cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;\nconst requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;\nif (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {\n // For environments that don't support animation frame,\n // fallback to a setTimeout based approach.\n cancelFrame = clearTimeoutFn;\n requestFrame = function requestAnimationFrameViaSetTimeout(callback) {\n return setTimeoutFn(callback, TIMEOUT_DURATION);\n };\n} else {\n // Counter intuitively, environments that support animation frames can be trickier.\n // Chrome's \"Throttle non-visible cross-origin iframes\" flag can prevent rAFs from being called.\n // In this case, we should fallback to a setTimeout() implementation.\n cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {\n cancelAnimationFrameFn(animationFrameID);\n clearTimeoutFn(timeoutID);\n };\n requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {\n const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {\n clearTimeoutFn(timeoutID);\n callback();\n });\n const timeoutID = setTimeoutFn(function timeoutCallback() {\n cancelAnimationFrameFn(animationFrameID);\n callback();\n }, TIMEOUT_DURATION);\n return [animationFrameID, timeoutID];\n };\n}\nfunction createDetectElementResize(nonce) {\n let animationKeyframes;\n let animationName;\n let animationStartEvent;\n let animationStyle;\n let checkTriggers;\n let resetTriggers;\n let scrollListener;\n const attachEvent = typeof document !== \"undefined\" && document.attachEvent;\n if (!attachEvent) {\n resetTriggers = function (element) {\n const triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + \"px\";\n expandChild.style.height = expand.offsetHeight + 1 + \"px\";\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n checkTriggers = function (element) {\n return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;\n };\n scrollListener = function (e) {\n // Don't measure (which forces) reflow for scrolls that happen inside of children!\n if (e.target.className && typeof e.target.className.indexOf === \"function\" && e.target.className.indexOf(\"contract-trigger\") < 0 && e.target.className.indexOf(\"expand-trigger\") < 0) {\n return;\n }\n const element = this;\n resetTriggers(this);\n if (this.__resizeRAF__) {\n cancelFrame(this.__resizeRAF__);\n }\n this.__resizeRAF__ = requestFrame(function animationFrame() {\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n element.__resizeListeners__.forEach(function forEachResizeListener(fn) {\n fn.call(element, e);\n });\n }\n });\n };\n\n /* Detect CSS Animations support to detect element display/re-attach */\n let animation = false;\n let keyframeprefix = \"\";\n animationStartEvent = \"animationstart\";\n const domPrefixes = \"Webkit Moz O ms\".split(\" \");\n let startEvents = \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\" \");\n let pfx = \"\";\n {\n const elm = document.createElement(\"fakeelement\");\n if (elm.style.animationName !== undefined) {\n animation = true;\n }\n if (animation === false) {\n for (let i = 0; i < domPrefixes.length; i++) {\n if (elm.style[domPrefixes[i] + \"AnimationName\"] !== undefined) {\n pfx = domPrefixes[i];\n keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\n animationStartEvent = startEvents[i];\n animation = true;\n break;\n }\n }\n }\n }\n animationName = \"resizeanim\";\n animationKeyframes = \"@\" + keyframeprefix + \"keyframes \" + animationName + \" { from { opacity: 0; } to { opacity: 0; } } \";\n animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\n }\n const createStyles = function (doc) {\n if (!doc.getElementById(\"detectElementResize\")) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n const css = (animationKeyframes ? animationKeyframes : \"\") + \".resize-triggers { \" + (animationStyle ? animationStyle : \"\") + \"visibility: hidden; opacity: 0; } \" + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n head = doc.head || doc.getElementsByTagName(\"head\")[0],\n style = doc.createElement(\"style\");\n style.id = \"detectElementResize\";\n style.type = \"text/css\";\n if (nonce != null) {\n style.setAttribute(\"nonce\", nonce);\n }\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n head.appendChild(style);\n }\n };\n const addResizeListener = function (element, fn) {\n if (attachEvent) {\n element.attachEvent(\"onresize\", fn);\n } else {\n if (!element.__resizeTriggers__) {\n const doc = element.ownerDocument;\n const elementStyle = windowObject.getComputedStyle(element);\n if (elementStyle && elementStyle.position === \"static\") {\n element.style.position = \"relative\";\n }\n createStyles(doc);\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = doc.createElement(\"div\")).className = \"resize-triggers\";\n const expandTrigger = doc.createElement(\"div\");\n expandTrigger.className = \"expand-trigger\";\n expandTrigger.appendChild(doc.createElement(\"div\"));\n const contractTrigger = doc.createElement(\"div\");\n contractTrigger.className = \"contract-trigger\";\n element.__resizeTriggers__.appendChild(expandTrigger);\n element.__resizeTriggers__.appendChild(contractTrigger);\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n element.addEventListener(\"scroll\", scrollListener, true);\n\n /* Listen for a css animation to detect element display/re-attach */\n if (animationStartEvent) {\n element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n if (e.animationName === animationName) {\n resetTriggers(element);\n }\n };\n element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n }\n }\n element.__resizeListeners__.push(fn);\n }\n };\n const removeResizeListener = function (element, fn) {\n if (attachEvent) {\n element.detachEvent(\"onresize\", fn);\n } else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.removeEventListener(\"scroll\", scrollListener, true);\n if (element.__resizeTriggers__.__animationListener__) {\n element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n element.__resizeTriggers__.__animationListener__ = null;\n }\n try {\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n } catch (e) {\n // Preact compat; see developit/preact-compat/issues/228\n }\n }\n }\n };\n return {\n addResizeListener,\n removeResizeListener\n };\n}\n\nclass AutoSizer extends Component {\n constructor(...args) {\n super(...args);\n this.state = {\n height: this.props.defaultHeight || 0,\n width: this.props.defaultWidth || 0\n };\n this._autoSizer = null;\n this._detectElementResize = null;\n this._didLogDeprecationWarning = false;\n this._parentNode = null;\n this._resizeObserver = null;\n this._timeoutId = null;\n this._onResize = () => {\n this._timeoutId = null;\n const {\n disableHeight,\n disableWidth,\n onResize\n } = this.props;\n if (this._parentNode) {\n // Guard against AutoSizer component being removed from the DOM immediately after being added.\n // This can result in invalid style values which can result in NaN values if we don't handle them.\n // See issue #150 for more context.\n\n const style = window.getComputedStyle(this._parentNode) || {};\n const paddingLeft = parseFloat(style.paddingLeft || \"0\");\n const paddingRight = parseFloat(style.paddingRight || \"0\");\n const paddingTop = parseFloat(style.paddingTop || \"0\");\n const paddingBottom = parseFloat(style.paddingBottom || \"0\");\n const rect = this._parentNode.getBoundingClientRect();\n const height = rect.height - paddingTop - paddingBottom;\n const width = rect.width - paddingLeft - paddingRight;\n if (!disableHeight && this.state.height !== height || !disableWidth && this.state.width !== width) {\n this.setState({\n height,\n width\n });\n const maybeLogDeprecationWarning = () => {\n if (!this._didLogDeprecationWarning) {\n this._didLogDeprecationWarning = true;\n console.warn(\"scaledWidth and scaledHeight parameters have been deprecated; use width and height instead\");\n }\n };\n if (typeof onResize === \"function\") {\n onResize({\n height,\n width,\n // TODO Remove these params in the next major release\n get scaledHeight() {\n maybeLogDeprecationWarning();\n return height;\n },\n get scaledWidth() {\n maybeLogDeprecationWarning();\n return width;\n }\n });\n }\n }\n }\n };\n this._setRef = autoSizer => {\n this._autoSizer = autoSizer;\n };\n }\n componentDidMount() {\n const {\n nonce\n } = this.props;\n const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;\n if (parentNode != null && parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {\n // Delay access of parentNode until mount.\n // This handles edge-cases where the component has already been unmounted before its ref has been set,\n // As well as libraries like react-lite which have a slightly different lifecycle.\n this._parentNode = parentNode;\n\n // Use ResizeObserver from the same context where parentNode (which we will observe) was defined\n // Using just global can result into onResize events not being emitted in cases with multiple realms\n const ResizeObserverInstance = parentNode.ownerDocument.defaultView.ResizeObserver;\n if (ResizeObserverInstance != null) {\n this._resizeObserver = new ResizeObserverInstance(() => {\n // Guard against \"ResizeObserver loop limit exceeded\" error;\n // could be triggered if the state update causes the ResizeObserver handler to run long.\n // See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55\n this._timeoutId = setTimeout(this._onResize, 0);\n });\n this._resizeObserver.observe(parentNode);\n } else {\n // Defer requiring resize handler in order to support server-side rendering.\n // See issue #41\n this._detectElementResize = createDetectElementResize(nonce);\n this._detectElementResize.addResizeListener(parentNode, this._onResize);\n }\n this._onResize();\n }\n }\n componentWillUnmount() {\n if (this._parentNode) {\n if (this._detectElementResize) {\n this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n }\n if (this._timeoutId !== null) {\n clearTimeout(this._timeoutId);\n }\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n }\n }\n render() {\n const {\n children,\n defaultHeight,\n defaultWidth,\n disableHeight = false,\n disableWidth = false,\n doNotBailOutOnEmptyChildren = false,\n nonce,\n onResize,\n style = {},\n tagName = \"div\",\n ...rest\n } = this.props;\n const {\n height,\n width\n } = this.state;\n\n // Outer div should not force width/height since that may prevent containers from shrinking.\n // Inner component should overflow and use calculated width/height.\n // See issue #68 for more information.\n const outerStyle = {\n overflow: \"visible\"\n };\n const childParams = {};\n\n // Avoid rendering children before the initial measurements have been collected.\n // At best this would just be wasting cycles.\n let bailoutOnChildren = false;\n if (!disableHeight) {\n if (height === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.height = 0;\n childParams.height = height;\n\n // TODO Remove this in the next major release\n childParams.scaledHeight = height;\n }\n if (!disableWidth) {\n if (width === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.width = 0;\n childParams.width = width;\n\n // TODO Remove this in the next major release\n childParams.scaledWidth = width;\n }\n if (doNotBailOutOnEmptyChildren) {\n bailoutOnChildren = false;\n }\n return createElement(tagName, {\n ref: this._setRef,\n style: {\n ...outerStyle,\n ...style\n },\n ...rest\n }, !bailoutOnChildren && children(childParams));\n }\n}\n\nfunction isHeightAndWidthProps(props) {\n return props && props.disableHeight !== true && props.disableWidth !== true;\n}\nfunction isHeightOnlyProps(props) {\n return props && props.disableHeight !== true && props.disableWidth === true;\n}\nfunction isWidthOnlyProps(props) {\n return props && props.disableHeight === true && props.disableWidth !== true;\n}\n\nexport { AutoSizer as default, isHeightAndWidthProps, isHeightOnlyProps, isWidthOnlyProps };\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React__default, { useRef } from 'react';\nimport '@grafana/data';\nimport { useStyles2, Switch } from '@grafana/ui';\nimport '../../QueryEditor/types.js';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport 'react-use';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport 'uuid';\nimport '@grafana/runtime';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction QueryHeaderSwitch({ label, ...inputProps }) {\n const dashedLabel = label.replace(\" \", \"-\");\n const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1 }, /* @__PURE__ */ React__default.createElement(\"label\", { htmlFor: switchIdRef.current, className: styles.switchLabel }, label), /* @__PURE__ */ React__default.createElement(Switch, { ...inputProps, id: switchIdRef.current }));\n}\nconst getStyles = (theme) => {\n return {\n switchLabel: css({\n color: theme.colors.text.secondary,\n cursor: \"pointer\",\n fontSize: theme.typography.bodySmall.fontSize,\n \"&:hover\": {\n color: theme.colors.text.primary\n }\n })\n };\n};\n\nexport { QueryHeaderSwitch };\n//# sourceMappingURL=QueryHeaderSwitch.js.map\n","import React__default from 'react';\n\nconst FlexItem = ({ grow, shrink }) => {\n return /* @__PURE__ */ React__default.createElement(\"div\", { style: { display: \"block\", flexGrow: grow, flexShrink: shrink } });\n};\n\nexport { FlexItem };\n//# sourceMappingURL=FlexItem.js.map\n","import React__default from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { QueryEditorMode } from '../types.js';\n\nconst editorModes = [\n { label: \"Builder\", value: QueryEditorMode.Builder },\n { label: \"Code\", value: QueryEditorMode.Code }\n];\nfunction QueryEditorModeToggle({ mode, onChange }) {\n return /* @__PURE__ */ React__default.createElement(\"div\", { \"data-testid\": \"QueryEditorModeToggle\" }, /* @__PURE__ */ React__default.createElement(RadioButtonGroup, { options: editorModes, size: \"sm\", value: mode, onChange }));\n}\n\nexport { QueryEditorModeToggle };\n//# sourceMappingURL=QueryEditorModeToggle.js.map\n","import React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorRows = ({ children }) => {\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 0.5, direction: \"column\" }, children);\n};\n\nexport { EditorRows };\n//# sourceMappingURL=EditorRows.js.map\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import { css, cx } from '@emotion/css';\nimport { sortBy } from 'lodash';\nimport { ChangeEvent } from 'react';\nimport * as React from 'react';\nimport { FixedSizeList } from 'react-window';\n\nimport { CoreApp, GrafanaTheme2, TimeRange } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport {\n Button,\n HighlightPart,\n Input,\n Label,\n LoadingPlaceholder,\n withTheme2,\n BrowserLabel as LokiLabel,\n fuzzyMatch,\n Stack,\n} from '@grafana/ui';\n\nimport LokiLanguageProvider from '../LanguageProvider';\nimport { escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector } from '../languageUtils';\n\n// Hard limit on labels to render\nconst MAX_LABEL_COUNT = 1000;\nconst MAX_VALUE_COUNT = 10000;\nconst MAX_AUTO_SELECT = 4;\nconst EMPTY_SELECTOR = '{}';\nconst collator = new Intl.Collator('en', { sensitivity: 'accent' });\n\nexport interface BrowserProps {\n languageProvider: LokiLanguageProvider;\n onChange: (selector: string) => void;\n theme: GrafanaTheme2;\n app?: CoreApp;\n autoSelect?: number;\n timeRange?: TimeRange;\n hide?: () => void;\n lastUsedLabels: string[];\n storeLastUsedLabels: (labels: string[]) => void;\n deleteLastUsedLabels: () => void;\n}\n\ninterface BrowserState {\n labels: SelectableLabel[];\n searchTerm: string;\n status: string;\n error: string;\n validationStatus: string;\n}\n\ninterface FacettableValue {\n name: string;\n selected?: boolean;\n highlightParts?: HighlightPart[];\n order?: number;\n}\n\nexport interface SelectableLabel {\n name: string;\n selected?: boolean;\n loading?: boolean;\n values?: FacettableValue[];\n hidden?: boolean;\n facets?: number;\n}\n\nexport function buildSelector(labels: SelectableLabel[]): string {\n const selectedLabels = [];\n for (const label of labels) {\n if (label.selected && label.values && label.values.length > 0) {\n const selectedValues = label.values\n .filter((value) => value.selected)\n .map((value) => value.name)\n .sort(collator.compare); // sort selected values alphabetically\n if (selectedValues.length > 1) {\n selectedLabels.push(`${label.name}=~\"${selectedValues.map(escapeLabelValueInRegexSelector).join('|')}\"`);\n } else if (selectedValues.length === 1) {\n selectedLabels.push(`${label.name}=\"${escapeLabelValueInExactSelector(selectedValues[0])}\"`);\n }\n }\n }\n return ['{', selectedLabels.join(','), '}'].join('');\n}\n\nexport function facetLabels(\n labels: SelectableLabel[],\n possibleLabels: Record<string, string[]>,\n lastFacetted?: string\n): SelectableLabel[] {\n return labels.map((label) => {\n const possibleValues = possibleLabels[label.name];\n if (possibleValues) {\n let existingValues: FacettableValue[];\n if (label.name === lastFacetted && label.values) {\n // Facetting this label, show all values\n existingValues = label.values;\n } else {\n // Keep selection in other facets\n const selectedValues: Set<string> = new Set(\n label.values?.filter((value) => value.selected).map((value) => value.name) || []\n );\n // Values for this label have not been requested yet, let's use the facetted ones as the initial values\n existingValues = possibleValues\n .slice()\n .sort(collator.compare) // sort raw label values alphabetically\n .map((value) => ({\n name: value,\n selected: selectedValues.has(value),\n }));\n }\n return { ...label, loading: false, values: existingValues, facets: existingValues.length };\n }\n\n // Label is facetted out, hide all values\n return { ...label, loading: false, hidden: !possibleValues, values: undefined, facets: 0 };\n });\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n backgroundColor: theme.colors.background.secondary,\n width: '100%',\n }),\n wrapperPadding: css({\n padding: theme.spacing(2),\n }),\n list: css({\n marginTop: theme.spacing(1),\n display: 'flex',\n flexWrap: 'wrap',\n maxHeight: '200px',\n overflow: 'auto',\n }),\n section: css({\n '& + &': {\n margin: theme.spacing(2, 0),\n },\n\n position: 'relative',\n }),\n footerSectionStyles: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.primary,\n position: 'sticky',\n bottom: theme.spacing(-3) /* offset the padding on modal */,\n left: 0,\n }),\n selector: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n marginBottom: theme.spacing(1),\n width: '100%',\n }),\n status: css({\n marginBottom: theme.spacing(1),\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: 'opacity 100ms linear',\n },\n opacity: 0,\n fontSize: theme.typography.bodySmall.fontSize,\n height: `calc(${theme.typography.bodySmall.fontSize} + 10px)`,\n }),\n statusShowing: css({\n opacity: 1,\n }),\n error: css({\n color: theme.colors.error.main,\n }),\n valueList: css({\n marginRight: theme.spacing(1),\n resize: 'horizontal',\n }),\n valueListWrapper: css({\n borderLeft: `1px solid ${theme.colors.border.medium}`,\n margin: theme.spacing(1, 0),\n padding: theme.spacing(1, 0, 1, 1),\n }),\n valueListArea: css({\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: theme.spacing(1),\n }),\n valueTitle: css({\n marginLeft: theme.spacing(-0.5),\n marginBottom: theme.spacing(1),\n }),\n validationStatus: css({\n padding: theme.spacing(0.5),\n marginBottom: theme.spacing(1),\n color: theme.colors.text.maxContrast,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n});\n\nexport class UnthemedLokiLabelBrowser extends React.Component<BrowserProps, BrowserState> {\n state: BrowserState = {\n labels: [],\n searchTerm: '',\n status: 'Ready',\n error: '',\n validationStatus: '',\n };\n\n onChangeSearch = (event: ChangeEvent<HTMLInputElement>) => {\n this.setState({ searchTerm: event.target.value });\n };\n\n onClickRunLogsQuery = () => {\n reportInteraction('grafana_loki_label_browser_closed', {\n app: this.props.app,\n closeType: 'showLogsButton',\n });\n const selector = buildSelector(this.state.labels);\n this.props.onChange(selector);\n };\n\n onClickRunMetricsQuery = () => {\n reportInteraction('grafana_loki_label_browser_closed', {\n app: this.props.app,\n closeType: 'showLogsRateButton',\n });\n const selector = buildSelector(this.state.labels);\n const query = `rate(${selector}[$__auto])`;\n this.props.onChange(query);\n };\n\n onClickClear = () => {\n this.setState((state) => {\n const labels: SelectableLabel[] = state.labels.map((label) => ({\n ...label,\n values: undefined,\n selected: false,\n loading: false,\n hidden: false,\n facets: undefined,\n }));\n return { labels, searchTerm: '', status: '', error: '', validationStatus: '' };\n });\n this.props.deleteLastUsedLabels();\n };\n\n onClickLabel = (name: string, value: string | undefined, event: React.MouseEvent<HTMLElement>) => {\n const label = this.state.labels.find((l) => l.name === name);\n if (!label) {\n return;\n }\n // Toggle selected state\n const selected = !label.selected;\n let nextValue: Partial<SelectableLabel> = { selected };\n if (label.values && !selected) {\n // Deselect all values if label was deselected\n const values = label.values.map((value) => ({ ...value, selected: false }));\n nextValue = { ...nextValue, facets: 0, values };\n }\n // Resetting search to prevent empty results\n this.setState({ searchTerm: '' });\n this.updateLabelState(name, nextValue, '', () => this.doFacettingForLabel(name));\n };\n\n onClickValue = (name: string, value: string | undefined, event: React.MouseEvent<HTMLElement>) => {\n const label = this.state.labels.find((l) => l.name === name);\n if (!label || !label.values) {\n return;\n }\n // Resetting search to prevent empty results\n this.setState({ searchTerm: '' });\n // Toggling value for selected label, leaving other values intact\n const values = label.values.map((v) => ({ ...v, selected: v.name === value ? !v.selected : v.selected }));\n this.updateLabelState(name, { values }, '', () => this.doFacetting(name));\n };\n\n onClickValidate = () => {\n const selector = buildSelector(this.state.labels);\n this.validateSelector(selector);\n };\n\n updateLabelState(name: string, updatedFields: Partial<SelectableLabel>, status = '', cb?: () => void) {\n this.setState((state) => {\n const labels: SelectableLabel[] = state.labels.map((label) => {\n if (label.name === name) {\n return { ...label, ...updatedFields };\n }\n return label;\n });\n // New status overrides errors\n const error = status ? '' : state.error;\n return { labels, status, error, validationStatus: '' };\n }, cb);\n }\n\n componentDidMount() {\n const { languageProvider, autoSelect = MAX_AUTO_SELECT, lastUsedLabels, timeRange } = this.props;\n if (languageProvider) {\n const selectedLabels: string[] = lastUsedLabels;\n languageProvider.start(timeRange).then(() => {\n let rawLabels: string[] = languageProvider.getLabelKeys();\n if (rawLabels.length > MAX_LABEL_COUNT) {\n const error = `Too many labels found (showing only ${MAX_LABEL_COUNT} of ${rawLabels.length})`;\n rawLabels = rawLabels.slice(0, MAX_LABEL_COUNT);\n this.setState({ error });\n }\n // Auto-select all labels if label list is small enough\n const labels: SelectableLabel[] = rawLabels.map((label, i, arr) => ({\n name: label,\n selected: (arr.length <= autoSelect && selectedLabels.length === 0) || selectedLabels.includes(label),\n loading: false,\n }));\n // Pre-fetch values for selected labels\n this.setState({ labels }, () => {\n this.state.labels.forEach((label) => {\n if (label.selected) {\n this.fetchValues(label.name, EMPTY_SELECTOR);\n }\n });\n });\n });\n }\n }\n\n doFacettingForLabel(name: string) {\n const label = this.state.labels.find((l) => l.name === name);\n if (!label) {\n return;\n }\n const selectedLabels = this.state.labels.filter((label) => label.selected).map((label) => label.name);\n this.props.storeLastUsedLabels(selectedLabels);\n if (label.selected) {\n // Refetch values for newly selected label...\n if (!label.values) {\n this.fetchValues(name, buildSelector(this.state.labels));\n }\n } else {\n // Only need to facet when deselecting labels\n this.doFacetting();\n }\n }\n\n doFacetting = (lastFacetted?: string) => {\n const selector = buildSelector(this.state.labels);\n if (selector === EMPTY_SELECTOR) {\n // Clear up facetting\n const labels: SelectableLabel[] = this.state.labels.map((label) => {\n return { ...label, facets: 0, values: undefined, hidden: false };\n });\n this.setState({ labels }, () => {\n // Get fresh set of values\n this.state.labels.forEach((label) => label.selected && this.fetchValues(label.name, selector));\n });\n } else {\n // Do facetting\n this.fetchSeries(selector, lastFacetted);\n }\n };\n\n async fetchValues(name: string, selector: string) {\n const { languageProvider, timeRange } = this.props;\n this.updateLabelState(name, { loading: true }, `Fetching values for ${name}`);\n try {\n let rawValues = await languageProvider.fetchLabelValues(name, { timeRange });\n // If selector changed, clear loading state and discard result by returning early\n if (selector !== buildSelector(this.state.labels)) {\n this.updateLabelState(name, { loading: false }, '');\n return;\n }\n if (rawValues.length > MAX_VALUE_COUNT) {\n const error = `Too many values for ${name} (showing only ${MAX_VALUE_COUNT} of ${rawValues.length})`;\n rawValues = rawValues.slice(0, MAX_VALUE_COUNT);\n this.setState({ error });\n }\n const values: FacettableValue[] = rawValues.map((value) => ({ name: value }));\n this.updateLabelState(name, { values, loading: false });\n } catch (error) {\n console.error(error);\n }\n }\n\n async fetchSeries(selector: string, lastFacetted?: string) {\n const { languageProvider, timeRange } = this.props;\n if (lastFacetted) {\n this.updateLabelState(lastFacetted, { loading: true }, `Loading labels for ${selector}`);\n }\n try {\n const possibleLabels = await languageProvider.fetchSeriesLabels(selector, { timeRange });\n // If selector changed, clear loading state and discard result by returning early\n if (selector !== buildSelector(this.state.labels)) {\n if (lastFacetted) {\n this.updateLabelState(lastFacetted, { loading: false });\n }\n return;\n }\n if (Object.keys(possibleLabels).length === 0) {\n this.setState({ error: `Empty results, no matching label for ${selector}` });\n return;\n }\n const labels: SelectableLabel[] = facetLabels(this.state.labels, possibleLabels, lastFacetted);\n this.setState({ labels, error: '' });\n if (lastFacetted) {\n this.updateLabelState(lastFacetted, { loading: false });\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n async validateSelector(selector: string) {\n const { languageProvider, timeRange } = this.props;\n this.setState({ validationStatus: `Validating selector ${selector}`, error: '' });\n const streams = await languageProvider.fetchSeries(selector, { timeRange });\n this.setState({ validationStatus: `Selector is valid (${streams.length} streams found)` });\n }\n\n render() {\n const { theme } = this.props;\n const { labels, searchTerm, status, error, validationStatus } = this.state;\n if (labels.length === 0) {\n return <LoadingPlaceholder text=\"Loading labels...\" />;\n }\n const styles = getStyles(theme);\n const selector = buildSelector(this.state.labels);\n const empty = selector === EMPTY_SELECTOR;\n\n let selectedLabels = labels.filter((label) => label.selected && label.values);\n if (searchTerm) {\n selectedLabels = selectedLabels.map((label) => {\n const searchResults = label.values!.filter((value) => {\n // Always return selected values\n if (value.selected) {\n value.highlightParts = undefined;\n return true;\n }\n const fuzzyMatchResult = fuzzyMatch(value.name.toLowerCase(), searchTerm.toLowerCase());\n if (fuzzyMatchResult.found) {\n value.highlightParts = fuzzyMatchResult.ranges;\n value.order = fuzzyMatchResult.distance;\n return true;\n } else {\n return false;\n }\n });\n return {\n ...label,\n values: sortBy(searchResults, (value) => (value.selected ? -Infinity : value.order)),\n };\n });\n } else {\n // Clear highlight parts when searchTerm is cleared\n selectedLabels = this.state.labels\n .filter((label) => label.selected && label.values)\n .map((label) => ({\n ...label,\n values: label?.values ? label.values.map((value) => ({ ...value, highlightParts: undefined })) : [],\n }));\n }\n\n return (\n <>\n <div className={styles.wrapper}>\n <div className={cx(styles.section, styles.wrapperPadding)}>\n <Label description=\"Which labels would you like to consider for your search?\">\n 1. Select labels to search in\n </Label>\n <div className={styles.list}>\n {labels.map((label) => (\n <LokiLabel\n key={label.name}\n name={label.name}\n loading={label.loading}\n active={label.selected}\n hidden={label.hidden}\n facets={label.facets}\n onClick={this.onClickLabel}\n />\n ))}\n </div>\n </div>\n <div className={cx(styles.section, styles.wrapperPadding)}>\n <Label description=\"Choose the label values that you would like to use for the query. Use the search field to find values across selected labels.\">\n 2. Find values for the selected labels\n </Label>\n <div>\n <Input\n onChange={this.onChangeSearch}\n aria-label=\"Filter expression for values\"\n value={searchTerm}\n placeholder={'Enter a label value'}\n />\n </div>\n <div className={styles.valueListArea}>\n {selectedLabels.map((label) => (\n <div role=\"list\" key={label.name} className={styles.valueListWrapper}>\n <div className={styles.valueTitle} aria-label={`Values for ${label.name}`}>\n <LokiLabel\n name={label.name}\n loading={label.loading}\n active={label.selected}\n hidden={label.hidden}\n //If no facets, we want to show number of all label values\n facets={label.facets || label.values?.length}\n onClick={this.onClickLabel}\n />\n </div>\n <FixedSizeList\n height={200}\n itemCount={label.values?.length || 0}\n itemSize={28}\n itemKey={(i) => label.values?.[i].name ?? i}\n width={200}\n className={styles.valueList}\n >\n {({ index, style }) => {\n const value = label.values?.[index];\n if (!value) {\n return null;\n }\n return (\n <div style={style}>\n <LokiLabel\n name={label.name}\n value={value?.name}\n active={value?.selected}\n highlightParts={value?.highlightParts}\n onClick={this.onClickValue}\n searchTerm={searchTerm}\n />\n </div>\n );\n }}\n </FixedSizeList>\n </div>\n ))}\n </div>\n </div>\n </div>\n <div className={styles.footerSectionStyles}>\n <Label>3. Resulting selector</Label>\n <pre aria-label=\"selector\" className={styles.selector}>\n {selector}\n </pre>\n {validationStatus && <div className={styles.validationStatus}>{validationStatus}</div>}\n <div className={cx(styles.status, (status || error) && styles.statusShowing)}>\n <span className={error ? styles.error : ''}>{error || status}</span>\n </div>\n <Stack gap={1}>\n <Button aria-label=\"Use selector as logs button\" disabled={empty} onClick={this.onClickRunLogsQuery}>\n Show logs\n </Button>\n <Button\n aria-label=\"Use selector as metrics button\"\n variant=\"secondary\"\n disabled={empty}\n onClick={this.onClickRunMetricsQuery}\n >\n Show logs rate\n </Button>\n <Button\n aria-label=\"Validate submit button\"\n variant=\"secondary\"\n disabled={empty}\n onClick={this.onClickValidate}\n >\n Validate selector\n </Button>\n <Button aria-label=\"Selector clear button\" variant=\"secondary\" onClick={this.onClickClear}>\n Clear\n </Button>\n </Stack>\n </div>\n </>\n );\n }\n}\n\nexport const LokiLabelBrowser = withTheme2(UnthemedLokiLabelBrowser);\n","import { css } from '@emotion/css';\nimport { useState, useEffect } from 'react';\n\nimport { CoreApp, GrafanaTheme2, LocalStorageValueProvider, TimeRange } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { LoadingPlaceholder, Modal, useStyles2 } from '@grafana/ui';\n\nimport { LokiLabelBrowser } from '../../components/LokiLabelBrowser';\nimport { LokiDatasource } from '../../datasource';\nimport { LokiQuery } from '../../types';\n\nexport interface Props {\n isOpen: boolean;\n datasource: LokiDatasource;\n query: LokiQuery;\n app?: CoreApp;\n timeRange?: TimeRange;\n onClose: () => void;\n onChange: (query: LokiQuery) => void;\n onRunQuery: () => void;\n}\n\nexport const LabelBrowserModal = (props: Props) => {\n const { isOpen, onClose, datasource, app, timeRange } = props;\n const [labelsLoaded, setLabelsLoaded] = useState(false);\n const [hasLogLabels, setHasLogLabels] = useState(false);\n const LAST_USED_LABELS_KEY = 'grafana.datasources.loki.browser.labels';\n\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n datasource.languageProvider.fetchLabels({ timeRange }).then((labels) => {\n setLabelsLoaded(true);\n setHasLogLabels(labels.length > 0);\n });\n }, [datasource, isOpen, timeRange]);\n\n const changeQuery = (value: string) => {\n const { query, onChange, onRunQuery } = props;\n const nextQuery = { ...query, expr: value };\n onChange(nextQuery);\n onRunQuery();\n };\n\n const onChange = (selector: string) => {\n changeQuery(selector);\n onClose();\n };\n\n const reportInteractionAndClose = () => {\n reportInteraction('grafana_loki_label_browser_closed', {\n app,\n closeType: 'modalClose',\n });\n onClose();\n };\n\n return (\n <Modal isOpen={isOpen} title=\"Label browser\" onDismiss={reportInteractionAndClose} className={styles.modal}>\n {!labelsLoaded && <LoadingPlaceholder text=\"Loading labels...\" />}\n {labelsLoaded && !hasLogLabels && <p>No labels found.</p>}\n {labelsLoaded && hasLogLabels && (\n <LocalStorageValueProvider<string[]> storageKey={LAST_USED_LABELS_KEY} defaultValue={[]}>\n {(lastUsedLabels, onLastUsedLabelsSave, onLastUsedLabelsDelete) => {\n return (\n <LokiLabelBrowser\n languageProvider={datasource.languageProvider}\n onChange={onChange}\n lastUsedLabels={lastUsedLabels}\n storeLastUsedLabels={onLastUsedLabelsSave}\n deleteLastUsedLabels={onLastUsedLabelsDelete}\n app={app}\n timeRange={timeRange}\n />\n );\n }}\n </LocalStorageValueProvider>\n )}\n </Modal>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n modal: css({\n width: '85vw',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n }),\n };\n};\n","// 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 Object.defineProperties(obj, {\n set: { value: dontMutateFrozenCollections },\n add: { value: dontMutateFrozenCollections },\n clear: { value: dontMutateFrozenCollections },\n delete: { value: dontMutateFrozenCollections }\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((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\" && (isMap(targetObject) ? targetObject.has(prop) : 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 = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ 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","// src/index.ts\nexport * from \"redux\";\nimport { produce, current as current3, freeze, original as original2, isDraft as isDraft5 } from \"immer\";\nimport { createSelector, createSelectorCreator as createSelectorCreator2, lruMemoize, weakMapMemoize as weakMapMemoize2 } from \"reselect\";\n\n// src/createDraftSafeSelector.ts\nimport { current, isDraft } from \"immer\";\nimport { createSelectorCreator, weakMapMemoize } from \"reselect\";\nvar createDraftSafeSelectorCreator = (...args) => {\n const createSelector2 = createSelectorCreator(...args);\n const createDraftSafeSelector2 = Object.assign((...args2) => {\n const selector = createSelector2(...args2);\n const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);\n Object.assign(wrappedSelector, selector);\n return wrappedSelector;\n }, {\n withTypes: () => createDraftSafeSelector2\n });\n return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(weakMapMemoize);\n\n// src/configureStore.ts\nimport { applyMiddleware, createStore, compose as compose2, combineReducers, isPlainObject as isPlainObject2 } from \"redux\";\n\n// src/devtoolsExtension.ts\nimport { compose } from \"redux\";\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {\n if (arguments.length === 0) return void 0;\n if (typeof arguments[0] === \"object\") return compose;\n return compose.apply(null, arguments);\n};\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {\n return function(noop3) {\n return noop3;\n };\n};\n\n// src/getDefaultMiddleware.ts\nimport { thunk as thunkMiddleware, withExtraArgument } from \"redux-thunk\";\n\n// src/createAction.ts\nimport { isAction } from \"redux\";\n\n// src/tsHelpers.ts\nvar hasMatchFunction = (v) => {\n return v && typeof v.match === \"function\";\n};\n\n// src/createAction.ts\nfunction createAction(type, prepareAction) {\n function actionCreator(...args) {\n if (prepareAction) {\n let prepared = prepareAction(...args);\n if (!prepared) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"prepareAction did not return an object\");\n }\n return {\n type,\n payload: prepared.payload,\n ...\"meta\" in prepared && {\n meta: prepared.meta\n },\n ...\"error\" in prepared && {\n error: prepared.error\n }\n };\n }\n return {\n type,\n payload: args[0]\n };\n }\n actionCreator.toString = () => `${type}`;\n actionCreator.type = type;\n actionCreator.match = (action) => isAction(action) && action.type === type;\n return actionCreator;\n}\nfunction isActionCreator(action) {\n return typeof action === \"function\" && \"type\" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction(action);\n}\nfunction isFSA(action) {\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key) {\n return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type) {\n const splitType = type ? `${type}`.split(\"/\") : [];\n const actionName = splitType[splitType.length - 1] || \"actionCreator\";\n return `Detected an action creator with type \"${type || \"unknown\"}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nfunction createActionCreatorInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n }\n const {\n isActionCreator: isActionCreator2 = isActionCreator\n } = options;\n return () => (next) => (action) => {\n if (isActionCreator2(action)) {\n console.warn(getMessage(action.type));\n }\n return next(action);\n };\n}\n\n// src/utils.ts\nimport { produce as createNextState, isDraftable } from \"immer\";\nfunction getTimeMeasureUtils(maxDelay, fnName) {\n let elapsed = 0;\n return {\n measureTime(fn) {\n const started = Date.now();\n try {\n return fn();\n } finally {\n const finished = Date.now();\n elapsed += finished - started;\n }\n },\n warnIfExceeded() {\n if (elapsed > maxDelay) {\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n }\n }\n };\n}\nvar Tuple = class _Tuple extends Array {\n constructor(...items) {\n super(...items);\n Object.setPrototypeOf(this, _Tuple.prototype);\n }\n static get [Symbol.species]() {\n return _Tuple;\n }\n concat(...arr) {\n return super.concat.apply(this, arr);\n }\n prepend(...arr) {\n if (arr.length === 1 && Array.isArray(arr[0])) {\n return new _Tuple(...arr[0].concat(this));\n }\n return new _Tuple(...arr.concat(this));\n }\n};\nfunction freezeDraftable(val) {\n return isDraftable(val) ? createNextState(val, () => {\n }) : val;\n}\nfunction getOrInsertComputed(map, key, compute) {\n if (map.has(key)) return map.get(key);\n return map.set(key, compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value) {\n return typeof value !== \"object\" || value == null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\n const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n return {\n detectMutations() {\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n }\n };\n}\nfunction trackProperties(isImmutable, ignorePaths = [], obj, path = \"\", checkedObjects = /* @__PURE__ */ new Set()) {\n const tracked = {\n value: obj\n };\n if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n checkedObjects.add(obj);\n tracked.children = {};\n for (const key in obj) {\n const childPath = path ? path + \".\" + key : key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n continue;\n }\n tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n }\n }\n return tracked;\n}\nfunction detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = \"\") {\n const prevObj = trackedProperty ? trackedProperty.value : void 0;\n const sameRef = prevObj === obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n return {\n wasMutated: true,\n path\n };\n }\n if (isImmutable(prevObj) || isImmutable(obj)) {\n return {\n wasMutated: false\n };\n }\n const keysToDetect = {};\n for (let key in trackedProperty.children) {\n keysToDetect[key] = true;\n }\n for (let key in obj) {\n keysToDetect[key] = true;\n }\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (let key in keysToDetect) {\n const nestedPath = path ? path + \".\" + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n if (result.wasMutated) {\n return result;\n }\n }\n return {\n wasMutated: false\n };\n}\nfunction createImmutableStateInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n } else {\n let stringify2 = function(obj, serializer, indent, decycler) {\n return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);\n }, getSerialize2 = function(serializer, decycler) {\n let stack = [], keys = [];\n if (!decycler) decycler = function(_, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = decycler.call(this, key, value);\n } else stack.push(value);\n return serializer == null ? value : serializer.call(this, key, value);\n };\n };\n var stringify = stringify2, getSerialize = getSerialize2;\n let {\n isImmutable = isImmutableDefault,\n ignoredPaths,\n warnAfter = 32\n } = options;\n const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n return ({\n getState\n }) => {\n let state = getState();\n let tracker = track(state);\n let result;\n return (next) => (action) => {\n const measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || \"\"}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n const dispatchedAction = next(action);\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || \"\"}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n return dispatchedAction;\n };\n };\n }\n}\n\n// src/serializableStateInvariantMiddleware.ts\nimport { isAction as isAction2, isPlainObject } from \"redux\";\nfunction isPlain(val) {\n const type = typeof val;\n return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value, path = \"\", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {\n let foundNestedSerializable;\n if (!isSerializable(value)) {\n return {\n keyPath: path || \"<root>\",\n value\n };\n }\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (cache?.has(value)) return false;\n const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (const [key, nestedValue] of entries) {\n const nestedPath = path ? path + \".\" + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n if (!isSerializable(nestedValue)) {\n return {\n keyPath: nestedPath,\n value: nestedValue\n };\n }\n if (typeof nestedValue === \"object\") {\n foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n if (foundNestedSerializable) {\n return foundNestedSerializable;\n }\n }\n }\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nfunction isNestedFrozen(value) {\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)) {\n if (typeof nestedValue !== \"object\" || nestedValue === null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n }\n return true;\n}\nfunction createSerializableStateInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n } else {\n const {\n isSerializable = isPlain,\n getEntries,\n ignoredActions = [],\n ignoredActionPaths = [\"meta.arg\", \"meta.baseQueryMeta\"],\n ignoredPaths = [],\n warnAfter = 32,\n ignoreState = false,\n ignoreActions = false,\n disableCache = false\n } = options;\n const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;\n return (storeAPI) => (next) => (action) => {\n if (!isAction2(action)) {\n return next(action);\n }\n const result = next(action);\n const measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\n if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\n measureUtils.measureTime(() => {\n const foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\n if (foundActionNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundActionNonSerializableValue;\n console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\n }\n });\n }\n if (!ignoreState) {\n measureUtils.measureTime(() => {\n const state = storeAPI.getState();\n const foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\n if (foundStateNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundStateNonSerializableValue;\n console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n }\n return result;\n };\n }\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x) {\n return typeof x === \"boolean\";\n}\nvar buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {\n const {\n thunk = true,\n immutableCheck = true,\n serializableCheck = true,\n actionCreatorCheck = true\n } = options ?? {};\n let middlewareArray = new Tuple();\n if (thunk) {\n if (isBoolean(thunk)) {\n middlewareArray.push(thunkMiddleware);\n } else {\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (immutableCheck) {\n let immutableOptions = {};\n if (!isBoolean(immutableCheck)) {\n immutableOptions = immutableCheck;\n }\n middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n }\n if (serializableCheck) {\n let serializableOptions = {};\n if (!isBoolean(serializableCheck)) {\n serializableOptions = serializableCheck;\n }\n middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n }\n if (actionCreatorCheck) {\n let actionCreatorOptions = {};\n if (!isBoolean(actionCreatorCheck)) {\n actionCreatorOptions = actionCreatorCheck;\n }\n middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n }\n }\n return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\nvar prepareAutoBatched = () => (payload) => ({\n payload,\n meta: {\n [SHOULD_AUTOBATCH]: true\n }\n});\nvar createQueueWithTimer = (timeout) => {\n return (notify) => {\n setTimeout(notify, timeout);\n };\n};\nvar autoBatchEnhancer = (options = {\n type: \"raf\"\n}) => (next) => (...args) => {\n const store = next(...args);\n let notifying = true;\n let shouldNotifyAtEndOfTick = false;\n let notificationQueued = false;\n const listeners = /* @__PURE__ */ new Set();\n const queueCallback = options.type === \"tick\" ? queueMicrotask : options.type === \"raf\" ? (\n // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)\n ) : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\n const notifyListeners = () => {\n notificationQueued = false;\n if (shouldNotifyAtEndOfTick) {\n shouldNotifyAtEndOfTick = false;\n listeners.forEach((l) => l());\n }\n };\n return Object.assign({}, store, {\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener2) {\n const wrappedListener = () => notifying && listener2();\n const unsubscribe = store.subscribe(wrappedListener);\n listeners.add(listener2);\n return () => {\n unsubscribe();\n listeners.delete(listener2);\n };\n },\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action) {\n try {\n notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n shouldNotifyAtEndOfTick = !notifying;\n if (shouldNotifyAtEndOfTick) {\n if (!notificationQueued) {\n notificationQueued = true;\n queueCallback(notifyListeners);\n }\n }\n return store.dispatch(action);\n } finally {\n notifying = true;\n }\n }\n });\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {\n const {\n autoBatch = true\n } = options ?? {};\n let enhancerArray = new Tuple(middlewareEnhancer);\n if (autoBatch) {\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch === \"object\" ? autoBatch : void 0));\n }\n return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options) {\n const getDefaultMiddleware = buildGetDefaultMiddleware();\n const {\n reducer = void 0,\n middleware,\n devTools = true,\n duplicateMiddlewareCheck = true,\n preloadedState = void 0,\n enhancers = void 0\n } = options || {};\n let rootReducer;\n if (typeof reducer === \"function\") {\n rootReducer = reducer;\n } else if (isPlainObject2(reducer)) {\n rootReducer = combineReducers(reducer);\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers\");\n }\n if (process.env.NODE_ENV !== \"production\" && middleware && typeof middleware !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"`middleware` field must be a callback\");\n }\n let finalMiddleware;\n if (typeof middleware === \"function\") {\n finalMiddleware = middleware(getDefaultMiddleware);\n if (process.env.NODE_ENV !== \"production\" && !Array.isArray(finalMiddleware)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"when using a middleware builder function, an array of middleware must be returned\");\n }\n } else {\n finalMiddleware = getDefaultMiddleware();\n }\n if (process.env.NODE_ENV !== \"production\" && finalMiddleware.some((item) => typeof item !== \"function\")) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"each middleware provided to configureStore must be a function\");\n }\n if (process.env.NODE_ENV !== \"production\" && duplicateMiddlewareCheck) {\n let middlewareReferences = /* @__PURE__ */ new Set();\n finalMiddleware.forEach((middleware2) => {\n if (middlewareReferences.has(middleware2)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(42) : \"Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.\");\n }\n middlewareReferences.add(middleware2);\n });\n }\n let finalCompose = compose2;\n if (devTools) {\n finalCompose = composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace: process.env.NODE_ENV !== \"production\",\n ...typeof devTools === \"object\" && devTools\n });\n }\n const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);\n if (process.env.NODE_ENV !== \"production\" && enhancers && typeof enhancers !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"`enhancers` field must be a callback\");\n }\n let storeEnhancers = typeof enhancers === \"function\" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n if (process.env.NODE_ENV !== \"production\" && !Array.isArray(storeEnhancers)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"`enhancers` callback must return an array\");\n }\n if (process.env.NODE_ENV !== \"production\" && storeEnhancers.some((item) => typeof item !== \"function\")) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"each enhancer provided to configureStore must be a function\");\n }\n if (process.env.NODE_ENV !== \"production\" && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n console.error(\"middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`\");\n }\n const composedEnhancer = finalCompose(...storeEnhancers);\n return createStore(rootReducer, preloadedState, composedEnhancer);\n}\n\n// src/createReducer.ts\nimport { produce as createNextState2, isDraft as isDraft2, isDraftable as isDraftable2 } from \"immer\";\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback) {\n const actionsMap = {};\n const actionMatchers = [];\n let defaultCaseReducer;\n const builder = {\n addCase(typeOrActionCreator, reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (actionMatchers.length > 0) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(26) : \"`builder.addCase` should only be called before calling `builder.addMatcher`\");\n }\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(27) : \"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\n }\n }\n const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(28) : \"`builder.addCase` cannot be called with an empty action type\");\n }\n if (type in actionsMap) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(29) : `\\`builder.addCase\\` cannot be called with two reducers for the same action type '${type}'`);\n }\n actionsMap[type] = reducer;\n return builder;\n },\n addAsyncThunk(asyncThunk, reducers) {\n if (process.env.NODE_ENV !== \"production\") {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(43) : \"`builder.addAsyncThunk` should only be called before calling `builder.addDefaultCase`\");\n }\n }\n if (reducers.pending) actionsMap[asyncThunk.pending.type] = reducers.pending;\n if (reducers.rejected) actionsMap[asyncThunk.rejected.type] = reducers.rejected;\n if (reducers.fulfilled) actionsMap[asyncThunk.fulfilled.type] = reducers.fulfilled;\n if (reducers.settled) actionMatchers.push({\n matcher: asyncThunk.settled,\n reducer: reducers.settled\n });\n return builder;\n },\n addMatcher(matcher, reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(30) : \"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\n }\n }\n actionMatchers.push({\n matcher,\n reducer\n });\n return builder;\n },\n addDefaultCase(reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(31) : \"`builder.addDefaultCase` can only be called once\");\n }\n }\n defaultCaseReducer = reducer;\n return builder;\n }\n };\n builderCallback(builder);\n return [actionsMap, actionMatchers, defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x) {\n return typeof x === \"function\";\n}\nfunction createReducer(initialState, mapOrBuilderCallback) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof mapOrBuilderCallback === \"object\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n }\n }\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n let getInitialState;\n if (isStateFunction(initialState)) {\n getInitialState = () => freezeDraftable(initialState());\n } else {\n const frozenInitialState = freezeDraftable(initialState);\n getInitialState = () => frozenInitialState;\n }\n function reducer(state = getInitialState(), action) {\n let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n matcher\n }) => matcher(action)).map(({\n reducer: reducer2\n }) => reducer2)];\n if (caseReducers.filter((cr) => !!cr).length === 0) {\n caseReducers = [finalDefaultCaseReducer];\n }\n return caseReducers.reduce((previousState, caseReducer) => {\n if (caseReducer) {\n if (isDraft2(previousState)) {\n const draft = previousState;\n const result = caseReducer(draft, action);\n if (result === void 0) {\n return previousState;\n }\n return result;\n } else if (!isDraftable2(previousState)) {\n const result = caseReducer(previousState, action);\n if (result === void 0) {\n if (previousState === null) {\n return previousState;\n }\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n }\n return result;\n } else {\n return createNextState2(previousState, (draft) => {\n return caseReducer(draft, action);\n });\n }\n }\n return previousState;\n }, state);\n }\n reducer.getInitialState = getInitialState;\n return reducer;\n}\n\n// src/matchers.ts\nvar matches = (matcher, action) => {\n if (hasMatchFunction(matcher)) {\n return matcher.match(action);\n } else {\n return matcher(action);\n }\n};\nfunction isAnyOf(...matchers) {\n return (action) => {\n return matchers.some((matcher) => matches(matcher, action));\n };\n}\nfunction isAllOf(...matchers) {\n return (action) => {\n return matchers.every((matcher) => matches(matcher, action));\n };\n}\nfunction hasExpectedRequestMetadata(action, validStatus) {\n if (!action || !action.meta) return false;\n const hasValidRequestId = typeof action.meta.requestId === \"string\";\n const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a) {\n return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\n}\nfunction isPending(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"pending\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isPending()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"rejected\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejected()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks) {\n const hasFlag = (action) => {\n return action && action.meta && action.meta.rejectedWithValue;\n };\n if (asyncThunks.length === 0) {\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejectedWithValue()(asyncThunks[0]);\n }\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nfunction isFulfilled(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"fulfilled\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isFulfilled()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isAsyncThunkAction()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\nvar nanoid = (size = 21) => {\n let id = \"\";\n let i = size;\n while (i--) {\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties = [\"name\", \"message\", \"stack\", \"code\"];\nvar RejectWithValue = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar FulfillWithMeta = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar miniSerializeError = (value) => {\n if (typeof value === \"object\" && value !== null) {\n const simpleError = {};\n for (const property of commonProperties) {\n if (typeof value[property] === \"string\") {\n simpleError[property] = value[property];\n }\n }\n return simpleError;\n }\n return {\n message: String(value)\n };\n};\nvar externalAbortMessage = \"External signal was aborted\";\nvar createAsyncThunk = /* @__PURE__ */ (() => {\n function createAsyncThunk2(typePrefix, payloadCreator, options) {\n const fulfilled = createAction(typePrefix + \"/fulfilled\", (payload, requestId, arg, meta) => ({\n payload,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: \"fulfilled\"\n }\n }));\n const pending = createAction(typePrefix + \"/pending\", (requestId, arg, meta) => ({\n payload: void 0,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: \"pending\"\n }\n }));\n const rejected = createAction(typePrefix + \"/rejected\", (error, requestId, arg, payload, meta) => ({\n payload,\n error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\n meta: {\n ...meta || {},\n arg,\n requestId,\n rejectedWithValue: !!payload,\n requestStatus: \"rejected\",\n aborted: error?.name === \"AbortError\",\n condition: error?.name === \"ConditionError\"\n }\n }));\n function actionCreator(arg, {\n signal\n } = {}) {\n return (dispatch, getState, extra) => {\n const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n const abortController = new AbortController();\n let abortHandler;\n let abortReason;\n function abort(reason) {\n abortReason = reason;\n abortController.abort();\n }\n if (signal) {\n if (signal.aborted) {\n abort(externalAbortMessage);\n } else {\n signal.addEventListener(\"abort\", () => abort(externalAbortMessage), {\n once: true\n });\n }\n }\n const promise = async function() {\n let finalAction;\n try {\n let conditionResult = options?.condition?.(arg, {\n getState,\n extra\n });\n if (isThenable(conditionResult)) {\n conditionResult = await conditionResult;\n }\n if (conditionResult === false || abortController.signal.aborted) {\n throw {\n name: \"ConditionError\",\n message: \"Aborted due to condition callback returning false.\"\n };\n }\n const abortedPromise = new Promise((_, reject) => {\n abortHandler = () => {\n reject({\n name: \"AbortError\",\n message: abortReason || \"Aborted\"\n });\n };\n abortController.signal.addEventListener(\"abort\", abortHandler);\n });\n dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n requestId,\n arg\n }, {\n getState,\n extra\n })));\n finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n dispatch,\n getState,\n extra,\n requestId,\n signal: abortController.signal,\n abort,\n rejectWithValue: (value, meta) => {\n return new RejectWithValue(value, meta);\n },\n fulfillWithValue: (value, meta) => {\n return new FulfillWithMeta(value, meta);\n }\n })).then((result) => {\n if (result instanceof RejectWithValue) {\n throw result;\n }\n if (result instanceof FulfillWithMeta) {\n return fulfilled(result.payload, requestId, arg, result.meta);\n }\n return fulfilled(result, requestId, arg);\n })]);\n } catch (err) {\n finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);\n } finally {\n if (abortHandler) {\n abortController.signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n if (!skipDispatch) {\n dispatch(finalAction);\n }\n return finalAction;\n }();\n return Object.assign(promise, {\n abort,\n requestId,\n arg,\n unwrap() {\n return promise.then(unwrapResult);\n }\n });\n };\n }\n return Object.assign(actionCreator, {\n pending,\n rejected,\n fulfilled,\n settled: isAnyOf(rejected, fulfilled),\n typePrefix\n });\n }\n createAsyncThunk2.withTypes = () => createAsyncThunk2;\n return createAsyncThunk2;\n})();\nfunction unwrapResult(action) {\n if (action.meta && action.meta.rejectedWithValue) {\n throw action.payload;\n }\n if (action.error) {\n throw action.error;\n }\n return action.payload;\n}\nfunction isThenable(value) {\n return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol = /* @__PURE__ */ Symbol.for(\"rtk-slice-createasyncthunk\");\nvar asyncThunkCreator = {\n [asyncThunkSymbol]: createAsyncThunk\n};\nvar ReducerType = /* @__PURE__ */ ((ReducerType2) => {\n ReducerType2[\"reducer\"] = \"reducer\";\n ReducerType2[\"reducerWithPrepare\"] = \"reducerWithPrepare\";\n ReducerType2[\"asyncThunk\"] = \"asyncThunk\";\n return ReducerType2;\n})(ReducerType || {});\nfunction getType(slice, actionKey) {\n return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n creators\n} = {}) {\n const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice2(options) {\n const {\n name,\n reducerPath = name\n } = options;\n if (!name) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"`name` is a required option for createSlice\");\n }\n if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n if (options.initialState === void 0) {\n console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\n }\n }\n const reducers = (typeof options.reducers === \"function\" ? options.reducers(buildReducerCreators()) : options.reducers) || {};\n const reducerNames = Object.keys(reducers);\n const context = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n };\n const contextMethods = {\n addCase(typeOrActionCreator, reducer2) {\n const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"`context.addCase` cannot be called with an empty action type\");\n }\n if (type in context.sliceCaseReducersByType) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"`context.addCase` cannot be called with two reducers for the same action type: \" + type);\n }\n context.sliceCaseReducersByType[type] = reducer2;\n return contextMethods;\n },\n addMatcher(matcher, reducer2) {\n context.sliceMatchers.push({\n matcher,\n reducer: reducer2\n });\n return contextMethods;\n },\n exposeAction(name2, actionCreator) {\n context.actionCreators[name2] = actionCreator;\n return contextMethods;\n },\n exposeCaseReducer(name2, reducer2) {\n context.sliceCaseReducersByName[name2] = reducer2;\n return contextMethods;\n }\n };\n reducerNames.forEach((reducerName) => {\n const reducerDefinition = reducers[reducerName];\n const reducerDetails = {\n reducerName,\n type: getType(name, reducerName),\n createNotation: typeof options.reducers === \"function\"\n };\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {\n handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n } else {\n handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);\n }\n });\n function buildReducer() {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options.extraReducers === \"object\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n }\n }\n const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n const finalCaseReducers = {\n ...extraReducers,\n ...context.sliceCaseReducersByType\n };\n return createReducer(options.initialState, (builder) => {\n for (let key in finalCaseReducers) {\n builder.addCase(key, finalCaseReducers[key]);\n }\n for (let sM of context.sliceMatchers) {\n builder.addMatcher(sM.matcher, sM.reducer);\n }\n for (let m of actionMatchers) {\n builder.addMatcher(m.matcher, m.reducer);\n }\n if (defaultCaseReducer) {\n builder.addDefaultCase(defaultCaseReducer);\n }\n });\n }\n const selectSelf = (state) => state;\n const injectedSelectorCache = /* @__PURE__ */ new Map();\n const injectedStateCache = /* @__PURE__ */ new WeakMap();\n let _reducer;\n function reducer(state, action) {\n if (!_reducer) _reducer = buildReducer();\n return _reducer(state, action);\n }\n function getInitialState() {\n if (!_reducer) _reducer = buildReducer();\n return _reducer.getInitialState();\n }\n function makeSelectorProps(reducerPath2, injected = false) {\n function selectSlice(state) {\n let sliceState = state[reducerPath2];\n if (typeof sliceState === \"undefined\") {\n if (injected) {\n sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n } else if (process.env.NODE_ENV !== \"production\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"selectSlice returned undefined for an uninjected slice reducer\");\n }\n }\n return sliceState;\n }\n function getSelectors(selectState = selectSelf) {\n const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());\n return getOrInsertComputed(selectorCache, selectState, () => {\n const map = {};\n for (const [name2, selector] of Object.entries(options.selectors ?? {})) {\n map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n }\n return map;\n });\n }\n return {\n reducerPath: reducerPath2,\n getSelectors,\n get selectors() {\n return getSelectors(selectSlice);\n },\n selectSlice\n };\n }\n const slice = {\n name,\n reducer,\n actions: context.actionCreators,\n caseReducers: context.sliceCaseReducersByName,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable, {\n reducerPath: pathOpt,\n ...config\n } = {}) {\n const newReducerPath = pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath: newReducerPath,\n reducer\n }, config);\n return {\n ...slice,\n ...makeSelectorProps(newReducerPath, true)\n };\n }\n };\n return slice;\n };\n}\nfunction wrapSelector(selector, selectState, getInitialState, injected) {\n function wrapper(rootState, ...args) {\n let sliceState = selectState(rootState);\n if (typeof sliceState === \"undefined\") {\n if (injected) {\n sliceState = getInitialState();\n } else if (process.env.NODE_ENV !== \"production\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"selectState returned undefined for an uninjected slice reducer\");\n }\n }\n return selector(sliceState, ...args);\n }\n wrapper.unwrapped = selector;\n return wrapper;\n}\nvar createSlice = /* @__PURE__ */ buildCreateSlice();\nfunction buildReducerCreators() {\n function asyncThunk(payloadCreator, config) {\n return {\n _reducerDefinitionType: \"asyncThunk\" /* asyncThunk */,\n payloadCreator,\n ...config\n };\n }\n asyncThunk.withTypes = () => asyncThunk;\n return {\n reducer(caseReducer) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args) {\n return caseReducer(...args);\n }\n }[caseReducer.name], {\n _reducerDefinitionType: \"reducer\" /* reducer */\n });\n },\n preparedReducer(prepare, reducer) {\n return {\n _reducerDefinitionType: \"reducerWithPrepare\" /* reducerWithPrepare */,\n prepare,\n reducer\n };\n },\n asyncThunk\n };\n}\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n}, maybeReducerWithPrepare, context) {\n let caseReducer;\n let prepareCallback;\n if (\"reducer\" in maybeReducerWithPrepare) {\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : \"Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.\");\n }\n caseReducer = maybeReducerWithPrepare.reducer;\n prepareCallback = maybeReducerWithPrepare.prepare;\n } else {\n caseReducer = maybeReducerWithPrepare;\n }\n context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === \"asyncThunk\" /* asyncThunk */;\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === \"reducerWithPrepare\" /* reducerWithPrepare */;\n}\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n}, reducerDefinition, context, cAT) {\n if (!cAT) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(18) : \"Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.\");\n }\n const {\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n } = reducerDefinition;\n const thunk = cAT(type, payloadCreator, options);\n context.exposeAction(reducerName, thunk);\n if (fulfilled) {\n context.addCase(thunk.fulfilled, fulfilled);\n }\n if (pending) {\n context.addCase(thunk.pending, pending);\n }\n if (rejected) {\n context.addCase(thunk.rejected, rejected);\n }\n if (settled) {\n context.addMatcher(thunk.settled, settled);\n }\n context.exposeCaseReducer(reducerName, {\n fulfilled: fulfilled || noop,\n pending: pending || noop,\n rejected: rejected || noop,\n settled: settled || noop\n });\n}\nfunction noop() {\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState() {\n return {\n ids: [],\n entities: {}\n };\n}\nfunction createInitialStateFactory(stateAdapter) {\n function getInitialState(additionalState = {}, entities) {\n const state = Object.assign(getInitialEntityState(), additionalState);\n return entities ? stateAdapter.setAll(state, entities) : state;\n }\n return {\n getInitialState\n };\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory() {\n function getSelectors(selectState, options = {}) {\n const {\n createSelector: createSelector2 = createDraftSafeSelector\n } = options;\n const selectIds = (state) => state.ids;\n const selectEntities = (state) => state.entities;\n const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));\n const selectId = (_, id) => id;\n const selectById = (entities, id) => entities[id];\n const selectTotal = createSelector2(selectIds, (ids) => ids.length);\n if (!selectState) {\n return {\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById: createSelector2(selectEntities, selectId, selectById)\n };\n }\n const selectGlobalizedEntities = createSelector2(selectState, selectEntities);\n return {\n selectIds: createSelector2(selectState, selectIds),\n selectEntities: selectGlobalizedEntities,\n selectAll: createSelector2(selectState, selectAll),\n selectTotal: createSelector2(selectState, selectTotal),\n selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)\n };\n }\n return {\n getSelectors\n };\n}\n\n// src/entities/state_adapter.ts\nimport { produce as createNextState3, isDraft as isDraft3 } from \"immer\";\nvar isDraftTyped = isDraft3;\nfunction createSingleArgumentStateOperator(mutator) {\n const operator = createStateOperator((_, state) => mutator(state));\n return function operation(state) {\n return operator(state, void 0);\n };\n}\nfunction createStateOperator(mutator) {\n return function operation(state, arg) {\n function isPayloadActionArgument(arg2) {\n return isFSA(arg2);\n }\n const runMutator = (draft) => {\n if (isPayloadActionArgument(arg)) {\n mutator(arg.payload, draft);\n } else {\n mutator(arg, draft);\n }\n };\n if (isDraftTyped(state)) {\n runMutator(state);\n return state;\n }\n return createNextState3(state, runMutator);\n };\n}\n\n// src/entities/utils.ts\nimport { current as current2, isDraft as isDraft4 } from \"immer\";\nfunction selectIdValue(entity, selectId) {\n const key = selectId(entity);\n if (process.env.NODE_ENV !== \"production\" && key === void 0) {\n console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\n }\n return key;\n}\nfunction ensureEntitiesArray(entities) {\n if (!Array.isArray(entities)) {\n entities = Object.values(entities);\n }\n return entities;\n}\nfunction getCurrent(value) {\n return isDraft4(value) ? current2(value) : value;\n}\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingIdsArray = getCurrent(state.ids);\n const existingIds = new Set(existingIdsArray);\n const added = [];\n const addedIds = /* @__PURE__ */ new Set([]);\n const updated = [];\n for (const entity of newEntities) {\n const id = selectIdValue(entity, selectId);\n if (existingIds.has(id) || addedIds.has(id)) {\n updated.push({\n id,\n changes: entity\n });\n } else {\n addedIds.add(id);\n added.push(entity);\n }\n }\n return [added, updated, existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId) {\n function addOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (key in state.entities) {\n return;\n }\n state.ids.push(key);\n state.entities[key] = entity;\n }\n function addManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n addOneMutably(entity, state);\n }\n }\n function setOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (!(key in state.entities)) {\n state.ids.push(key);\n }\n ;\n state.entities[key] = entity;\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n setOneMutably(entity, state);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.ids = [];\n state.entities = {};\n addManyMutably(newEntities, state);\n }\n function removeOneMutably(key, state) {\n return removeManyMutably([key], state);\n }\n function removeManyMutably(keys, state) {\n let didMutate = false;\n keys.forEach((key) => {\n if (key in state.entities) {\n delete state.entities[key];\n didMutate = true;\n }\n });\n if (didMutate) {\n state.ids = state.ids.filter((id) => id in state.entities);\n }\n }\n function removeAllMutably(state) {\n Object.assign(state, {\n ids: [],\n entities: {}\n });\n }\n function takeNewKey(keys, update, state) {\n const original3 = state.entities[update.id];\n if (original3 === void 0) {\n return false;\n }\n const updated = Object.assign({}, original3, update.changes);\n const newKey = selectIdValue(updated, selectId);\n const hasNewKey = newKey !== update.id;\n if (hasNewKey) {\n keys[update.id] = newKey;\n delete state.entities[update.id];\n }\n ;\n state.entities[newKey] = updated;\n return hasNewKey;\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n const newKeys = {};\n const updatesPerEntity = {};\n updates.forEach((update) => {\n if (update.id in state.entities) {\n updatesPerEntity[update.id] = {\n id: update.id,\n // Spreads ignore falsy values, so this works even if there isn't\n // an existing update already at this key\n changes: {\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n }\n };\n }\n });\n updates = Object.values(updatesPerEntity);\n const didMutateEntities = updates.length > 0;\n if (didMutateEntities) {\n const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;\n if (didMutateIds) {\n state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));\n }\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);\n addManyMutably(added, state);\n updateManyMutably(updated, state);\n }\n return {\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\n addOne: createStateOperator(addOneMutably),\n addMany: createStateOperator(addManyMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n updateOne: createStateOperator(updateOneMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n upsertMany: createStateOperator(upsertManyMutably),\n removeOne: createStateOperator(removeOneMutably),\n removeMany: createStateOperator(removeManyMutably)\n };\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems, item, comparisonFunction) {\n let lowIndex = 0;\n let highIndex = sortedItems.length;\n while (lowIndex < highIndex) {\n let middleIndex = lowIndex + highIndex >>> 1;\n const currentItem = sortedItems[middleIndex];\n const res = comparisonFunction(item, currentItem);\n if (res >= 0) {\n lowIndex = middleIndex + 1;\n } else {\n highIndex = middleIndex;\n }\n }\n return lowIndex;\n}\nfunction insert(sortedItems, item, comparisonFunction) {\n const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n sortedItems.splice(insertAtIndex, 0, item);\n return sortedItems;\n}\nfunction createSortedStateAdapter(selectId, comparer) {\n const {\n removeOne,\n removeMany,\n removeAll\n } = createUnsortedStateAdapter(selectId);\n function addOneMutably(entity, state) {\n return addManyMutably([entity], state);\n }\n function addManyMutably(newEntities, state, existingIds) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingKeys = new Set(existingIds ?? getCurrent(state.ids));\n const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));\n if (models.length !== 0) {\n mergeFunction(state, models);\n }\n }\n function setOneMutably(entity, state) {\n return setManyMutably([entity], state);\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n if (newEntities.length !== 0) {\n for (const item of newEntities) {\n delete state.entities[selectId(item)];\n }\n mergeFunction(state, newEntities);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.entities = {};\n state.ids = [];\n addManyMutably(newEntities, state, []);\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n let appliedUpdates = false;\n let replacedIds = false;\n for (let update of updates) {\n const entity = state.entities[update.id];\n if (!entity) {\n continue;\n }\n appliedUpdates = true;\n Object.assign(entity, update.changes);\n const newId = selectId(entity);\n if (update.id !== newId) {\n replacedIds = true;\n delete state.entities[update.id];\n const oldIndex = state.ids.indexOf(update.id);\n state.ids[oldIndex] = newId;\n state.entities[newId] = entity;\n }\n }\n if (appliedUpdates) {\n mergeFunction(state, [], appliedUpdates, replacedIds);\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);\n if (added.length) {\n addManyMutably(added, state, existingIdsArray);\n }\n if (updated.length) {\n updateManyMutably(updated, state);\n }\n }\n function areArraysEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] === b[i]) {\n continue;\n }\n return false;\n }\n return true;\n }\n const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n const currentEntities = getCurrent(state.entities);\n const currentIds = getCurrent(state.ids);\n const stateEntities = state.entities;\n let ids = currentIds;\n if (replacedIds) {\n ids = new Set(currentIds);\n }\n let sortedEntities = [];\n for (const id of ids) {\n const entity = currentEntities[id];\n if (entity) {\n sortedEntities.push(entity);\n }\n }\n const wasPreviouslyEmpty = sortedEntities.length === 0;\n for (const item of addedItems) {\n stateEntities[selectId(item)] = item;\n if (!wasPreviouslyEmpty) {\n insert(sortedEntities, item, comparer);\n }\n }\n if (wasPreviouslyEmpty) {\n sortedEntities = addedItems.slice().sort(comparer);\n } else if (appliedUpdates) {\n sortedEntities.sort(comparer);\n }\n const newSortedIds = sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds, newSortedIds)) {\n state.ids = newSortedIds;\n }\n };\n return {\n removeOne,\n removeMany,\n removeAll,\n addOne: createStateOperator(addOneMutably),\n updateOne: createStateOperator(updateOneMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n addMany: createStateOperator(addManyMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertMany: createStateOperator(upsertManyMutably)\n };\n}\n\n// src/entities/create_adapter.ts\nfunction createEntityAdapter(options = {}) {\n const {\n selectId,\n sortComparer\n } = {\n sortComparer: false,\n selectId: (instance) => instance.id,\n ...options\n };\n const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n const stateFactory = createInitialStateFactory(stateAdapter);\n const selectorsFactory = createSelectorsFactory();\n return {\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n };\n}\n\n// src/listenerMiddleware/index.ts\nimport { isAction as isAction3 } from \"redux\";\n\n// src/listenerMiddleware/exceptions.ts\nvar task = \"task\";\nvar listener = \"listener\";\nvar completed = \"completed\";\nvar cancelled = \"cancelled\";\nvar taskCancelled = `task-${cancelled}`;\nvar taskCompleted = `task-${completed}`;\nvar listenerCancelled = `${listener}-${cancelled}`;\nvar listenerCompleted = `${listener}-${completed}`;\nvar TaskAbortError = class {\n constructor(code) {\n this.code = code;\n this.message = `${task} ${cancelled} (reason: ${code})`;\n }\n name = \"TaskAbortError\";\n message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction = (func, expected) => {\n if (typeof func !== \"function\") {\n throw new TypeError(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(32) : `${expected} is not a function`);\n }\n};\nvar noop2 = () => {\n};\nvar catchRejection = (promise, onError = noop2) => {\n promise.catch(onError);\n return promise;\n};\nvar addAbortSignalListener = (abortSignal, callback) => {\n abortSignal.addEventListener(\"abort\", callback, {\n once: true\n });\n return () => abortSignal.removeEventListener(\"abort\", callback);\n};\nvar abortControllerWithReason = (abortController, reason) => {\n const signal = abortController.signal;\n if (signal.aborted) {\n return;\n }\n if (!(\"reason\" in signal)) {\n Object.defineProperty(signal, \"reason\", {\n enumerable: true,\n value: reason,\n configurable: true,\n writable: true\n });\n }\n ;\n abortController.abort(reason);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive = (signal) => {\n if (signal.aborted) {\n const {\n reason\n } = signal;\n throw new TaskAbortError(reason);\n }\n};\nfunction raceWithSignal(signal, promise) {\n let cleanup = noop2;\n return new Promise((resolve, reject) => {\n const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n if (signal.aborted) {\n notifyRejection();\n return;\n }\n cleanup = addAbortSignalListener(signal, notifyRejection);\n promise.finally(() => cleanup()).then(resolve, reject);\n }).finally(() => {\n cleanup = noop2;\n });\n}\nvar runTask = async (task2, cleanUp) => {\n try {\n await Promise.resolve();\n const value = await task2();\n return {\n status: \"ok\",\n value\n };\n } catch (error) {\n return {\n status: error instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\n error\n };\n } finally {\n cleanUp?.();\n }\n};\nvar createPause = (signal) => {\n return (promise) => {\n return catchRejection(raceWithSignal(signal, promise).then((output) => {\n validateActive(signal);\n return output;\n }));\n };\n};\nvar createDelay = (signal) => {\n const pause = createPause(signal);\n return (timeoutMs) => {\n return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));\n };\n};\n\n// src/listenerMiddleware/index.ts\nvar {\n assign\n} = Object;\nvar INTERNAL_NIL_TOKEN = {};\nvar alm = \"listenerMiddleware\";\nvar createFork = (parentAbortSignal, parentBlockingPromises) => {\n const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n return (taskExecutor, opts) => {\n assertFunction(taskExecutor, \"taskExecutor\");\n const childAbortController = new AbortController();\n linkControllers(childAbortController);\n const result = runTask(async () => {\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result2 = await taskExecutor({\n pause: createPause(childAbortController.signal),\n delay: createDelay(childAbortController.signal),\n signal: childAbortController.signal\n });\n validateActive(childAbortController.signal);\n return result2;\n }, () => abortControllerWithReason(childAbortController, taskCompleted));\n if (opts?.autoJoin) {\n parentBlockingPromises.push(result.catch(noop2));\n }\n return {\n result: createPause(parentAbortSignal)(result),\n cancel() {\n abortControllerWithReason(childAbortController, taskCancelled);\n }\n };\n };\n};\nvar createTakePattern = (startListening, signal) => {\n const take = async (predicate, timeout) => {\n validateActive(signal);\n let unsubscribe = () => {\n };\n const tuplePromise = new Promise((resolve, reject) => {\n let stopListening = startListening({\n predicate,\n effect: (action, listenerApi) => {\n listenerApi.unsubscribe();\n resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n }\n });\n unsubscribe = () => {\n stopListening();\n reject();\n };\n });\n const promises = [tuplePromise];\n if (timeout != null) {\n promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));\n }\n try {\n const output = await raceWithSignal(signal, Promise.race(promises));\n validateActive(signal);\n return output;\n } finally {\n unsubscribe();\n }\n };\n return (predicate, timeout) => catchRejection(take(predicate, timeout));\n};\nvar getListenerEntryPropsFrom = (options) => {\n let {\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n } = options;\n if (type) {\n predicate = createAction(type).match;\n } else if (actionCreator) {\n type = actionCreator.type;\n predicate = actionCreator.match;\n } else if (matcher) {\n predicate = matcher;\n } else if (predicate) {\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(21) : \"Creating or removing a listener requires one of the known fields for matching an action\");\n }\n assertFunction(effect, \"options.listener\");\n return {\n predicate,\n type,\n effect\n };\n};\nvar createListenerEntry = /* @__PURE__ */ assign((options) => {\n const {\n type,\n predicate,\n effect\n } = getListenerEntryPropsFrom(options);\n const entry = {\n id: nanoid(),\n effect,\n type,\n predicate,\n pending: /* @__PURE__ */ new Set(),\n unsubscribe: () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(22) : \"Unsubscribe not initialized\");\n }\n };\n return entry;\n}, {\n withTypes: () => createListenerEntry\n});\nvar findListenerEntry = (listenerMap, options) => {\n const {\n type,\n effect,\n predicate\n } = getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find((entry) => {\n const matchPredicateOrType = typeof type === \"string\" ? entry.type === type : entry.predicate === predicate;\n return matchPredicateOrType && entry.effect === effect;\n });\n};\nvar cancelActiveListeners = (entry) => {\n entry.pending.forEach((controller) => {\n abortControllerWithReason(controller, listenerCancelled);\n });\n};\nvar createClearListenerMiddleware = (listenerMap) => {\n return () => {\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n };\n};\nvar safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {\n try {\n errorHandler(errorToNotify, errorInfo);\n } catch (errorHandlerError) {\n setTimeout(() => {\n throw errorHandlerError;\n }, 0);\n }\n};\nvar addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {\n withTypes: () => addListener\n});\nvar clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);\nvar removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {\n withTypes: () => removeListener\n});\nvar defaultErrorHandler = (...args) => {\n console.error(`${alm}/error`, ...args);\n};\nvar createListenerMiddleware = (middlewareOptions = {}) => {\n const listenerMap = /* @__PURE__ */ new Map();\n const {\n extra,\n onError = defaultErrorHandler\n } = middlewareOptions;\n assertFunction(onError, \"onError\");\n const insertEntry = (entry) => {\n entry.unsubscribe = () => listenerMap.delete(entry.id);\n listenerMap.set(entry.id, entry);\n return (cancelOptions) => {\n entry.unsubscribe();\n if (cancelOptions?.cancelActive) {\n cancelActiveListeners(entry);\n }\n };\n };\n const startListening = (options) => {\n const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);\n return insertEntry(entry);\n };\n assign(startListening, {\n withTypes: () => startListening\n });\n const stopListening = (options) => {\n const entry = findListenerEntry(listenerMap, options);\n if (entry) {\n entry.unsubscribe();\n if (options.cancelActive) {\n cancelActiveListeners(entry);\n }\n }\n return !!entry;\n };\n assign(stopListening, {\n withTypes: () => stopListening\n });\n const notifyListener = async (entry, action, api, getOriginalState) => {\n const internalTaskController = new AbortController();\n const take = createTakePattern(startListening, internalTaskController.signal);\n const autoJoinPromises = [];\n try {\n entry.pending.add(internalTaskController);\n await Promise.resolve(entry.effect(\n action,\n // Use assign() rather than ... to avoid extra helper functions added to bundle\n assign({}, api, {\n getOriginalState,\n condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),\n take,\n delay: createDelay(internalTaskController.signal),\n pause: createPause(internalTaskController.signal),\n extra,\n signal: internalTaskController.signal,\n fork: createFork(internalTaskController.signal, autoJoinPromises),\n unsubscribe: entry.unsubscribe,\n subscribe: () => {\n listenerMap.set(entry.id, entry);\n },\n cancelActiveListeners: () => {\n entry.pending.forEach((controller, _, set) => {\n if (controller !== internalTaskController) {\n abortControllerWithReason(controller, listenerCancelled);\n set.delete(controller);\n }\n });\n },\n cancel: () => {\n abortControllerWithReason(internalTaskController, listenerCancelled);\n entry.pending.delete(internalTaskController);\n },\n throwIfCancelled: () => {\n validateActive(internalTaskController.signal);\n }\n })\n ));\n } catch (listenerError) {\n if (!(listenerError instanceof TaskAbortError)) {\n safelyNotifyError(onError, listenerError, {\n raisedBy: \"effect\"\n });\n }\n } finally {\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController, listenerCompleted);\n entry.pending.delete(internalTaskController);\n }\n };\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n const middleware = (api) => (next) => (action) => {\n if (!isAction3(action)) {\n return next(action);\n }\n if (addListener.match(action)) {\n return startListening(action.payload);\n }\n if (clearAllListeners.match(action)) {\n clearListenerMiddleware();\n return;\n }\n if (removeListener.match(action)) {\n return stopListening(action.payload);\n }\n let originalState = api.getState();\n const getOriginalState = () => {\n if (originalState === INTERNAL_NIL_TOKEN) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(23) : `${alm}: getOriginalState can only be called synchronously`);\n }\n return originalState;\n };\n let result;\n try {\n result = next(action);\n if (listenerMap.size > 0) {\n const currentState = api.getState();\n const listenerEntries = Array.from(listenerMap.values());\n for (const entry of listenerEntries) {\n let runListener = false;\n try {\n runListener = entry.predicate(action, currentState, originalState);\n } catch (predicateError) {\n runListener = false;\n safelyNotifyError(onError, predicateError, {\n raisedBy: \"predicate\"\n });\n }\n if (!runListener) {\n continue;\n }\n notifyListener(entry, action, api, getOriginalState);\n }\n }\n } finally {\n originalState = INTERNAL_NIL_TOKEN;\n }\n return result;\n };\n return {\n middleware,\n startListening,\n stopListening,\n clearListeners: clearListenerMiddleware\n };\n};\n\n// src/dynamicMiddleware/index.ts\nimport { compose as compose3 } from \"redux\";\nvar createMiddlewareEntry = (middleware) => ({\n middleware,\n applied: /* @__PURE__ */ new Map()\n});\nvar matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;\nvar createDynamicMiddleware = () => {\n const instanceId = nanoid();\n const middlewareMap = /* @__PURE__ */ new Map();\n const withMiddleware = Object.assign(createAction(\"dynamicMiddleware/add\", (...middlewares) => ({\n payload: middlewares,\n meta: {\n instanceId\n }\n })), {\n withTypes: () => withMiddleware\n });\n const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {\n middlewares.forEach((middleware2) => {\n getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);\n });\n }, {\n withTypes: () => addMiddleware\n });\n const getFinalMiddleware = (api) => {\n const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));\n return compose3(...appliedMiddleware);\n };\n const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n const middleware = (api) => (next) => (action) => {\n if (isWithMiddleware(action)) {\n addMiddleware(...action.payload);\n return api.dispatch;\n }\n return getFinalMiddleware(api)(next)(action);\n };\n return {\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n };\n};\n\n// src/combineSlices.ts\nimport { combineReducers as combineReducers2 } from \"redux\";\nvar isSliceLike = (maybeSliceLike) => \"reducerPath\" in maybeSliceLike && typeof maybeSliceLike.reducerPath === \"string\";\nvar getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));\nvar ORIGINAL_STATE = Symbol.for(\"rtk-state-proxy-original\");\nvar isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap = /* @__PURE__ */ new WeakMap();\nvar createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n get: (target, prop, receiver) => {\n if (prop === ORIGINAL_STATE) return target;\n const result = Reflect.get(target, prop, receiver);\n if (typeof result === \"undefined\") {\n const cached = initialStateCache[prop];\n if (typeof cached !== \"undefined\") return cached;\n const reducer = reducerMap[prop];\n if (reducer) {\n const reducerResult = reducer(void 0, {\n type: nanoid()\n });\n if (typeof reducerResult === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n initialStateCache[prop] = reducerResult;\n return reducerResult;\n }\n }\n return result;\n }\n}));\nvar original = (state) => {\n if (!isStateProxy(state)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(25) : \"original must be used on state Proxy\");\n }\n return state[ORIGINAL_STATE];\n};\nvar emptyObject = {};\nvar noopReducer = (state = emptyObject) => state;\nfunction combineSlices(...slices) {\n const reducerMap = Object.fromEntries(getReducers(slices));\n const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;\n let reducer = getReducer();\n function combinedReducer(state, action) {\n return reducer(state, action);\n }\n combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n const initialStateCache = {};\n const inject = (slice, config = {}) => {\n const {\n reducerPath,\n reducer: reducerToInject\n } = slice;\n const currentReducer = reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n }\n return combinedReducer;\n }\n if (config.overrideExisting && currentReducer !== reducerToInject) {\n delete initialStateCache[reducerPath];\n }\n reducerMap[reducerPath] = reducerToInject;\n reducer = getReducer();\n return combinedReducer;\n };\n const selector = Object.assign(function makeSelector(selectorFn, selectState) {\n return function selector2(state, ...args) {\n return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);\n };\n }, {\n original\n });\n return Object.assign(combinedReducer, {\n inject,\n selector\n });\n}\n\n// src/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\nexport {\n ReducerType,\n SHOULD_AUTOBATCH,\n TaskAbortError,\n Tuple,\n addListener,\n asyncThunkCreator,\n autoBatchEnhancer,\n buildCreateSlice,\n clearAllListeners,\n combineSlices,\n configureStore,\n createAction,\n createActionCreatorInvariantMiddleware,\n createAsyncThunk,\n createDraftSafeSelector,\n createDraftSafeSelectorCreator,\n createDynamicMiddleware,\n createEntityAdapter,\n createImmutableStateInvariantMiddleware,\n createListenerMiddleware,\n produce as createNextState,\n createReducer,\n createSelector,\n createSelectorCreator2 as createSelectorCreator,\n createSerializableStateInvariantMiddleware,\n createSlice,\n current3 as current,\n findNonSerializableValue,\n formatProdErrorMessage,\n freeze,\n isActionCreator,\n isAllOf,\n isAnyOf,\n isAsyncThunkAction,\n isDraft5 as isDraft,\n isFSA as isFluxStandardAction,\n isFulfilled,\n isImmutableDefault,\n isPending,\n isPlain,\n isRejected,\n isRejectedWithValue,\n lruMemoize,\n miniSerializeError,\n nanoid,\n original2 as original,\n prepareAutoBatched,\n removeListener,\n unwrapResult,\n weakMapMemoize2 as weakMapMemoize\n};\n//# sourceMappingURL=redux-toolkit.modern.mjs.map","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorRow = ({ children }) => {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 2 }, children));\n};\nconst getStyles = (theme) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default\n })\n };\n};\n\nexport { EditorRow };\n//# sourceMappingURL=EditorRow.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2, ReactUtils, Tooltip, Icon, Space, Field } from '@grafana/ui';\n\nconst EditorField = (props) => {\n var _a;\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n const styles = useStyles2(getStyles, width);\n const childInputId = (fieldProps == null ? undefined : fieldProps.htmlFor) || ((_a = ReactUtils) == null ? undefined : _a.getChildId(children));\n const labelEl = /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\"label\", { className: styles.label, htmlFor: childInputId }, label, optional && /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.optional }, \" - optional\"), tooltip && /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: tooltip, theme: \"info\", interactive: tooltipInteractive }, /* @__PURE__ */ React__default.createElement(Icon, { tabIndex: 0, name: \"info-circle\", size: \"sm\", className: styles.icon }))), /* @__PURE__ */ React__default.createElement(Space, { v: 0.5 }));\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, /* @__PURE__ */ React__default.createElement(Field, { className: styles.field, label: labelEl, ...fieldProps }, children));\n};\nconst getStyles = (theme, width) => {\n return {\n root: css({\n minWidth: theme.spacing(width != null ? width : 0)\n }),\n label: css({\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium\n }),\n optional: css({\n fontStyle: \"italic\",\n color: theme.colors.text.secondary\n }),\n field: css({\n marginBottom: 0\n // GrafanaUI/Field has a bottom margin which we must remove\n }),\n icon: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(1),\n \":hover\": {\n color: theme.colors.text.primary\n }\n })\n };\n};\n\nexport { EditorField };\n//# sourceMappingURL=EditorField.js.map\n","import React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorFieldGroup = ({ children }) => {\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1 }, children);\n};\n\nexport { EditorFieldGroup };\n//# sourceMappingURL=EditorFieldGroup.js.map\n","import { Button } from '@grafana/ui';\nimport React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorList = React__default.forwardRef(function EditorList2({ items, renderItem, onChange }, ref) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n onChange(newItems);\n };\n const onChangeItem = (itemIndex, newItem) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n const onDeleteItem = (itemIndex) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return /* @__PURE__ */ React__default.createElement(EditorStack, null, items.map((item, index) => /* @__PURE__ */ React__default.createElement(\"div\", { key: index }, renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n ))), /* @__PURE__ */ React__default.createElement(Button, { ref, onClick: onAddItem, variant: \"secondary\", size: \"md\", icon: \"plus\", \"aria-label\": \"Add\", type: \"button\" }));\n});\n\nexport { EditorList };\n//# sourceMappingURL=EditorList.js.map\n","import { cx, css } from '@emotion/css';\nimport { useStyles2 } from '@grafana/ui';\nimport React__default, { Children, isValidElement, cloneElement } from 'react';\n\nconst InputGroup = ({ children }) => {\n const styles = useStyles2(getStyles);\n const modifiedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.props.invalid) {\n return cloneElement(child, { className: cx(child.props.className, styles.invalidChild) });\n }\n return child;\n });\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, modifiedChildren);\n};\nconst borderPriority = [\n \"\",\n // lowest priority\n \"base\",\n \"hovered\",\n \"invalid\",\n \"focused\"\n // highest priority\n];\nconst getStyles = () => ({\n root: css({\n display: \"flex\",\n // Style the direct children of the component\n \"> *\": {\n \"&:not(:first-child)\": {\n // Negative margin hides the double-border on adjacent selects\n marginLeft: -1\n },\n \"&:first-child\": {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0\n },\n \"&:last-child\": {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n },\n \"&:not(:first-child):not(:last-child)\": {\n borderRadius: 0\n },\n //\n position: \"relative\",\n zIndex: borderPriority.indexOf(\"base\"),\n // Adjacent borders are overlapping, so raise children up when hovering etc\n // so all that child's borders are visible.\n \"&:hover\": {\n zIndex: borderPriority.indexOf(\"hovered\")\n },\n \"&:focus-within\": {\n zIndex: borderPriority.indexOf(\"focused\")\n }\n }\n }),\n invalidChild: css({\n zIndex: borderPriority.indexOf(\"invalid\")\n })\n});\n\nexport { InputGroup };\n//# sourceMappingURL=InputGroup.js.map\n","import { cx, css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2, Button } from '@grafana/ui';\n\nconst AccessoryButton = ({ className, ...props }) => {\n const styles = useStyles2(getButtonStyles);\n return /* @__PURE__ */ React__default.createElement(Button, { ...props, className: cx(className, styles.button) });\n};\nconst getButtonStyles = (theme) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2)\n })\n});\n\nexport { AccessoryButton };\n//# sourceMappingURL=AccessoryButton.js.map\n","import { uniqBy } from 'lodash';\nimport React__default, { useState, useRef } from 'react';\nimport { v4 } from 'uuid';\nimport { toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, Select } from '@grafana/ui';\nimport { InputGroup } from '../../QueryEditor/InputGroup.js';\nimport { AccessoryButton } from '../../QueryEditor/AccessoryButton.js';\n\nconst CONFLICTING_LABEL_FILTER_ERROR_MESSAGE = \"You have conflicting label filters\";\nfunction LabelFilterItem({\n item,\n items,\n defaultOp,\n onChange,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel,\n invalidValue,\n multiValueSeparator = \"|\"\n}) {\n var _a;\n const [state, setState] = useState({});\n const [labelNamesMenuOpen, setLabelNamesMenuOpen] = useState(false);\n const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);\n const isMultiSelect = (operator = item.op) => {\n var _a2;\n return (_a2 = operators.find((op) => op.label === operator)) == null ? undefined : _a2.isMultiValue;\n };\n const getSelectOptionsFromString = (item2) => {\n if (item2) {\n if (item2.indexOf(multiValueSeparator) > 0) {\n return item2.split(multiValueSeparator);\n }\n return [item2];\n }\n return [];\n };\n const getOptions = () => {\n const labelValues = state.labelValues ? [...state.labelValues] : [];\n const selectedOptions = getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption);\n return uniqBy([...selectedOptions, ...labelValues], \"value\");\n };\n const isConflicting = isConflictingLabelFilter(item, items);\n const { current: id } = useRef(v4());\n return /* @__PURE__ */ React__default.createElement(\"div\", { \"data-testid\": \"visual-query-builder-dimensions-filter-item\" }, /* @__PURE__ */ React__default.createElement(InlineField, { error: CONFLICTING_LABEL_FILTER_ERROR_MESSAGE, invalid: isConflicting ? true : undefined }, /* @__PURE__ */ React__default.createElement(InputGroup, null, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n placeholder: \"Select label\",\n \"data-testid\": selectors.components.QueryBuilder.labelSelect,\n inputId: `visual-query-builder-dimensions-filter-item-key-${id}`,\n width: \"auto\",\n value: item.label ? toOption(item.label) : null,\n allowCustomValue: true,\n onOpenMenu: async () => {\n setState({ isLoadingLabelNames: true });\n const labelNames = await onGetLabelNames(item);\n setLabelNamesMenuOpen(true);\n setState({ labelNames, isLoadingLabelNames: undefined });\n },\n onCloseMenu: () => {\n setLabelNamesMenuOpen(false);\n },\n isOpen: labelNamesMenuOpen,\n isLoading: state.isLoadingLabelNames,\n options: state.labelNames,\n onChange: (change) => {\n var _a2;\n if (change.value) {\n onChange({\n ...item,\n op: (_a2 = item.op) != null ? _a2 : defaultOp,\n label: change.value\n });\n }\n },\n invalid: isConflicting || invalidLabel\n }\n ), /* @__PURE__ */ React__default.createElement(\n Select,\n {\n \"data-testid\": selectors.components.QueryBuilder.matchOperatorSelect,\n value: toOption((_a = item.op) != null ? _a : defaultOp),\n options: operators,\n width: \"auto\",\n onChange: (change) => {\n if (change.value) {\n onChange({\n ...item,\n op: change.value,\n value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item == null ? undefined : item.value)[0]\n });\n }\n },\n invalid: isConflicting\n }\n ), /* @__PURE__ */ React__default.createElement(\n Select,\n {\n placeholder: \"Select value\",\n \"data-testid\": selectors.components.QueryBuilder.valueSelect,\n inputId: `visual-query-builder-dimensions-filter-item-value-${id}`,\n width: \"auto\",\n value: isMultiSelect() ? getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption) : getSelectOptionsFromString(item == null ? undefined : item.value).map(toOption)[0],\n allowCustomValue: true,\n onOpenMenu: async () => {\n setState({ isLoadingLabelValues: true });\n const labelValues = await onGetLabelValues(item);\n setState({\n ...state,\n labelValues,\n isLoadingLabelValues: undefined\n });\n setLabelValuesMenuOpen(true);\n },\n onCloseMenu: () => {\n setLabelValuesMenuOpen(false);\n },\n isOpen: labelValuesMenuOpen,\n isMulti: isMultiSelect(),\n isLoading: state.isLoadingLabelValues,\n options: getOptions(),\n onChange: (change) => {\n var _a2, _b;\n if (change.value) {\n onChange({\n ...item,\n value: change.value,\n op: (_a2 = item.op) != null ? _a2 : defaultOp\n });\n } else {\n const changes = change.map((change2) => {\n if (change2.value) {\n return change2.value;\n } else {\n return undefined;\n }\n }).filter((val) => val !== undefined).join(multiValueSeparator);\n onChange({ ...item, value: changes, op: (_b = item.op) != null ? _b : defaultOp });\n }\n },\n invalid: isConflicting || invalidValue\n }\n ), /* @__PURE__ */ React__default.createElement(AccessoryButton, { \"aria-label\": \"remove\", icon: \"times\", variant: \"secondary\", onClick: onDelete }))));\n}\nconst operators = [\n { label: \"=\", value: \"=\", description: \"Equals\", isMultiValue: false },\n { label: \"!=\", value: \"!=\", description: \"Does not equal\", isMultiValue: false },\n { label: \"=~\", value: \"=~\", description: \"Matches regex\", isMultiValue: true },\n { label: \"!~\", value: \"!~\", description: \"Does not match regex\", isMultiValue: true }\n];\nfunction isConflictingLabelFilter(newLabel, labels) {\n if (!newLabel.label || !newLabel.op || !newLabel.value) {\n return false;\n }\n if (labels.length < 2) {\n return false;\n }\n const operationIsNegative = newLabel.op.toString().startsWith(\"!\");\n const candidates = labels.filter(\n (label) => label.label === newLabel.label && label.value === newLabel.value && label.op !== newLabel.op\n );\n const conflict = candidates.some((candidate) => {\n var _a, _b;\n if (operationIsNegative && ((_a = candidate == null ? undefined : candidate.op) == null ? undefined : _a.toString().startsWith(\"!\")) === false) {\n return true;\n }\n if (operationIsNegative === false && ((_b = candidate == null ? undefined : candidate.op) == null ? undefined : _b.toString().startsWith(\"!\"))) {\n return true;\n }\n return false;\n });\n return conflict;\n}\n\nexport { LabelFilterItem, isConflictingLabelFilter };\n//# sourceMappingURL=LabelFilterItem.js.map\n","import { isEqual } from 'lodash';\nimport React__default, { useState, useEffect } from 'react';\nimport '@grafana/data';\nimport { EditorField } from '../../QueryEditor/EditorField.js';\nimport { EditorFieldGroup } from '../../QueryEditor/EditorFieldGroup.js';\nimport { EditorList } from '../../QueryEditor/EditorList.js';\nimport { LabelFilterItem } from './LabelFilterItem.js';\n\nconst MISSING_LABEL_FILTER_ERROR_MESSAGE = \"Select at least 1 label filter (label and value)\";\nfunction LabelFilters({\n labelsFilters,\n onChange,\n onGetLabelNames,\n onGetLabelValues,\n labelFilterRequired,\n multiValueSeparator\n}) {\n const defaultOp = \"=\";\n const [items, setItems] = useState([{ op: defaultOp }]);\n useEffect(() => {\n if (labelsFilters.length > 0) {\n setItems(labelsFilters);\n } else {\n setItems([{ op: defaultOp }]);\n }\n }, [labelsFilters]);\n const onLabelsChange = (newItems) => {\n setItems(newItems);\n const newLabels = newItems.filter(\n (item) => item.label !== undefined && item.value !== undefined\n );\n if (!isEqual(newLabels, labelsFilters)) {\n onChange(newLabels);\n }\n };\n const hasLabelFilter = items.some((item) => item.label && item.value);\n return /* @__PURE__ */ React__default.createElement(EditorFieldGroup, null, /* @__PURE__ */ React__default.createElement(\n EditorField,\n {\n label: \"Label filters\",\n error: MISSING_LABEL_FILTER_ERROR_MESSAGE,\n invalid: labelFilterRequired && !hasLabelFilter\n },\n /* @__PURE__ */ React__default.createElement(\n EditorList,\n {\n items,\n onChange: onLabelsChange,\n renderItem: (item, onChangeItem, onDelete) => /* @__PURE__ */ React__default.createElement(\n LabelFilterItem,\n {\n item,\n items,\n defaultOp,\n onChange: onChangeItem,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel: labelFilterRequired && !item.label,\n invalidValue: labelFilterRequired && !item.value,\n multiValueSeparator\n }\n )\n }\n )\n ));\n}\n\nexport { LabelFilters, MISSING_LABEL_FILTER_ERROR_MESSAGE };\n//# sourceMappingURL=LabelFilters.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport { renderMarkdown } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nfunction OperationExplainedBox({ title, stepNumber, markdown, children }) {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.box }, stepNumber !== undefined && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.stepNumber }, stepNumber), /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.boxInner }, title && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, /* @__PURE__ */ React__default.createElement(\"span\", null, title)), /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.body }, markdown && /* @__PURE__ */ React__default.createElement(\"div\", { dangerouslySetInnerHTML: { __html: renderMarkdown(markdown) } }), children)));\n}\nconst getStyles = (theme) => {\n return {\n box: css({\n background: theme.colors.background.secondary,\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n position: \"relative\"\n }),\n boxInner: css({\n marginLeft: theme.spacing(4)\n }),\n stepNumber: css({\n fontWeight: theme.typography.fontWeightMedium,\n background: theme.colors.secondary.main,\n width: \"20px\",\n height: \"20px\",\n borderRadius: theme.shape.radius.circle,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"absolute\",\n top: \"10px\",\n left: \"11px\",\n fontSize: theme.typography.bodySmall.fontSize\n }),\n header: css({\n paddingBottom: theme.spacing(0.5),\n display: \"flex\",\n alignItems: \"center\",\n fontFamily: theme.typography.fontFamilyMonospace\n }),\n body: css({\n color: theme.colors.text.secondary,\n \"p:last-child\": {\n margin: 0\n },\n a: {\n color: theme.colors.text.link,\n textDecoration: \"underline\"\n }\n })\n };\n};\n\nexport { OperationExplainedBox };\n//# sourceMappingURL=OperationExplainedBox.js.map\n","import { cx, css } from '@emotion/css';\nimport Prism from 'prismjs';\nimport React__default from 'react';\nimport { textUtil } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nfunction RawQuery({ query, language, className }) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, language.grammar, language.name);\n return /* @__PURE__ */ React__default.createElement(\n \"div\",\n {\n className: cx(styles.editorField, \"prism-syntax-highlight\", className),\n \"aria-label\": \"selector\",\n dangerouslySetInnerHTML: { __html: textUtil.sanitize(highlighted) }\n }\n );\n}\nconst getStyles = (theme) => {\n return {\n editorField: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n fontSize: theme.typography.bodySmall.fontSize\n })\n };\n};\n\nexport { RawQuery };\n//# sourceMappingURL=RawQuery.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport '../../QueryEditor/types.js';\nimport 'lodash';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport 'react-use';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport 'uuid';\nimport '@grafana/runtime';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction OperationsEditorRow({ children }) {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1 }, children));\n}\nconst getStyles = (theme) => {\n return {\n root: css({\n padding: theme.spacing(1, 1, 0, 1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default\n })\n };\n};\n\nexport { OperationsEditorRow };\n//# sourceMappingURL=OperationsEditorRow.js.map\n","import { useState, useRef, useEffect } from 'react';\n\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction useMemoOne(getResult, inputs) {\n var initial = useState(function () {\n return {\n inputs: inputs,\n result: getResult()\n };\n })[0];\n var isFirstRun = useRef(true);\n var committed = useRef(initial);\n var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n var cache = useCache ? committed.current : {\n inputs: inputs,\n result: getResult()\n };\n useEffect(function () {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallbackOne(callback, inputs) {\n return useMemoOne(function () {\n return callback;\n }, inputs);\n}\nvar useMemo = useMemoOne;\nvar useCallback = useCallbackOne;\n\nexport { useCallback, useCallbackOne, useMemo, useMemoOne };\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var cache = null;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n var lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult: lastResult,\n lastArgs: newArgs,\n lastThis: this,\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nexport { memoizeOne as default };\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import React, { useLayoutEffect, useEffect, useRef, useState, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { createStore as createStore$1, applyMiddleware, compose, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { useMemo, useCallback } from 'use-memo-one';\nimport { getRect, expand, offset, withScroll, calculateBox, getBox, createBox } from 'css-box-model';\nimport memoizeOne from 'memoize-one';\nimport rafSchd from 'raf-schd';\nimport _extends from '@babel/runtime/helpers/esm/extends';\n\nconst isProduction$1 = process.env.NODE_ENV === 'production';\nconst spacesAndTabs = /[ \\t]{2,}/g;\nconst lineStartWithSpaces = /^[ \\t]*/gm;\nconst clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\nconst getDevMessage = message => clean$2(`\n %c@hello-pangea/dnd\n\n %c${clean$2(message)}\n\n %c👷 This is a development only message. It will be removed in production builds.\n`);\nconst getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\nconst isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings';\nfunction log(type, message) {\n if (isProduction$1) {\n return;\n }\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n console[type](...getFormattedMessage(message));\n}\nconst warning = log.bind(null, 'warn');\nconst error = log.bind(null, 'error');\n\nfunction noop$2() {}\n\nfunction getOptions(shared, fromBinding) {\n return {\n ...shared,\n ...fromBinding\n };\n}\nfunction bindEvents(el, bindings, sharedOptions) {\n const unbindings = bindings.map(binding => {\n const options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(unbind => {\n unbind();\n });\n };\n}\n\nconst isProduction = process.env.NODE_ENV === 'production';\nconst prefix$1 = 'Invariant failed';\nclass RbdInvariant extends Error {}\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\nfunction invariant(condition, message) {\n if (isProduction) {\n throw new RbdInvariant(prefix$1);\n } else {\n throw new RbdInvariant(`${prefix$1}: ${message || ''}`);\n }\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.callbacks = null;\n this.unbind = noop$2;\n this.onWindowError = event => {\n const callbacks = this.getCallbacks();\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(`\n An error was caught by our window 'error' event listener while a drag was occurring.\n The active drag has been aborted.\n `) : void 0;\n }\n const err = event.error;\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n this.getCallbacks = () => {\n if (!this.callbacks) {\n throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n }\n return this.callbacks;\n };\n this.setCallbacks = callbacks => {\n this.callbacks = callbacks;\n };\n }\n componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n }\n componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n this.setState({});\n return;\n }\n throw err;\n }\n componentWillUnmount() {\n this.unbind();\n }\n render() {\n return this.props.children(this.setCallbacks);\n }\n}\n\nconst dragHandleUsageInstructions = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`;\nconst position = index => index + 1;\nconst onDragStart = start => `\n You have lifted an item in position ${position(start.source.index)}\n`;\nconst withLocation = (source, destination) => {\n const isInHomeList = source.droppableId === destination.droppableId;\n const startPosition = position(source.index);\n const endPosition = position(destination.index);\n if (isInHomeList) {\n return `\n You have moved the item from position ${startPosition}\n to position ${endPosition}\n `;\n }\n return `\n You have moved the item from position ${startPosition}\n in list ${source.droppableId}\n to list ${destination.droppableId}\n in position ${endPosition}\n `;\n};\nconst withCombine = (id, source, combine) => {\n const inHomeList = source.droppableId === combine.droppableId;\n if (inHomeList) {\n return `\n The item ${id}\n has been combined with ${combine.draggableId}`;\n }\n return `\n The item ${id}\n in list ${source.droppableId}\n has been combined with ${combine.draggableId}\n in list ${combine.droppableId}\n `;\n};\nconst onDragUpdate = update => {\n const location = update.destination;\n if (location) {\n return withLocation(update.source, location);\n }\n const combine = update.combine;\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n return 'You are over an area that cannot be dropped on';\n};\nconst returnedToStart = source => `\n The item has returned to its starting position\n of ${position(source.index)}\n`;\nconst onDragEnd = result => {\n if (result.reason === 'CANCEL') {\n return `\n Movement cancelled.\n ${returnedToStart(result.source)}\n `;\n }\n const location = result.destination;\n const combine = result.combine;\n if (location) {\n return `\n You have dropped the item.\n ${withLocation(result.source, location)}\n `;\n }\n if (combine) {\n return `\n You have dropped the item.\n ${withCombine(result.draggableId, result.source, combine)}\n `;\n }\n return `\n The item has been dropped while not over a drop area.\n ${returnedToStart(result.source)}\n `;\n};\nconst preset = {\n dragHandleUsageInstructions,\n onDragStart,\n onDragUpdate,\n onDragEnd\n};\n\nconst origin = {\n x: 0,\n y: 0\n};\nconst add = (point1, point2) => ({\n x: point1.x + point2.x,\n y: point1.y + point2.y\n});\nconst subtract = (point1, point2) => ({\n x: point1.x - point2.x,\n y: point1.y - point2.y\n});\nconst isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y;\nconst negate = point => ({\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n});\nconst patch = (line, value, otherValue = 0) => {\n if (line === 'x') {\n return {\n x: value,\n y: otherValue\n };\n }\n return {\n x: otherValue,\n y: value\n };\n};\nconst distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2);\nconst closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point)));\nconst apply = fn => point => ({\n x: fn(point.x),\n y: fn(point.y)\n});\n\nvar executeClip = (frame, subject) => {\n const result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n return result;\n};\n\nconst offsetByPosition = (spacing, point) => ({\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n});\nconst getCorners = spacing => [{\n x: spacing.left,\n y: spacing.top\n}, {\n x: spacing.right,\n y: spacing.top\n}, {\n x: spacing.left,\n y: spacing.bottom\n}, {\n x: spacing.right,\n y: spacing.bottom\n}];\nconst noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nconst scroll$1 = (target, frame) => {\n if (!frame) {\n return target;\n }\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\nconst increase = (target, axis, withPlaceholder) => {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n return {\n ...target,\n [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line]\n };\n }\n return target;\n};\nconst clip = (target, frame) => {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n return getRect(target);\n};\nvar getSubject = ({\n page,\n withPlaceholder,\n axis,\n frame\n}) => {\n const scrolled = scroll$1(page.marginBox, frame);\n const increased = increase(scrolled, axis, withPlaceholder);\n const clipped = clip(increased, frame);\n return {\n page,\n withPlaceholder,\n active: clipped\n };\n};\n\nvar scrollDroppable = (droppable, newScroll) => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const scrollable = droppable.frame;\n const scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n const scrollDisplacement = negate(scrollDiff);\n const frame = {\n ...scrollable,\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n };\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame\n });\n const result = {\n ...droppable,\n frame,\n subject\n };\n return result;\n};\n\nconst toDroppableMap = memoizeOne(droppables => droppables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDraggableMap = memoizeOne(draggables => draggables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDroppableList = memoizeOne(droppables => Object.values(droppables));\nconst toDraggableList = memoizeOne(draggables => Object.values(draggables));\n\nvar getDraggablesInsideDroppable = memoizeOne((droppableId, draggables) => {\n const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId).sort((a, b) => a.descriptor.index - b.descriptor.index);\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id));\n\nvar moveToNextCombine = ({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const location = tryGetDestination(previousImpact);\n if (!location) {\n return null;\n }\n function getImpact(target) {\n const at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return {\n ...previousImpact,\n at\n };\n }\n const all = previousImpact.displaced.all;\n const closestId = all.length ? all[0] : null;\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n const withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n const last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId);\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant() : void 0;\n const proposedIndex = indexOfClosest - 1;\n if (proposedIndex < 0) {\n return null;\n }\n const before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n};\n\nvar isHomeOf = (draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id;\n\nconst noDisplacedBy = {\n point: origin,\n value: 0\n};\nconst emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nconst noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound;\n\nvar isPartiallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n if (isContained) {\n return true;\n }\n const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n if (isPartiallyContained) {\n return true;\n }\n const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n if (isTargetBiggerThanFrame) {\n return true;\n }\n const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n};\n\nvar isTotallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n};\n\nconst vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nconst horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = axis => frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n};\n\nconst getDroppableDisplaced = (target, destination) => {\n const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\nconst isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => {\n if (!destination.subject.active) {\n return false;\n }\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\nconst isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target);\nconst isVisible$1 = ({\n target: toBeDisplaced,\n destination,\n viewport,\n withDroppableDisplacement,\n isVisibleThroughFrameFn\n}) => {\n const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\nconst isPartiallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n});\nconst isTotallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n});\nconst isTotallyVisibleOnAxis = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n});\n\nconst getShouldAnimate = (id, last, forceShouldAnimate) => {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n if (!last) {\n return true;\n }\n const {\n invisible,\n visible\n } = last;\n if (invisible[id]) {\n return false;\n }\n const previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\nfunction getTarget(draggable, displacedBy) {\n const marginBox = draggable.page.marginBox;\n const expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\nfunction getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy,\n viewport,\n forceShouldAnimate,\n last\n}) {\n return afterDragging.reduce(function process(groups, draggable) {\n const target = getTarget(draggable, displacedBy);\n const id = draggable.descriptor.id;\n groups.all.push(id);\n const isVisible = isPartiallyVisible({\n target,\n destination,\n viewport,\n withDroppableDisplacement: true\n });\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n const displacement = {\n draggableId: id,\n shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n const indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\nfunction goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n}) {\n const newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\nfunction calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last,\n index,\n forceShouldAnimate\n}) {\n const inHomeList = isHomeOf(draggable, destination);\n if (index == null) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const match = insideDestination.find(item => item.descriptor.index === index);\n if (!match) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const sliceFrom = insideDestination.indexOf(match);\n const impacted = withoutDragging.slice(sliceFrom);\n const displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination,\n displacedBy,\n last,\n viewport: viewport.frame,\n forceShouldAnimate\n });\n return {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = ({\n isMovingForward,\n destination,\n draggables,\n combine,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const combineId = combine.draggableId;\n const combineWith = draggables[combineId];\n const combineWithIndex = combineWith.descriptor.index;\n const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n return combineWithIndex - 1;\n }\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n return combineWithIndex;\n};\n\nvar fromReorder = ({\n isMovingForward,\n isInHomeList,\n insideDestination,\n location\n}) => {\n if (!insideDestination.length) {\n return null;\n }\n const currentIndex = location.index;\n const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n const firstIndex = insideDestination[0].descriptor.index;\n const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n const upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n if (proposedIndex < firstIndex) {\n return null;\n }\n if (proposedIndex > upperBound) {\n return null;\n }\n return proposedIndex;\n};\n\nvar moveToNextIndex = ({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant() : void 0;\n if (wasAt.type === 'REORDER') {\n const newIndex = fromReorder({\n isMovingForward,\n isInHomeList,\n location: wasAt.destination,\n insideDestination\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n }\n const newIndex = fromCombine({\n isMovingForward,\n destination,\n displaced: previousImpact.displaced,\n draggables,\n combine: wasAt.combine,\n afterCritical\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n};\n\nvar getCombinedItemDisplacement = ({\n displaced,\n afterCritical,\n combineWith,\n displacedBy\n}) => {\n const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n return isDisplaced ? displacedBy.point : origin;\n};\n\nvar whenCombining = ({\n afterCritical,\n impact,\n draggables\n}) => {\n const combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const combineWith = combine.draggableId;\n const center = draggables[combineWith].page.borderBox.center;\n const displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical,\n combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n};\n\nconst distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2;\nconst distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2;\nconst getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\nconst goAfter = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goBefore = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goIntoStart = ({\n axis,\n moveInto,\n isMoving\n}) => patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n\nvar whenReordering = ({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n}) => {\n const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const draggablePage = draggable.page;\n const axis = droppable.axis;\n if (!insideDestination.length) {\n return goIntoStart({\n axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n const {\n displaced,\n displacedBy\n } = impact;\n const closestAfter = displaced.all[0];\n if (closestAfter) {\n const closest = draggables[closestAfter];\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n const withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n const last = insideDestination[insideDestination.length - 1];\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n const page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n return goAfter({\n axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n};\n\nvar withDroppableDisplacement = (droppable, point) => {\n const frame = droppable.frame;\n if (!frame) {\n return point;\n }\n return add(point, frame.scroll.diff.displacement);\n};\n\nconst getResultWithoutDroppableDisplacement = ({\n impact,\n draggable,\n droppable,\n draggables,\n afterCritical\n}) => {\n const original = draggable.page.borderBox.center;\n const at = impact.at;\n if (!droppable) {\n return original;\n }\n if (!at) {\n return original;\n }\n if (at.type === 'REORDER') {\n return whenReordering({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n }\n return whenCombining({\n impact,\n draggables,\n afterCritical\n });\n};\nvar getPageBorderBoxCenterFromImpact = args => {\n const withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n const droppable = args.droppable;\n const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n};\n\nvar scrollViewport = (viewport, newScroll) => {\n const diff = subtract(newScroll, viewport.scroll.initial);\n const displacement = negate(diff);\n const frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n const updated = {\n frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement\n }\n }\n };\n return updated;\n};\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nfunction tryGetVisible(id, groups) {\n for (let i = 0; i < groups.length; i++) {\n const displacement = groups[i].visible[id];\n if (displacement) {\n return displacement;\n }\n }\n return null;\n}\nvar speculativelyIncrease = ({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange\n}) => {\n const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n const last = impact.displaced;\n const withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last,\n forceShouldAnimate: false\n });\n const withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last,\n forceShouldAnimate: false\n });\n const invisible = {};\n const visible = {};\n const groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(id => {\n const displacement = tryGetVisible(id, groups);\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n invisible[id] = true;\n });\n const newImpact = {\n ...impact,\n displaced: {\n all: last.all,\n invisible,\n visible\n }\n };\n return newImpact;\n};\n\nvar withViewportDisplacement = (viewport, point) => add(viewport.scroll.diff.displacement, point);\n\nvar getClientFromPageBorderBoxCenter = ({\n pageBorderBoxCenter,\n draggable,\n viewport\n}) => {\n const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n};\n\nvar isTotallyVisibleInNewLocation = ({\n draggable,\n destination,\n newPageBorderBoxCenter,\n viewport,\n withDroppableDisplacement,\n onlyOnMainAxis = false\n}) => {\n const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n const args = {\n target: shifted,\n destination,\n withDroppableDisplacement,\n viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n};\n\nvar moveToNextPlace = ({\n isMovingForward,\n draggable,\n destination,\n draggables,\n previousImpact,\n viewport,\n previousPageBorderBoxCenter,\n previousClientSelection,\n afterCritical\n}) => {\n if (!destination.isEnabled) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const isInHomeList = isHomeOf(draggable, destination);\n const impact = moveToNextCombine({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n }) || moveToNextIndex({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n if (isVisibleInNewLocation) {\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n }\n const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n const cautious = speculativelyIncrease({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n};\n\nconst getKnownActive = droppable => {\n const rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant() : void 0;\n return rect;\n};\nvar getBestCrossAxisDroppable = ({\n isMovingForward,\n pageBorderBoxCenter,\n source,\n droppables,\n viewport\n}) => {\n const active = source.subject.active;\n if (!active) {\n return null;\n }\n const axis = source.axis;\n const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n const candidates = toDroppableList(droppables).filter(droppable => droppable !== source).filter(droppable => droppable.isEnabled).filter(droppable => Boolean(droppable.subject.active)).filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort((a, b) => {\n const first = getKnownActive(a)[axis.crossAxisStart];\n const second = getKnownActive(b)[axis.crossAxisStart];\n if (isMovingForward) {\n return first - second;\n }\n return second - first;\n }).filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]);\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const contains = candidates.filter(droppable => {\n const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n if (contains.length === 1) {\n return contains[0];\n }\n if (contains.length > 1) {\n return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0];\n }\n return candidates.sort((a, b) => {\n const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n if (first !== second) {\n return first - second;\n }\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n};\n\nconst getCurrentPageBorderBoxCenter = (draggable, afterCritical) => {\n const original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nconst getCurrentPageBorderBox = (draggable, afterCritical) => {\n const original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = ({\n pageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n}) => {\n const sorted = insideDestination.filter(draggable => isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n })).sort((a, b) => {\n const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n if (distanceToA < distanceToB) {\n return -1;\n }\n if (distanceToB < distanceToA) {\n return 1;\n }\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n};\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n const displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nconst getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => {\n const axis = droppable.axis;\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n const availableSpace = droppable.subject.page.contentBox[axis.size];\n const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0);\n const requiredSpace = spaceUsed + placeholderSize[axis.line];\n const needsToGrowBy = requiredSpace - availableSpace;\n if (needsToGrowBy <= 0) {\n return null;\n }\n return patch(axis.line, needsToGrowBy);\n};\nconst withMaxScroll = (frame, max) => ({\n ...frame,\n scroll: {\n ...frame.scroll,\n max\n }\n});\nconst addPlaceholder = (droppable, draggable, draggables) => {\n const frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant() : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant() : void 0;\n const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n const added = {\n placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n return {\n ...droppable,\n subject\n };\n }\n const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n const newFrame = withMaxScroll(frame, maxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\nconst removePlaceholder = droppable => {\n const added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant() : void 0;\n const frame = droppable.frame;\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject\n };\n }\n const oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant() : void 0;\n const newFrame = withMaxScroll(frame, oldMaxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\n\nvar moveToNewDroppable = ({\n previousPageBorderBoxCenter,\n moveRelativeTo,\n insideDestination,\n draggable,\n draggables,\n destination,\n viewport,\n afterCritical\n}) => {\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n const proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n const isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n const proposedIndex = (() => {\n const relativeTo = moveRelativeTo.descriptor.index;\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n return relativeTo + 1;\n })();\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n};\n\nvar moveCrossAxis = ({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport,\n afterCritical\n}) => {\n const destination = getBestCrossAxisDroppable({\n isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables,\n viewport\n });\n if (!destination) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n });\n const impact = moveToNewDroppable({\n previousPageBorderBoxCenter,\n destination,\n draggable,\n draggables,\n moveRelativeTo,\n insideDestination,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n};\n\nvar whatIsDraggedOver = impact => {\n const at = impact.at;\n if (!at) {\n return null;\n }\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n return at.combine.droppableId;\n};\n\nconst getDroppableOver$1 = (impact, droppables) => {\n const id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\nvar moveInDirection = ({\n state,\n type\n}) => {\n const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables);\n const isMainAxisMovementAllowed = Boolean(isActuallyOver);\n const home = state.dimensions.droppables[state.critical.droppable.id];\n const isOver = isActuallyOver || home;\n const direction = isOver.axis.direction;\n const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n const {\n draggables,\n droppables\n } = state.dimensions;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n destination: isOver,\n draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n};\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\nfunction getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n}) {\n const startCenter = draggable.page.borderBox.center;\n const sorted = candidates.map(candidate => {\n const axis = candidate.axis;\n const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort((a, b) => b.distance - a.distance);\n return sorted[0] ? sorted[0].id : null;\n}\nfunction getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n}) {\n const candidates = toDroppableList(droppables).filter(item => {\n if (!item.isEnabled) {\n return false;\n }\n const active = item.subject.active;\n if (!active) {\n return false;\n }\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n const axis = item.axis;\n const childCenter = active.center[axis.crossAxisLine];\n const crossAxisStart = pageBorderBox[axis.crossAxisStart];\n const crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n const isStartContained = isContained(crossAxisStart);\n const isEndContained = isContained(crossAxisEnd);\n if (!isStartContained && !isEndContained) {\n return true;\n }\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n return crossAxisEnd > childCenter;\n });\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n return getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n });\n}\n\nconst offsetRectByPosition = (rect, point) => getRect(offsetByPosition(rect, point));\n\nvar withDroppableScroll = (droppable, area) => {\n const frame = droppable.frame;\n if (!frame) {\n return area;\n }\n return offsetRectByPosition(area, frame.scroll.diff.value);\n};\n\nfunction getIsDisplaced({\n displaced,\n id\n}) {\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex({\n draggable,\n closest,\n inHomeList\n}) {\n if (!closest) {\n return null;\n }\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n return closest.descriptor.index;\n}\nvar getReorderImpact = ({\n pageBorderBoxWithDroppableScroll: targetRect,\n draggable,\n destination,\n insideDestination,\n last,\n viewport,\n afterCritical\n}) => {\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const closest = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childCenter = child.page.borderBox.center[axis.line];\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: last,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n return targetStart < childCenter - displacement;\n }\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n return targetStart < childCenter;\n }) || null;\n const newIndex = atIndex({\n draggable,\n closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last,\n displacedBy,\n index: newIndex\n });\n};\n\nconst combineThresholdDivisor = 4;\nvar getCombineImpact = ({\n draggable,\n pageBorderBoxWithDroppableScroll: targetRect,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const combineWith = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childRect = child.page.borderBox;\n const childSize = childRect[axis.size];\n const threshold = childSize / combineThresholdDivisor;\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n if (!combineWith) {\n return null;\n }\n const impact = {\n displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n};\n\nvar getDragImpact = ({\n pageOffset,\n draggable,\n draggables,\n droppables,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n const destinationId = getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n });\n if (!destinationId) {\n return noImpact;\n }\n const destination = droppables[destinationId];\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n destination,\n insideDestination,\n last: previousImpact.displaced,\n viewport,\n afterCritical\n });\n};\n\nvar patchDroppableMap = (droppables, updated) => ({\n ...droppables,\n [updated.descriptor.id]: updated\n});\n\nconst clearUnusedPlaceholder = ({\n previousImpact,\n impact,\n droppables\n}) => {\n const last = whatIsDraggedOver(previousImpact);\n const now = whatIsDraggedOver(impact);\n if (!last) {\n return droppables;\n }\n if (last === now) {\n return droppables;\n }\n const lastDroppable = droppables[last];\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n const updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\nvar recomputePlaceholders = ({\n draggable,\n draggables,\n droppables,\n previousImpact,\n impact\n}) => {\n const cleaned = clearUnusedPlaceholder({\n previousImpact,\n impact,\n droppables\n });\n const isOver = whatIsDraggedOver(impact);\n if (!isOver) {\n return cleaned;\n }\n const droppable = droppables[isOver];\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n const patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n};\n\nvar update = ({\n state,\n clientSelection: forcedClientSelection,\n dimensions: forcedDimensions,\n viewport: forcedViewport,\n impact: forcedImpact,\n scrollJumpRequest\n}) => {\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const clientSelection = forcedClientSelection || state.current.client.selection;\n const offset = subtract(clientSelection, state.initial.client.selection);\n const client = {\n offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n const page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n const current = {\n client,\n page\n };\n if (state.phase === 'COLLECTING') {\n return {\n ...state,\n dimensions,\n viewport,\n current\n };\n }\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport,\n afterCritical: state.afterCritical\n });\n const withUpdatedPlaceholders = recomputePlaceholders({\n draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n const result = {\n ...state,\n current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n };\n return result;\n};\n\nfunction getDraggables(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nvar recompute = ({\n impact,\n viewport,\n draggables,\n destination,\n forceShouldAnimate\n}) => {\n const last = impact.displaced;\n const afterDragging = getDraggables(last.all, draggables);\n const displaced = getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate,\n last\n });\n return {\n ...impact,\n displaced\n };\n};\n\nvar getClientBorderBoxCenter = ({\n impact,\n draggable,\n droppable,\n draggables,\n viewport,\n afterCritical\n}) => {\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n};\n\nvar refreshSnap = ({\n state,\n dimensions: forcedDimensions,\n viewport: forcedViewport\n}) => {\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const needsVisibilityCheck = state.impact;\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const {\n draggables,\n droppables\n } = dimensions;\n const draggable = draggables[state.critical.draggable.id];\n const isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant() : void 0;\n const destination = droppables[isOver];\n const impact = recompute({\n impact: needsVisibilityCheck,\n viewport,\n destination,\n draggables\n });\n const clientSelection = getClientBorderBoxCenter({\n impact,\n draggable,\n droppable: destination,\n draggables,\n viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact,\n clientSelection,\n state,\n dimensions,\n viewport\n });\n};\n\nvar getHomeLocation = descriptor => ({\n index: descriptor.index,\n droppableId: descriptor.droppableId\n});\n\nvar getLiftEffect = ({\n draggable,\n home,\n draggables,\n viewport\n}) => {\n const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n const rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant() : void 0;\n const afterDragging = insideHome.slice(rawIndex + 1);\n const effected = afterDragging.reduce((previous, item) => {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n const afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy,\n effected\n };\n const displaced = getDisplacementGroups({\n afterDragging,\n destination: home,\n displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n const impact = {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact,\n afterCritical\n };\n};\n\nvar patchDimensionMap = (dimensions, updated) => ({\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n});\n\nconst start = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nconst finish = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = ({\n draggable,\n offset: offset$1,\n initialWindowScroll\n}) => {\n const client = offset(draggable.client, offset$1);\n const page = withScroll(client, initialWindowScroll);\n const moved = {\n ...draggable,\n placeholder: {\n ...draggable.placeholder,\n client\n },\n client,\n page\n };\n return moved;\n};\n\nvar getFrame = droppable => {\n const frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant() : void 0;\n return frame;\n};\n\nvar adjustAdditionsForScrollChanges = ({\n additions,\n updatedDroppables,\n viewport\n}) => {\n const windowScrollChange = viewport.scroll.diff.value;\n return additions.map(draggable => {\n const droppableId = draggable.descriptor.droppableId;\n const modified = updatedDroppables[droppableId];\n const frame = getFrame(modified);\n const droppableScrollChange = frame.scroll.diff.value;\n const totalChange = add(windowScrollChange, droppableScrollChange);\n const moved = offsetDraggable({\n draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n};\n\nconst timingsKey = 'Processing dynamic changes';\nvar publishWhileDraggingInVirtual = ({\n state,\n published\n}) => {\n start();\n const withScrollChange = published.modified.map(update => {\n const existing = state.dimensions.droppables[update.droppableId];\n const scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n const droppables = {\n ...state.dimensions.droppables,\n ...toDroppableMap(withScrollChange)\n };\n const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n const draggables = {\n ...state.dimensions.draggables,\n ...updatedAdditions\n };\n published.removals.forEach(id => {\n delete draggables[id];\n });\n const dimensions = {\n droppables,\n draggables\n };\n const wasOverId = whatIsDraggedOver(state.impact);\n const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const home = dimensions.droppables[state.critical.droppable.id];\n const {\n impact: onLiftImpact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables,\n viewport: state.viewport\n });\n const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n const impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact,\n viewport: state.viewport,\n afterCritical\n });\n finish(timingsKey);\n const draggingState = {\n ...state,\n phase: 'DRAGGING',\n impact,\n onLiftImpact,\n dimensions,\n afterCritical,\n forceShouldAnimate: false\n };\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n const dropPending = {\n ...draggingState,\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n };\n return dropPending;\n};\n\nconst isSnapping = state => state.movementMode === 'SNAP';\nconst postDroppableChange = (state, updated, isEnabledChanging) => {\n const dimensions = patchDimensionMap(state.dimensions, updated);\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state,\n dimensions\n });\n }\n return refreshSnap({\n state,\n dimensions\n });\n};\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return {\n ...state,\n scrollJumpRequest: null\n };\n }\n return state;\n}\nconst idle$2 = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (state = idle$2, action) => {\n if (action.type === 'FLUSH') {\n return {\n ...idle$2,\n shouldFlush: true\n };\n }\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant() : void 0;\n const {\n critical,\n clientSelection,\n viewport,\n dimensions,\n movementMode\n } = action.payload;\n const draggable = dimensions.draggables[critical.draggable.id];\n const home = dimensions.droppables[critical.droppable.id];\n const client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n const initial = {\n client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage);\n const {\n impact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables: dimensions.draggables,\n viewport\n });\n const result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical,\n movementMode,\n dimensions,\n initial,\n current: initial,\n isWindowScrollAllowed,\n impact,\n afterCritical,\n onLiftImpact: impact,\n viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Collection cannot start from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n ...state,\n phase: 'COLLECTING'\n };\n return result;\n }\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : invariant() : void 0;\n return publishWhileDraggingInVirtual({\n state,\n published: action.payload\n });\n }\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n client: clientSelection\n } = action.payload;\n if (isEqual$1(clientSelection, state.current.client.selection)) {\n return state;\n }\n return update({\n state,\n clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n newScroll\n } = action.payload;\n const target = state.dimensions.droppables[id];\n if (!target) {\n return state;\n }\n const scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : invariant() : void 0;\n !(target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)}\n but it is already ${String(target.isEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isCombineEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : invariant() : void 0;\n !(target.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)}\n but it is already ${String(target.isCombineEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isCombineEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot move by window in phase ${state.phase}`) : invariant() : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant() : void 0;\n const newScroll = action.payload.newScroll;\n if (isEqual$1(state.viewport.scroll.current, newScroll)) {\n return removeScrollJumpRequest(state);\n }\n const viewport = scrollViewport(state.viewport, newScroll);\n if (isSnapping(state)) {\n return refreshSnap({\n state,\n viewport\n });\n }\n return update({\n state,\n viewport\n });\n }\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n const maxScroll = action.payload.maxScroll;\n if (isEqual$1(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n const withMaxScroll = {\n ...state.viewport,\n scroll: {\n ...state.viewport.scroll,\n max: maxScroll\n }\n };\n return {\n ...state,\n viewport: withMaxScroll\n };\n }\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} received while not in DRAGGING phase`) : invariant() : void 0;\n const result = moveInDirection({\n state,\n type: action.type\n });\n if (!result) {\n return state;\n }\n return update({\n state,\n impact: result.impact,\n clientSelection: result.clientSelection,\n scrollJumpRequest: result.scrollJumpRequest\n });\n }\n if (action.type === 'DROP_PENDING') {\n const reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant() : void 0;\n const newState = {\n ...state,\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason\n };\n return newState;\n }\n if (action.type === 'DROP_ANIMATE') {\n const {\n completed,\n dropDuration,\n newHomeClientOffset\n } = action.payload;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n phase: 'DROP_ANIMATING',\n completed,\n dropDuration,\n newHomeClientOffset,\n dimensions: state.dimensions\n };\n return result;\n }\n if (action.type === 'DROP_COMPLETE') {\n const {\n completed\n } = action.payload;\n return {\n phase: 'IDLE',\n completed,\n shouldFlush: false\n };\n }\n return state;\n};\n\nfunction guard(action, predicate) {\n return action instanceof Object && 'type' in action && action.type === predicate;\n}\nconst beforeInitialCapture = args => ({\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n});\nconst lift$1 = args => ({\n type: 'LIFT',\n payload: args\n});\nconst initialPublish = args => ({\n type: 'INITIAL_PUBLISH',\n payload: args\n});\nconst publishWhileDragging = args => ({\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n});\nconst collectionStarting = () => ({\n type: 'COLLECTION_STARTING',\n payload: null\n});\nconst updateDroppableScroll = args => ({\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n});\nconst updateDroppableIsEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n});\nconst updateDroppableIsCombineEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n});\nconst move = args => ({\n type: 'MOVE',\n payload: args\n});\nconst moveByWindowScroll = args => ({\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n});\nconst updateViewportMaxScroll = args => ({\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n});\nconst moveUp = () => ({\n type: 'MOVE_UP',\n payload: null\n});\nconst moveDown = () => ({\n type: 'MOVE_DOWN',\n payload: null\n});\nconst moveRight = () => ({\n type: 'MOVE_RIGHT',\n payload: null\n});\nconst moveLeft = () => ({\n type: 'MOVE_LEFT',\n payload: null\n});\nconst flush = () => ({\n type: 'FLUSH',\n payload: null\n});\nconst animateDrop = args => ({\n type: 'DROP_ANIMATE',\n payload: args\n});\nconst completeDrop = args => ({\n type: 'DROP_COMPLETE',\n payload: args\n});\nconst drop = args => ({\n type: 'DROP',\n payload: args\n});\nconst dropPending = args => ({\n type: 'DROP_PENDING',\n payload: args\n});\nconst dropAnimationFinished = () => ({\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n});\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n const indexes = insideDestination.map(d => d.descriptor.index);\n const errors = {};\n for (let i = 1; i < indexes.length; i++) {\n const current = indexes[i];\n const previous = indexes[i - 1];\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n if (!Object.keys(errors).length) {\n return;\n }\n const formatted = indexes.map(index => {\n const hasError = Boolean(errors[index]);\n return hasError ? `[🔥${index}]` : `${index}`;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected non-consecutive <Draggable /> indexes.\n\n (This can cause unexpected bugs)\n\n ${formatted}\n `) : void 0;\n}\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift = marshal => ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'LIFT')) {\n next(action);\n return;\n }\n const {\n id,\n clientSelection,\n movementMode\n } = action.payload;\n const initial = getState();\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant() : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode\n }));\n const scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n const request = {\n draggableId: id,\n scrollOptions\n };\n const {\n critical,\n dimensions,\n viewport\n } = marshal.startPublishing(request);\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical,\n dimensions,\n clientSelection,\n movementMode,\n viewport\n }));\n};\n\nvar style = marshal => () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n marshal.dragging();\n }\n if (guard(action, 'DROP_ANIMATE')) {\n marshal.dropping(action.payload.completed.result.reason);\n }\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE')) {\n marshal.resting();\n }\n next(action);\n};\n\nconst curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nconst combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nconst timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nconst outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`;\nconst transitions = {\n fluid: `opacity ${outOfTheWayTiming}`,\n snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`,\n drop: duration => {\n const timing = `${duration}s ${curves.drop}`;\n return `transform ${timing}, opacity ${timing}`;\n },\n outOfTheWay: `transform ${outOfTheWayTiming}`,\n placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}`\n};\nconst moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`;\nconst transforms = {\n moveTo,\n drop: (offset, isCombining) => {\n const translate = moveTo(offset);\n if (!translate) {\n return undefined;\n }\n if (!isCombining) {\n return translate;\n }\n return `${translate} scale(${combine.scale.drop})`;\n }\n};\n\nconst {\n minDropTime,\n maxDropTime\n} = timings;\nconst dropTimeRange = maxDropTime - minDropTime;\nconst maxDropTimeAtDistance = 1500;\nconst cancelDropModifier = 0.6;\nvar getDropDuration = ({\n current,\n destination,\n reason\n}) => {\n const distance$1 = distance(current, destination);\n if (distance$1 <= 0) {\n return minDropTime;\n }\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n const percentage = distance$1 / maxDropTimeAtDistance;\n const duration = minDropTime + dropTimeRange * percentage;\n const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n};\n\nvar getNewHomeClientOffset = ({\n impact,\n draggable,\n dimensions,\n viewport,\n afterCritical\n}) => {\n const {\n draggables,\n droppables\n } = dimensions;\n const droppableId = whatIsDraggedOver(impact);\n const destination = droppableId ? droppables[droppableId] : null;\n const home = droppables[draggable.descriptor.droppableId];\n const newClientCenter = getClientBorderBoxCenter({\n impact,\n draggable,\n draggables,\n afterCritical,\n droppable: destination || home,\n viewport\n });\n const offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n};\n\nvar getDropImpact = ({\n draggables,\n reason,\n lastImpact,\n home,\n viewport,\n onLiftImpact\n}) => {\n if (!lastImpact.at || reason !== 'DROP') {\n const recomputedHomeImpact = recompute({\n draggables,\n impact: onLiftImpact,\n destination: home,\n viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n const withoutMovement = {\n ...lastImpact,\n displaced: emptyGroups\n };\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n};\n\nconst dropMiddleware = ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'DROP')) {\n next(action);\n return;\n }\n const state = getState();\n const reason = action.payload.reason;\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason\n }));\n return;\n }\n if (state.phase === 'IDLE') {\n return;\n }\n const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant() : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot drop in phase: ${state.phase}`) : invariant() : void 0;\n const critical = state.critical;\n const dimensions = state.dimensions;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const {\n impact,\n didDropInsideDroppable\n } = getDropImpact({\n reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n });\n const destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n const combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n const source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n const result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source,\n reason,\n mode: state.movementMode,\n destination,\n combine\n };\n const newHomeClientOffset = getNewHomeClientOffset({\n impact,\n draggable,\n dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n const completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result,\n impact\n };\n const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed\n }));\n return;\n }\n const dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason\n });\n const args = {\n newHomeClientOffset,\n dropDuration,\n completed\n };\n dispatch(animateDrop(args));\n};\n\nvar getWindowScroll = () => ({\n x: window.pageXOffset,\n y: window.pageYOffset\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: event => {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n update();\n }\n };\n}\nfunction getScrollListener({\n onWindowScroll\n}) {\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n const scheduled = rafSchd(updateScroll);\n const binding = getWindowScrollBinding(scheduled);\n let unbind = noop$2;\n function isActive() {\n return unbind !== noop$2;\n }\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant() : void 0;\n unbind = bindEvents(window, [binding]);\n }\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant() : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop$2;\n }\n return {\n start,\n stop,\n isActive\n };\n}\n\nconst shouldStop$1 = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nconst scrollListener = store => {\n const listener = getScrollListener({\n onWindowScroll: newScroll => {\n store.dispatch(moveByWindowScroll({\n newScroll\n }));\n }\n });\n return next => action => {\n if (!listener.isActive() && guard(action, 'INITIAL_PUBLISH')) {\n listener.start();\n }\n if (listener.isActive() && shouldStop$1(action)) {\n listener.stop();\n }\n next(action);\n };\n};\n\nvar getExpiringAnnounce = announce => {\n let wasCalled = false;\n let isExpired = false;\n const timeoutId = setTimeout(() => {\n isExpired = true;\n });\n const result = message => {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Announcements cannot be made asynchronously.\n Default message has already been announced.\n `) : void 0;\n return;\n }\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n result.wasCalled = () => wasCalled;\n return result;\n};\n\nvar getAsyncMarshal = () => {\n const entries = [];\n const execute = timerId => {\n const index = entries.findIndex(item => item.timerId === timerId);\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant() : void 0;\n const [entry] = entries.splice(index, 1);\n entry.callback();\n };\n const add = fn => {\n const timerId = setTimeout(() => execute(timerId));\n const entry = {\n timerId,\n callback: fn\n };\n entries.push(entry);\n };\n const flush = () => {\n if (!entries.length) {\n return;\n }\n const shallow = [...entries];\n entries.length = 0;\n shallow.forEach(entry => {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n return {\n add,\n flush\n };\n};\n\nconst areLocationsEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nconst isCombineEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nconst isCriticalEqual = (first, second) => {\n if (first === second) {\n return true;\n }\n const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nconst withTimings = (key, fn) => {\n start();\n fn();\n finish();\n};\nconst getDragStart = (critical, mode) => ({\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode\n});\nfunction execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n const willExpire = getExpiringAnnounce(announce);\n const provided = {\n announce: willExpire\n };\n responder(data, provided);\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n}\nvar getPublisher = (getResponders, announce) => {\n const asyncMarshal = getAsyncMarshal();\n let dragging = null;\n const beforeCapture = (draggableId, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeCapture', () => {\n const fn = getResponders().onBeforeCapture;\n if (fn) {\n const before = {\n draggableId,\n mode\n };\n fn(before);\n }\n });\n };\n const beforeStart = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeDragStart', () => {\n const fn = getResponders().onBeforeDragStart;\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n const start = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n const data = getDragStart(critical, mode);\n dragging = {\n mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(() => {\n withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset.onDragStart));\n });\n };\n const update = (critical, impact) => {\n const location = tryGetDestination(impact);\n const combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant() : void 0;\n const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n const data = {\n ...getDragStart(critical, dragging.mode),\n combine,\n destination: location\n };\n asyncMarshal.add(() => {\n withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate));\n });\n };\n const flush = () => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant() : void 0;\n asyncMarshal.flush();\n };\n const drop = result => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant() : void 0;\n dragging = null;\n withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset.onDragEnd));\n };\n const abort = () => {\n if (!dragging) {\n return;\n }\n const result = {\n ...getDragStart(dragging.lastCritical, dragging.mode),\n combine: null,\n destination: null,\n reason: 'CANCEL'\n };\n drop(result);\n };\n return {\n beforeCapture,\n beforeStart,\n start,\n update,\n flush,\n drop,\n abort\n };\n};\n\nvar responders = (getResponders, announce) => {\n const publisher = getPublisher(getResponders, announce);\n return store => next => action => {\n if (guard(action, 'BEFORE_INITIAL_CAPTURE')) {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n const critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n const result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n next(action);\n if (guard(action, 'FLUSH')) {\n publisher.abort();\n return;\n }\n const state = store.getState();\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n};\n\nconst dropAnimationFinishMiddleware = store => next => action => {\n if (!guard(action, 'DROP_ANIMATION_FINISHED')) {\n next(action);\n return;\n }\n const state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant() : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n};\n\nconst dropAnimationFlushOnScrollMiddleware = store => {\n let unbind = null;\n let frameId = null;\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n return next => action => {\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATION_FINISHED')) {\n clear();\n }\n next(action);\n if (!guard(action, 'DROP_ANIMATE')) {\n return;\n }\n const binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n const state = store.getState();\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(() => {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n};\n\nvar dimensionMarshalStopper = marshal => () => next => action => {\n if (guard(action, 'DROP_COMPLETE') || guard(action, 'FLUSH') || guard(action, 'DROP_ANIMATE')) {\n marshal.stopPublishing();\n }\n next(action);\n};\n\nvar focus = marshal => {\n let isWatching = false;\n return () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n next(action);\n if (!isWatching) {\n return;\n }\n if (guard(action, 'FLUSH')) {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n isWatching = false;\n const result = action.payload.completed.result;\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n marshal.tryRestoreFocusRecorded();\n }\n };\n};\n\nconst shouldStop = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nvar autoScroll = autoScroller => store => next => action => {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n next(action);\n const state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant() : void 0;\n autoScroller.start(state);\n return;\n }\n next(action);\n autoScroller.scroll(store.getState());\n};\n\nconst pendingDrop = store => next => action => {\n next(action);\n if (!guard(action, 'PUBLISH_WHILE_DRAGGING')) {\n return;\n }\n const postActionState = store.getState();\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n if (postActionState.isWaiting) {\n return;\n }\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n};\n\nconst composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: '@hello-pangea/dnd'\n}) : compose;\nvar createStore = ({\n dimensionMarshal,\n focusMarshal,\n styleMarshal,\n getResponders,\n announce,\n autoScroller\n}) => createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), dropMiddleware, dropAnimationFinishMiddleware, dropAnimationFlushOnScrollMiddleware, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n\nconst clean$1 = () => ({\n additions: {},\n removals: {},\n modified: {}\n});\nfunction createPublisher({\n registry,\n callbacks\n}) {\n let staging = clean$1();\n let frameId = null;\n const collect = () => {\n if (frameId) {\n return;\n }\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(() => {\n frameId = null;\n start();\n const {\n additions,\n removals,\n modified\n } = staging;\n const added = Object.keys(additions).map(id => registry.draggable.getById(id).getDimension(origin)).sort((a, b) => a.descriptor.index - b.descriptor.index);\n const updated = Object.keys(modified).map(id => {\n const entry = registry.droppable.getById(id);\n const scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll\n };\n });\n const result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n const add = entry => {\n const id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n collect();\n };\n const remove = entry => {\n const descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n collect();\n };\n const stop = () => {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n return {\n add,\n remove,\n stop\n };\n}\n\nvar getMaxScroll = ({\n scrollHeight,\n scrollWidth,\n height,\n width\n}) => {\n const maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n const adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n};\n\nvar getDocumentElement = () => {\n const doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant() : void 0;\n return doc;\n};\n\nvar getMaxWindowScroll = () => {\n const doc = getDocumentElement();\n const maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n};\n\nvar getViewport = () => {\n const scroll = getWindowScroll();\n const maxScroll = getMaxWindowScroll();\n const top = scroll.y;\n const left = scroll.x;\n const doc = getDocumentElement();\n const width = doc.clientWidth;\n const height = doc.clientHeight;\n const right = left + width;\n const bottom = top + height;\n const frame = getRect({\n top,\n left,\n right,\n bottom\n });\n const viewport = {\n frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n};\n\nvar getInitialPublish = ({\n critical,\n scrollOptions,\n registry\n}) => {\n start();\n const viewport = getViewport();\n const windowScroll = viewport.scroll.current;\n const home = critical.droppable;\n const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions));\n const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll));\n const dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n const result = {\n dimensions,\n critical,\n viewport\n };\n return result;\n};\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]\n while a drag is occurring. This is only supported for virtual lists.\n\n See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md\n `) : void 0;\n return false;\n }\n return true;\n}\nvar createDimensionMarshal = (registry, callbacks) => {\n let collection = null;\n const publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry\n });\n const updateDroppableIsEnabled = (id, isEnabled) => {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n if (!collection) {\n return;\n }\n callbacks.updateDroppableIsEnabled({\n id,\n isEnabled\n });\n };\n const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id,\n isCombineEnabled\n });\n };\n const updateDroppableScroll = (id, newScroll) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableScroll({\n id,\n newScroll\n });\n };\n const scrollDroppable = (id, change) => {\n if (!collection) {\n return;\n }\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n const stopPublishing = () => {\n if (!collection) {\n return;\n }\n publisher.stop();\n const home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped());\n collection.unsubscribe();\n collection = null;\n };\n const subscriber = event => {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant() : void 0;\n const dragging = collection.critical.draggable;\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n const startPublishing = request => {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant() : void 0;\n const entry = registry.draggable.getById(request.draggableId);\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n const critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n const unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical,\n unsubscribe\n };\n return getInitialPublish({\n critical,\n registry,\n scrollOptions: request.scrollOptions\n });\n };\n const marshal = {\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n scrollDroppable,\n updateDroppableScroll,\n startPublishing,\n stopPublishing\n };\n return marshal;\n};\n\nvar canStartDrag = (state, id) => {\n if (state.phase === 'IDLE') {\n return true;\n }\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n if (state.completed.result.draggableId === id) {\n return false;\n }\n return state.completed.result.reason === 'DROP';\n};\n\nvar scrollWindow = change => {\n window.scrollBy(change.x, change.y);\n};\n\nconst getScrollableDroppables = memoizeOne(droppables => toDroppableList(droppables).filter(droppable => {\n if (!droppable.isEnabled) {\n return false;\n }\n if (!droppable.frame) {\n return false;\n }\n return true;\n}));\nconst getScrollableDroppableOver = (target, droppables) => {\n const maybe = getScrollableDroppables(droppables).find(droppable => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant() : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n }) || null;\n return maybe;\n};\nvar getBestScrollableDroppable = ({\n center,\n destination,\n droppables\n}) => {\n if (destination) {\n const dimension = droppables[destination];\n if (!dimension.frame) {\n return null;\n }\n return dimension;\n }\n const dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n};\n\nconst defaultAutoScrollerOptions = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: percentage => percentage ** 2,\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n },\n disabled: false\n};\n\nvar getDistanceThresholds = (container, axis, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage;\n const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage;\n const thresholds = {\n startScrollingFrom,\n maxScrollValueAt\n };\n return thresholds;\n};\n\nvar getPercentage = ({\n startOfRange,\n endOfRange,\n current\n}) => {\n const range = endOfRange - startOfRange;\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected distance range of 0 in the fluid auto scroller\n This is unexpected and would cause a divide by 0 issue.\n Not allowing an auto scroll\n `) : void 0;\n return 0;\n }\n const currentInRange = current - startOfRange;\n const percentage = currentInRange / range;\n return percentage;\n};\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (distanceToEdge, thresholds, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return autoScrollerOptions.maxPixelScroll;\n }\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n const percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n};\n\nvar dampenValueByTime = (proposedScroll, dragStartTime, getAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt;\n const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt;\n const startOfRange = dragStartTime;\n const endOfRange = stopAt;\n const now = Date.now();\n const runTime = now - startOfRange;\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n if (runTime < accelerateAt) {\n return minScroll;\n }\n const betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange,\n current: runTime\n });\n const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n};\n\nvar getValue = ({\n distanceToEdge,\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions);\n if (scroll === 0) {\n return 0;\n }\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll);\n};\n\nvar getScrollOnAxis = ({\n container,\n distanceToEdges,\n dragStartTime,\n axis,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions);\n const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n }\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n};\n\nvar adjustForSizeLimits = ({\n container,\n subject,\n proposedScroll\n}) => {\n const isTooBigVertically = subject.height > container.height;\n const isTooBigHorizontally = subject.width > container.width;\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n};\n\nconst clean = apply(value => value === 0 ? 0 : value);\nvar getScroll$1 = ({\n dragStartTime,\n container,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n const y = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: vertical,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const x = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const required = clean({\n x,\n y\n });\n if (isEqual$1(required, origin)) {\n return null;\n }\n const limited = adjustForSizeLimits({\n container,\n subject,\n proposedScroll: required\n });\n if (!limited) {\n return null;\n }\n return isEqual$1(limited, origin) ? null : limited;\n};\n\nconst smallestSigned = apply(value => {\n if (value === 0) {\n return 0;\n }\n return value > 0 ? 1 : -1;\n});\nconst getOverlap = (() => {\n const getRemainder = (target, max) => {\n if (target < 0) {\n return target;\n }\n if (target > max) {\n return target - max;\n }\n return 0;\n };\n return ({\n current,\n max,\n change\n }) => {\n const targetScroll = add(current, change);\n const overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n if (isEqual$1(overlap, origin)) {\n return null;\n }\n return overlap;\n };\n})();\nconst canPartiallyScroll = ({\n max: rawMax,\n current,\n change\n}) => {\n const max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n const smallestChange = smallestSigned(change);\n const overlap = getOverlap({\n max,\n current,\n change: smallestChange\n });\n if (!overlap) {\n return true;\n }\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n return false;\n};\nconst canScrollWindow = (viewport, change) => canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change\n});\nconst getWindowOverlap = (viewport, change) => {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n const max = viewport.scroll.max;\n const current = viewport.scroll.current;\n return getOverlap({\n current,\n max,\n change\n });\n};\nconst canScrollDroppable = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return false;\n }\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\nconst getDroppableOverlap = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\n\nvar getWindowScrollChange = ({\n viewport,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getScroll$1({\n dragStartTime,\n container: viewport.frame,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n};\n\nvar getDroppableScrollChange = ({\n droppable,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n const scroll = getScroll$1({\n dragStartTime,\n container: frame.pageMarginBox,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n};\n\nvar scroll = ({\n state,\n dragStartTime,\n shouldUseTimeDampening,\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n}) => {\n const center = state.current.page.borderBoxCenter;\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const subject = draggable.page.marginBox;\n if (state.isWindowScrollAllowed) {\n const viewport = state.viewport;\n const change = getWindowScrollChange({\n dragStartTime,\n viewport,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollWindow(change);\n return;\n }\n }\n const droppable = getBestScrollableDroppable({\n center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n if (!droppable) {\n return;\n }\n const change = getDroppableScrollChange({\n dragStartTime,\n droppable,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n};\n\nvar createFluidScroller = ({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions = () => defaultAutoScrollerOptions\n}) => {\n const scheduleWindowScroll = rafSchd(scrollWindow);\n const scheduleDroppableScroll = rafSchd(scrollDroppable);\n let dragging = null;\n const tryScroll = state => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant() : void 0;\n const {\n shouldUseTimeDampening,\n dragStartTime\n } = dragging;\n scroll({\n state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n };\n const start$1 = state => {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant() : void 0;\n const dragStartTime = Date.now();\n let wasScrollNeeded = false;\n const fakeScrollCallback = () => {\n wasScrollNeeded = true;\n };\n scroll({\n state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback,\n getAutoScrollerOptions\n });\n dragging = {\n dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n const stop = () => {\n if (!dragging) {\n return;\n }\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n return {\n start: start$1,\n stop,\n scroll: tryScroll\n };\n};\n\nvar createJumpScroller = ({\n move,\n scrollDroppable,\n scrollWindow\n}) => {\n const moveByOffset = (state, offset) => {\n const client = add(state.current.client.selection, offset);\n move({\n client\n });\n };\n const scrollDroppableAsMuchAsItCan = (droppable, change) => {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n const overlap = getDroppableOverlap(droppable, change);\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n const whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n const remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => {\n if (!isWindowScrollAllowed) {\n return change;\n }\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n const overlap = getWindowOverlap(viewport, change);\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n const whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n const remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n const jumpScroller = state => {\n const request = state.scrollJumpRequest;\n if (!request) {\n return;\n }\n const destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant() : void 0;\n const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n if (!droppableRemainder) {\n return;\n }\n const viewport = state.viewport;\n const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n if (!windowRemainder) {\n return;\n }\n moveByOffset(state, windowRemainder);\n };\n return jumpScroller;\n};\n\nvar createAutoScroller = ({\n scrollDroppable,\n scrollWindow,\n move,\n getAutoScrollerOptions\n}) => {\n const fluidScroller = createFluidScroller({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n });\n const jumpScroll = createJumpScroller({\n move,\n scrollWindow,\n scrollDroppable\n });\n const scroll = state => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') {\n return;\n }\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n if (!state.scrollJumpRequest) {\n return;\n }\n jumpScroll(state);\n };\n const scroller = {\n scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n};\n\nconst prefix = 'data-rfd';\nconst dragHandle = (() => {\n const base = `${prefix}-drag-handle`;\n return {\n base,\n draggableId: `${base}-draggable-id`,\n contextId: `${base}-context-id`\n };\n})();\nconst draggable = (() => {\n const base = `${prefix}-draggable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst droppable = (() => {\n const base = `${prefix}-droppable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst scrollContainer = {\n contextId: `${prefix}-scroll-container-context-id`\n};\n\nconst makeGetSelector = context => attribute => `[${attribute}=\"${context}\"]`;\nconst getStyles = (rules, property) => rules.map(rule => {\n const value = rule.styles[property];\n if (!value) {\n return '';\n }\n return `${rule.selector} { ${value} }`;\n}).join(' ');\nconst noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = contextId => {\n const getSelector = makeGetSelector(contextId);\n const dragHandle$1 = (() => {\n const grabCursor = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n })();\n const draggable$1 = (() => {\n const transition = `\n transition: ${transitions.outOfTheWay};\n `;\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n })();\n const droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: `overflow-anchor: none;`\n }\n };\n const body = {\n selector: 'body',\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n };\n const rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nconst getHead = () => {\n const head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant() : void 0;\n return head;\n};\nconst createStyleEl = nonce => {\n const el = document.createElement('style');\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n el.type = 'text/css';\n return el;\n};\nfunction useStyleMarshal(contextId, nonce) {\n const styles = useMemo(() => getStyles$1(contextId), [contextId]);\n const alwaysRef = useRef(null);\n const dynamicRef = useRef(null);\n const setDynamicStyle = useCallback(memoizeOne(proposed => {\n const el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }), []);\n const setAlwaysStyle = useCallback(proposed => {\n const el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(() => {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant() : void 0;\n const always = createStyleEl(nonce);\n const dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(`${prefix}-always`, contextId);\n dynamic.setAttribute(`${prefix}-dynamic`, contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return () => {\n const remove = ref => {\n const current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant() : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n const dragging = useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]);\n const dropping = useCallback(reason => {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n const resting = useCallback(() => {\n if (!dynamicRef.current) {\n return;\n }\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n const marshal = useMemo(() => ({\n dragging,\n dropping,\n resting\n }), [dragging, dropping, resting]);\n return marshal;\n}\n\nfunction querySelectorAll(parentNode, selector) {\n return Array.from(parentNode.querySelectorAll(selector));\n}\n\nvar getWindowFromEl = el => {\n if (el && el.ownerDocument && el.ownerDocument.defaultView) {\n return el.ownerDocument.defaultView;\n }\n return window;\n};\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n const selector = `[${dragHandle.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find any drag handles in the context \"${contextId}\"`) : void 0;\n return null;\n }\n const handle = possible.find(el => {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find drag handle with id \"${draggableId}\" as no handle with a matching id was found`) : void 0;\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n const entriesRef = useRef({});\n const recordRef = useRef(null);\n const restoreFocusFrameRef = useRef(null);\n const isMountedRef = useRef(false);\n const register = useCallback(function register(id, focus) {\n const entry = {\n id,\n focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n const entries = entriesRef.current;\n const current = entries[id];\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n const tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n const handle = findDragHandle(contextId, tryGiveFocusTo);\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n const tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n const tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n if (!isMountedRef.current) {\n return;\n }\n restoreFocusFrameRef.current = requestAnimationFrame(() => {\n restoreFocusFrameRef.current = null;\n const record = recordRef.current;\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n const tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n const focused = document.activeElement;\n if (!focused) {\n return;\n }\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n const frameId = restoreFocusFrameRef.current;\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n const marshal = useMemo(() => ({\n register,\n tryRecordFocus,\n tryRestoreFocusRecorded,\n tryShiftRecord\n }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n const entries = {\n draggables: {},\n droppables: {}\n };\n const subscribers = [];\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n const index = subscribers.indexOf(cb);\n if (index === -1) {\n return;\n }\n subscribers.splice(index, 1);\n };\n }\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(cb => cb(event));\n }\n }\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n function getDraggableById(id) {\n const entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find draggable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const draggableAPI = {\n register: entry => {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: (entry, last) => {\n const current = entries.draggables[last.descriptor.id];\n if (!current) {\n return;\n }\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const draggableId = entry.descriptor.id;\n const current = findDraggableById(draggableId);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.draggables[draggableId];\n if (entries.droppables[entry.descriptor.droppableId]) {\n notify({\n type: 'REMOVAL',\n value: entry\n });\n }\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: id => Boolean(findDraggableById(id)),\n getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type)\n };\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n function getDroppableById(id) {\n const entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find droppable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const droppableAPI = {\n register: entry => {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const current = findDroppableById(entry.descriptor.id);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: id => Boolean(findDroppableById(id)),\n getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type)\n };\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe,\n clean\n };\n}\n\nfunction useRegistry() {\n const registry = useMemo(createRegistry, []);\n useEffect(() => {\n return function unmount() {\n registry.clean();\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = () => {\n const body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant() : void 0;\n return body;\n};\n\nconst visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nconst getId = contextId => `rfd-announcement-${contextId}`;\nfunction useAnnouncer(contextId) {\n const id = useMemo(() => getId(contextId), [contextId]);\n const ref = useRef(null);\n useEffect(function setup() {\n const el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n _extends(el.style, visuallyHidden);\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n const announce = useCallback(message => {\n const el = ref.current;\n if (el) {\n el.textContent = message;\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n A screen reader message was trying to be announced but it was unable to do so.\n This can occur if you unmount your <DragDropContext /> in your onDragEnd.\n Consider calling provided.announce() before the unmount so that the instruction will\n not be lost for users relying on a screen reader.\n\n Message not passed to screen reader:\n\n \"${message}\"\n `) : void 0;\n }, []);\n return announce;\n}\n\nconst defaults = {\n separator: '::'\n};\nfunction useUniqueId(prefix, options = defaults) {\n const id = React.useId();\n return useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]);\n}\n\nfunction getElementId({\n contextId,\n uniqueId\n}) {\n return `rfd-hidden-text-${contextId}-${uniqueId}`;\n}\nfunction useHiddenTextElement({\n contextId,\n text\n}) {\n const uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n const id = useMemo(() => getElementId({\n contextId,\n uniqueId\n }), [uniqueId, contextId]);\n useEffect(function mount() {\n const el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^18.0.0\",\n\t\"react-dom\": \"^18.0.0\"\n};\n\nconst semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\nconst getVersion = value => {\n const result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unable to parse React version ${value}`) : invariant() : void 0;\n const major = Number(result[1]);\n const minor = Number(result[2]);\n const patch = Number(result[3]);\n return {\n major,\n minor,\n patch,\n raw: value\n };\n};\nconst isSatisfied = (expected, actual) => {\n if (actual.major > expected.major) {\n return true;\n }\n if (actual.major < expected.major) {\n return false;\n }\n if (actual.minor > expected.minor) {\n return true;\n }\n if (actual.minor < expected.minor) {\n return false;\n }\n return actual.patch >= expected.patch;\n};\nvar checkReactVersion = (peerDepValue, actualValue) => {\n const peerDep = getVersion(peerDepValue);\n const actual = getVersion(actualValue);\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n React version: [${actual.raw}]\n does not satisfy expected peer dependency version: [${peerDep.raw}]\n\n This can result in run time bugs, and even fatal crashes\n `) : void 0;\n};\n\nconst suffix = `\n We expect a html5 doctype: <!doctype html>\n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md\n`;\nvar checkDoctype = doc => {\n const doctype = doc.doctype;\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n No <!doctype html> found.\n\n ${suffix}\n `) : void 0;\n return;\n }\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> found: (${doctype.name})\n\n ${suffix}\n `) : void 0;\n }\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> publicId found: (${doctype.publicId})\n A html5 doctype does not have a publicId\n\n ${suffix}\n `) : void 0;\n }\n};\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(() => {\n useEffect(() => {\n try {\n fn();\n } catch (e) {\n error(`\n A setup problem was encountered.\n\n > ${e.message}\n `);\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(() => {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n const ref = useRef(current);\n useEffect(() => {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n let lock = null;\n function isClaimed() {\n return Boolean(lock);\n }\n function isActive(value) {\n return value === lock;\n }\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant() : void 0;\n const newLock = {\n abandon\n };\n lock = newLock;\n return newLock;\n }\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant() : void 0;\n lock = null;\n }\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n return {\n isClaimed,\n isActive,\n claim,\n release,\n tryAbandon\n };\n}\n\nfunction isDragging(state) {\n if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') {\n return false;\n }\n return state.isDragging;\n}\n\nconst tab = 9;\nconst enter = 13;\nconst escape = 27;\nconst space = 32;\nconst pageUp = 33;\nconst pageDown = 34;\nconst end = 35;\nconst home = 36;\nconst arrowLeft = 37;\nconst arrowUp = 38;\nconst arrowRight = 39;\nconst arrowDown = 40;\n\nconst preventedKeys = {\n [enter]: true,\n [tab]: true\n};\nvar preventStandardKeyEvents = event => {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n};\n\nconst supportedEventName = (() => {\n const base = 'visibilitychange';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`];\n const supported = candidates.find(eventName => `on${eventName}` in document);\n return supported || base;\n})();\n\nconst primaryButton = 0;\nconst sloppyClickThreshold = 5;\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\nconst idle$1 = {\n type: 'IDLE'\n};\nfunction getCaptureBindings({\n cancel,\n completed,\n getPhase,\n setPhase\n}) {\n return [{\n eventName: 'mousemove',\n fn: event => {\n const {\n button,\n clientX,\n clientY\n } = event;\n if (button !== primaryButton) {\n return;\n }\n const point = {\n x: clientX,\n y: clientY\n };\n const phase = getPhase();\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant() : void 0;\n const pending = phase.point;\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n event.preventDefault();\n const actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: event => {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: () => {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant() : void 0;\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useMouseSensor(api) {\n const phaseRef = useRef(idle$1);\n const unbindEventsRef = useRef(noop$2);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== primaryButton) {\n return;\n }\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n event.preventDefault();\n const point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const preventForcePressBinding = useMemo(() => ({\n eventName: 'webkitmouseforcewillbegin',\n fn: event => {\n if (event.defaultPrevented) {\n return;\n }\n const id = api.findClosestDraggableId(event);\n if (!id) {\n return;\n }\n const options = api.findOptionsForDraggable(id);\n if (!options) {\n return;\n }\n if (options.shouldRespectForcePress) {\n return;\n }\n if (!api.canGetLock(id)) {\n return;\n }\n event.preventDefault();\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const bindings = getCaptureBindings({\n cancel,\n completed: stop,\n getPhase: () => phaseRef.current,\n setPhase: phase => {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point,\n actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nfunction noop$1() {}\nconst scrollJumpKeys = {\n [pageDown]: true,\n [pageUp]: true,\n [home]: true,\n [end]: true\n};\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n function drop() {\n stop();\n actions.drop();\n }\n return [{\n eventName: 'keydown',\n fn: event => {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useKeyboardSensor(api) {\n const unbindEventsRef = useRef(noop$1);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.keyCode !== space) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!preDrag) {\n return;\n }\n event.preventDefault();\n let isCapturing = true;\n const actions = preDrag.snapLift();\n unbindEventsRef.current();\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant() : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n }), [api]);\n const listenForCapture = useCallback(function tryStartCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nconst idle = {\n type: 'IDLE'\n};\nconst timeForLongPress = 120;\nconst forcePressThreshold = 0.15;\nfunction getWindowBindings({\n cancel,\n getPhase\n}) {\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: event => {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction getHandleBindings({\n cancel,\n completed,\n getPhase\n}) {\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n phase.hasMoved = true;\n const {\n clientX,\n clientY\n } = event.touches[0];\n const point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const isForcePress = touch.force >= forcePressThreshold;\n if (!isForcePress) {\n return;\n }\n const shouldRespect = phase.actions.shouldRespectForcePress();\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n return;\n }\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useTouchSensor(api) {\n const phaseRef = useRef(idle);\n const unbindEventsRef = useRef(noop$2);\n const getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n const setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n const touch = event.touches[0];\n const {\n clientX,\n clientY\n } = touch;\n const point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n setPhase(idle);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const args = {\n cancel,\n completed: stop,\n getPhase\n };\n const unbindTarget = bindEvents(window, getHandleBindings(args), options);\n const unbindWindow = bindEvents(window, getWindowBindings(args), options);\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n const startDragging = useCallback(function startDragging() {\n const phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : invariant() : void 0;\n const actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n const longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point,\n actions,\n longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n const unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: () => {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(() => {\n const previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(() => {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nconst interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio'];\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase());\n if (hasAnInteractiveTag) {\n return true;\n }\n const attribute = current.getAttribute('contenteditable');\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n if (current === parent) {\n return false;\n }\n return isAnInteractiveElement(parent, current.parentElement);\n}\nfunction isEventInInteractiveElement(draggable, event) {\n const target = event.target;\n if (!isHtmlElement(target)) {\n return false;\n }\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = el => getRect(el.getBoundingClientRect()).center;\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nconst supportedMatchesName = (() => {\n const base = 'matches';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n const value = candidates.find(name => name in Element.prototype);\n return value || base;\n})();\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n return closestPonyfill(el.parentElement, selector);\n}\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return `[${dragHandle.contextId}=\"${contextId}\"]`;\n}\nfunction findClosestDragHandleFromEvent(contextId, event) {\n const target = event.target;\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n const selector = getSelector(contextId);\n const handle = closest(target, selector);\n if (!handle) {\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n const handle = findClosestDragHandleFromEvent(contextId, event);\n if (!handle) {\n return null;\n }\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n const selector = `[${draggable.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n const draggable$1 = possible.find(el => {\n return el.getAttribute(draggable.id) === draggableId;\n });\n if (!draggable$1) {\n return null;\n }\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn\n}) {\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The sensor no longer has an action lock.\n\n Tips:\n\n - Throw away your action handlers when forceStop() is called\n - Check actions.isActive() if you really need to\n `) : void 0;\n }\n return false;\n }\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The actions you used belong to an outdated phase\n\n Current phase: ${expected}\n You called an action from outdated phase: ${phase}\n\n Tips:\n\n - Do not use preDragActions actions after calling preDragActions.lift()\n `) : void 0;\n }\n return false;\n }\n return true;\n}\nfunction canStart({\n lockAPI,\n store,\n registry,\n draggableId\n}) {\n if (lockAPI.isClaimed()) {\n return false;\n }\n const entry = registry.draggable.findById(draggableId);\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable with id: ${draggableId}`) : void 0;\n return false;\n }\n if (!entry.options.isEnabled) {\n return false;\n }\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n return true;\n}\nfunction tryStart({\n lockAPI,\n contextId,\n store,\n registry,\n draggableId,\n forceSensorStop,\n sourceEvent\n}) {\n const shouldStart = canStart({\n lockAPI,\n store,\n registry,\n draggableId\n });\n if (!shouldStart) {\n return null;\n }\n const entry = registry.draggable.getById(draggableId);\n const el = findDraggable(contextId, entry.descriptor.id);\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable element with id: ${draggableId}`) : void 0;\n return null;\n }\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n const lock = lockAPI.claim(forceSensorStop || noop$2);\n let phase = 'PRE_DRAG';\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n function tryDispatch(expected, getAction) {\n if (isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n function lift(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n if (phase !== 'PRE_DRAG') {\n completed();\n process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot lift in phase ${phase}`) : invariant() ;\n }\n store.dispatch(lift$1(args.liftActionArgs));\n phase = 'DRAGGING';\n function finish(reason, options = {\n shouldBlockNextClick: false\n }) {\n args.cleanup();\n if (options.shouldBlockNextClick) {\n const unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n completed();\n store.dispatch(drop({\n reason\n }));\n }\n return {\n isActive: () => isActive({\n expected: 'DRAGGING',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: options => finish('DROP', options),\n cancel: options => finish('CANCEL', options),\n ...args.actions\n };\n }\n function fluidLift(clientSelection) {\n const move$1 = rafSchd(client => {\n tryDispatchWhenDragging(() => move({\n client\n }));\n });\n const api = lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: () => move$1.cancel(),\n actions: {\n move: move$1\n }\n });\n return {\n ...api,\n move: move$1\n };\n }\n function snapLift() {\n const actions = {\n moveUp: () => tryDispatchWhenDragging(moveUp),\n moveRight: () => tryDispatchWhenDragging(moveRight),\n moveDown: () => tryDispatchWhenDragging(moveDown),\n moveLeft: () => tryDispatchWhenDragging(moveLeft)\n };\n return lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop$2,\n actions\n });\n }\n function abortPreDrag() {\n const shouldRelease = isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: true\n });\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n const preDrag = {\n isActive: () => isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift,\n snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\nconst defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors,\n enableDefaultSensors\n}) {\n const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])];\n const lockAPI = useState(() => create())[0];\n const tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (isDragging(previous) && !isDragging(current)) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n let previous = store.getState();\n const unsubscribe = store.subscribe(() => {\n const current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(() => {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n const canGetLock = useCallback(draggableId => {\n return canStart({\n lockAPI,\n registry,\n store,\n draggableId\n });\n }, [lockAPI, registry, store]);\n const tryGetLock = useCallback((draggableId, forceStop, options) => tryStart({\n lockAPI,\n registry,\n contextId,\n store,\n draggableId,\n forceSensorStop: forceStop || null,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n }), [contextId, lockAPI, registry, store]);\n const findClosestDraggableId = useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]);\n const findOptionsForDraggable = useCallback(id => {\n const entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n const tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n lockAPI.tryAbandon();\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n const isLockClaimed = useCallback(() => lockAPI.isClaimed(), [lockAPI]);\n const api = useMemo(() => ({\n canGetLock,\n tryGetLock,\n findClosestDraggableId,\n findOptionsForDraggable,\n tryReleaseLock,\n isLockClaimed\n }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n for (let i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nconst createResponders = props => ({\n onBeforeCapture: t => {\n const onBeforeCapureCallback = () => {\n if (props.onBeforeCapture) {\n props.onBeforeCapture(t);\n }\n };\n flushSync(onBeforeCapureCallback);\n },\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n});\nconst createAutoScrollerOptions = props => ({\n ...defaultAutoScrollerOptions,\n ...props.autoScrollerOptions,\n durationDampening: {\n ...defaultAutoScrollerOptions.durationDampening,\n ...props.autoScrollerOptions\n }\n});\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant() : void 0;\n return lazyRef.current;\n}\nfunction App(props) {\n const {\n contextId,\n setCallbacks,\n sensors,\n nonce,\n dragHandleUsageInstructions\n } = props;\n const lazyStoreRef = useRef(null);\n useStartupValidation();\n const lastPropsRef = usePrevious(props);\n const getResponders = useCallback(() => {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n const getAutoScrollerOptions = useCallback(() => {\n return createAutoScrollerOptions(lastPropsRef.current);\n }, [lastPropsRef]);\n const announce = useAnnouncer(contextId);\n const dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId,\n text: dragHandleUsageInstructions\n });\n const styleMarshal = useStyleMarshal(contextId, nonce);\n const lazyDispatch = useCallback(action => {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n const marshalCallbacks = useMemo(() => bindActionCreators({\n publishWhileDragging,\n updateDroppableScroll,\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n collectionStarting\n }, lazyDispatch), [lazyDispatch]);\n const registry = useRegistry();\n const dimensionMarshal = useMemo(() => {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n const autoScroller = useMemo(() => createAutoScroller({\n scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable,\n getAutoScrollerOptions,\n ...bindActionCreators({\n move\n }, lazyDispatch)\n }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]);\n const focusMarshal = useFocusMarshal(contextId);\n const store = useMemo(() => createStore({\n announce,\n autoScroller,\n dimensionMarshal,\n focusMarshal,\n getResponders,\n styleMarshal\n }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n lazyStoreRef.current = store;\n const tryResetStore = useCallback(() => {\n const current = getStore(lazyStoreRef);\n const state = current.getState();\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n const isDragging = useCallback(() => {\n const state = getStore(lazyStoreRef).getState();\n if (state.phase === 'DROP_ANIMATING') {\n return true;\n }\n if (state.phase === 'IDLE') {\n return false;\n }\n return state.isDragging;\n }, []);\n const appCallbacks = useMemo(() => ({\n isDragging,\n tryAbort: tryResetStore\n }), [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n const getCanLift = useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []);\n const getIsMovementAllowed = useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []);\n const appContext = useMemo(() => ({\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId,\n registry\n }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors: sensors || null,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(() => {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nfunction useUniqueContextId() {\n return React.useId();\n}\n\nfunction DragDropContext(props) {\n const contextId = useUniqueContextId();\n const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, setCallbacks => React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd,\n autoScrollerOptions: props.autoScrollerOptions\n }, props.children));\n}\n\nconst zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\nconst getDraggingTransition = (shouldAnimateDragMovement, dropping) => {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n return transitions.fluid;\n};\nconst getDraggingOpacity = (isCombining, isDropAnimating) => {\n if (!isCombining) {\n return undefined;\n }\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\nconst getShouldDraggingAnimate = dragging => {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n return dragging.mode === 'SNAP';\n};\nfunction getDraggingStyle(dragging) {\n const dimension = dragging.dimension;\n const box = dimension.client;\n const {\n offset,\n combineWith,\n dropping\n } = dragging;\n const isCombining = Boolean(combineWith);\n const shouldAnimate = getShouldDraggingAnimate(dragging);\n const isDropAnimating = Boolean(dropping);\n const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n const style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? undefined : 'none'\n };\n}\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll = origin) {\n const computedStyles = window.getComputedStyle(el);\n const borderBox = el.getBoundingClientRect();\n const client = calculateBox(borderBox, computedStyles);\n const page = withScroll(client, windowScroll);\n const placeholder = {\n client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n const displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n const dimension = {\n descriptor,\n placeholder,\n displaceBy,\n client,\n page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n const uniqueId = useUniqueId('draggable');\n const {\n descriptor,\n registry,\n getDraggableRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n } = args;\n const options = useMemo(() => ({\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n const getDimension = useCallback(windowScroll => {\n const el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant() : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n options,\n getDimension\n }), [descriptor, getDimension, options, uniqueId]);\n const publishedRef = useRef(entry);\n const isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(() => {\n registry.draggable.register(publishedRef.current);\n return () => registry.draggable.unregister(publishedRef.current);\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(() => {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n const last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `\n provided.innerRef has not been provided with a HTMLElement.\n\n You can find a guide on using the innerRef callback functions at:\n https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md\n `) : invariant() : void 0;\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(() => {\n function prefix(id) {\n return `Draggable[id: ${id}]: `;\n }\n const id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Draggable requires a [string] draggableId.\n Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0;\n !Number.isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0;\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n checkIsValidInnerRef(getRef());\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(() => {\n const initialRef = useRef(isClone);\n useDevSetupWarning(() => {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction useRequiredContext(Context) {\n const result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant() : void 0;\n return result;\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\nconst Draggable = props => {\n const ref = useRef(null);\n const setRef = useCallback((el = null) => {\n ref.current = el;\n }, []);\n const getRef = useCallback(() => ref.current, []);\n const {\n contextId,\n dragHandleUsageInstructionsId,\n registry\n } = useRequiredContext(AppContext);\n const {\n type,\n droppableId\n } = useRequiredContext(DroppableContext);\n const descriptor = useMemo(() => ({\n id: props.draggableId,\n index: props.index,\n type,\n droppableId\n }), [props.draggableId, props.index, type, droppableId]);\n const {\n children,\n draggableId,\n isEnabled,\n shouldRespectForcePress,\n canDragInteractiveElements,\n isClone,\n mapped,\n dropAnimationFinished: dropAnimationFinishedAction\n } = props;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n if (!isClone) {\n const forPublisher = useMemo(() => ({\n descriptor,\n registry,\n getDraggableRef: getRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n const dragHandleProps = useMemo(() => isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rfd-drag-handle-draggable-id': draggableId,\n 'data-rfd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n const onMoveEnd = useCallback(event => {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n if (!mapped.dropping) {\n return;\n }\n if (event.propertyName !== 'transform') {\n return;\n }\n flushSync(dropAnimationFinishedAction);\n }, [dropAnimationFinishedAction, mapped]);\n const provided = useMemo(() => {\n const style = getStyle$1(mapped);\n const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined;\n const result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rfd-draggable-context-id': contextId,\n 'data-rfd-draggable-id': draggableId,\n style,\n onTransitionEnd\n },\n dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n const rubric = useMemo(() => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return React.createElement(React.Fragment, null, children(provided, mapped.snapshot, rubric));\n};\n\nvar isStrictEqual = (a, b) => a === b;\n\nvar whatIsDraggedOverFromResult = result => {\n const {\n combine,\n destination\n } = result;\n if (destination) {\n return destination.droppableId;\n }\n if (combine) {\n return combine.droppableId;\n }\n return null;\n};\n\nconst getCombineWithFromResult = result => {\n return result.combine ? result.combine.draggableId : null;\n};\nconst getCombineWithFromImpact = impact => {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\nfunction getDraggableSelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne((mode, isClone, draggingOver = null, combineWith = null, dropping = null) => ({\n isDragging: true,\n isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode,\n draggingOver,\n combineWith,\n combineTargetFor: null\n }));\n const getMemoizedProps = memoizeOne((offset, mode, dimension, isClone, draggingOver = null, combineWith = null, forceShouldAnimate = null) => ({\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver,\n combineWith,\n mode,\n offset,\n dimension,\n forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n }));\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n const offset = state.current.client.offset;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const draggingOver = whatIsDraggedOver(state.impact);\n const combineWith = getCombineWithFromImpact(state.impact);\n const forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n const isClone = ownProps.isClone;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const result = completed.result;\n const mode = result.mode;\n const draggingOver = whatIsDraggedOverFromResult(result);\n const combineWith = getCombineWithFromResult(result);\n const duration = state.dropDuration;\n const dropping = {\n duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: combineWith ? combine.opacity.drop : null,\n scale: combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension,\n dropping,\n draggingOver,\n combineWith,\n mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping)\n }\n };\n }\n return null;\n };\n return selector;\n}\nfunction getSecondarySnapshot(combineTargetFor = null) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor,\n combineWith: null\n };\n}\nconst atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\nfunction getSecondarySelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n const getMemoizedProps = memoizeOne((offset, combineTargetFor = null, shouldAnimateDisplacement) => ({\n mapped: {\n type: 'SECONDARY',\n offset,\n combineTargetFor,\n shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n }));\n const getFallback = combineTargetFor => {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n const getProps = (ownId, draggingId, impact, afterCritical) => {\n const visualDisplacement = impact.displaced.visible[ownId];\n const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n const combine = tryGetCombine(impact);\n const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n const change = negate(afterCritical.displacedBy.point);\n const offset = memoizedOffset(change.x, change.y);\n return getMemoizedProps(offset, combineTargetFor, true);\n }\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n const displaceBy = impact.displacedBy.point;\n const offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n return null;\n };\n return selector;\n}\nconst makeMapStateToProps$1 = () => {\n const draggingSelector = getDraggableSelector();\n const secondarySelector = getSecondarySelector();\n const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n return selector;\n};\nconst mapDispatchToProps$1 = {\n dropAnimationFinished: dropAnimationFinished\n};\nconst ConnectedDraggable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n const droppableContext = useRequiredContext(DroppableContext);\n const isUsingCloneFor = droppableContext.isUsingCloneFor;\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n const shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nconst isEqual = base => value => base === value;\nconst isScroll = isEqual('scroll');\nconst isAuto = isEqual('auto');\nconst isVisible = isEqual('visible');\nconst isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY);\nconst isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY);\nconst isElementScrollable = el => {\n const style = window.getComputedStyle(el);\n const overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\nconst isBodyScrollable = () => {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n const body = getBodyElement();\n const html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n if (!isElementScrollable(body)) {\n return false;\n }\n const htmlStyle = window.getComputedStyle(html);\n const htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n if (isBoth(htmlOverflow, isVisible)) {\n return false;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n We have detected that your <body> element might be a scroll container.\n We have found no reliable way of detecting whether the <body> element is a scroll container.\n Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\n\n Because we cannot determine if the <body> is a scroll container, and generally it is not one,\n we will be treating the <body> as *not* a scroll container\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md\n `) : void 0;\n return false;\n};\nconst getClosestScrollable = el => {\n if (el == null) {\n return null;\n }\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n if (el === document.documentElement) {\n return null;\n }\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n return el;\n};\n\nvar checkForNestedScrollContainers = scrollable => {\n if (!scrollable) {\n return;\n }\n const anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n if (!anotherScrollParent) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable: unsupported nested scroll container detected.\n A Droppable can only have one scroll parent (which can be itself)\n Nested scroll containers are currently not supported.\n\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\n `) : void 0;\n};\n\nvar getScroll = el => ({\n x: el.scrollLeft,\n y: el.scrollTop\n});\n\nconst getIsFixed = el => {\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n if (style.position === 'fixed') {\n return true;\n }\n return getIsFixed(el.parentElement);\n};\nvar getEnv = start => {\n const closestScrollable = getClosestScrollable(start);\n const isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable,\n isFixedOnPage\n };\n};\n\nvar getDroppableDimension = ({\n descriptor,\n isEnabled,\n isCombineEnabled,\n isFixedOnPage,\n direction,\n client,\n page,\n closest\n}) => {\n const frame = (() => {\n if (!closest) {\n return null;\n }\n const {\n scrollSize,\n client: frameClient\n } = closest;\n const maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient,\n scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n })();\n const axis = direction === 'vertical' ? vertical : horizontal;\n const subject = getSubject({\n page,\n withPlaceholder: null,\n axis,\n frame\n });\n const dimension = {\n descriptor,\n isCombineEnabled,\n isFixedOnPage,\n axis,\n isEnabled,\n client,\n page,\n frame,\n subject\n };\n return dimension;\n};\n\nconst getClient = (targetRef, closestScrollable) => {\n const base = getBox(targetRef);\n if (!closestScrollable) {\n return base;\n }\n if (targetRef !== closestScrollable) {\n return base;\n }\n const top = base.paddingBox.top - closestScrollable.scrollTop;\n const left = base.paddingBox.left - closestScrollable.scrollLeft;\n const bottom = top + closestScrollable.scrollHeight;\n const right = left + closestScrollable.scrollWidth;\n const paddingBox = {\n top,\n right,\n bottom,\n left\n };\n const borderBox = expand(paddingBox, base.border);\n const client = createBox({\n borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\nvar getDimension = ({\n ref,\n descriptor,\n env,\n windowScroll,\n direction,\n isDropDisabled,\n isCombineEnabled,\n shouldClipSubject\n}) => {\n const closestScrollable = env.closestScrollable;\n const client = getClient(ref, closestScrollable);\n const page = withScroll(client, windowScroll);\n const closest = (() => {\n if (!closestScrollable) {\n return null;\n }\n const frameClient = getBox(closestScrollable);\n const scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll(closestScrollable),\n scrollSize,\n shouldClipSubject\n };\n })();\n const dimension = getDroppableDimension({\n descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction,\n client,\n page,\n closest\n });\n return dimension;\n};\n\nconst immediate = {\n passive: false\n};\nconst delayed = {\n passive: true\n};\nvar getListenerOptions = options => options.shouldPublishImmediately ? immediate : delayed;\n\nconst getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null;\nfunction useDroppablePublisher(args) {\n const whileDraggingRef = useRef(null);\n const appContext = useRequiredContext(AppContext);\n const uniqueId = useUniqueId('droppable');\n const {\n registry,\n marshal\n } = appContext;\n const previousRef = usePrevious(args);\n const descriptor = useMemo(() => ({\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n }), [args.droppableId, args.mode, args.type]);\n const publishedDescriptorRef = useRef(descriptor);\n const memoizedUpdateScroll = useMemo(() => memoizeOne((x, y) => {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant() : void 0;\n const scroll = {\n x,\n y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n }), [descriptor.id, marshal]);\n const getClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n return getScroll(dragging.env.closestScrollable);\n }, []);\n const updateScroll = useCallback(() => {\n const scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n const scheduleScrollUpdate = useMemo(() => rafSchd(updateScroll), [updateScroll]);\n const onClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant() : void 0;\n const options = dragging.scrollOptions;\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n const getDimensionAndWatchScroll = useCallback((windowScroll, options) => {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant() : void 0;\n const previous = previousRef.current;\n const ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant() : void 0;\n const env = getEnv(ref);\n const dragging = {\n ref,\n descriptor,\n env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n const dimension = getDimension({\n ref,\n descriptor,\n env,\n windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n const scrollable = env.closestScrollable;\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n const getScrollWhileDragging = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant() : void 0;\n return getScroll(closest);\n }, []);\n const dragStopped = useCallback(() => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n if (!closest) {\n return;\n }\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n const scroll = useCallback(change => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant() : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n const callbacks = useMemo(() => {\n return {\n getDimensionAndWatchScroll,\n getScrollWhileDragging,\n dragStopped,\n scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n callbacks\n }), [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(() => {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return () => {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop() {}\nconst empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\nconst getSize = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n if (animate === 'close') {\n return empty;\n }\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\nconst getStyle = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n const size = getSize({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\nconst Placeholder = props => {\n const animateOpenTimerRef = useRef(null);\n const tryClearAnimateOpenTimer = useCallback(() => {\n if (!animateOpenTimerRef.current) {\n return;\n }\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n const {\n animate,\n onTransitionEnd,\n onClose,\n contextId\n } = props;\n const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = useState(props.animate === 'open');\n useEffect(() => {\n if (!isAnimatingOpenOnMount) {\n return noop;\n }\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop;\n }\n if (animateOpenTimerRef.current) {\n return noop;\n }\n animateOpenTimerRef.current = setTimeout(() => {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n const onSizeChangeEnd = useCallback(event => {\n if (event.propertyName !== 'height') {\n return;\n }\n onTransitionEnd();\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n const style = getStyle({\n isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style,\n 'data-rfd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n};\nvar Placeholder$1 = React.memo(Placeholder);\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction runChecks(args, checks) {\n checks.forEach(check => check(args));\n}\nconst shared = [function required({\n props\n}) {\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant() : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : invariant() : void 0;\n}, function boolean({\n props\n}) {\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant() : void 0;\n}, function ref({\n getDroppableRef\n}) {\n checkIsValidInnerRef(getDroppableRef());\n}];\nconst standard = [function placeholder({\n props,\n getPlaceholderRef\n}) {\n if (!props.placeholder) {\n return;\n }\n const ref = getPlaceholderRef();\n if (ref) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable setup issue [droppableId: \"${props.droppableId}\"]:\n DroppableProvided > placeholder could not be found.\n\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md\n `) : void 0;\n}];\nconst virtual = [function hasClone({\n props\n}) {\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant() : void 0;\n}, function hasNoPlaceholder({\n getPlaceholderRef\n}) {\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant() : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(() => {\n runChecks(args, shared);\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nclass AnimateInOut extends React.PureComponent {\n constructor(...args) {\n super(...args);\n this.state = {\n isVisible: Boolean(this.props.on),\n data: this.props.on,\n animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none'\n };\n this.onClose = () => {\n if (this.state.animate !== 'close') {\n return;\n }\n this.setState({\n isVisible: false\n });\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n }\n render() {\n if (!this.state.isVisible) {\n return null;\n }\n const provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n }\n}\n\nconst Droppable = props => {\n const appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant() : void 0;\n const {\n contextId,\n isMovementAllowed\n } = appContext;\n const droppableRef = useRef(null);\n const placeholderRef = useRef(null);\n const {\n children,\n droppableId,\n type,\n mode,\n direction,\n ignoreContainerClipping,\n isDropDisabled,\n isCombineEnabled,\n snapshot,\n useClone,\n updateViewportMaxScroll,\n getContainerForClone\n } = props;\n const getDroppableRef = useCallback(() => droppableRef.current, []);\n const setDroppableRef = useCallback((value = null) => {\n droppableRef.current = value;\n }, []);\n const getPlaceholderRef = useCallback(() => placeholderRef.current, []);\n const setPlaceholderRef = useCallback((value = null) => {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props,\n getDroppableRef,\n getPlaceholderRef\n });\n const onPlaceholderTransitionEnd = useCallback(() => {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId,\n type,\n mode,\n direction,\n isDropDisabled,\n isCombineEnabled,\n ignoreContainerClipping,\n getDroppableRef\n });\n const placeholder = useMemo(() => React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, ({\n onClose,\n data,\n animate\n }) => React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n })), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]);\n const provided = useMemo(() => ({\n innerRef: setDroppableRef,\n placeholder,\n droppableProps: {\n 'data-rfd-droppable-id': droppableId,\n 'data-rfd-droppable-context-id': contextId\n }\n }), [contextId, droppableId, placeholder, setDroppableRef]);\n const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n const droppableContext = useMemo(() => ({\n droppableId,\n type,\n isUsingCloneFor\n }), [droppableId, isUsingCloneFor, type]);\n function getClone() {\n if (!useClone) {\n return null;\n }\n const {\n dragging,\n render\n } = useClone;\n const node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging));\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant() : void 0;\n return document.body;\n}\nconst defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nconst attachDefaultPropsToOwnProps = ownProps => {\n let mergedProps = {\n ...ownProps\n };\n let defaultPropKey;\n for (defaultPropKey in defaultProps) {\n if (ownProps[defaultPropKey] === undefined) {\n mergedProps = {\n ...mergedProps,\n [defaultPropKey]: defaultProps[defaultPropKey]\n };\n }\n }\n return mergedProps;\n};\nconst isMatchingType = (type, critical) => type === critical.droppable.type;\nconst getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id];\nconst makeMapStateToProps = () => {\n const idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n const idleWithoutAnimation = {\n ...idleWithAnimation,\n shouldAnimatePlaceholder: false\n };\n const getDraggableRubric = memoizeOne(descriptor => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }));\n const getMapProps = memoizeOne((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => {\n const draggableId = dragging.descriptor.id;\n const isHome = dragging.descriptor.droppableId === id;\n if (isHome) {\n const useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot,\n useClone\n };\n }\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot,\n useClone: null\n };\n });\n const selector = (state, ownProps) => {\n const ownPropsWithDefaultProps = attachDefaultPropsToOwnProps(ownProps);\n const id = ownPropsWithDefaultProps.droppableId;\n const type = ownPropsWithDefaultProps.type;\n const isEnabled = !ownPropsWithDefaultProps.isDropDisabled;\n const renderClone = ownPropsWithDefaultProps.renderClone;\n if (isDragging(state)) {\n const critical = state.critical;\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(critical, state.dimensions);\n const isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(completed.critical, state.dimensions);\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone);\n }\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const wasOver = whatIsDraggedOver(completed.impact) === id;\n const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE');\n const isHome = completed.critical.droppable.id === id;\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n if (isHome) {\n return idleWithAnimation;\n }\n return idleWithoutAnimation;\n }\n return idleWithoutAnimation;\n };\n return selector;\n};\nconst mapDispatchToProps = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\nconst ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (stateProps, dispatchProps, ownProps) => {\n return {\n ...attachDefaultPropsToOwnProps(ownProps),\n ...stateProps,\n ...dispatchProps\n };\n}, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\nvar ConnectedDroppable$1 = ConnectedDroppable;\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable$1 as Droppable, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useMountedState() {\n var mountedRef = useRef(false);\n var get = useCallback(function () { return mountedRef.current; }, []);\n useEffect(function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []);\n return get;\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\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 orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\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 });\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 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\n for (var index = 0; index < state.orderedModifiers.length; index++) {\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 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 (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.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 };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n ReactDOM.flushSync(function () {\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { usePopper } from 'react-popper';\n\nfunction useGetLatest(val) {\n var ref = React.useRef(val);\n ref.current = val;\n return React.useCallback(function () {\n return ref.current;\n }, []);\n}\n\nvar noop = function noop() {// do nothing\n};\n\nfunction useControlledState(_ref) {\n var initial = _ref.initial,\n value = _ref.value,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? noop : _ref$onChange;\n\n if (initial === undefined && value === undefined) {\n throw new TypeError('Either \"value\" or \"initial\" variable must be set. Now both are undefined');\n }\n\n var _React$useState = React.useState(initial),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var getLatest = useGetLatest(state);\n var set = React.useCallback(function (updater) {\n var state = getLatest();\n var updatedState = typeof updater === 'function' ? updater(state) : updater;\n if (typeof updatedState.persist === 'function') updatedState.persist();\n setState(updatedState);\n if (typeof onChange === 'function') onChange(updatedState);\n }, [getLatest, onChange]);\n var isControlled = value !== undefined;\n return [isControlled ? value : state, isControlled ? onChange : set];\n}\nfunction generateBoundingClientRect(x, y) {\n if (x === void 0) {\n x = 0;\n }\n\n if (y === void 0) {\n y = 0;\n }\n\n return function () {\n return {\n width: 0,\n height: 0,\n top: y,\n right: x,\n bottom: y,\n left: x,\n x: 0,\n y: 0,\n toJSON: function toJSON() {\n return null;\n }\n };\n };\n}\n\nvar _excluded = [\"styles\", \"attributes\"];\nvar virtualElement = {\n getBoundingClientRect: generateBoundingClientRect()\n};\nvar defaultConfig = {\n closeOnOutsideClick: true,\n closeOnTriggerHidden: false,\n defaultVisible: false,\n delayHide: 0,\n delayShow: 0,\n followCursor: false,\n interactive: false,\n mutationObserverOptions: {\n attributes: true,\n childList: true,\n subtree: true\n },\n offset: [0, 6],\n trigger: 'hover'\n};\nfunction usePopperTooltip(config, popperOptions) {\n var _popperProps$state, _popperProps$state$mo, _popperProps$state$mo2;\n\n if (config === void 0) {\n config = {};\n }\n\n if (popperOptions === void 0) {\n popperOptions = {};\n }\n\n // Merging options with default options.\n // Keys with undefined values are replaced with the default ones if any.\n // Keys with other values pass through.\n var finalConfig = Object.keys(defaultConfig).reduce(function (config, key) {\n var _extends2;\n\n return _extends({}, config, (_extends2 = {}, _extends2[key] = config[key] !== undefined ? config[key] : defaultConfig[key], _extends2));\n }, config);\n var defaultModifiers = React.useMemo(function () {\n return [{\n name: 'offset',\n options: {\n offset: finalConfig.offset\n }\n }];\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(finalConfig.offset) ? finalConfig.offset : []);\n\n var finalPopperOptions = _extends({}, popperOptions, {\n placement: popperOptions.placement || finalConfig.placement,\n modifiers: popperOptions.modifiers || defaultModifiers\n });\n\n var _React$useState = React.useState(null),\n triggerRef = _React$useState[0],\n setTriggerRef = _React$useState[1];\n\n var _React$useState2 = React.useState(null),\n tooltipRef = _React$useState2[0],\n setTooltipRef = _React$useState2[1];\n\n var _useControlledState = useControlledState({\n initial: finalConfig.defaultVisible,\n value: finalConfig.visible,\n onChange: finalConfig.onVisibleChange\n }),\n visible = _useControlledState[0],\n setVisible = _useControlledState[1];\n\n var timer = React.useRef();\n React.useEffect(function () {\n return function () {\n return clearTimeout(timer.current);\n };\n }, []);\n\n var _usePopper = usePopper(finalConfig.followCursor ? virtualElement : triggerRef, tooltipRef, finalPopperOptions),\n styles = _usePopper.styles,\n attributes = _usePopper.attributes,\n popperProps = _objectWithoutPropertiesLoose(_usePopper, _excluded);\n\n var update = popperProps.update;\n var getLatest = useGetLatest({\n visible: visible,\n triggerRef: triggerRef,\n tooltipRef: tooltipRef,\n finalConfig: finalConfig\n });\n var isTriggeredBy = React.useCallback(function (trigger) {\n return Array.isArray(finalConfig.trigger) ? finalConfig.trigger.includes(trigger) : finalConfig.trigger === trigger;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(finalConfig.trigger) ? finalConfig.trigger : [finalConfig.trigger]);\n var hideTooltip = React.useCallback(function () {\n clearTimeout(timer.current);\n timer.current = window.setTimeout(function () {\n return setVisible(false);\n }, finalConfig.delayHide);\n }, [finalConfig.delayHide, setVisible]);\n var showTooltip = React.useCallback(function () {\n clearTimeout(timer.current);\n timer.current = window.setTimeout(function () {\n return setVisible(true);\n }, finalConfig.delayShow);\n }, [finalConfig.delayShow, setVisible]);\n var toggleTooltip = React.useCallback(function () {\n if (getLatest().visible) {\n hideTooltip();\n } else {\n showTooltip();\n }\n }, [getLatest, hideTooltip, showTooltip]); // Handle click outside\n\n React.useEffect(function () {\n if (!getLatest().finalConfig.closeOnOutsideClick) return;\n\n var handleClickOutside = function handleClickOutside(event) {\n var _event$composedPath;\n\n var _getLatest = getLatest(),\n tooltipRef = _getLatest.tooltipRef,\n triggerRef = _getLatest.triggerRef;\n\n var target = (event.composedPath == null ? void 0 : (_event$composedPath = event.composedPath()) == null ? void 0 : _event$composedPath[0]) || event.target;\n\n if (target instanceof Node) {\n if (tooltipRef != null && triggerRef != null && !tooltipRef.contains(target) && !triggerRef.contains(target)) {\n hideTooltip();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return function () {\n return document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [getLatest, hideTooltip]); // Trigger: click\n\n React.useEffect(function () {\n if (triggerRef == null || !isTriggeredBy('click')) return;\n triggerRef.addEventListener('click', toggleTooltip);\n return function () {\n return triggerRef.removeEventListener('click', toggleTooltip);\n };\n }, [triggerRef, isTriggeredBy, toggleTooltip]); // Trigger: double-click\n\n React.useEffect(function () {\n if (triggerRef == null || !isTriggeredBy('double-click')) return;\n triggerRef.addEventListener('dblclick', toggleTooltip);\n return function () {\n return triggerRef.removeEventListener('dblclick', toggleTooltip);\n };\n }, [triggerRef, isTriggeredBy, toggleTooltip]); // Trigger: right-click\n\n React.useEffect(function () {\n if (triggerRef == null || !isTriggeredBy('right-click')) return;\n\n var preventDefaultAndToggle = function preventDefaultAndToggle(event) {\n // Don't show the context menu\n event.preventDefault();\n toggleTooltip();\n };\n\n triggerRef.addEventListener('contextmenu', preventDefaultAndToggle);\n return function () {\n return triggerRef.removeEventListener('contextmenu', preventDefaultAndToggle);\n };\n }, [triggerRef, isTriggeredBy, toggleTooltip]); // Trigger: focus\n\n React.useEffect(function () {\n if (triggerRef == null || !isTriggeredBy('focus')) return;\n triggerRef.addEventListener('focus', showTooltip);\n triggerRef.addEventListener('blur', hideTooltip);\n return function () {\n triggerRef.removeEventListener('focus', showTooltip);\n triggerRef.removeEventListener('blur', hideTooltip);\n };\n }, [triggerRef, isTriggeredBy, showTooltip, hideTooltip]); // Trigger: hover on trigger\n\n React.useEffect(function () {\n if (triggerRef == null || !isTriggeredBy('hover')) return;\n triggerRef.addEventListener('mouseenter', showTooltip);\n triggerRef.addEventListener('mouseleave', hideTooltip);\n return function () {\n triggerRef.removeEventListener('mouseenter', showTooltip);\n triggerRef.removeEventListener('mouseleave', hideTooltip);\n };\n }, [triggerRef, isTriggeredBy, showTooltip, hideTooltip]); // Trigger: hover on tooltip, keep it open if hovered\n\n React.useEffect(function () {\n if (tooltipRef == null || !isTriggeredBy('hover') || !getLatest().finalConfig.interactive) return;\n tooltipRef.addEventListener('mouseenter', showTooltip);\n tooltipRef.addEventListener('mouseleave', hideTooltip);\n return function () {\n tooltipRef.removeEventListener('mouseenter', showTooltip);\n tooltipRef.removeEventListener('mouseleave', hideTooltip);\n };\n }, [tooltipRef, isTriggeredBy, showTooltip, hideTooltip, getLatest]); // Handle closing tooltip if trigger hidden\n\n var isReferenceHidden = popperProps == null ? void 0 : (_popperProps$state = popperProps.state) == null ? void 0 : (_popperProps$state$mo = _popperProps$state.modifiersData) == null ? void 0 : (_popperProps$state$mo2 = _popperProps$state$mo.hide) == null ? void 0 : _popperProps$state$mo2.isReferenceHidden;\n React.useEffect(function () {\n if (finalConfig.closeOnTriggerHidden && isReferenceHidden) hideTooltip();\n }, [finalConfig.closeOnTriggerHidden, hideTooltip, isReferenceHidden]); // Handle follow cursor\n\n React.useEffect(function () {\n if (!finalConfig.followCursor || triggerRef == null) return;\n\n function setMousePosition(_ref) {\n var clientX = _ref.clientX,\n clientY = _ref.clientY;\n virtualElement.getBoundingClientRect = generateBoundingClientRect(clientX, clientY);\n update == null ? void 0 : update();\n }\n\n triggerRef.addEventListener('mousemove', setMousePosition);\n return function () {\n return triggerRef.removeEventListener('mousemove', setMousePosition);\n };\n }, [finalConfig.followCursor, triggerRef, update]); // Handle tooltip DOM mutation changes (aka mutation observer)\n\n React.useEffect(function () {\n if (tooltipRef == null || update == null || finalConfig.mutationObserverOptions == null) return;\n var observer = new MutationObserver(update);\n observer.observe(tooltipRef, finalConfig.mutationObserverOptions);\n return function () {\n return observer.disconnect();\n };\n }, [finalConfig.mutationObserverOptions, tooltipRef, update]); // Tooltip props getter\n\n var getTooltipProps = function getTooltipProps(args) {\n if (args === void 0) {\n args = {};\n }\n\n return _extends({}, args, {\n style: _extends({}, args.style, styles.popper)\n }, attributes.popper, {\n 'data-popper-interactive': finalConfig.interactive\n });\n }; // Arrow props getter\n\n\n var getArrowProps = function getArrowProps(args) {\n if (args === void 0) {\n args = {};\n }\n\n return _extends({}, args, attributes.arrow, {\n style: _extends({}, args.style, styles.arrow),\n 'data-popper-arrow': true\n });\n };\n\n return _extends({\n getArrowProps: getArrowProps,\n getTooltipProps: getTooltipProps,\n setTooltipRef: setTooltipRef,\n setTriggerRef: setTriggerRef,\n tooltipRef: tooltipRef,\n triggerRef: triggerRef,\n visible: visible\n }, popperProps);\n}\n\nexport { usePopperTooltip };\n//# sourceMappingURL=react-popper-tooltip.js.map\n","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import { css } from '@emotion/css';\nimport React__default, { useState } from 'react';\nimport { usePopperTooltip } from 'react-popper-tooltip';\nimport { renderMarkdown } from '@grafana/data';\nimport { useStyles2, Button, Portal } from '@grafana/ui';\nimport { FlexItem } from '../../QueryEditor/FlexItem.js';\n\nconst OperationInfoButton = React__default.memo(({ definition, operation, innerQueryPlaceholder }) => {\n const styles = useStyles2(getStyles);\n const [show, setShow] = useState(false);\n const { getTooltipProps, setTooltipRef, setTriggerRef, visible } = usePopperTooltip({\n placement: \"top\",\n visible: show,\n offset: [0, 16],\n onVisibleChange: setShow,\n interactive: true,\n trigger: [\"click\"]\n });\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\n Button,\n {\n title: \"Click to show description\",\n ref: setTriggerRef,\n icon: \"info-circle\",\n size: \"sm\",\n variant: \"secondary\",\n fill: \"text\"\n }\n ), visible && /* @__PURE__ */ React__default.createElement(Portal, null, /* @__PURE__ */ React__default.createElement(\"div\", { ref: setTooltipRef, ...getTooltipProps(), className: styles.docBox }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.docBoxHeader }, /* @__PURE__ */ React__default.createElement(\"span\", null, definition.renderer(operation, definition, innerQueryPlaceholder)), /* @__PURE__ */ React__default.createElement(FlexItem, { grow: 1 }), /* @__PURE__ */ React__default.createElement(\n Button,\n {\n icon: \"times\",\n onClick: () => setShow(false),\n fill: \"text\",\n variant: \"secondary\",\n title: \"Remove operation\"\n }\n )), /* @__PURE__ */ React__default.createElement(\n \"div\",\n {\n className: styles.docBoxBody,\n dangerouslySetInnerHTML: { __html: getOperationDocs(definition, operation) }\n }\n ))));\n});\nOperationInfoButton.displayName = \"OperationDocs\";\nconst getStyles = (theme) => {\n return {\n docBox: css({\n overflow: \"hidden\",\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.strong}`,\n boxShadow: theme.shadows.z3,\n maxWidth: \"600px\",\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n zIndex: theme.zIndex.tooltip\n }),\n docBoxHeader: css({\n fontSize: theme.typography.h5.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n paddingBottom: theme.spacing(1),\n display: \"flex\",\n alignItems: \"center\"\n }),\n docBoxBody: css({\n // The markdown paragraph has a marginBottom this removes it\n marginBottom: theme.spacing(-1),\n color: theme.colors.text.secondary\n }),\n signature: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace\n }),\n dropdown: css({\n opacity: 0,\n color: theme.colors.text.secondary\n })\n };\n};\nfunction getOperationDocs(def, op) {\n var _a;\n return renderMarkdown(def.explainHandler ? def.explainHandler(op, def) : (_a = def.documentation) != null ? _a : \"no docs\");\n}\n\nexport { OperationInfoButton };\n//# sourceMappingURL=OperationInfoButton.js.map\n","import { css } from '@emotion/css';\nimport React__default, { useState } from 'react';\nimport '@hello-pangea/dnd';\nimport '@grafana/data';\nimport { useStyles2, Button, Select } from '@grafana/ui';\nimport { OperationInfoButton } from './OperationInfoButton.js';\nimport { FlexItem } from '../../QueryEditor/FlexItem.js';\n\nconst OperationHeader = React__default.memo(\n ({ operation, definition, index, onChange, onRemove, onToggle, queryModeller, dragHandleProps }) => {\n var _a;\n const styles = useStyles2(getStyles);\n const [state, setState] = useState({});\n const onToggleSwitcher = () => {\n if (state.isOpen) {\n setState({ ...state, isOpen: false });\n } else {\n const alternatives = queryModeller.getAlternativeOperations(definition.alternativesKey).map((alt) => ({ label: alt.name, value: alt }));\n setState({ isOpen: true, alternatives });\n }\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, !state.isOpen && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\"div\", { ...dragHandleProps }, (_a = definition.name) != null ? _a : definition.id), /* @__PURE__ */ React__default.createElement(FlexItem, { grow: 1 }), /* @__PURE__ */ React__default.createElement(\"div\", { className: `${styles.operationHeaderButtons} operation-header-show-on-hover` }, /* @__PURE__ */ React__default.createElement(\n Button,\n {\n icon: \"angle-down\",\n size: \"sm\",\n onClick: onToggleSwitcher,\n fill: \"text\",\n variant: \"secondary\",\n title: \"Click to view alternative operations\"\n }\n ), /* @__PURE__ */ React__default.createElement(\n OperationInfoButton,\n {\n definition,\n operation,\n innerQueryPlaceholder: queryModeller.innerQueryPlaceholder\n }\n ), definition.toggleable && /* @__PURE__ */ React__default.createElement(\n Button,\n {\n icon: operation.disabled ? \"eye-slash\" : \"eye\",\n size: \"sm\",\n onClick: () => onToggle(index),\n fill: \"text\",\n variant: \"secondary\",\n title: operation.disabled ? \"Enable operation\" : \"Disable operation\"\n }\n ), /* @__PURE__ */ React__default.createElement(\n Button,\n {\n icon: \"times\",\n size: \"sm\",\n onClick: () => onRemove(index),\n fill: \"text\",\n variant: \"secondary\",\n title: \"Remove operation\"\n }\n ))), state.isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.selectWrapper }, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n autoFocus: true,\n openMenuOnFocus: true,\n placeholder: \"Replace with\",\n options: state.alternatives,\n isOpen: true,\n onCloseMenu: onToggleSwitcher,\n onChange: (value) => {\n if (value.value) {\n const newDef = queryModeller.getOperationDefinition(value.value.id);\n const newParams = [...newDef.defaultParams];\n for (let i = 0; i < Math.min(operation.params.length, newParams.length); i++) {\n if (newDef.params[i].type === definition.params[i].type) {\n newParams[i] = operation.params[i];\n }\n }\n const changedOp = { ...operation, params: newParams, id: value.value.id };\n onChange(\n index,\n definition.changeTypeHandler ? definition.changeTypeHandler(changedOp, newDef) : changedOp\n );\n }\n }\n }\n )));\n }\n);\nOperationHeader.displayName = \"OperationHeader\";\nconst getStyles = (theme) => {\n return {\n header: css({\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(0.5, 0.5, 0.5, 1),\n display: \"flex\",\n alignItems: \"center\"\n }),\n operationHeaderButtons: css({\n opacity: 1\n }),\n selectWrapper: css({\n paddingRight: theme.spacing(2)\n })\n };\n};\n\nexport { OperationHeader };\n//# sourceMappingURL=OperationHeader.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport { toOption } from '@grafana/data';\nimport { AutoSizeInput, Checkbox, useStyles2, Button, Select } from '@grafana/ui';\nimport '../../QueryEditor/types.js';\nimport 'lodash';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport 'react-use';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport 'uuid';\nimport '@grafana/runtime';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction getOperationParamEditor(paramDef) {\n if (paramDef.editor) {\n return paramDef.editor;\n }\n if (paramDef.options) {\n return SelectInputParamEditor;\n }\n switch (paramDef.type) {\n case \"boolean\":\n return BoolInputParamEditor;\n case \"number\":\n case \"string\":\n default:\n return SimpleInputParamEditor;\n }\n}\nfunction SimpleInputParamEditor(props) {\n var _a;\n return /* @__PURE__ */ React__default.createElement(\n AutoSizeInput,\n {\n id: getOperationParamId(props.operationId, props.index),\n defaultValue: (_a = props.value) == null ? undefined : _a.toString(),\n minWidth: props.paramDef.minWidth,\n placeholder: props.paramDef.placeholder,\n title: props.paramDef.description,\n maxWidth: (props.paramDef.minWidth || 20) * 3,\n onCommitChange: (evt) => {\n props.onChange(props.index, evt.currentTarget.value);\n if (props.paramDef.runQueryOnEnter && evt.type === \"keydown\") {\n props.onRunQuery();\n }\n }\n }\n );\n}\nfunction BoolInputParamEditor(props) {\n return /* @__PURE__ */ React__default.createElement(\n Checkbox,\n {\n id: getOperationParamId(props.operationId, props.index),\n value: Boolean(props.value),\n onChange: (evt) => props.onChange(props.index, evt.currentTarget.checked)\n }\n );\n}\nfunction SelectInputParamEditor({\n paramDef,\n value,\n index,\n operationId,\n onChange\n}) {\n var _a, _b;\n const styles = useStyles2(getStyles);\n let selectOptions = paramDef.options;\n if (!((_a = selectOptions[0]) == null ? undefined : _a.label)) {\n selectOptions = paramDef.options.map((option) => ({\n label: option.toString(),\n value: option\n }));\n }\n let valueOption = (_b = selectOptions.find((x) => x.value === value)) != null ? _b : toOption(value);\n if (!value && paramDef.optional) {\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.optionalParam }, /* @__PURE__ */ React__default.createElement(\n Button,\n {\n size: \"sm\",\n variant: \"secondary\",\n title: `Add ${paramDef.name}`,\n icon: \"plus\",\n onClick: () => onChange(index, selectOptions[0].value)\n },\n paramDef.name\n ));\n }\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 0.5, direction: \"row\", alignItems: \"center\" }, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n id: getOperationParamId(operationId, index),\n value: valueOption,\n options: selectOptions,\n placeholder: paramDef.placeholder,\n allowCustomValue: true,\n onChange: (value2) => onChange(index, value2.value),\n width: paramDef.minWidth || \"auto\"\n }\n ), paramDef.optional && /* @__PURE__ */ React__default.createElement(\n Button,\n {\n \"data-testid\": `operations.${index}.remove-param`,\n size: \"sm\",\n fill: \"text\",\n icon: \"times\",\n variant: \"secondary\",\n title: `Remove ${paramDef.name}`,\n onClick: () => onChange(index, \"\")\n }\n ));\n}\nconst getStyles = (theme) => {\n return {\n optionalParam: css({\n marginTop: theme.spacing(1)\n })\n };\n};\nfunction getOperationParamId(operationId, paramIndex) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n\nexport { getOperationParamEditor, getOperationParamId };\n//# sourceMappingURL=OperationParamEditor.js.map\n","import React__default, { useRef, useState, useEffect } from 'react';\nimport '@hello-pangea/dnd';\nimport { useTheme2, Tooltip, Icon, Button } from '@grafana/ui';\nimport { cx, css } from '@emotion/css';\nimport '@grafana/data';\nimport { OperationHeader } from './OperationHeader.js';\nimport { getOperationParamEditor, getOperationParamId } from './OperationParamEditor.js';\nimport { v4 } from 'uuid';\nimport '../../QueryEditor/types.js';\nimport 'lodash';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport 'react-use';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport '@grafana/runtime';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction OperationEditorBody({\n provided,\n flash,\n isConflicting,\n highlight,\n index,\n queryModeller,\n onChange,\n onRemove,\n onToggle,\n operation,\n definition,\n query,\n timeRange,\n onRunQuery,\n datasource\n}) {\n const theme = useTheme2();\n const styles = getStyles(theme, isConflicting);\n const shouldFlash = useFlash(flash);\n const { current: id } = useRef(v4());\n const onParamValueChanged = (paramIdx, value) => {\n const update = { ...operation, params: [...operation.params] };\n update.params[paramIdx] = value;\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n const onAddRestParam = () => {\n const update = { ...operation, params: [...operation.params, \"\"] };\n callParamChangedThenOnChange(definition, update, index, operation.params.length, onChange);\n };\n const onRemoveRestParam = (paramIdx) => {\n const update = {\n ...operation,\n params: [...operation.params.slice(0, paramIdx), ...operation.params.slice(paramIdx + 1)]\n };\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n let restParam;\n if (definition.params.length > 0) {\n const lastParamDef = definition.params[definition.params.length - 1];\n if (lastParamDef.restParam) {\n restParam = renderAddRestParamButton(lastParamDef, onAddRestParam, index, operation.params.length, styles);\n }\n }\n return /* @__PURE__ */ React__default.createElement(\n \"div\",\n {\n className: cx(styles.card, {\n [styles.cardHighlight]: shouldFlash || highlight,\n [styles.cardError]: isConflicting,\n [styles.disabled]: operation.disabled\n }),\n ref: provided.innerRef,\n ...provided.draggableProps,\n \"data-testid\": `operations.${index}.wrapper`\n },\n /* @__PURE__ */ React__default.createElement(\n OperationHeader,\n {\n operation,\n dragHandleProps: provided.dragHandleProps,\n definition,\n index,\n onChange,\n onRemove,\n onToggle,\n queryModeller\n }\n ),\n /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.body }, operation.params.map((param, paramIndex) => {\n const paramDef = definition.params[Math.min(definition.params.length - 1, paramIndex)];\n const Editor = getOperationParamEditor(paramDef);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.paramRow, key: `${paramIndex}-1` }, !paramDef.hideName && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.paramName }, /* @__PURE__ */ React__default.createElement(\"label\", { htmlFor: getOperationParamId(id, paramIndex) }, paramDef.name), paramDef.description && /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: paramDef.description, theme: \"info\" }, /* @__PURE__ */ React__default.createElement(Icon, { name: \"info-circle\", size: \"sm\", className: styles.infoIcon }))), /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.paramValue }, /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 0.5, direction: \"row\", alignItems: \"center\", wrap: false }, /* @__PURE__ */ React__default.createElement(\n Editor,\n {\n index: paramIndex,\n paramDef,\n value: operation.params[paramIndex],\n operation,\n operationId: id,\n onChange: onParamValueChanged,\n onRunQuery,\n query,\n datasource,\n timeRange,\n queryModeller\n }\n ), paramDef.restParam && (operation.params.length > definition.params.length || paramDef.optional) && /* @__PURE__ */ React__default.createElement(\n Button,\n {\n \"data-testid\": `operations.${index}.remove-rest-param`,\n size: \"sm\",\n fill: \"text\",\n icon: \"times\",\n variant: \"secondary\",\n title: `Remove ${paramDef.name}`,\n onClick: () => onRemoveRestParam(paramIndex)\n }\n ))));\n })),\n restParam,\n index < query.operations.length - 1 && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.arrow }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.arrowLine }), /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.arrowArrow }))\n );\n}\nconst getStyles = (theme, isConflicting) => {\n return {\n cardWrapper: css({\n alignItems: \"stretch\"\n }),\n error: css({\n marginBottom: theme.spacing(1)\n }),\n card: css({\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.medium}`,\n cursor: \"grab\",\n borderRadius: theme.shape.radius.default,\n position: \"relative\",\n transition: \"all 0.5s ease-in 0s\",\n height: isConflicting ? \"auto\" : \"100%\"\n }),\n disabled: css({\n opacity: 0.5,\n transition: \"none\"\n }),\n cardError: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.warning.main}`,\n border: `1px solid ${theme.colors.warning.main}`\n }),\n cardHighlight: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.primary.border}`,\n border: `1px solid ${theme.colors.primary.border}`\n }),\n infoIcon: css({\n marginLeft: theme.spacing(0.5),\n color: theme.colors.text.secondary,\n \":hover\": {\n color: theme.colors.text.primary\n }\n }),\n body: css({\n margin: theme.spacing(1, 1, 0.5, 1),\n display: \"table\"\n }),\n paramRow: css({\n label: \"paramRow\",\n display: \"table-row\",\n verticalAlign: \"middle\"\n }),\n paramName: css({\n display: \"table-cell\",\n padding: theme.spacing(0, 1, 0, 0),\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n verticalAlign: \"middle\",\n height: \"32px\"\n }),\n paramValue: css({\n label: \"paramValue\",\n display: \"table-cell\",\n verticalAlign: \"middle\"\n }),\n restParam: css({\n padding: theme.spacing(0, 1, 1, 1)\n }),\n arrow: css({\n position: \"absolute\",\n top: \"0\",\n right: \"-18px\",\n display: \"flex\"\n }),\n arrowLine: css({\n height: \"2px\",\n width: \"8px\",\n backgroundColor: theme.colors.border.strong,\n position: \"relative\",\n top: \"14px\"\n }),\n arrowArrow: css({\n width: 0,\n height: 0,\n borderTop: `5px solid transparent`,\n borderBottom: `5px solid transparent`,\n borderLeft: `7px solid ${theme.colors.border.strong}`,\n position: \"relative\",\n top: \"10px\"\n })\n };\n};\nfunction useFlash(flash) {\n const [keepFlash, setKeepFlash] = useState(true);\n useEffect(() => {\n let t;\n if (flash) {\n t = setTimeout(() => {\n setKeepFlash(false);\n }, 1e3);\n } else {\n setKeepFlash(true);\n }\n return () => clearTimeout(t);\n }, [flash]);\n return keepFlash && flash;\n}\nfunction callParamChangedThenOnChange(def, operation, operationIndex, paramIndex, onChange) {\n if (def.paramChangedHandler) {\n onChange(operationIndex, def.paramChangedHandler(paramIndex, operation, def));\n } else {\n onChange(operationIndex, operation);\n }\n}\nfunction renderAddRestParamButton(paramDef, onAddRestParam, operationIndex, paramIndex, styles) {\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.restParam, key: `${paramIndex}-2` }, /* @__PURE__ */ React__default.createElement(\n Button,\n {\n size: \"sm\",\n icon: \"plus\",\n title: `Add ${paramDef.name}`.trimEnd(),\n variant: \"secondary\",\n onClick: onAddRestParam,\n \"data-testid\": `operations.${operationIndex}.add-rest-param`\n },\n paramDef.name\n ));\n}\n\nexport { OperationEditorBody };\n//# sourceMappingURL=OperationEditorBody.js.map\n","import { cx, css } from '@emotion/css';\nimport React__default from 'react';\nimport { Draggable } from '@hello-pangea/dnd';\nimport '@grafana/data';\nimport { useTheme2, InlineField } from '@grafana/ui';\nimport { OperationEditorBody } from './OperationEditorBody.js';\n\nfunction OperationEditor({\n operation,\n index,\n onRemove,\n onToggle,\n onChange,\n onRunQuery,\n queryModeller,\n query,\n datasource,\n flash,\n highlight,\n timeRange,\n isConflictingOperation\n}) {\n const def = queryModeller.getOperationDefinition(operation.id);\n const theme = useTheme2();\n const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;\n const styles = getStyles(theme);\n if (!def) {\n return /* @__PURE__ */ React__default.createElement(\"span\", null, \"Operation \", operation.id, \" not found\");\n }\n const isInvalid = (isDragging) => {\n if (isDragging) {\n return undefined;\n }\n return isConflicting ? true : undefined;\n };\n return /* @__PURE__ */ React__default.createElement(Draggable, { draggableId: `operation-${index}`, index }, (provided, snapshot) => /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n error: \"You have conflicting label filters\",\n invalid: isInvalid(snapshot.isDragging),\n className: cx(styles.error, styles.cardWrapper)\n },\n /* @__PURE__ */ React__default.createElement(\n OperationEditorBody,\n {\n provided,\n flash,\n highlight,\n isConflicting,\n index,\n operation,\n definition: def,\n onChange,\n onRemove,\n onToggle,\n queryModeller,\n query,\n timeRange,\n onRunQuery,\n datasource\n }\n )\n ));\n}\nconst getStyles = (theme, isConflicting) => {\n return {\n cardWrapper: css({\n alignItems: \"stretch\"\n }),\n error: css({\n marginBottom: theme.spacing(1)\n })\n };\n};\n\nexport { OperationEditor };\n//# sourceMappingURL=OperationEditor.js.map\n","import { css } from '@emotion/css';\nimport React__default, { useState } from 'react';\nimport { DragDropContext, Droppable } from '@hello-pangea/dnd';\nimport { useMountedState, usePrevious } from 'react-use';\nimport '@grafana/data';\nimport { useStyles2, Cascader, Button } from '@grafana/ui';\nimport { OperationEditor } from './OperationEditor.js';\nimport '../../QueryEditor/types.js';\nimport 'lodash';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport 'uuid';\nimport '@grafana/runtime';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction OperationList({\n query,\n datasource,\n queryModeller,\n onChange,\n onRunQuery,\n highlightedOp,\n timeRange,\n isConflictingOperation\n}) {\n const styles = useStyles2(getStyles);\n const { operations } = query;\n const opsToHighlight = useOperationsHighlight(operations);\n const [cascaderOpen, setCascaderOpen] = useState(false);\n const onOperationChange = (index, update) => {\n const updatedList = [...operations];\n updatedList.splice(index, 1, update);\n onChange({ ...query, operations: updatedList });\n };\n const onRemove = (index) => {\n const updatedList = [...operations.slice(0, index), ...operations.slice(index + 1)];\n onChange({ ...query, operations: updatedList });\n };\n const onToggle = (index) => {\n onOperationChange(index, { ...operations[index], disabled: !operations[index].disabled });\n };\n const addOptions = queryModeller.getCategories().map((category) => {\n return {\n value: category,\n label: category,\n items: queryModeller.getOperationsForCategory(category).map((operation) => ({\n value: operation.id,\n label: operation.name,\n isLeaf: true\n }))\n };\n });\n const onAddOperation = (value) => {\n const operationDef = queryModeller.getOperationDefinition(value);\n if (!operationDef) {\n return;\n }\n onChange(operationDef.addOperationHandler(operationDef, query, queryModeller));\n setCascaderOpen(false);\n };\n const onDragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n const updatedList = [...operations];\n const element = updatedList[result.source.index];\n updatedList.splice(result.source.index, 1);\n updatedList.splice(result.destination.index, 0, element);\n onChange({ ...query, operations: updatedList });\n };\n const onCascaderBlur = () => {\n setCascaderOpen(false);\n };\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1, direction: \"column\" }, /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1 }, operations.length > 0 && /* @__PURE__ */ React__default.createElement(DragDropContext, { onDragEnd }, /* @__PURE__ */ React__default.createElement(Droppable, { droppableId: \"sortable-field-mappings\", direction: \"horizontal\" }, (provided) => /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.operationList, ref: provided.innerRef, ...provided.droppableProps }, operations.map((op, index) => {\n return /* @__PURE__ */ React__default.createElement(\n OperationEditor,\n {\n key: op.id + JSON.stringify(op.params) + index,\n queryModeller,\n index,\n operation: op,\n query,\n datasource,\n onChange: onOperationChange,\n onRemove,\n onToggle,\n onRunQuery,\n flash: opsToHighlight[index],\n highlight: highlightedOp === op,\n timeRange,\n isConflictingOperation\n }\n );\n }), provided.placeholder))), /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.addButton }, cascaderOpen ? /* @__PURE__ */ React__default.createElement(\n Cascader,\n {\n options: addOptions,\n onSelect: onAddOperation,\n onBlur: onCascaderBlur,\n autoFocus: true,\n alwaysOpen: true,\n hideActiveLevelLabel: true,\n placeholder: \"Search\"\n }\n ) : /* @__PURE__ */ React__default.createElement(Button, { icon: \"plus\", variant: \"secondary\", onClick: () => setCascaderOpen(true), title: \"Add operation\" }, \"Operations\"))));\n}\nfunction useOperationsHighlight(operations) {\n const isMounted = useMountedState();\n const prevOperations = usePrevious(operations);\n if (!isMounted()) {\n return operations.map(() => false);\n }\n if (!prevOperations) {\n return operations.map(() => true);\n }\n let newOps = [];\n if (prevOperations.length - 1 === operations.length && operations.every((op) => prevOperations.includes(op))) {\n return operations.map(() => false);\n }\n if (prevOperations.length + 1 === operations.length && prevOperations.every((op) => operations.includes(op))) {\n const newOp = operations.find((op) => !prevOperations.includes(op));\n newOps = operations.map((op) => {\n return op === newOp;\n });\n } else {\n newOps = operations.map((op, index) => {\n var _a;\n return !isSameOp(op.id, (_a = prevOperations[index]) == null ? undefined : _a.id);\n });\n }\n return newOps;\n}\nfunction isSameOp(op1, op2) {\n return op1 === op2 || `__${op1}_by` === op2 || op1 === `__${op2}_by`;\n}\nconst getStyles = (theme) => {\n return {\n heading: css({\n label: \"heading\",\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium,\n marginBottom: 0\n }),\n operationList: css({\n label: \"operationList\",\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: theme.spacing(2)\n }),\n addButton: css({\n label: \"addButton\",\n width: 126,\n paddingBottom: theme.spacing(1)\n })\n };\n};\n\nexport { OperationList };\n//# sourceMappingURL=OperationList.js.map\n","import { css } from '@emotion/css';\nimport React__default, { useMemo } from 'react';\nimport '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { useStyles2, Tooltip, Button } from '@grafana/ui';\n\nconst QueryBuilderHints = ({\n datasource,\n query: visualQuery,\n onChange,\n data,\n queryModeller,\n buildVisualQueryFromString,\n buildDataQueryFromQueryString,\n buildQueryStringFromDataQuery\n}) => {\n const styles = useStyles2(getStyles);\n const hints = useMemo(() => {\n var _a;\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const hints2 = (_a = datasource.getQueryHints) == null ? undefined : _a.call(datasource, dataQuery, (data == null ? undefined : data.series) || []).filter((hint) => {\n var _a2;\n return (_a2 = hint.fix) == null ? undefined : _a2.action;\n });\n return hints2 != null ? hints2 : [];\n }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, hints.length > 0 && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, hints.map((hint) => {\n var _a, _b, _c, _d;\n return /* @__PURE__ */ React__default.createElement(Tooltip, { content: `${hint.label} ${(_a = hint.fix) == null ? undefined : _a.label}`, key: hint.type }, /* @__PURE__ */ React__default.createElement(\n Button,\n {\n onClick: () => {\n var _a2, _b2, _c2;\n reportInteraction(\"grafana_query_builder_hints_clicked\", {\n hint: hint.type,\n datasourceType: datasource.type\n });\n if ((_a2 = hint == null ? undefined : hint.fix) == null ? undefined : _a2.action) {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const newQuery = (_b2 = datasource.modifyQuery) == null ? undefined : _b2.call(datasource, dataQuery, hint.fix.action);\n if (newQuery) {\n const newVisualQuery = buildVisualQueryFromString(\n (_c2 = buildQueryStringFromDataQuery(newQuery)) != null ? _c2 : \"\"\n );\n return onChange(newVisualQuery.query);\n }\n }\n },\n fill: \"outline\",\n size: \"sm\",\n className: styles.hint\n },\n \"hint: \",\n ((_b = hint.fix) == null ? undefined : _b.title) || ((_d = (_c = hint.fix) == null ? undefined : _c.action) == null ? undefined : _d.type.toLowerCase().replace(\"_\", \" \"))\n ));\n })));\n};\nQueryBuilderHints.displayName = \"QueryBuilderHints\";\nconst getStyles = (theme) => {\n return {\n container: css`\n display: flex;\n align-items: start;\n `,\n hint: css`\n margin-right: ${theme.spacing(1)};\n `\n };\n};\n\nexport { QueryBuilderHints };\n//# sourceMappingURL=QueryBuilderHints.js.map\n","import 'prismjs';\nimport React__default from 'react';\nimport { OperationExplainedBox } from './OperationExplainedBox.js';\nimport { RawQuery } from './RawQuery.js';\nimport '@grafana/data';\n\nfunction OperationListExplained({\n query,\n queryModeller,\n stepNumber,\n language,\n onMouseEnter,\n onMouseLeave\n}) {\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, query.operations.map((op, index) => {\n var _a;\n const def = queryModeller.getOperationDefinition(op.id);\n if (!def) {\n return `Operation ${op.id} not found`;\n }\n const title = def.renderer(op, def, queryModeller.innerQueryPlaceholder);\n const body = def.explainHandler ? def.explainHandler(op, def) : (_a = def.documentation) != null ? _a : \"no docs\";\n return /* @__PURE__ */ React__default.createElement(\n \"div\",\n {\n key: index,\n onMouseEnter: () => onMouseEnter == null ? undefined : onMouseEnter(op, index),\n onMouseLeave: () => onMouseLeave == null ? undefined : onMouseLeave(op, index)\n },\n /* @__PURE__ */ React__default.createElement(\n OperationExplainedBox,\n {\n stepNumber: index + stepNumber,\n title: /* @__PURE__ */ React__default.createElement(RawQuery, { query: title, language }),\n markdown: body\n }\n )\n );\n }));\n}\n\nexport { OperationListExplained };\n//# sourceMappingURL=OperationListExplained.js.map\n","import { memo } from 'react';\n\nimport { OperationExplainedBox, OperationListExplained, RawQuery } from '@grafana/plugin-ui';\nimport { Stack } from '@grafana/ui';\n\nimport { lokiGrammar } from '../../syntax';\nimport { lokiQueryModeller } from '../LokiQueryModeller';\nimport { buildVisualQueryFromString } from '../parsing';\nimport { LokiVisualQuery } from '../types';\n\nexport const EXPLAIN_LABEL_FILTER_CONTENT = 'Fetch all log lines matching label filters.';\n\nexport interface Props {\n query: string;\n}\n\nexport const LokiQueryBuilderExplained = memo<Props>(({ query }) => {\n const visQuery = buildVisualQueryFromString(query || '').query;\n const lang = { grammar: lokiGrammar, name: 'lokiql' };\n\n return (\n <Stack gap={0} direction=\"column\">\n <OperationExplainedBox\n stepNumber={1}\n title={<RawQuery query={`${lokiQueryModeller.renderLabels(visQuery.labels)}`} language={lang} />}\n >\n {EXPLAIN_LABEL_FILTER_CONTENT}\n </OperationExplainedBox>\n <OperationListExplained<LokiVisualQuery>\n stepNumber={2}\n queryModeller={lokiQueryModeller}\n query={visQuery}\n language={lang}\n />\n </Stack>\n );\n});\n\nLokiQueryBuilderExplained.displayName = 'LokiQueryBuilderExplained';\n","import { css } from '@emotion/css';\nimport { memo } from 'react';\n\nimport { GrafanaTheme2, toOption } from '@grafana/data';\nimport { EditorRows, FlexItem } from '@grafana/plugin-ui';\nimport { AutoSizeInput, IconButton, Select, useStyles2 } from '@grafana/ui';\n\nimport { LokiDatasource } from '../../datasource';\nimport { binaryScalarDefs } from '../binaryScalarOperations';\nimport { LokiVisualQueryBinary } from '../types';\n\nimport { LokiQueryBuilder } from './LokiQueryBuilder';\n\nexport interface Props {\n nestedQuery: LokiVisualQueryBinary;\n datasource: LokiDatasource;\n index: number;\n showExplain: boolean;\n onChange: (index: number, update: LokiVisualQueryBinary) => void;\n onRemove: (index: number) => void;\n onRunQuery: () => void;\n}\n\nexport const NestedQuery = memo<Props>(\n ({ nestedQuery, index, datasource, onChange, onRemove, onRunQuery, showExplain }) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.card}>\n <div className={styles.header}>\n <div className={styles.name}>Operator</div>\n <Select\n aria-label=\"Select operator\"\n width=\"auto\"\n options={operators}\n value={toOption(nestedQuery.operator)}\n onChange={(value) => {\n onChange(index, {\n ...nestedQuery,\n operator: value.value!,\n });\n }}\n />\n <div className={styles.name}>Vector matches</div>\n <div className={styles.vectorMatchWrapper}>\n <Select<LokiVisualQueryBinary['vectorMatchesType']>\n width=\"auto\"\n value={nestedQuery.vectorMatchesType || 'on'}\n allowCustomValue\n options={[\n { value: 'on', label: 'on' },\n { value: 'ignoring', label: 'ignoring' },\n ]}\n onChange={(val) => {\n onChange(index, {\n ...nestedQuery,\n vectorMatchesType: val.value,\n });\n }}\n />\n <AutoSizeInput\n className={styles.vectorMatchInput}\n minWidth={20}\n defaultValue={nestedQuery.vectorMatches}\n onCommitChange={(evt) => {\n onChange(index, {\n ...nestedQuery,\n vectorMatches: evt.currentTarget.value,\n vectorMatchesType: nestedQuery.vectorMatchesType || 'on',\n });\n }}\n />\n </div>\n <FlexItem grow={1} />\n <IconButton name=\"times\" size=\"sm\" onClick={() => onRemove(index)} tooltip=\"Remove nested query\" />\n </div>\n <div className={styles.body}>\n <EditorRows>\n <LokiQueryBuilder\n showExplain={showExplain}\n query={nestedQuery.query}\n datasource={datasource}\n onRunQuery={onRunQuery}\n onChange={(update) => {\n onChange(index, { ...nestedQuery, query: update });\n }}\n />\n </EditorRows>\n </div>\n </div>\n );\n }\n);\n\nconst operators = binaryScalarDefs.map((def) => ({ label: def.sign, value: def.sign }));\n\nNestedQuery.displayName = 'NestedQuery';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n card: css({\n label: 'card',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n }),\n header: css({\n label: 'header',\n padding: theme.spacing(0.5, 0.5, 0.5, 1),\n gap: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n }),\n name: css({\n label: 'name',\n whiteSpace: 'nowrap',\n }),\n body: css({\n label: 'body',\n paddingLeft: theme.spacing(2),\n }),\n vectorMatchInput: css({\n label: 'vectorMatchInput',\n marginLeft: -1,\n }),\n vectorMatchWrapper: css({\n label: 'vectorMatchWrapper',\n display: 'flex',\n }),\n };\n};\n","import { Stack } from '@grafana/ui';\n\nimport { LokiDatasource } from '../../datasource';\nimport { LokiVisualQuery, LokiVisualQueryBinary } from '../types';\n\nimport { NestedQuery } from './NestedQuery';\n\nexport interface Props {\n query: LokiVisualQuery;\n datasource: LokiDatasource;\n showExplain: boolean;\n onChange: (query: LokiVisualQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function NestedQueryList({ query, datasource, onChange, onRunQuery, showExplain }: Props) {\n const nestedQueries = query.binaryQueries ?? [];\n\n const onNestedQueryUpdate = (index: number, update: LokiVisualQueryBinary) => {\n const updatedList = [...nestedQueries];\n updatedList.splice(index, 1, update);\n onChange({ ...query, binaryQueries: updatedList });\n };\n\n const onRemove = (index: number) => {\n const updatedList = [...nestedQueries.slice(0, index), ...nestedQueries.slice(index + 1)];\n onChange({ ...query, binaryQueries: updatedList });\n };\n\n return (\n <Stack direction=\"column\" gap={1}>\n {nestedQueries.map((nestedQuery, index) => (\n <NestedQuery\n key={index.toString()}\n nestedQuery={nestedQuery}\n index={index}\n onChange={onNestedQueryUpdate}\n datasource={datasource}\n onRemove={onRemove}\n onRunQuery={onRunQuery}\n showExplain={showExplain}\n />\n ))}\n </Stack>\n );\n}\n","import { isEqual } from 'lodash';\nimport { memo, useEffect, useMemo, useState } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { DataSourceApi, getDefaultTimeRange, LoadingState, PanelData, SelectableValue, TimeRange } from '@grafana/data';\nimport {\n EditorRow,\n LabelFilters,\n OperationExplainedBox,\n OperationList,\n OperationListExplained,\n OperationsEditorRow,\n QueryBuilderHints,\n RawQuery,\n QueryBuilderLabelFilter,\n QueryBuilderOperation,\n} from '@grafana/plugin-ui';\n\nimport { testIds } from '../../components/LokiQueryEditor';\nimport { LokiDatasource } from '../../datasource';\nimport { escapeLabelValueInSelector } from '../../languageUtils';\nimport logqlGrammar from '../../syntax';\nimport { LokiQuery } from '../../types';\nimport { lokiQueryModeller } from '../LokiQueryModeller';\nimport { isConflictingFilter } from '../operationUtils';\nimport { buildVisualQueryFromString } from '../parsing';\nimport { LokiOperationId, LokiVisualQuery } from '../types';\n\nimport { EXPLAIN_LABEL_FILTER_CONTENT } from './LokiQueryBuilderExplained';\nimport { NestedQueryList } from './NestedQueryList';\n\nexport const TIME_SPAN_TO_TRIGGER_SAMPLES = 5 * 60 * 1000;\nexport interface Props {\n query: LokiVisualQuery;\n datasource: LokiDatasource;\n showExplain: boolean;\n timeRange?: TimeRange;\n onChange: (update: LokiVisualQuery) => void;\n onRunQuery: () => void;\n}\nexport const LokiQueryBuilder = memo<Props>(({ datasource, query, onChange, onRunQuery, showExplain, timeRange }) => {\n const [sampleData, setSampleData] = useState<PanelData>();\n const [highlightedOp, setHighlightedOp] = useState<QueryBuilderOperation | undefined>(undefined);\n const prevQuery = usePrevious(query);\n const prevTimeRange = usePrevious(timeRange);\n\n const onChangeLabels = (labels: QueryBuilderLabelFilter[]) => {\n onChange({ ...query, labels });\n };\n\n const withTemplateVariableOptions = async (optionsPromise: Promise<string[]>): Promise<SelectableValue[]> => {\n const options = await optionsPromise;\n return [...datasource.getVariables(), ...options].map((value) => ({ label: value, value }));\n };\n\n const onGetLabelNames = async (forLabel: Partial<QueryBuilderLabelFilter>): Promise<string[]> => {\n const labelsToConsider = query.labels.filter((x) => x !== forLabel);\n\n const hasEqualityOperation = labelsToConsider.find(\n (filter) => filter.op === '=' || (filter.op === '=~' && new RegExp(filter.value).test('') === false)\n );\n if (labelsToConsider.length === 0 || !hasEqualityOperation) {\n return await datasource.languageProvider.fetchLabels({ timeRange });\n }\n\n const streamSelector = lokiQueryModeller.renderLabels(labelsToConsider);\n const possibleLabelNames = await datasource.languageProvider.fetchLabels({\n streamSelector,\n timeRange,\n });\n const labelsNamesToConsider = labelsToConsider.map((l) => l.label);\n\n // Filter out label names that are already selected\n return possibleLabelNames.filter((label) => !labelsNamesToConsider.includes(label)).sort();\n };\n\n const onGetLabelValues = async (forLabel: Partial<QueryBuilderLabelFilter>) => {\n if (!forLabel.label) {\n return [];\n }\n\n let values;\n const labelsToConsider = query.labels.filter((x) => x !== forLabel);\n // If we have no equality/regex operation with .*, we can't fetch series as it will throw an error, so we fetch label values\n const hasEqualityOperation = labelsToConsider.find(\n (filter) => filter.op === '=' || (filter.op === '=~' && new RegExp(filter.value).test('') === false)\n );\n if (labelsToConsider.length === 0 || !hasEqualityOperation) {\n values = await datasource.languageProvider.fetchLabelValues(forLabel.label, { timeRange });\n } else {\n const streamSelector = lokiQueryModeller.renderLabels(labelsToConsider);\n values = await datasource.languageProvider.fetchLabelValues(forLabel.label, {\n streamSelector,\n timeRange,\n });\n }\n\n return values ? values.map((v) => escapeLabelValueInSelector(v, forLabel.op)) : []; // Escape values in return\n };\n\n const labelFilterRequired: boolean = useMemo(() => {\n const { labels, operations: op } = query;\n if (!labels.length && op.length) {\n // Filter is required when operations are present (empty line contains operation is exception)\n if (op.length === 1 && op[0].id === LokiOperationId.LineContains && op[0].params[0] === '') {\n return false;\n }\n return true;\n }\n return false;\n }, [query]);\n\n useEffect(() => {\n const onGetSampleData = async () => {\n const lokiQuery = { expr: lokiQueryModeller.renderQuery(query), refId: 'data-samples' };\n const range = timeRange ?? getDefaultTimeRange();\n const series = await datasource.getDataSamples(lokiQuery, range);\n const sampleData = { series, state: LoadingState.Done, timeRange: range };\n setSampleData(sampleData);\n };\n\n const updateBasedOnChangedTimeRange =\n prevTimeRange &&\n timeRange &&\n (Math.abs(timeRange.to.valueOf() - prevTimeRange.to.valueOf()) > TIME_SPAN_TO_TRIGGER_SAMPLES ||\n Math.abs(timeRange.from.valueOf() - prevTimeRange.from.valueOf()) > TIME_SPAN_TO_TRIGGER_SAMPLES);\n const updateBasedOnChangedQuery = !isEqual(prevQuery, query);\n if (updateBasedOnChangedTimeRange || updateBasedOnChangedQuery) {\n onGetSampleData().catch(console.error);\n }\n }, [datasource, query, timeRange, prevQuery, prevTimeRange]);\n\n const lang = { grammar: logqlGrammar, name: 'logql' };\n return (\n <div data-testid={testIds.editor}>\n <EditorRow>\n <LabelFilters\n onGetLabelNames={(forLabel: Partial<QueryBuilderLabelFilter>) =>\n withTemplateVariableOptions(onGetLabelNames(forLabel))\n }\n onGetLabelValues={(forLabel: Partial<QueryBuilderLabelFilter>) =>\n withTemplateVariableOptions(onGetLabelValues(forLabel))\n }\n labelsFilters={query.labels}\n onChange={onChangeLabels}\n labelFilterRequired={labelFilterRequired}\n />\n </EditorRow>\n {showExplain && (\n <OperationExplainedBox\n stepNumber={1}\n title={<RawQuery query={`${lokiQueryModeller.renderLabels(query.labels)}`} language={lang} />}\n >\n {EXPLAIN_LABEL_FILTER_CONTENT}\n </OperationExplainedBox>\n )}\n <OperationsEditorRow>\n <OperationList\n queryModeller={lokiQueryModeller}\n query={query}\n onChange={onChange}\n onRunQuery={onRunQuery}\n datasource={datasource as DataSourceApi}\n highlightedOp={highlightedOp}\n isConflictingOperation={(operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) =>\n operation.id === LokiOperationId.LabelFilter && isConflictingFilter(operation, otherOperations)\n }\n />\n <QueryBuilderHints<LokiVisualQuery, LokiQuery>\n datasource={datasource}\n query={query}\n onChange={onChange}\n data={sampleData}\n queryModeller={lokiQueryModeller}\n buildVisualQueryFromString={buildVisualQueryFromString}\n buildDataQueryFromQueryString={(queryString) => ({ expr: queryString, refId: 'hints' })}\n buildQueryStringFromDataQuery={(query) => query.expr}\n />\n </OperationsEditorRow>\n {showExplain && (\n <OperationListExplained<LokiVisualQuery>\n stepNumber={2}\n queryModeller={lokiQueryModeller}\n query={query}\n language={lang}\n onMouseEnter={(op) => {\n setHighlightedOp(op);\n }}\n onMouseLeave={() => {\n setHighlightedOp(undefined);\n }}\n />\n )}\n {query.binaryQueries && query.binaryQueries.length > 0 && (\n <NestedQueryList\n query={query}\n datasource={datasource}\n onChange={onChange}\n onRunQuery={onRunQuery}\n showExplain={showExplain}\n />\n )}\n </div>\n );\n});\n\nLokiQueryBuilder.displayName = 'LokiQueryBuilder';\n","import { EditorRow, EditorFieldGroup, RawQuery } from '@grafana/plugin-ui';\n\nimport { lokiGrammar } from '../../syntax';\n\nexport interface Props {\n query: string;\n}\n\nexport function QueryPreview({ query }: Props) {\n return (\n <EditorRow>\n <EditorFieldGroup>\n <RawQuery query={query} language={{ grammar: lokiGrammar, name: 'lokiql' }} />\n </EditorFieldGroup>\n </EditorRow>\n );\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { useEffect, useReducer } from 'react';\n\nimport { TimeRange } from '@grafana/data';\n\nimport { testIds } from '../../components/LokiQueryEditor';\nimport { LokiDatasource } from '../../datasource';\nimport { LokiQuery } from '../../types';\nimport { lokiQueryModeller } from '../LokiQueryModeller';\nimport { buildVisualQueryFromString } from '../parsing';\nimport { LokiVisualQuery } from '../types';\n\nimport { LokiQueryBuilder } from './LokiQueryBuilder';\nimport { QueryPreview } from './QueryPreview';\n\nexport interface Props {\n query: LokiQuery;\n datasource: LokiDatasource;\n onChange: (update: LokiQuery) => void;\n onRunQuery: () => void;\n showExplain: boolean;\n timeRange?: TimeRange;\n}\n\nexport interface State {\n visQuery?: LokiVisualQuery;\n expr: string;\n}\n\n/**\n * This component is here just to contain the translation logic between string query and the visual query builder model.\n */\nexport function LokiQueryBuilderContainer(props: Props) {\n const { query, onChange, onRunQuery, datasource, showExplain, timeRange } = props;\n const [state, dispatch] = useReducer(stateSlice.reducer, {\n expr: query.expr,\n // Use initial visual query only if query.expr is empty string\n visQuery:\n query.expr === ''\n ? {\n labels: [],\n operations: [{ id: '__line_contains', params: [''] }],\n }\n : undefined,\n });\n\n // Only rebuild visual query if expr changes from outside\n useEffect(() => {\n dispatch(exprChanged(query.expr));\n }, [query.expr]);\n\n const onVisQueryChange = (visQuery: LokiVisualQuery) => {\n const expr = lokiQueryModeller.renderQuery(visQuery);\n dispatch(visualQueryChange({ visQuery, expr }));\n onChange({ ...props.query, expr: expr });\n };\n\n if (!state.visQuery) {\n return null;\n }\n\n return (\n <>\n <LokiQueryBuilder\n query={state.visQuery}\n datasource={datasource}\n onChange={onVisQueryChange}\n onRunQuery={onRunQuery}\n showExplain={showExplain}\n data-testid={testIds.editor}\n timeRange={timeRange}\n />\n {query.expr !== '' && <QueryPreview query={query.expr} />}\n </>\n );\n}\n\nconst initialState: State = { expr: '' };\n\nconst stateSlice = createSlice({\n name: 'loki-builder-container',\n initialState,\n reducers: {\n visualQueryChange: (state, action: PayloadAction<{ visQuery: LokiVisualQuery; expr: string }>) => {\n state.expr = action.payload.expr;\n state.visQuery = action.payload.visQuery;\n },\n exprChanged: (state, action: PayloadAction<string>) => {\n if (!state.visQuery || state.expr !== action.payload) {\n state.expr = action.payload;\n const parseResult = buildVisualQueryFromString(action.payload);\n state.visQuery = parseResult.query;\n }\n },\n },\n});\n\nconst { visualQueryChange, exprChanged } = stateSlice.actions;\n","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport { useToggle } from 'react-use';\nimport { getValueFormat } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { useStyles2, Collapse, Tooltip, Icon } from '@grafana/ui';\nimport '../../QueryEditor/types.js';\nimport 'lodash';\nimport '../../QueryEditor/EditorList.js';\nimport { EditorStack } from '../../QueryEditor/EditorStack.js';\nimport '../../QueryEditor/Space.js';\nimport '../../QueryEditor/QueryHeader.js';\nimport 'react-virtualized-auto-sizer';\nimport 'sql-formatter-plus';\nimport '../../SQLEditor/standardSql/language.js';\nimport 'uuid';\nimport '../../SQLEditor/utils/debugger.js';\nimport '../../SQLEditor/standardSql/macros.js';\nimport '../../QueryEditor/visual-query-builder/AwesomeQueryBuilder.js';\nimport '../../QueryEditor/visual-query-builder/WhereRow.js';\nimport '../../QueryEditor/visual-query-builder/EditorField.js';\nimport 'rxjs';\nimport 'rxjs/operators';\n\nfunction QueryOptionGroup({ title, children, collapsedInfo, queryStats }) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.wrapper }, /* @__PURE__ */ React__default.createElement(\n Collapse,\n {\n className: styles.collapse,\n collapsible: true,\n isOpen,\n onToggle: toggleOpen,\n label: /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 0 }, /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.title }, title), !isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.description }, collapsedInfo.map((x, i) => /* @__PURE__ */ React__default.createElement(\"span\", { key: i }, x))))\n },\n /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.body }, children)\n ), queryStats && config.featureToggles.lokiQuerySplitting && /* @__PURE__ */ React__default.createElement(Tooltip, { content: \"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\" }, /* @__PURE__ */ React__default.createElement(Icon, { tabIndex: 0, name: \"info-circle\", className: styles.tooltip, size: \"sm\" })), queryStats && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.stats }, generateQueryStats(queryStats)));\n}\nconst getStyles = (theme) => {\n return {\n collapse: css({\n backgroundColor: \"unset\",\n border: \"unset\",\n marginBottom: 0,\n [\"> button\"]: {\n padding: theme.spacing(0, 1)\n }\n }),\n wrapper: css({\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"baseline\"\n }),\n title: css({\n flexGrow: 1,\n overflow: \"hidden\",\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: \"flex\"\n }),\n body: css({\n display: \"flex\",\n gap: theme.spacing(2),\n flexWrap: \"wrap\"\n }),\n stats: css({\n margin: \"0px\",\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25)\n })\n };\n};\nconst generateQueryStats = (queryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\nconst convertUnits = (queryStats) => {\n const { text, suffix } = getValueFormat(\"bytes\")(queryStats.bytes, 1);\n return text + suffix;\n};\n\nexport { QueryOptionGroup };\n//# sourceMappingURL=QueryOptionGroup.js.map\n","import { memo } from 'react';\nimport * as React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { InlineField, Input, Stack } from '@grafana/ui';\n\nimport { LokiQuery, LokiQueryDirection, LokiQueryType } from '../types';\n\nexport interface LokiOptionFieldsProps {\n lineLimitValue: string;\n query: LokiQuery;\n onChange: (value: LokiQuery) => void;\n onRunQuery: () => void;\n runOnBlur?: boolean;\n}\n\nexport const queryTypeOptions: Array<SelectableValue<LokiQueryType>> = [\n { value: LokiQueryType.Range, label: 'Range', description: 'Run query over a range of time.' },\n {\n value: LokiQueryType.Instant,\n label: 'Instant',\n description: 'Run query against a single point in time. For this query, the \"To\" time is used.',\n },\n];\n\nexport const queryDirections: Array<SelectableValue<LokiQueryDirection>> = [\n { value: LokiQueryDirection.Backward, label: 'Backward', description: 'Search in backward direction.' },\n {\n value: LokiQueryDirection.Forward,\n label: 'Forward',\n description: 'Search in forward direction.',\n },\n];\n\nif (config.featureToggles.lokiShardSplitting) {\n queryDirections.push({\n value: LokiQueryDirection.Scan,\n label: 'Scan',\n description: 'Experimental. Split the query into smaller units and stop at the requested log line limit.',\n icon: 'exclamation-triangle',\n });\n}\n\nif (config.featureToggles.lokiExperimentalStreaming) {\n queryTypeOptions.push({\n value: LokiQueryType.Stream,\n label: 'Stream',\n description: 'Run a query and keep sending results on an interval',\n });\n}\n\nexport function getQueryDirectionLabel(direction: LokiQueryDirection) {\n return queryDirections.find((queryDirection) => queryDirection.value === direction)?.label ?? 'Unknown';\n}\n\nexport function LokiOptionFields(props: LokiOptionFieldsProps) {\n const { lineLimitValue, onRunQuery, runOnBlur, onChange } = props;\n const query = props.query ?? {};\n\n function onChangeQueryLimit(value: string) {\n const maxLines = preprocessMaxLines(value);\n const nextQuery = { ...query, maxLines };\n onChange(nextQuery);\n reportInteraction('grafana_loki_max_lines_changed', {\n maxLines,\n });\n }\n\n function onMaxLinesChange(e: React.SyntheticEvent<HTMLInputElement>) {\n if (query.maxLines !== preprocessMaxLines(e.currentTarget.value)) {\n onChangeQueryLimit(e.currentTarget.value);\n }\n }\n\n function onReturnKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Enter') {\n onRunQuery();\n }\n }\n\n return (\n <Stack alignItems=\"flex-start\" gap={0.5} aria-label=\"Loki extra field\">\n {/*Line limit field*/}\n <Stack wrap=\"nowrap\" gap={0} data-testid=\"lineLimitField\" aria-label=\"Line limit field\">\n <InlineField label=\"Line limit\" tooltip={'Upper limit for number of log lines returned by query.'}>\n <Input\n className=\"width-4\"\n placeholder=\"auto\"\n type=\"number\"\n min={0}\n onChange={onMaxLinesChange}\n onKeyDown={onReturnKeyDown}\n value={lineLimitValue}\n onBlur={() => {\n if (runOnBlur) {\n onRunQuery();\n }\n }}\n />\n </InlineField>\n </Stack>\n </Stack>\n );\n}\n\nexport default memo(LokiOptionFields);\n\nexport function preprocessMaxLines(value: string): number | undefined {\n const maxLines = parseInt(value, 10);\n if (isNaN(maxLines) || maxLines < 0) {\n return undefined;\n }\n\n return maxLines;\n}\n","import { trim } from 'lodash';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport * as React from 'react';\n\nimport { CoreApp, isValidGrafanaDuration, LogSortOrderChangeEvent, LogsSortOrder, store } from '@grafana/data';\nimport { EditorField, EditorRow, QueryOptionGroup } from '@grafana/plugin-ui';\nimport { getAppEvents } from '@grafana/runtime';\nimport { AutoSizeInput, RadioButtonGroup } from '@grafana/ui';\n\nimport {\n getQueryDirectionLabel,\n preprocessMaxLines,\n queryDirections,\n queryTypeOptions,\n} from '../../components/LokiOptionFields';\nimport { placeHolderScopedVars } from '../../components/monaco-query-field/monaco-completion-provider/validation';\nimport { LokiDatasource } from '../../datasource';\nimport { getLokiQueryType, isLogsQuery } from '../../queryUtils';\nimport { LokiQuery, LokiQueryDirection, LokiQueryType, QueryStats } from '../../types';\n\nexport interface Props {\n query: LokiQuery;\n onChange: (update: LokiQuery) => void;\n onRunQuery: () => void;\n app?: CoreApp;\n queryStats: QueryStats | null;\n datasource: LokiDatasource;\n}\n\nexport const LokiQueryBuilderOptions = React.memo<Props>(\n ({ app, query, onChange, onRunQuery, queryStats, datasource }) => {\n const maxLines = datasource.maxLines;\n\n useEffect(() => {\n if (app !== CoreApp.Explore && app !== CoreApp.Dashboard && app !== CoreApp.PanelEditor) {\n return;\n }\n // Initialize the query direction according to the current environment.\n if (!query.direction) {\n onChange({ ...query, direction: getDefaultQueryDirection(app) });\n }\n }, [app, onChange, query]);\n\n useEffect(() => {\n if (query.step && !isValidGrafanaDuration(`${query.step}`) && parseInt(query.step, 10)) {\n onChange({\n ...query,\n step: `${parseInt(query.step, 10)}s`,\n });\n }\n }, [onChange, query]);\n\n const onQueryTypeChange = (value: LokiQueryType) => {\n onChange({ ...query, queryType: value });\n onRunQuery();\n };\n\n const onQueryDirectionChange = useCallback(\n (value: LokiQueryDirection) => {\n onChange({ ...query, direction: value });\n onRunQuery();\n },\n [onChange, onRunQuery, query]\n );\n\n const onLegendFormatChanged = (evt: React.FormEvent<HTMLInputElement>) => {\n onChange({ ...query, legendFormat: evt.currentTarget.value });\n onRunQuery();\n };\n\n function onMaxLinesChange(e: React.SyntheticEvent<HTMLInputElement>) {\n const newMaxLines = preprocessMaxLines(e.currentTarget.value);\n if (query.maxLines !== newMaxLines) {\n onChange({ ...query, maxLines: newMaxLines });\n onRunQuery();\n }\n }\n\n function onStepChange(e: React.SyntheticEvent<HTMLInputElement>) {\n onChange({ ...query, step: trim(e.currentTarget.value) });\n onRunQuery();\n }\n\n useEffect(() => {\n if (app !== CoreApp.Dashboard && app !== CoreApp.PanelEditor) {\n return;\n }\n const subscription = getAppEvents().subscribe(LogSortOrderChangeEvent, (sortEvent: LogSortOrderChangeEvent) => {\n if (query.direction === LokiQueryDirection.Scan) {\n return;\n }\n const newDirection =\n sortEvent.payload.order === LogsSortOrder.Ascending\n ? LokiQueryDirection.Forward\n : LokiQueryDirection.Backward;\n if (newDirection !== query.direction) {\n onQueryDirectionChange(newDirection);\n }\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [app, onQueryDirectionChange, query.direction]);\n\n let queryType = getLokiQueryType(query);\n const interpolatedQueries = datasource.interpolateVariablesInQueries([query], placeHolderScopedVars);\n const isLogQuery = isLogsQuery(interpolatedQueries[0]?.expr ?? '');\n const filteredQueryTypeOptions = isLogQuery\n ? queryTypeOptions.filter((o) => o.value !== LokiQueryType.Instant)\n : queryTypeOptions;\n\n // if the state's queryType is still Instant, trigger a change to range for log queries\n if (isLogQuery && queryType === LokiQueryType.Instant) {\n onChange({ ...query, queryType: LokiQueryType.Range });\n queryType = LokiQueryType.Range;\n }\n\n const isValidStep = useMemo(() => {\n if (!query.step) {\n return true;\n }\n\n if (typeof query.step === 'string') {\n // If we use a variable as step, we consider it valid\n if (datasource.getVariables().includes(query.step)) {\n return true;\n }\n // Check if the step is a valid Grafana duration\n return isValidGrafanaDuration(query.step) && !isNaN(parseInt(query.step, 10));\n }\n\n return false;\n }, [query.step, datasource]);\n\n return (\n <EditorRow>\n <QueryOptionGroup\n title=\"Options\"\n collapsedInfo={getCollapsedInfo(query, queryType, maxLines, isLogQuery, isValidStep, query.direction)}\n queryStats={queryStats}\n >\n <EditorField\n label=\"Legend\"\n tooltip=\"Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname.\"\n >\n <AutoSizeInput\n placeholder=\"{{label}}\"\n type=\"string\"\n minWidth={14}\n defaultValue={query.legendFormat}\n onCommitChange={onLegendFormatChanged}\n />\n </EditorField>\n {filteredQueryTypeOptions.length > 1 && (\n <EditorField label=\"Type\">\n <RadioButtonGroup options={filteredQueryTypeOptions} value={queryType} onChange={onQueryTypeChange} />\n </EditorField>\n )}\n {isLogQuery && (\n <>\n <EditorField label=\"Line limit\" tooltip=\"Upper limit for number of log lines returned by query.\">\n <AutoSizeInput\n className=\"width-4\"\n placeholder={maxLines.toString()}\n type=\"number\"\n min={0}\n defaultValue={query.maxLines?.toString() ?? ''}\n onCommitChange={onMaxLinesChange}\n />\n </EditorField>\n <EditorField label=\"Direction\" tooltip=\"Direction to search for logs.\">\n <RadioButtonGroup\n options={queryDirections}\n value={query.direction ?? getDefaultQueryDirection(app)}\n onChange={onQueryDirectionChange}\n />\n </EditorField>\n </>\n )}\n {!isLogQuery && (\n <>\n <EditorField\n label=\"Step\"\n tooltip=\"Use the step parameter when making metric queries to Loki. If not filled, Grafana's calculated interval will be used. Example valid values: 1s, 5m, 10h, 1d.\"\n invalid={!isValidStep}\n error={'Invalid step. Example valid values: 1s, 5m, 10h, 1d.'}\n >\n <AutoSizeInput\n className=\"width-6\"\n placeholder={'auto'}\n type=\"string\"\n value={query.step ?? ''}\n onCommitChange={onStepChange}\n />\n </EditorField>\n </>\n )}\n </QueryOptionGroup>\n </EditorRow>\n );\n }\n);\n\nfunction getCollapsedInfo(\n query: LokiQuery,\n queryType: LokiQueryType,\n maxLines: number,\n isLogQuery: boolean,\n isValidStep: boolean,\n direction: LokiQueryDirection | undefined\n): string[] {\n const queryTypeLabel = queryTypeOptions.find((x) => x.value === queryType);\n\n const items: string[] = [];\n\n if (query.legendFormat) {\n items.push(`Legend: ${query.legendFormat}`);\n }\n\n items.push(`Type: ${queryTypeLabel?.label}`);\n\n if (isLogQuery && direction) {\n items.push(`Line limit: ${query.maxLines ?? maxLines}`);\n items.push(`Direction: ${getQueryDirectionLabel(direction)}`);\n } else {\n if (query.step) {\n items.push(`Step: ${isValidStep ? query.step : 'Invalid value'}`);\n }\n }\n\n return items;\n}\n\nfunction getDefaultQueryDirection(app?: CoreApp) {\n if (app !== CoreApp.Explore) {\n /**\n * The default direction is backward because the default sort order is Descending.\n * See:\n * - public/app/features/explore/Logs/Logs.tsx\n * - public/app/plugins/panel/logs/module.tsx\n */\n return LokiQueryDirection.Backward;\n }\n // See app/features/explore/Logs/utils/logs\n const key = 'grafana.explore.logs.sortOrder';\n const storedOrder = store.get(key) || LogsSortOrder.Descending;\n return storedOrder === LogsSortOrder.Ascending ? LokiQueryDirection.Forward : LokiQueryDirection.Backward;\n}\n\nLokiQueryBuilderOptions.displayName = 'LokiQueryBuilderOptions';\n","import { lazy, Suspense } from 'react';\n\nimport { Props } from './MonacoQueryFieldProps';\n\nconst Field = lazy(() => import(/* webpackChunkName: \"loki-query-field\" */ './MonacoQueryField'));\n\nexport const MonacoQueryFieldLazy = (props: Props) => {\n return (\n <Suspense fallback={null}>\n <Field {...props} />\n </Suspense>\n );\n};\n","import { useRef } from 'react';\n\nimport { MonacoQueryFieldLazy } from './MonacoQueryFieldLazy';\nimport { Props as MonacoProps } from './MonacoQueryFieldProps';\n\nexport type Props = Omit<MonacoProps, 'onRunQuery' | 'onBlur'> & {\n onChange: (query: string) => void;\n onRunQuery: () => void;\n onQueryType?: (query: string) => void;\n};\n\nexport const MonacoQueryFieldWrapper = (props: Props) => {\n const lastRunValueRef = useRef<string | null>(null);\n const { onRunQuery, onChange, ...rest } = props;\n\n const handleRunQuery = (value: string) => {\n lastRunValueRef.current = value;\n onChange(value);\n onRunQuery();\n };\n\n const handleBlur = (value: string) => {\n onChange(value);\n };\n\n return <MonacoQueryFieldLazy onRunQuery={handleRunQuery} onBlur={handleBlur} onChange={onChange} {...rest} />;\n};\n","import { PureComponent, ReactNode } from 'react';\n\nimport { QueryEditorProps } from '@grafana/data';\n\nimport { LokiDatasource } from '../datasource';\nimport { shouldRefreshLabels } from '../languageUtils';\nimport { LokiQuery, LokiOptions } from '../types';\n\nimport { MonacoQueryFieldWrapper } from './monaco-query-field/MonacoQueryFieldWrapper';\n\nexport interface LokiQueryFieldProps extends QueryEditorProps<LokiDatasource, LokiQuery, LokiOptions> {\n ExtraFieldElement?: ReactNode;\n placeholder?: string;\n 'data-testid'?: string;\n}\n\ninterface LokiQueryFieldState {\n labelsLoaded: boolean;\n}\n\nexport class LokiQueryField extends PureComponent<LokiQueryFieldProps, LokiQueryFieldState> {\n _isMounted = false;\n\n constructor(props: LokiQueryFieldProps) {\n super(props);\n\n this.state = { labelsLoaded: false };\n }\n\n async componentDidMount() {\n this._isMounted = true;\n await this.props.datasource.languageProvider.start(this.props.range);\n if (this._isMounted) {\n this.setState({ labelsLoaded: true });\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n componentDidUpdate(prevProps: LokiQueryFieldProps) {\n const {\n range,\n datasource: { languageProvider },\n } = this.props;\n const refreshLabels = shouldRefreshLabels(range, prevProps.range);\n // We want to refresh labels when range changes (we round up intervals to a minute)\n if (refreshLabels) {\n languageProvider.fetchLabels({ timeRange: range });\n }\n }\n\n onChangeQuery = (value: string, override?: boolean) => {\n // Send text change to parent\n const { query, onChange, onRunQuery } = this.props;\n if (onChange) {\n const nextQuery = { ...query, expr: value };\n onChange(nextQuery);\n\n if (override && onRunQuery) {\n onRunQuery();\n }\n }\n };\n\n render() {\n const { ExtraFieldElement, query, datasource, history, onRunQuery, range } = this.props;\n const placeholder = this.props.placeholder ?? 'Enter a Loki query (run with Shift+Enter)';\n\n return (\n <>\n <div\n className=\"gf-form-inline gf-form-inline--xs-view-flex-column flex-grow-1\"\n data-testid={this.props['data-testid']}\n >\n <div className=\"gf-form--grow flex-shrink-1 min-width-15\">\n <MonacoQueryFieldWrapper\n datasource={datasource}\n history={history ?? []}\n onChange={this.onChangeQuery}\n onRunQuery={onRunQuery}\n initialValue={query.expr ?? ''}\n placeholder={placeholder}\n timeRange={range}\n />\n </div>\n </div>\n {ExtraFieldElement}\n </>\n );\n }\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { testIds } from '../../components/LokiQueryEditor';\nimport { LokiQueryField } from '../../components/LokiQueryField';\nimport { LokiQueryEditorProps } from '../../components/types';\n\nimport { LokiQueryBuilderExplained } from './LokiQueryBuilderExplained';\n\ntype Props = LokiQueryEditorProps & {\n showExplain: boolean;\n};\n\nexport function LokiQueryCodeEditor({\n query,\n datasource,\n range,\n onRunQuery,\n onChange,\n data,\n app,\n showExplain,\n history,\n}: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <LokiQueryField\n datasource={datasource}\n query={query}\n range={range}\n onRunQuery={onRunQuery}\n onChange={onChange}\n history={history}\n data={data}\n app={app}\n data-testid={testIds.editor}\n />\n {showExplain && <LokiQueryBuilderExplained query={query.expr} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n maxWidth: '100%',\n '.gf-form': {\n marginBottom: 0.5,\n },\n }),\n buttonGroup: css({\n border: `1px solid ${theme.colors.border.medium}`,\n borderTop: 'none',\n padding: theme.spacing(0.5, 0.5, 0.5, 0.5),\n marginBottom: theme.spacing(0.5),\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'end',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n hint: css({\n color: theme.colors.text.disabled,\n whiteSpace: 'nowrap',\n cursor: 'help',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { RawQuery } from '@grafana/plugin-ui';\nimport { Button, Card, useStyles2 } from '@grafana/ui';\n\nimport logqlGrammar from '../../syntax';\nimport { lokiQueryModeller } from '../LokiQueryModeller';\nimport { LokiQueryPattern } from '../types';\n\ntype Props = {\n pattern: LokiQueryPattern;\n hasNewQueryOption: boolean;\n hasPreviousQuery: boolean;\n selectedPatternName: string | null;\n setSelectedPatternName: (name: string | null) => void;\n onPatternSelect: (pattern: LokiQueryPattern, selectAsNewQuery?: boolean) => void;\n};\n\nexport const QueryPattern = (props: Props) => {\n const { pattern, onPatternSelect, hasNewQueryOption, hasPreviousQuery, selectedPatternName, setSelectedPatternName } =\n props;\n\n const styles = useStyles2(getStyles);\n const lang = { grammar: logqlGrammar, name: 'logql' };\n\n return (\n <Card noMargin className={styles.card}>\n <Card.Heading>{pattern.name}</Card.Heading>\n <div className={styles.rawQueryContainer}>\n <RawQuery\n query={lokiQueryModeller.renderQuery({ labels: [], operations: pattern.operations })}\n language={lang}\n className={styles.rawQuery}\n />\n </div>\n <Card.Actions>\n {selectedPatternName !== pattern.name ? (\n <Button\n size=\"sm\"\n onClick={() => {\n if (hasPreviousQuery) {\n // If user has previous query, we need to confirm that they want to replace it\n setSelectedPatternName(pattern.name);\n } else {\n onPatternSelect(pattern);\n }\n }}\n >\n Use this query\n </Button>\n ) : (\n <>\n <div className={styles.spacing}>\n {`If you would like to use this query, ${\n hasNewQueryOption\n ? 'you can either replace your current query or create a new query'\n : 'your current query will be replaced'\n }.`}\n </div>\n <Button size=\"sm\" fill=\"outline\" onClick={() => setSelectedPatternName(null)}>\n Back\n </Button>\n <Button\n size=\"sm\"\n onClick={() => {\n onPatternSelect(pattern);\n }}\n >\n Apply to query\n </Button>\n {hasNewQueryOption && (\n <Button\n size=\"sm\"\n onClick={() => {\n onPatternSelect(pattern, true);\n }}\n >\n Create new query\n </Button>\n )}\n </>\n )}\n </Card.Actions>\n </Card>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n card: css({\n width: '49.5%',\n display: 'flex',\n flexDirection: 'column',\n }),\n rawQueryContainer: css({\n flexGrow: 1,\n }),\n rawQuery: css({\n backgroundColor: theme.colors.background.primary,\n padding: theme.spacing(1),\n marginTop: theme.spacing(1),\n }),\n spacing: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { capitalize } from 'lodash';\nimport { useMemo, useState } from 'react';\n\nimport { CoreApp, GrafanaTheme2, getNextRefId } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { Button, Collapse, Modal, Stack, useStyles2 } from '@grafana/ui';\n\nimport { LokiQuery } from '../../types';\nimport { lokiQueryModeller } from '../LokiQueryModeller';\nimport { operationDefinitions } from '../operations';\nimport { buildVisualQueryFromString } from '../parsing';\nimport { LokiOperationId, LokiQueryPattern, LokiQueryPatternType, LokiVisualQueryOperationCategory } from '../types';\n\nimport { QueryPattern } from './QueryPattern';\n\ntype Props = {\n isOpen: boolean;\n query: LokiQuery;\n queries: DataQuery[] | undefined;\n app?: CoreApp;\n onClose: () => void;\n onChange: (query: LokiQuery) => void;\n onAddQuery?: (query: LokiQuery) => void;\n};\n\nconst keepOperationCategories: string[] = [\n LokiVisualQueryOperationCategory.Formats,\n LokiVisualQueryOperationCategory.LineFilters,\n LokiVisualQueryOperationCategory.LabelFilters,\n];\nconst excludeOperationIds: string[] = [LokiOperationId.Unwrap];\nconst keepOperations = operationDefinitions\n .filter(\n (operation) =>\n operation.category &&\n keepOperationCategories.includes(operation.category) &&\n !excludeOperationIds.includes(operation.id)\n )\n .map((operation) => operation.id);\n\nexport const QueryPatternsModal = (props: Props) => {\n const { isOpen, onClose, onChange, onAddQuery, query, queries, app } = props;\n const [openTabs, setOpenTabs] = useState<string[]>([]);\n const [selectedPatternName, setSelectedPatternName] = useState<string | null>(null);\n\n const styles = useStyles2(getStyles);\n const hasNewQueryOption = !!onAddQuery;\n const hasPreviousQuery = useMemo(\n () => buildVisualQueryFromString(query.expr).query.operations.length > 0,\n [query.expr]\n );\n\n const onPatternSelect = (pattern: LokiQueryPattern, selectAsNewQuery = false) => {\n const visualQuery = buildVisualQueryFromString(selectAsNewQuery ? '' : query.expr);\n reportInteraction('grafana_loki_query_patterns_selected', {\n version: 'v2',\n app: app ?? '',\n editorMode: query.editorMode,\n selectedPattern: pattern.name,\n preSelectedOperationsCount: visualQuery.query.operations.length,\n preSelectedLabelsCount: visualQuery.query.labels.length,\n createNewQuery: hasNewQueryOption && selectAsNewQuery,\n });\n\n // Filter operations in the original query except those we configured to keep\n visualQuery.query.operations = visualQuery.query.operations.filter((op) => keepOperations.includes(op.id));\n // Filter operations in the pattern that are present in the original query\n const patternOperations = pattern.operations.filter(\n (patternOp) => visualQuery.query.operations.findIndex((op) => op.id === patternOp.id) < 0\n );\n visualQuery.query.operations = [...visualQuery.query.operations, ...patternOperations];\n\n if (hasNewQueryOption && selectAsNewQuery) {\n onAddQuery({\n ...query,\n refId: getNextRefId(queries ?? [query]),\n expr: lokiQueryModeller.renderQuery(visualQuery.query),\n });\n } else {\n onChange({\n ...query,\n expr: lokiQueryModeller.renderQuery(visualQuery.query),\n });\n }\n setSelectedPatternName(null);\n onClose();\n };\n\n return (\n <Modal isOpen={isOpen} title=\"Kick start your query\" onDismiss={onClose} className={styles.modal}>\n <div className={styles.spacing}>\n Kick start your query by selecting one of these queries. You can then continue to complete your query.\n </div>\n {Object.values(LokiQueryPatternType).map((patternType) => {\n return (\n <Collapse\n key={patternType}\n label={`${capitalize(patternType)} query starters`}\n isOpen={openTabs.includes(patternType)}\n onToggle={() =>\n setOpenTabs((tabs) =>\n // close tab if it's already open, otherwise open it\n tabs.includes(patternType) ? tabs.filter((t) => t !== patternType) : [...tabs, patternType]\n )\n }\n >\n <Stack wrap justifyContent=\"space-between\">\n {lokiQueryModeller\n .getQueryPatterns()\n .filter((pattern) => pattern.type === patternType)\n .map((pattern) => (\n <QueryPattern\n key={pattern.name}\n pattern={pattern}\n hasNewQueryOption={hasNewQueryOption}\n hasPreviousQuery={hasPreviousQuery}\n onPatternSelect={onPatternSelect}\n selectedPatternName={selectedPatternName}\n setSelectedPatternName={setSelectedPatternName}\n />\n ))}\n </Stack>\n </Collapse>\n );\n })}\n <Button variant=\"secondary\" onClick={onClose}>\n Close\n </Button>\n </Modal>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n spacing: css({\n marginBottom: theme.spacing(1),\n }),\n modal: css({\n width: '85vw',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n }),\n };\n};\n","import { QueryEditorMode } from '@grafana/plugin-ui';\n\nimport { LokiQuery, LokiQueryType } from '../types';\n\nconst queryEditorModeDefaultLocalStorageKey = 'LokiQueryEditorModeDefault';\n\nexport function changeEditorMode(query: LokiQuery, editorMode: QueryEditorMode, onChange: (query: LokiQuery) => void) {\n // If empty query store new mode as default\n if (query.expr === '') {\n window.localStorage.setItem(queryEditorModeDefaultLocalStorageKey, editorMode);\n }\n\n onChange({ ...query, editorMode });\n}\n\nexport function getDefaultEditorMode(expr: string) {\n // If we already have an expression default to code view\n if (expr != null && expr !== '') {\n return QueryEditorMode.Code;\n }\n\n const value: string | null = window.localStorage.getItem(queryEditorModeDefaultLocalStorageKey);\n switch (value) {\n case 'code':\n return QueryEditorMode.Code;\n\n case 'builder':\n default:\n return QueryEditorMode.Builder;\n }\n}\n\n/**\n * Returns query with defaults, and boolean true/false depending on change was required\n */\nexport function getQueryWithDefaults(query: LokiQuery): LokiQuery {\n // If no expr (ie new query) then default to builder\n let result = query;\n\n if (!query.editorMode) {\n result = { ...query, editorMode: getDefaultEditorMode(query.expr) };\n }\n\n if (query.expr == null) {\n result = { ...result, expr: '' };\n }\n\n if (query.queryType == null) {\n // Default to range query\n result = { ...result, queryType: LokiQueryType.Range };\n }\n\n return result;\n}\n","import { DateTime, isDateTime, TimeRange } from '@grafana/data';\n\nimport { LokiQueryType } from '../types';\n\n/**\n * This function compares two time values. If the first is absolute, it compares them using `DateTime.isSame`.\n *\n * @param {(DateTime | string)} time1\n * @param {(DateTime | string | undefined)} time2\n */\nfunction compareTime(time1: DateTime | string | undefined, time2: DateTime | string | undefined) {\n if (!time1 || !time2) {\n return false;\n }\n\n const isAbsolute = isDateTime(time1);\n\n if (isAbsolute) {\n return time1.isSame(time2);\n }\n\n return time1 === time2;\n}\n\nexport function shouldUpdateStats(\n query: string,\n prevQuery: string | undefined,\n timeRange: TimeRange | undefined,\n prevTimeRange: TimeRange | undefined,\n queryType: LokiQueryType | undefined,\n prevQueryType: LokiQueryType | undefined\n): boolean {\n if (prevQuery === undefined || query.trim() !== prevQuery.trim() || queryType !== prevQueryType) {\n return true;\n }\n\n if (\n compareTime(timeRange?.raw.from, prevTimeRange?.raw.from) &&\n compareTime(timeRange?.raw.to, prevTimeRange?.raw.to)\n ) {\n return false;\n }\n\n return true;\n}\n","import { isEqual } from 'lodash';\nimport { memo, SyntheticEvent, useCallback, useEffect, useId, useState } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { CoreApp, LoadingState } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport {\n EditorHeader,\n EditorRows,\n FlexItem,\n QueryEditorModeToggle,\n QueryHeaderSwitch,\n QueryEditorMode,\n} from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, ConfirmModal, Space, Stack } from '@grafana/ui';\n\nimport { LabelBrowserModal } from '../querybuilder/components/LabelBrowserModal';\nimport { LokiQueryBuilderContainer } from '../querybuilder/components/LokiQueryBuilderContainer';\nimport { LokiQueryBuilderOptions } from '../querybuilder/components/LokiQueryBuilderOptions';\nimport { LokiQueryCodeEditor } from '../querybuilder/components/LokiQueryCodeEditor';\nimport { QueryPatternsModal } from '../querybuilder/components/QueryPatternsModal';\nimport { buildVisualQueryFromString } from '../querybuilder/parsing';\nimport { changeEditorMode, getQueryWithDefaults } from '../querybuilder/state';\nimport { LokiQuery, QueryStats } from '../types';\n\nimport { shouldUpdateStats } from './stats';\nimport { LokiQueryEditorProps } from './types';\n\nexport const testIds = {\n editor: 'loki-editor',\n};\n\nexport const lokiQueryEditorExplainKey = 'LokiQueryEditorExplainDefault';\n\nexport const LokiQueryEditor = memo<LokiQueryEditorProps>((props) => {\n const id = useId();\n const { onChange, onRunQuery, onAddQuery, data, app, queries, datasource, range: timeRange } = props;\n const [parseModalOpen, setParseModalOpen] = useState(false);\n const [queryPatternsModalOpen, setQueryPatternsModalOpen] = useState(false);\n const [dataIsStale, setDataIsStale] = useState(false);\n const [labelBrowserVisible, setLabelBrowserVisible] = useState(false);\n const [queryStats, setQueryStats] = useState<QueryStats | null>(null);\n const [explain, setExplain] = useState(window.localStorage.getItem(lokiQueryEditorExplainKey) === 'true');\n\n const previousTimeRange = usePrevious(timeRange);\n\n const query = getQueryWithDefaults(props.query);\n const previousQueryExpr = usePrevious(query.expr);\n const previousQueryType = usePrevious(query.queryType);\n\n // This should be filled in from the defaults by now.\n const editorMode = query.editorMode!;\n\n const onExplainChange = (event: SyntheticEvent<HTMLInputElement>) => {\n window.localStorage.setItem(lokiQueryEditorExplainKey, event.currentTarget.checked ? 'true' : 'false');\n setExplain(event.currentTarget.checked);\n };\n\n const onEditorModeChange = useCallback(\n (newEditorMode: QueryEditorMode) => {\n reportInteraction('grafana_loki_editor_mode_clicked', {\n newEditor: newEditorMode,\n previousEditor: query.editorMode ?? '',\n newQuery: !query.expr,\n app: app ?? '',\n });\n\n if (newEditorMode === QueryEditorMode.Builder) {\n const result = buildVisualQueryFromString(query.expr || '');\n // If there are errors, give user a chance to decide if they want to go to builder as that can lose some data.\n if (result.errors.length) {\n setParseModalOpen(true);\n return;\n }\n }\n changeEditorMode(query, newEditorMode, onChange);\n },\n [onChange, query, app]\n );\n\n useEffect(() => {\n setDataIsStale(false);\n }, [data]);\n\n const onChangeInternal = (query: LokiQuery) => {\n if (!isEqual(query, props.query)) {\n setDataIsStale(true);\n }\n onChange(query);\n };\n\n const onClickLabelBrowserButton = () => {\n reportInteraction('grafana_loki_label_browser_opened', {\n app: app,\n });\n\n setLabelBrowserVisible((visible) => !visible);\n };\n\n useEffect(() => {\n const shouldUpdate = shouldUpdateStats(\n query.expr,\n previousQueryExpr,\n timeRange,\n previousTimeRange,\n query.queryType,\n previousQueryType\n );\n if (shouldUpdate && timeRange) {\n const makeAsyncRequest = async () => {\n // overwriting the refId that is later used to cancel inflight queries with the same ID.\n const stats = await datasource.getStats({ ...query, refId: `${id}_${query.refId}` }, timeRange);\n setQueryStats(stats);\n };\n makeAsyncRequest();\n }\n }, [datasource, timeRange, previousTimeRange, query, previousQueryExpr, previousQueryType, setQueryStats, id]);\n\n return (\n <>\n <ConfirmModal\n isOpen={parseModalOpen}\n title=\"Query parsing\"\n body=\"There were errors while trying to parse the query. Continuing to visual builder may lose some parts of the query.\"\n confirmText=\"Continue\"\n onConfirm={() => {\n onChange({ ...query, editorMode: QueryEditorMode.Builder });\n setParseModalOpen(false);\n }}\n onDismiss={() => setParseModalOpen(false)}\n />\n <QueryPatternsModal\n isOpen={queryPatternsModalOpen}\n onClose={() => setQueryPatternsModalOpen(false)}\n query={query}\n queries={queries}\n app={app}\n onChange={onChange}\n onAddQuery={onAddQuery}\n />\n <LabelBrowserModal\n isOpen={labelBrowserVisible}\n datasource={datasource}\n query={query}\n app={app}\n onClose={() => setLabelBrowserVisible(false)}\n onChange={onChangeInternal}\n onRunQuery={onRunQuery}\n timeRange={timeRange}\n />\n <EditorHeader>\n <Stack gap={1}>\n <Button\n data-testid={selectors.components.QueryBuilder.queryPatterns}\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setQueryPatternsModalOpen((prevValue) => !prevValue);\n\n const visualQuery = buildVisualQueryFromString(query.expr || '');\n reportInteraction('grafana_loki_query_patterns_opened', {\n version: 'v2',\n app: app ?? '',\n editorMode: query.editorMode,\n preSelectedOperationsCount: visualQuery.query.operations.length,\n preSelectedLabelsCount: visualQuery.query.labels.length,\n });\n }}\n >\n Kick start your query\n </Button>\n <Button variant=\"secondary\" size=\"sm\" onClick={onClickLabelBrowserButton} data-testid=\"label-browser-button\">\n Label browser\n </Button>\n </Stack>\n <QueryHeaderSwitch label=\"Explain query\" value={explain} onChange={onExplainChange} />\n <FlexItem grow={1} />\n {app !== CoreApp.Explore && app !== CoreApp.Correlations && (\n <Button\n variant={dataIsStale ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'spinner' : undefined}\n disabled={data?.state === LoadingState.Loading}\n >\n {queries && queries.length > 1 ? `Run queries` : `Run query`}\n </Button>\n )}\n <QueryEditorModeToggle mode={editorMode!} onChange={onEditorModeChange} />\n </EditorHeader>\n <Space v={0.5} />\n <EditorRows>\n {editorMode === QueryEditorMode.Code && (\n <LokiQueryCodeEditor {...props} query={query} onChange={onChangeInternal} showExplain={explain} />\n )}\n {editorMode === QueryEditorMode.Builder && (\n <LokiQueryBuilderContainer\n datasource={props.datasource}\n query={query}\n onChange={onChangeInternal}\n onRunQuery={props.onRunQuery}\n showExplain={explain}\n timeRange={timeRange}\n />\n )}\n <LokiQueryBuilderOptions\n query={query}\n onChange={onChange}\n onRunQuery={onRunQuery}\n app={app}\n queryStats={queryStats}\n datasource={props.datasource}\n />\n </EditorRows>\n </>\n );\n});\n\nLokiQueryEditor.displayName = 'LokiQueryEditor';\n","import { LokiQueryField } from './LokiQueryField';\nimport { LokiQueryEditorProps } from './types';\n\nexport function LokiQueryEditorForAlerting(props: LokiQueryEditorProps) {\n const { query, data, datasource, onChange, onRunQuery, history } = props;\n\n return (\n <LokiQueryField\n datasource={datasource}\n query={query}\n onChange={onChange}\n onRunQuery={onRunQuery}\n history={history}\n data={data}\n placeholder=\"Enter a Loki query\"\n data-testid={testIds.editor}\n />\n );\n}\n\nexport const testIds = {\n editor: 'loki-editor-cloud-alerting',\n};\n","import { memo } from 'react';\n\nimport { CoreApp } from '@grafana/data';\n\nimport { LokiQueryEditor } from './LokiQueryEditor';\nimport { LokiQueryEditorForAlerting } from './LokiQueryEditorForAlerting';\nimport { LokiQueryEditorProps } from './types';\n\nexport function LokiQueryEditorByApp(props: LokiQueryEditorProps) {\n const { app } = props;\n\n switch (app) {\n case CoreApp.CloudAlerting:\n return <LokiQueryEditorForAlerting {...props} />;\n default:\n return <LokiQueryEditor {...props} />;\n }\n}\n\nexport default memo(LokiQueryEditorByApp);\n\nexport const testIds = {\n editor: 'loki-editor',\n};\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\nconst DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }) => {\n const theme = useTheme2();\n const styles = {\n container: css({\n p: {\n margin: 0\n },\n \"p + p\": {\n marginTop: theme.spacing(2)\n }\n }),\n text: css({\n ...theme.typography.body,\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, \"Before you can use the \", dataSourceName, \" data source, you must configure it below or in the config file. For detailed instructions,\", \" \", /* @__PURE__ */ React__default.createElement(\"a\", { href: docsLink, target: \"_blank\", rel: \"noreferrer\" }, \"view the documentation\"), \".\"), hasRequiredFields && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, /* @__PURE__ */ React__default.createElement(\"i\", null, \"Fields marked with * are required\")));\n};\n\nexport { DataSourceDescription };\n//# sourceMappingURL=DataSourceDescription.js.map\n","import React__default, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton } from '@grafana/ui';\n\nconst GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = \"section\",\n className\n}) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName = isOpen ? \"angle-up\" : \"angle-down\";\n const isSubSection = kind === \"sub-section\";\n const collapsibleButtonAriaLabel = `${isOpen ? \"Collapse\" : \"Expand\"} section ${title}`;\n const styles = {\n header: css({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }),\n title: css({\n margin: 0\n }),\n subtitle: css({\n margin: 0,\n fontWeight: typography.fontWeightRegular\n }),\n descriptionText: css({\n marginTop: spacing(isSubSection ? 0.25 : 0.5),\n marginBottom: 0,\n ...typography.bodySmall,\n color: colors.text.secondary\n }),\n content: css({\n marginTop: spacing(2)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, kind === \"section\" ? /* @__PURE__ */ React__default.createElement(\"h3\", { className: styles.title }, title) : /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.subtitle }, title), isCollapsible && /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: iconName,\n onClick: () => setIsOpen(!isOpen),\n type: \"button\",\n size: \"xl\",\n \"aria-label\": collapsibleButtonAriaLabel\n }\n )), description && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.descriptionText }, description), isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { GenericConfigSection };\n//# sourceMappingURL=GenericConfigSection.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"section\" }, children);\n};\n\nexport { ConfigSection };\n//# sourceMappingURL=ConfigSection.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input } from '@grafana/ui';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst ConnectionSettings = ({\n config,\n onChange,\n description,\n urlPlaceholder,\n urlTooltip,\n urlLabel,\n className\n}) => {\n const isValidUrl = config.url !== undefined && /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(config.url);\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Connection\", description, className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"connection-url\",\n label: urlLabel || \"URL\",\n labelWidth: 24,\n tooltip: urlTooltip || /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, \"Specify a complete HTTP URL\", /* @__PURE__ */ React__default.createElement(\"br\", null), \"(for example https://example.com:8080)\"),\n grow: true,\n disabled: config.readOnly,\n required: true,\n invalid: !isValidUrl && !config.readOnly,\n error: isValidUrl ? \"\" : \"Please enter a valid URL\",\n interactive: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"connection-url\",\n \"aria-label\": \"Data source connection URL\",\n onChange: (event) => onChange({\n ...config,\n url: event.currentTarget.value\n }),\n value: config.url || \"\",\n placeholder: urlPlaceholder || \"URL\"\n }\n )\n )));\n};\n\nexport { ConnectionSettings };\n//# sourceMappingURL=ConnectionSettings.js.map\n","import { css } from '@emotion/css';\n\nconst useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1\n }\n })\n };\n};\n\nexport { useCommonStyles };\n//# sourceMappingURL=styles.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = \"User\",\n userTooltip = \"The username of the data source account\",\n userPlaceholder = \"User\",\n passwordLabel = \"Password\",\n passwordTooltip = \"The password of the data source account\",\n passwordPlaceholder = \"Password\",\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly\n}) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: commonStyles.inlineFieldNoMarginRight,\n label: userLabel,\n labelWidth: 24,\n tooltip: userTooltip,\n required: true,\n htmlFor: \"basic-auth-user-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"basic-auth-user-input\",\n placeholder: userPlaceholder,\n value: user,\n onChange: (e) => onUserChange(e.currentTarget.value),\n required: true\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n ),\n label: passwordLabel,\n labelWidth: 24,\n tooltip: passwordTooltip,\n required: true,\n htmlFor: \"basic-auth-password-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: \"basic-auth-password-input\",\n isConfigured: passwordConfigured,\n onReset: readOnly ? () => {\n } : onPasswordReset,\n placeholder: passwordPlaceholder,\n onChange: (e) => onPasswordChange(e.currentTarget.value),\n required: true\n }\n )\n ));\n};\n\nexport { BasicAuth };\n//# sourceMappingURL=BasicAuth.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSubSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"sub-section\" }, children);\n};\n\nexport { ConfigSubSection };\n//# sourceMappingURL=ConfigSubSection.js.map\n","import 'react';\n\nvar AuthMethod = /* @__PURE__ */ ((AuthMethod2) => {\n AuthMethod2[\"NoAuth\"] = \"NoAuth\";\n AuthMethod2[\"BasicAuth\"] = \"BasicAuth\";\n AuthMethod2[\"OAuthForward\"] = \"OAuthForward\";\n AuthMethod2[\"CrossSiteCredentials\"] = \"CrossSiteCredentials\";\n return AuthMethod2;\n})(AuthMethod || {});\n\nexport { AuthMethod };\n//# sourceMappingURL=types.js.map\n","import React__default, { useState, useMemo } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Field, Select } from '@grafana/ui';\nimport '@grafana/data';\nimport { BasicAuth } from './BasicAuth.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport { AuthMethod } from '../types.js';\n\nconst defaultOptions = {\n [AuthMethod.BasicAuth]: {\n label: \"Basic authentication\",\n value: AuthMethod.BasicAuth,\n description: \"Authenticate with your data source username and password\"\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: \"Enable cross-site access control requests\",\n value: AuthMethod.CrossSiteCredentials,\n description: \"Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.\"\n },\n [AuthMethod.OAuthForward]: {\n label: \"Forward OAuth Identity\",\n value: AuthMethod.OAuthForward,\n description: \"Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source\"\n },\n [AuthMethod.NoAuth]: {\n label: \"No Authentication\",\n value: AuthMethod.NoAuth,\n description: \"Data source is available without authentication\"\n }\n};\nconst AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n}) => {\n var _a, _b, _c, _d;\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods = useMemo(\n () => {\n var _a2;\n return visibleMethodsFromProps != null ? visibleMethodsFromProps : [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(_a2 = customMethods == null ? undefined : customMethods.map((m) => m.id)) != null ? _a2 : []\n ];\n },\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n const preparedOptions = useMemo(() => {\n var _a2;\n const customOptions = (_a2 = customMethods == null ? undefined : customMethods.reduce((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description\n };\n return acc;\n }, {})) != null ? _a2 : {};\n const preparedDefaultOptions = {};\n let k;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides == null ? undefined : defaultOptionsOverrides[k]\n };\n }\n const allOptions = {\n ...customOptions,\n ...preparedDefaultOptions\n };\n return visibleMethods.filter((method) => Boolean(allOptions[method])).map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n let AuthFieldsComponent = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = /* @__PURE__ */ React__default.createElement(BasicAuth, { ...basicAuth, readOnly });\n } else if (selected.startsWith(\"custom-\")) {\n AuthFieldsComponent = (_b = (_a = customMethods == null ? undefined : customMethods.find((m) => m.id === selected)) == null ? undefined : _a.component) != null ? _b : null;\n }\n const title = hasSelect ? \"Authentication methods\" : (_c = preparedOptions[0].label) != null ? _c : \"\";\n const description = hasSelect ? \"Choose an authentication method to access the data source\" : (_d = preparedOptions[0].description) != null ? _d : \"\";\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`\n }\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title, description }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.authMethods }, hasSelect && /* @__PURE__ */ React__default.createElement(Field, { label: \"Authentication method\" }, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n inputId: \"auth-method-select\",\n options: preparedOptions,\n value: selected,\n onChange: (option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value);\n },\n disabled: readOnly\n }\n )), AuthFieldsComponent && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.selectedMethodFields }, AuthFieldsComponent)));\n};\n\nexport { AuthMethodSettings };\n//# sourceMappingURL=AuthMethodSettings.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Checkbox, Tooltip, Icon } from '@grafana/ui';\n\nconst TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly\n}) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3\n }),\n checkboxContainer: css({\n display: \"flex\",\n alignItems: \"center\"\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary\n }),\n content: css({\n margin: spacing(1, 0, 2, 3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.checkboxContainer }, /* @__PURE__ */ React__default.createElement(Checkbox, { value: enabled, label, onChange: () => onToggle(!enabled), disabled: readOnly }), /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: tooltipText, interactive: true }, /* @__PURE__ */ React__default.createElement(Icon, { name: \"info-circle\", className: styles.infoIcon, size: \"sm\" }))), enabled && children && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { TLSSettingsSection };\n//# sourceMappingURL=TLSSettingsSection.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly\n}) => {\n var _a;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Add self-signed certificate\",\n tooltipText: \"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"CA Certificate\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _a : \"Your self-signed certificate\",\n required: true,\n htmlFor: \"self-signed-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"self-signed-certificate-input\",\n isConfigured: certificateConfigured,\n onChange: (e) => onCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { SelfSignedCertificate };\n//# sourceMappingURL=SelfSignedCertificate.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly\n}) => {\n var _a, _b, _c;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"TLS Client Authentication\",\n tooltipText: \"Validate using TLS client authentication, in which the server authenticates the client\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"ServerName\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.serverNameLabel) != null ? _a : \"A Servername is used to verify the hostname on the returned certificate\",\n required: true,\n htmlFor: \"client-auth-servername-input\",\n interactive: true,\n grow: true,\n className: commonStyles.inlineFieldNoMarginRight,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"client-auth-servername-input\",\n placeholder: \"domain.example.com\",\n value: serverName,\n onChange: (e) => onServerNameChange(e.currentTarget.value),\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Certificate\",\n labelWidth: 24,\n tooltip: (_b = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _b : \"The client certificate can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-certificate-input\",\n isConfigured: clientCertificateConfigured,\n onChange: (e) => onClientCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Key\",\n labelWidth: 24,\n tooltip: (_c = tooltips == null ? undefined : tooltips.keyLabel) != null ? _c : \"The client key can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-key-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-key-input\",\n isConfigured: clientKeyConfigured,\n onChange: (e) => onClientKeyChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientKeyReset,\n placeholder: `Begins with --- RSA PRIVATE KEY CERTIFICATE ---`,\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { TLSClientAuth };\n//# sourceMappingURL=TLSClientAuth.js.map\n","import React__default from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\n\nconst SkipTLSVerification = ({ enabled, onToggle, readOnly }) => {\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Skip TLS certificate validation\",\n tooltipText: \"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n }\n );\n};\n\nexport { SkipTLSVerification };\n//# sourceMappingURL=SkipTLSVerification.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate } from './SelfSignedCertificate.js';\nimport { TLSClientAuth } from './TLSClientAuth.js';\nimport { SkipTLSVerification } from './SkipTLSVerification.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst TLSSettings = ({ selfSignedCertificate, TLSClientAuth: TLSClientAuth$1, skipTLSVerification, readOnly }) => {\n const { spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: spacing(3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n className: styles.container,\n title: \"TLS settings\",\n description: \"Additional security measures that can be applied on top of authentication\"\n },\n /* @__PURE__ */ React__default.createElement(SelfSignedCertificate, { ...selfSignedCertificate, readOnly }),\n /* @__PURE__ */ React__default.createElement(TLSClientAuth, { ...TLSClientAuth$1, readOnly }),\n /* @__PURE__ */ React__default.createElement(SkipTLSVerification, { ...skipTLSVerification, readOnly })\n );\n};\n\nexport { TLSSettings };\n//# sourceMappingURL=TLSSettings.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2, InlineFieldRow, InlineField, Input, SecretInput, IconButton } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: \"center\"\n }),\n input: css({\n minWidth: \"100%\"\n }),\n headerNameField: css({\n width: \"40%\",\n marginRight: 0,\n paddingRight: spacing(1)\n }),\n headerValueField: css({\n width: \"45%\",\n marginRight: 0\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(InlineFieldRow, { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Header\",\n labelWidth: 9,\n grow: true,\n className: styles.headerNameField,\n htmlFor: `custom-header-${header.id}-name-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: `custom-header-${header.id}-name-input`,\n placeholder: \"X-Custom-Header\",\n value: header.name,\n width: 12,\n onChange: (e) => onChange({ ...header, name: e.currentTarget.value }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Value\",\n labelWidth: 9,\n grow: true,\n className: cx(commonStyles.inlineFieldWithSecret, styles.headerValueField),\n htmlFor: `custom-header-${header.id}-value-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: `custom-header-${header.id}-value-input`,\n isConfigured: header.configured,\n placeholder: \"Header value\",\n value: header.value,\n width: 12,\n onChange: (e) => onChange({ ...header, value: e.currentTarget.value }),\n onReset: readOnly ? () => {\n } : () => onChange({ ...header, configured: false, value: \"\" }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: \"trash-alt\",\n tooltip: \"Remove header\",\n tooltipPlacement: \"top\",\n className: styles.removeHeaderBtn,\n onClick: onDelete,\n type: \"button\",\n disabled: readOnly\n }\n )));\n};\n\nexport { CustomHeader };\n//# sourceMappingURL=CustomHeader.js.map\n","import React__default, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Button } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }) => {\n const { spacing } = useTheme2();\n const [headers, setHeaders] = useState(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: \"\"\n }))\n );\n useEffect(() => {\n setHeaders((headers2) => {\n let changed = false;\n const newHeaders = headers2.map((header) => {\n var _a;\n const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ? undefined : _a.configured;\n if (typeof configured !== \"undefined\" && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n if (changed) {\n return newHeaders;\n }\n return headers2;\n });\n }, [headersFromProps]);\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: \"\", value: \"\", configured: false }]);\n };\n const onHeaderChange = (id, header) => {\n setHeaders(headers.map((h) => h.id === id ? { ...header } : h));\n };\n const onHeaderDelete = (id) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const styles = {\n container: css({\n marginTop: spacing(3)\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n title: \"HTTP headers\",\n description: \"Pass along additional context and metadata about the request/response\",\n isCollapsible: true,\n isInitiallyOpen: headers.length > 0\n },\n /* @__PURE__ */ React__default.createElement(\"div\", null, headers.map((header) => /* @__PURE__ */ React__default.createElement(\n CustomHeader,\n {\n key: header.id,\n header,\n onChange: (header2) => onHeaderChange(header2.id, header2),\n onDelete: () => onHeaderDelete(header.id),\n onBlur,\n readOnly\n }\n ))),\n /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.addHeaderButton }, /* @__PURE__ */ React__default.createElement(Button, { icon: \"plus\", variant: \"secondary\", fill: \"outline\", onClick: onHeaderAdd, disabled: readOnly }, headers.length === 0 ? \"Add header\" : \"Add another header\"))\n ));\n};\nfunction uniqueId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport { CustomHeaders };\n//# sourceMappingURL=CustomHeaders.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings.js';\nimport { TLSSettings } from './tls/TLSSettings.js';\nimport '@grafana/ui';\nimport { CustomHeaders } from './custom-headers/CustomHeaders.js';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false\n}) => {\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Authentication\" }, /* @__PURE__ */ React__default.createElement(\n AuthMethodSettings,\n {\n selectedMethod,\n mostCommonMethod,\n customMethods,\n visibleMethods,\n defaultOptionsOverrides,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n }\n ), TLS && /* @__PURE__ */ React__default.createElement(TLSSettings, { ...TLS, readOnly }), customHeaders && /* @__PURE__ */ React__default.createElement(CustomHeaders, { ...customHeaders, readOnly })));\n};\n\nexport { Auth };\n//# sourceMappingURL=Auth.js.map\n","import 'react';\nimport '@emotion/css';\nimport { AuthMethod } from './types.js';\nimport './auth-method/AuthMethodSettings.js';\nimport '@grafana/ui';\nimport '@grafana/data';\n\nconst headerNamePrefix = \"httpHeaderName\";\nconst headerValuePrefix = \"httpHeaderValue\";\nfunction convertLegacyAuthProps({\n config,\n onChange\n}) {\n const props = {\n selectedMethod: getSelectedMethod(config),\n onAuthMethodSelect: getOnAuthMethodSelectHandler(config, onChange),\n basicAuth: getBasicAuthProps(config, onChange),\n TLS: getTLSProps(config, onChange),\n customHeaders: getCustomHeaders(config, onChange),\n readOnly: config.readOnly\n };\n return props;\n}\nfunction getSelectedMethod(config) {\n if (config.basicAuth) {\n return AuthMethod.BasicAuth;\n }\n if (config.withCredentials) {\n return AuthMethod.CrossSiteCredentials;\n }\n if (config.jsonData.oauthPassThru) {\n return AuthMethod.OAuthForward;\n }\n return AuthMethod.NoAuth;\n}\nfunction getOnAuthMethodSelectHandler(config, onChange) {\n return (method) => {\n onChange({\n ...config,\n basicAuth: method === AuthMethod.BasicAuth,\n withCredentials: method === AuthMethod.CrossSiteCredentials,\n jsonData: {\n ...config.jsonData,\n oauthPassThru: method === AuthMethod.OAuthForward\n }\n });\n };\n}\nfunction getBasicAuthProps(config, onChange) {\n return {\n user: config.basicAuthUser,\n passwordConfigured: config.secureJsonFields.basicAuthPassword,\n onUserChange: (user) => onChange({ ...config, basicAuthUser: user }),\n onPasswordChange: (password) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n basicAuthPassword: password\n }\n }),\n onPasswordReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, basicAuthPassword: \"\" },\n secureJsonFields: {\n ...config.secureJsonFields,\n basicAuthPassword: false\n }\n })\n };\n}\nfunction getTLSProps(config, onChange) {\n var _a, _b, _c;\n return {\n selfSignedCertificate: {\n enabled: Boolean(config.jsonData.tlsAuthWithCACert),\n certificateConfigured: !!((_a = config.secureJsonFields) == null ? undefined : _a.tlsCACert),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n }),\n onCertificateChange: (certificate) => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: certificate }\n }),\n onCertificateReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n })\n },\n TLSClientAuth: {\n enabled: config.jsonData.tlsAuth,\n serverName: config.jsonData.serverName,\n clientCertificateConfigured: !!((_b = config.secureJsonFields) == null ? undefined : _b.tlsClientCert),\n clientKeyConfigured: !!((_c = config.secureJsonFields) == null ? undefined : _c.tlsClientKey),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled, serverName: \"\" },\n secureJsonData: { ...config.secureJsonData, tlsClientCert: \"\", tlsClientKey: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsClientCert: false, tlsClientKey: false }\n }),\n onServerNameChange: (serverName) => onChange({\n ...config,\n jsonData: { ...config.jsonData, serverName }\n }),\n onClientCertificateChange: (clientCertificate) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: clientCertificate\n }\n }),\n onClientCertificateReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientCert: false\n }\n }),\n onClientKeyChange: (clientKey) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: clientKey\n }\n }),\n onClientKeyReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientKey: false\n }\n })\n },\n skipTLSVerification: {\n enabled: config.jsonData.tlsSkipVerify,\n onToggle: (enabled) => onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsSkipVerify: enabled }\n })\n }\n };\n}\nfunction getCustomHeaders(config, onChange) {\n const headers = Object.keys(config.jsonData).filter((key) => key.startsWith(headerNamePrefix)).sort().map((key) => {\n var _a;\n const index = key.slice(headerNamePrefix.length);\n return {\n name: config.jsonData[key],\n configured: (_a = config.secureJsonFields[`${headerValuePrefix}${index}`]) != null ? _a : false\n };\n });\n return {\n headers,\n onChange: (headers2) => {\n const newJsonData = Object.fromEntries(\n Object.entries(config.jsonData).filter(([key]) => !key.startsWith(headerNamePrefix))\n );\n const newSecureJsonData = Object.fromEntries(\n Object.entries(config.secureJsonData || {}).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n const newSecureJsonFields = Object.fromEntries(\n Object.entries(config.secureJsonFields).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n headers2.forEach((header, index) => {\n newJsonData[`${headerNamePrefix}${index + 1}`] = header.name;\n if (header.configured) {\n newSecureJsonFields[`${headerValuePrefix}${index + 1}`] = true;\n } else {\n newSecureJsonData[`${headerValuePrefix}${index + 1}`] = header.value;\n }\n });\n onChange({\n ...config,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n secureJsonFields: newSecureJsonFields\n });\n }\n };\n}\n\nexport { convertLegacyAuthProps, getBasicAuthProps, getCustomHeaders, getOnAuthMethodSelectHandler, getSelectedMethod, getTLSProps };\n//# sourceMappingURL=utils.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, TagsInput, Input } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst AdvancedHttpSettings = ({\n config,\n onChange,\n className\n}) => {\n const onCookiesChange = (cookies) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies\n }\n });\n };\n const onTimeoutChange = (event) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10)\n }\n });\n };\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title: \"Advanced HTTP settings\", className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-cookies\",\n label: \"Allowed cookies\",\n labelWidth: 24,\n tooltip: \"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n TagsInput,\n {\n id: \"advanced-http-cookies\",\n placeholder: \"New cookie (hit enter to add)\",\n tags: config.jsonData.keepCookies,\n onChange: onCookiesChange\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-timeout\",\n label: \"Timeout\",\n labelWidth: 24,\n tooltip: \"HTTP request timeout in seconds\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"advanced-http-timeout\",\n type: \"number\",\n min: 0,\n placeholder: \"Timeout in seconds\",\n \"aria-label\": \"Timeout in seconds\",\n value: config.jsonData.timeout,\n onChange: onTimeoutChange\n }\n )\n ));\n};\n\nexport { AdvancedHttpSettings };\n//# sourceMappingURL=AdvancedHttpSettings.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nfunction ConfigDescriptionLink(props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.container }, description, /* @__PURE__ */ React__default.createElement(\n \"a\",\n {\n \"aria-label\": text,\n href: `https://grafana.com/docs/grafana/next/datasources/${suffix}`,\n rel: \"noreferrer\",\n target: \"_blank\"\n },\n text\n ));\n}\nconst getStyles = (theme) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n marginLeft: \"5px\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n};\n\nexport { ConfigDescriptionLink };\n//# sourceMappingURL=ConfigDescriptionLink.js.map\n","import { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, InlineSwitch } from '@grafana/ui';\n\nexport function AlertingSettings({\n options,\n onOptionsChange,\n}: Pick<DataSourcePluginOptionsEditorProps, 'options' | 'onOptionsChange'>) {\n return (\n <ConfigSubSection\n title=\"Alerting\"\n description={\n <ConfigDescriptionLink\n description=\"Manage alert rules for the Loki data source.\"\n suffix=\"loki/configure-loki-data-source/#alerting\"\n feature=\"alerting\"\n />\n }\n >\n <InlineField\n labelWidth={29}\n label=\"Manage alert rules in Alerting UI\"\n disabled={options.readOnly}\n tooltip=\"Manage alert rules for this data source. To manage other alerting resources, add an Alertmanager data source.\"\n >\n <InlineSwitch\n value={options.jsonData.manageAlerts !== false}\n onChange={(event) =>\n onOptionsChange({\n ...options,\n jsonData: { ...options.jsonData, manageAlerts: event!.currentTarget.checked },\n })\n }\n />\n </InlineField>\n </ConfigSubSection>\n );\n}\n","import { ReactNode, useState } from 'react';\n\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { InlineField, TextArea } from '@grafana/ui';\n\nimport { DerivedFieldConfig } from '../types';\n\ntype Props = {\n derivedFields?: DerivedFieldConfig[];\n className?: string;\n};\nexport const DebugSection = (props: Props) => {\n const { derivedFields, className } = props;\n const [debugText, setDebugText] = useState('');\n\n let debugFields: DebugField[] = [];\n if (debugText && derivedFields) {\n debugFields = makeDebugFields(derivedFields, debugText);\n }\n\n return (\n <div className={className}>\n <InlineField label=\"Debug log message\" labelWidth={24} grow>\n <TextArea\n type=\"text\"\n aria-label=\"Loki query\"\n placeholder=\"Paste an example log line here to test the regular expressions of your derived fields\"\n value={debugText}\n onChange={(event) => setDebugText(event.currentTarget.value)}\n />\n </InlineField>\n {!!debugFields.length && <DebugFields fields={debugFields} />}\n </div>\n );\n};\n\ntype DebugFieldItemProps = {\n fields: DebugField[];\n};\nconst DebugFields = ({ fields }: DebugFieldItemProps) => {\n return (\n <table className={'filter-table'}>\n <thead>\n <tr>\n <th>Name</th>\n <th>Value</th>\n <th>Url</th>\n </tr>\n </thead>\n <tbody>\n {fields.map((field) => {\n let value: ReactNode = field.value;\n if (field.error && field.error instanceof Error) {\n value = field.error.message;\n } else if (field.href) {\n value = <a href={field.href}>{value}</a>;\n }\n return (\n <tr key={`${field.name}=${field.value}`}>\n <td>{field.name}</td>\n <td>{value}</td>\n <td>{field.href ? <a href={field.href}>{field.href}</a> : ''}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n};\n\ntype DebugField = {\n name: string;\n error?: unknown;\n value?: string;\n href?: string;\n};\n\nfunction makeDebugFields(derivedFields: DerivedFieldConfig[], debugText: string): DebugField[] {\n return derivedFields\n .filter((field) => field.name && field.matcherRegex)\n .map((field) => {\n try {\n const testMatch = debugText.match(field.matcherRegex);\n let href;\n const value = testMatch && testMatch[1];\n\n if (value) {\n href = getTemplateSrv().replace(field.url, {\n __value: {\n value: {\n raw: value,\n },\n text: 'Raw value',\n },\n });\n }\n const debugFiled: DebugField = {\n name: field.name,\n value: value || '<no match>',\n href,\n };\n return debugFiled;\n } catch (error) {\n return {\n name: field.name,\n error,\n };\n }\n });\n}\n","import { css } from '@emotion/css';\nimport { ChangeEvent, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { GrafanaTheme2, DataSourceInstanceSettings, VariableSuggestion } from '@grafana/data';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { Button, DataLinkInput, Field, Icon, Input, Label, Tooltip, useStyles2, Select, Switch } from '@grafana/ui';\n\nimport { DerivedFieldConfig } from '../types';\n\ntype MatcherType = 'label' | 'regex';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n row: css({\n display: 'flex',\n alignItems: 'baseline',\n }),\n nameField: css({\n flex: 2,\n marginRight: theme.spacing(0.5),\n }),\n regexField: css({\n flex: 3,\n marginRight: theme.spacing(0.5),\n }),\n urlField: css({\n flex: 1,\n marginRight: theme.spacing(0.5),\n }),\n urlDisplayLabelField: css({\n flex: 1,\n }),\n internalLink: css({\n marginRight: theme.spacing(1),\n }),\n openNewTab: css({\n marginRight: theme.spacing(1),\n }),\n dataSource: css({}),\n nameMatcherField: css({\n width: theme.spacing(20),\n marginRight: theme.spacing(0.5),\n }),\n});\n\ntype Props = {\n value: DerivedFieldConfig;\n onChange: (value: DerivedFieldConfig) => void;\n onDelete: () => void;\n suggestions: VariableSuggestion[];\n className?: string;\n validateName: (name: string) => boolean;\n};\nexport const DerivedField = (props: Props) => {\n const { value, onChange, onDelete, suggestions, className, validateName } = props;\n const styles = useStyles2(getStyles);\n const [showInternalLink, setShowInternalLink] = useState(!!value.datasourceUid);\n const [openInNewTab, setOpenInNewTab] = useState(!!value.targetBlank);\n const previousUid = usePrevious(value.datasourceUid);\n const [fieldType, setFieldType] = useState<MatcherType>(value.matcherType ?? 'regex');\n\n // Force internal link visibility change if uid changed outside of this component.\n useEffect(() => {\n if (!previousUid && value.datasourceUid && !showInternalLink) {\n setShowInternalLink(true);\n }\n if (previousUid && !value.datasourceUid && showInternalLink) {\n setShowInternalLink(false);\n }\n }, [previousUid, value.datasourceUid, showInternalLink]);\n\n const handleChange = (field: keyof typeof value) => (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...value,\n [field]: event.currentTarget.value,\n });\n };\n\n const invalidName = !validateName(value.name);\n\n return (\n <div className={className} data-testid=\"derived-field\">\n <div className=\"gf-form\">\n <Field className={styles.nameField} label=\"Name\" invalid={invalidName} error=\"The name is already in use\">\n <Input value={value.name} onChange={handleChange('name')} placeholder=\"Field name\" invalid={invalidName} />\n </Field>\n <Field\n className={styles.nameMatcherField}\n label={\n <TooltipLabel\n label=\"Type\"\n content=\"Derived fields can be created from labels or by applying a regular expression to the log message.\"\n />\n }\n >\n <Select\n options={[\n { label: 'Regex in log line', value: 'regex' },\n { label: 'Label', value: 'label' },\n ]}\n value={fieldType}\n onChange={(type) => {\n // make sure this is a valid MatcherType\n if (type.value === 'label' || type.value === 'regex') {\n setFieldType(type.value);\n onChange({\n ...value,\n matcherType: type.value,\n });\n }\n }}\n />\n </Field>\n <Field\n className={styles.regexField}\n label={\n <>\n {fieldType === 'regex' && (\n <TooltipLabel\n label=\"Regex\"\n content=\"Use to parse and capture some part of the log message. You can use the captured groups in the template.\"\n />\n )}\n\n {fieldType === 'label' && <TooltipLabel label=\"Label\" content=\"Use to derive the field from a label.\" />}\n </>\n }\n >\n <Input value={value.matcherRegex} onChange={handleChange('matcherRegex')} />\n </Field>\n <Field label=\"\">\n <Button\n variant=\"destructive\"\n aria-label=\"Remove field\"\n icon=\"times\"\n onClick={(event) => {\n event.preventDefault();\n onDelete();\n }}\n />\n </Field>\n </div>\n\n <div className=\"gf-form\">\n <Field label={showInternalLink ? 'Query' : 'URL'} className={styles.urlField}>\n <DataLinkInput\n placeholder={showInternalLink ? '${__value.raw}' : 'http://example.com/${__value.raw}'}\n value={value.url || ''}\n onChange={(newValue) =>\n onChange({\n ...value,\n url: newValue,\n })\n }\n suggestions={suggestions}\n />\n </Field>\n <Field\n className={styles.urlDisplayLabelField}\n label={\n <TooltipLabel\n label=\"URL Label\"\n content=\"Use to override the button label when this derived field is found in a log.\"\n />\n }\n >\n <Input value={value.urlDisplayLabel} onChange={handleChange('urlDisplayLabel')} />\n </Field>\n </div>\n\n <div className=\"gf-form\">\n <Field label=\"Internal link\" className={styles.internalLink}>\n <Switch\n value={showInternalLink}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const { checked } = e.currentTarget;\n if (!checked) {\n onChange({\n ...value,\n datasourceUid: undefined,\n });\n }\n setShowInternalLink(checked);\n }}\n />\n </Field>\n\n {showInternalLink && (\n <Field label=\"\" className={styles.dataSource}>\n <DataSourcePicker\n tracing={true}\n onChange={(ds: DataSourceInstanceSettings) =>\n onChange({\n ...value,\n datasourceUid: ds.uid,\n })\n }\n current={value.datasourceUid}\n noDefault\n />\n </Field>\n )}\n </div>\n\n <div className=\"gf-form\">\n <Field label=\"Open in new tab\" className={styles.openNewTab}>\n <Switch\n value={openInNewTab}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const { checked } = e.currentTarget;\n onChange({\n ...value,\n targetBlank: checked,\n });\n setOpenInNewTab(checked);\n }}\n />\n </Field>\n </div>\n </div>\n );\n};\n\nconst TooltipLabel = ({ content, label }: { content: string; label: string }) => (\n <Label>\n {label}\n <Tooltip placement=\"top\" content={content} theme=\"info\">\n <Icon tabIndex={0} name=\"info-circle\" size=\"sm\" style={{ marginLeft: '10px' }} />\n </Tooltip>\n </Label>\n);\n","import { css } from '@emotion/css';\nimport { useCallback, useState } from 'react';\n\nimport { GrafanaTheme2, VariableOrigin, DataLinkBuiltInVars } from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { Button, useTheme2 } from '@grafana/ui';\n\nimport { DerivedFieldConfig } from '../types';\n\nimport { DebugSection } from './DebugSection';\nimport { DerivedField } from './DerivedField';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n addButton: css({\n marginRight: '10px',\n }),\n derivedField: css({\n marginBottom: theme.spacing(1),\n }),\n container: css({\n marginBottom: theme.spacing(4),\n }),\n debugSection: css({\n marginTop: theme.spacing(4),\n }),\n});\n\ntype Props = {\n fields?: DerivedFieldConfig[];\n onChange: (value: DerivedFieldConfig[]) => void;\n};\n\nexport const DerivedFields = ({ fields = [], onChange }: Props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n const [showDebug, setShowDebug] = useState(false);\n\n const validateName = useCallback(\n (name: string) => {\n return fields.filter((field) => field.name && field.name === name).length <= 1;\n },\n [fields]\n );\n\n return (\n <ConfigSubSection\n title=\"Derived fields\"\n description={\n <ConfigDescriptionLink\n description=\"Derived fields can be used to extract new fields from a log message and create a link from its value.\"\n suffix=\"loki/configure-loki-data-source/#derived-fields\"\n feature=\"derived fields\"\n />\n }\n >\n <div className={styles.container}>\n {fields.map((field, index) => {\n return (\n <DerivedField\n className={styles.derivedField}\n key={index}\n value={field}\n onChange={(newField) => {\n const newDerivedFields = [...fields];\n newDerivedFields.splice(index, 1, newField);\n onChange(newDerivedFields);\n }}\n onDelete={() => {\n const newDerivedFields = [...fields];\n newDerivedFields.splice(index, 1);\n onChange(newDerivedFields);\n }}\n validateName={validateName}\n suggestions={[\n {\n value: DataLinkBuiltInVars.valueRaw,\n label: 'Raw value',\n documentation: 'Exact string captured by the regular expression',\n origin: VariableOrigin.Value,\n },\n ]}\n />\n );\n })}\n <div>\n <Button\n variant=\"secondary\"\n className={styles.addButton}\n icon=\"plus\"\n onClick={(event) => {\n event.preventDefault();\n const emptyConfig: DerivedFieldConfig = {\n name: '',\n matcherRegex: '',\n urlDisplayLabel: '',\n url: '',\n matcherType: 'regex',\n };\n const newDerivedFields = [...fields, emptyConfig];\n onChange(newDerivedFields);\n }}\n >\n Add\n </Button>\n\n {fields.length > 0 && (\n <Button variant=\"secondary\" type=\"button\" onClick={() => setShowDebug(!showDebug)}>\n {showDebug ? 'Hide example log message' : 'Show example log message'}\n </Button>\n )}\n </div>\n\n {showDebug && (\n <div className={styles.debugSection}>\n <DebugSection\n className={css({\n marginBottom: '10px',\n })}\n derivedFields={fields}\n />\n </div>\n )}\n </div>\n </ConfigSubSection>\n );\n};\n","import * as React from 'react';\n\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, Input } from '@grafana/ui';\n\ntype Props = {\n maxLines: string;\n onMaxLinedChange: (value: string) => void;\n};\n\nexport const QuerySettings = (props: Props) => {\n const { maxLines, onMaxLinedChange } = props;\n return (\n <ConfigSubSection\n title=\"Queries\"\n description={\n <ConfigDescriptionLink\n description=\"Additional options to customize your querying experience.\"\n suffix=\"loki/configure-loki-data-source/#queries\"\n feature=\"query settings\"\n />\n }\n >\n <InlineField\n label=\"Maximum lines\"\n htmlFor=\"loki_config_maxLines\"\n labelWidth={22}\n tooltip={\n <>\n Loki queries must contain a limit of the maximum number of lines returned (default: 1000). Increase this\n limit to have a bigger result set for ad-hoc analysis. Decrease this limit if your browser becomes sluggish\n when displaying the log results.\n </>\n }\n >\n <Input\n type=\"number\"\n id=\"loki_config_maxLines\"\n value={maxLines}\n onChange={(event: React.FormEvent<HTMLInputElement>) => onMaxLinedChange(event.currentTarget.value)}\n width={16}\n placeholder=\"1000\"\n spellCheck={false}\n />\n </InlineField>\n </ConfigSubSection>\n );\n};\n","import { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport {\n ConfigSection,\n DataSourceDescription,\n ConnectionSettings,\n Auth,\n convertLegacyAuthProps,\n AdvancedHttpSettings,\n} from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { Divider, SecureSocksProxySettings, Stack } from '@grafana/ui';\n\nimport { LokiOptions } from '../types';\n\nimport { AlertingSettings } from './AlertingSettings';\nimport { DerivedFields } from './DerivedFields';\nimport { QuerySettings } from './QuerySettings';\n\nexport type Props = DataSourcePluginOptionsEditorProps<LokiOptions>;\n\nconst makeJsonUpdater =\n <T,>(field: keyof LokiOptions) =>\n (options: DataSourceSettings<LokiOptions>, value: T): DataSourceSettings<LokiOptions> => {\n return {\n ...options,\n jsonData: {\n ...options.jsonData,\n [field]: value,\n },\n };\n };\n\nconst setMaxLines = makeJsonUpdater('maxLines');\nconst setDerivedFields = makeJsonUpdater('derivedFields');\n\nexport const ConfigEditor = (props: Props) => {\n const { options, onOptionsChange } = props;\n return (\n <>\n <DataSourceDescription\n dataSourceName=\"Loki\"\n docsLink=\"https://grafana.com/docs/grafana/latest/datasources/loki/configure-loki-data-source/\"\n hasRequiredFields={false}\n />\n <Divider spacing={4} />\n <ConnectionSettings config={options} onChange={onOptionsChange} urlPlaceholder=\"http://localhost:3100\" />\n <Divider spacing={4} />\n <Auth\n {...convertLegacyAuthProps({\n config: options,\n onChange: onOptionsChange,\n })}\n />\n <Divider spacing={4} />\n <ConfigSection\n title=\"Additional settings\"\n description=\"Additional settings are optional settings that can be configured for more control over your data source.\"\n isCollapsible={true}\n isInitiallyOpen\n >\n <Stack gap={5} direction=\"column\">\n <AdvancedHttpSettings config={options} onChange={onOptionsChange} />\n {config.secureSocksDSProxyEnabled && (\n <SecureSocksProxySettings options={options} onOptionsChange={onOptionsChange} />\n )}\n <AlertingSettings options={options} onOptionsChange={onOptionsChange} />\n <QuerySettings\n maxLines={options.jsonData.maxLines || ''}\n onMaxLinedChange={(value) => onOptionsChange(setMaxLines(options, value))}\n />\n <DerivedFields\n fields={options.jsonData.derivedFields}\n onChange={(value) => onOptionsChange(setDerivedFields(options, value))}\n />\n </Stack>\n </ConfigSection>\n </>\n );\n};\n","/**\n * @module LRUCache\n */\nconst defaultPerf = (typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function') ?\n performance\n : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ?\n process\n : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n typeof PROCESS.emitWarning === 'function' ?\n PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort;\n _onabort = [];\n reason;\n aborted = false;\n addEventListener(_, fn) {\n this._onabort.push(fn);\n }\n };\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill();\n }\n signal = new AS();\n abort(reason) {\n if (this.signal.aborted)\n return;\n //@ts-ignore\n this.signal.reason = reason;\n //@ts-ignore\n this.signal.aborted = true;\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason);\n }\n this.signal.onabort?.(reason);\n }\n };\n let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning)\n return;\n printACPolyfillWarning = false;\n emitWarning('AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst TYPE = Symbol('type');\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max) ? null\n : max <= Math.pow(2, 8) ? Uint8Array\n : max <= Math.pow(2, 16) ? Uint16Array\n : max <= Math.pow(2, 32) ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER ? ZeroArray\n : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n constructor(size) {\n super(size);\n this.fill(0);\n }\n}\nclass Stack {\n heap;\n length;\n // private constructor\n static #constructing = false;\n static create(max) {\n const HeapCls = getUintArray(max);\n if (!HeapCls)\n return [];\n Stack.#constructing = true;\n const s = new Stack(max, HeapCls);\n Stack.#constructing = false;\n return s;\n }\n constructor(max, HeapCls) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)');\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max);\n this.length = 0;\n }\n push(n) {\n this.heap[this.length++] = n;\n }\n pop() {\n return this.heap[--this.length];\n }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n // options that cannot be changed without disaster\n #max;\n #maxSize;\n #dispose;\n #onInsert;\n #disposeAfter;\n #fetchMethod;\n #memoMethod;\n #perf;\n /**\n * {@link LRUCache.OptionsBase.perf}\n */\n get perf() {\n return this.#perf;\n }\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl;\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution;\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas;\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale;\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet;\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL;\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize;\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort;\n // computed properties\n #size;\n #calculatedSize;\n #keyMap;\n #keyList;\n #valList;\n #next;\n #prev;\n #head;\n #tail;\n #free;\n #disposed;\n #sizes;\n #starts;\n #ttls;\n #hasDispose;\n #hasFetchMethod;\n #hasDisposeAfter;\n #hasOnInsert;\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals(c) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n sizes: c.#sizes,\n keyMap: c.#keyMap,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head;\n },\n get tail() {\n return c.#tail;\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n moveToTail: (index) => c.#moveToTail(index),\n indexes: (options) => c.#indexes(options),\n rindexes: (options) => c.#rindexes(options),\n isStale: (index) => c.#isStale(index),\n };\n }\n // Protected read-only members\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max() {\n return this.#max;\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize() {\n return this.#maxSize;\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize() {\n return this.#calculatedSize;\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size() {\n return this.#size;\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod() {\n return this.#fetchMethod;\n }\n get memoMethod() {\n return this.#memoMethod;\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose;\n }\n /**\n * {@link LRUCache.OptionsBase.onInsert} (read-only)\n */\n get onInsert() {\n return this.#onInsert;\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter;\n }\n constructor(options) {\n const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, perf, } = options;\n if (perf !== undefined) {\n if (typeof perf?.now !== 'function') {\n throw new TypeError('perf option must have a now() method if specified');\n }\n }\n this.#perf = perf ?? defaultPerf;\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer');\n }\n const UintArray = max ? getUintArray(max) : Array;\n if (!UintArray) {\n throw new Error('invalid max value: ' + max);\n }\n this.#max = max;\n this.#maxSize = maxSize;\n this.maxEntrySize = maxEntrySize || this.#maxSize;\n this.sizeCalculation = sizeCalculation;\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function');\n }\n }\n if (memoMethod !== undefined &&\n typeof memoMethod !== 'function') {\n throw new TypeError('memoMethod must be a function if defined');\n }\n this.#memoMethod = memoMethod;\n if (fetchMethod !== undefined &&\n typeof fetchMethod !== 'function') {\n throw new TypeError('fetchMethod must be a function if specified');\n }\n this.#fetchMethod = fetchMethod;\n this.#hasFetchMethod = !!fetchMethod;\n this.#keyMap = new Map();\n this.#keyList = new Array(max).fill(undefined);\n this.#valList = new Array(max).fill(undefined);\n this.#next = new UintArray(max);\n this.#prev = new UintArray(max);\n this.#head = 0;\n this.#tail = 0;\n this.#free = Stack.create(max);\n this.#size = 0;\n this.#calculatedSize = 0;\n if (typeof dispose === 'function') {\n this.#dispose = dispose;\n }\n if (typeof onInsert === 'function') {\n this.#onInsert = onInsert;\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter;\n this.#disposed = [];\n }\n else {\n this.#disposeAfter = undefined;\n this.#disposed = undefined;\n }\n this.#hasDispose = !!this.#dispose;\n this.#hasOnInsert = !!this.#onInsert;\n this.#hasDisposeAfter = !!this.#disposeAfter;\n this.noDisposeOnSet = !!noDisposeOnSet;\n this.noUpdateTTL = !!noUpdateTTL;\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n this.ignoreFetchAbort = !!ignoreFetchAbort;\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError('maxSize must be a positive integer if specified');\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError('maxEntrySize must be a positive integer if specified');\n }\n this.#initializeSizeTracking();\n }\n this.allowStale = !!allowStale;\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n this.updateAgeOnGet = !!updateAgeOnGet;\n this.updateAgeOnHas = !!updateAgeOnHas;\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0 ?\n ttlResolution\n : 1;\n this.ttlAutopurge = !!ttlAutopurge;\n this.ttl = ttl || 0;\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError('ttl must be a positive integer if specified');\n }\n this.#initializeTTLTracking();\n }\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError('At least one of max, maxSize, or ttl is required');\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED';\n if (shouldWarn(code)) {\n warned.add(code);\n const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.';\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n }\n }\n }\n /**\n * Return the number of ms left in the item's TTL. If item is not in cache,\n * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n */\n getRemainingTTL(key) {\n return this.#keyMap.has(key) ? Infinity : 0;\n }\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max);\n const starts = new ZeroArray(this.#max);\n this.#ttls = ttls;\n this.#starts = starts;\n this.#setItemTTL = (index, ttl, start = this.#perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0;\n ttls[index] = ttl;\n if (ttl !== 0 && this.ttlAutopurge) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.#delete(this.#keyList[index], 'expire');\n }\n }, ttl + 1);\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n };\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? this.#perf.now() : 0;\n };\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index];\n const start = starts[index];\n /* c8 ignore next */\n if (!ttl || !start)\n return;\n status.ttl = ttl;\n status.start = start;\n status.now = cachedNow || getNow();\n const age = status.now - start;\n status.remainingTTL = ttl - age;\n }\n };\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0;\n const getNow = () => {\n const n = this.#perf.now();\n if (this.ttlResolution > 0) {\n cachedNow = n;\n const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n return n;\n };\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key);\n if (index === undefined) {\n return 0;\n }\n const ttl = ttls[index];\n const start = starts[index];\n if (!ttl || !start) {\n return Infinity;\n }\n const age = (cachedNow || getNow()) - start;\n return ttl - age;\n };\n this.#isStale = index => {\n const s = starts[index];\n const t = ttls[index];\n return !!t && !!s && (cachedNow || getNow()) - s > t;\n };\n }\n // conditionally set private methods related to TTL\n #updateItemAge = () => { };\n #statusTTL = () => { };\n #setItemTTL = () => { };\n /* c8 ignore stop */\n #isStale = () => false;\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max);\n this.#calculatedSize = 0;\n this.#sizes = sizes;\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index];\n sizes[index] = 0;\n };\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0;\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function');\n }\n size = sizeCalculation(v, k);\n if (!isPosInt(size)) {\n throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n }\n }\n else {\n throw new TypeError('invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.');\n }\n }\n return size;\n };\n this.#addItemSize = (index, size, status) => {\n sizes[index] = size;\n if (this.#maxSize) {\n const maxSize = this.#maxSize - sizes[index];\n while (this.#calculatedSize > maxSize) {\n this.#evict(true);\n }\n }\n this.#calculatedSize += sizes[index];\n if (status) {\n status.entrySize = size;\n status.totalCalculatedSize = this.#calculatedSize;\n }\n };\n }\n #removeItemSize = _i => { };\n #addItemSize = (_i, _s, _st) => { };\n #requireSize = (_k, _v, size, sizeCalculation) => {\n if (size || sizeCalculation) {\n throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n }\n return 0;\n };\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#head) {\n break;\n }\n else {\n i = this.#prev[i];\n }\n }\n }\n }\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#tail) {\n break;\n }\n else {\n i = this.#next[i];\n }\n }\n }\n }\n #isValidIndex(index) {\n return (index !== undefined &&\n this.#keyMap.get(this.#keyList[index]) === index);\n }\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries();\n }\n /**\n * A String value that is used in the creation of the default string\n * description of an object. Called by the built-in method\n * `Object.prototype.toString`.\n */\n [Symbol.toStringTag] = 'LRUCache';\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n */\n find(fn, getOptions = {}) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n if (fn(value, this.#keyList[i], this)) {\n return this.get(this.#keyList[i], getOptions);\n }\n }\n }\n /**\n * Call the supplied function on each item in the cache, in order from most\n * recently used to least recently used.\n *\n * `fn` is called as `fn(value, key, cache)`.\n *\n * If `thisp` is provided, function will be called in the `this`-context of\n * the provided object, or the cache if no `thisp` object is provided.\n *\n * Does not update age or recenty of use, or iterate over stale values.\n */\n forEach(fn, thisp = this) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(fn, thisp = this) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false;\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.#delete(this.#keyList[i], 'expire');\n deleted = true;\n }\n }\n return deleted;\n }\n /**\n * Get the extended info about a given entry, to get its value, size, and\n * TTL info simultaneously. Returns `undefined` if the key is not present.\n *\n * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n * serialization, the `start` value is always the current timestamp, and the\n * `ttl` is a calculated remaining time to live (negative if expired).\n *\n * Always returns stale values, if their info is found in the cache, so be\n * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n * if relevant.\n */\n info(key) {\n const i = this.#keyMap.get(key);\n if (i === undefined)\n return undefined;\n const v = this.#valList[i];\n /* c8 ignore start - this isn't tested for the info function,\n * but it's the same logic as found in other places. */\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n return undefined;\n /* c8 ignore end */\n const entry = { value };\n if (this.#ttls && this.#starts) {\n const ttl = this.#ttls[i];\n const start = this.#starts[i];\n if (ttl && start) {\n const remain = ttl - (this.#perf.now() - start);\n entry.ttl = remain;\n entry.start = Date.now();\n }\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n return entry;\n }\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to {@link LRUCache#load}.\n *\n * The `start` fields are calculated relative to a portable `Date.now()`\n * timestamp, even if `performance.now()` is available.\n *\n * Stale entries are always included in the `dump`, even if\n * {@link LRUCache.OptionsBase.allowStale} is false.\n *\n * Note: this returns an actual array, not a generator, so it can be more\n * easily passed around.\n */\n dump() {\n const arr = [];\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i];\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined || key === undefined)\n continue;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i];\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = this.#perf.now() - this.#starts[i];\n entry.start = Math.floor(Date.now() - age);\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n arr.unshift([key, entry]);\n }\n return arr;\n }\n /**\n * Reset the cache and load in the items in entries in the order listed.\n *\n * The shape of the resulting cache may be different if the same options are\n * not used in both caches.\n *\n * The `start` fields are assumed to be calculated relative to a portable\n * `Date.now()` timestamp, even if `performance.now()` is available.\n */\n load(arr) {\n this.clear();\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start;\n entry.start = this.#perf.now() - age;\n }\n this.set(key, entry.value, entry);\n }\n }\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n *\n * Fields on the {@link LRUCache.SetOptions} options param will override\n * their corresponding values in the constructor options for the scope\n * of this single `set()` operation.\n *\n * If `start` is provided, then that will set the effective start\n * time for the TTL calculation. Note that this must be a previous\n * value of `performance.now()` if supported, or a previous value of\n * `Date.now()` if not.\n *\n * Options object may also include `size`, which will prevent\n * calling the `sizeCalculation` function and just use the specified\n * number if it is a positive integer, and `noDisposeOnSet` which\n * will prevent calling a `dispose` function in the case of\n * overwrites.\n *\n * If the `size` (or return value of `sizeCalculation`) for a given\n * entry is greater than `maxEntrySize`, then the item will not be\n * added to the cache.\n *\n * Will update the recency of the entry.\n *\n * If the value is `undefined`, then this is an alias for\n * `cache.delete(key)`. `undefined` is never stored in the cache.\n */\n set(k, v, setOptions = {}) {\n if (v === undefined) {\n this.delete(k);\n return this;\n }\n const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss';\n status.maxEntrySizeExceeded = true;\n }\n // have to delete, in case something is there already.\n this.#delete(k, 'set');\n return this;\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n if (index === undefined) {\n // addition\n index = (this.#size === 0 ? this.#tail\n : this.#free.length !== 0 ? this.#free.pop()\n : this.#size === this.#max ? this.#evict(false)\n : this.#size);\n this.#keyList[index] = k;\n this.#valList[index] = v;\n this.#keyMap.set(k, index);\n this.#next[this.#tail] = index;\n this.#prev[index] = this.#tail;\n this.#tail = index;\n this.#size++;\n this.#addItemSize(index, size, status);\n if (status)\n status.set = 'add';\n noUpdateTTL = false;\n if (this.#hasOnInsert) {\n this.#onInsert?.(v, k, 'add');\n }\n }\n else {\n // update\n this.#moveToTail(index);\n const oldVal = this.#valList[index];\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'));\n const { __staleWhileFetching: s } = oldVal;\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s, k, 'set']);\n }\n }\n }\n else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal, k, 'set']);\n }\n }\n this.#removeItemSize(index);\n this.#addItemSize(index, size, status);\n this.#valList[index] = v;\n if (status) {\n status.set = 'replace';\n const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ?\n oldVal.__staleWhileFetching\n : oldVal;\n if (oldValue !== undefined)\n status.oldValue = oldValue;\n }\n }\n else if (status) {\n status.set = 'update';\n }\n if (this.#hasOnInsert) {\n this.onInsert?.(v, k, v === oldVal ? 'update' : 'replace');\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking();\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start);\n }\n if (status)\n this.#statusTTL(status, index);\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return this;\n }\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop() {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head];\n this.#evict(true);\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching;\n }\n }\n else if (val !== undefined) {\n return val;\n }\n }\n }\n finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n }\n #evict(free) {\n const head = this.#head;\n const k = this.#keyList[head];\n const v = this.#valList[head];\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict']);\n }\n }\n this.#removeItemSize(head);\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined;\n this.#valList[head] = undefined;\n this.#free.push(head);\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0;\n this.#free.length = 0;\n }\n else {\n this.#head = this.#next[head];\n }\n this.#keyMap.delete(k);\n this.#size--;\n return head;\n }\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Check if a key is in the cache, without updating the recency of\n * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n * to `true` in either the options or the constructor.\n *\n * Will return `false` if the item is stale, even though it is technically in\n * the cache. The difference can be determined (if it matters) by using a\n * `status` argument, and inspecting the `has` field.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k, hasOptions = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined) {\n return false;\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index);\n }\n if (status) {\n status.has = 'hit';\n this.#statusTTL(status, index);\n }\n return true;\n }\n else if (status) {\n status.has = 'stale';\n this.#statusTTL(status, index);\n }\n }\n else if (status) {\n status.has = 'miss';\n }\n return false;\n }\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k, peekOptions = {}) {\n const { allowStale = this.allowStale } = peekOptions;\n const index = this.#keyMap.get(k);\n if (index === undefined ||\n (!allowStale && this.#isStale(index))) {\n return;\n }\n const v = this.#valList[index];\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n }\n #backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n return v;\n }\n const ac = new AC();\n const { signal } = options;\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n });\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n };\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal;\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true;\n options.status.fetchError = ac.signal.reason;\n if (ignoreAbort)\n options.status.fetchAbortIgnored = true;\n }\n else {\n options.status.fetchResolved = true;\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason);\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p;\n // if nothing else has been written there but we're set to update the\n // cache and ignore the abort, or if it's still pending on this specific\n // background request, then write it to the cache.\n const vl = this.#valList[index];\n if (vl === p || ignoreAbort && updateCache && vl === undefined) {\n if (v === undefined) {\n if (bf.__staleWhileFetching !== undefined) {\n this.#valList[index] = bf.__staleWhileFetching;\n }\n else {\n this.#delete(k, 'fetch');\n }\n }\n else {\n if (options.status)\n options.status.fetchUpdated = true;\n this.set(k, v, fetchOpts.options);\n }\n }\n return v;\n };\n const eb = (er) => {\n if (options.status) {\n options.status.fetchRejected = true;\n options.status.fetchError = er;\n }\n return fetchFail(er);\n };\n const fetchFail = (er) => {\n const { aborted } = ac.signal;\n const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n const noDelete = allowStale || options.noDeleteOnFetchRejection;\n const bf = p;\n if (this.#valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || bf.__staleWhileFetching === undefined;\n if (del) {\n this.#delete(k, 'fetch');\n }\n else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index] = bf.__staleWhileFetching;\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true;\n }\n return bf.__staleWhileFetching;\n }\n else if (bf.__returned === bf) {\n throw er;\n }\n };\n const pcall = (res, rej) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej);\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (!options.ignoreFetchAbort ||\n options.allowStaleOnFetchAbort) {\n res(undefined);\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true);\n }\n }\n });\n };\n if (options.status)\n options.status.fetchDispatched = true;\n const p = new Promise(pcall).then(cb, eb);\n const bf = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n });\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined });\n index = this.#keyMap.get(k);\n }\n else {\n this.#valList[index] = bf;\n }\n return bf;\n }\n #isBackgroundFetch(p) {\n if (!this.#hasFetchMethod)\n return false;\n const b = p;\n return (!!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC);\n }\n async fetch(k, fetchOptions = {}) {\n const { \n // get options\n allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n // set options\n ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n if (!this.#hasFetchMethod) {\n if (status)\n status.fetch = 'get';\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n });\n }\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n };\n let index = this.#keyMap.get(k);\n if (index === undefined) {\n if (status)\n status.fetch = 'miss';\n const p = this.#backgroundFetch(k, index, options, context);\n return (p.__returned = p);\n }\n else {\n // in cache, maybe already fetching\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n const stale = allowStale && v.__staleWhileFetching !== undefined;\n if (status) {\n status.fetch = 'inflight';\n if (stale)\n status.returnedStale = true;\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v);\n }\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index);\n if (!forceRefresh && !isStale) {\n if (status)\n status.fetch = 'hit';\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n if (status)\n this.#statusTTL(status, index);\n return v;\n }\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context);\n const hasStale = p.__staleWhileFetching !== undefined;\n const staleVal = hasStale && allowStale;\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh';\n if (staleVal && isStale)\n status.returnedStale = true;\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n }\n }\n async forceFetch(k, fetchOptions = {}) {\n const v = await this.fetch(k, fetchOptions);\n if (v === undefined)\n throw new Error('fetch() returned undefined');\n return v;\n }\n memo(k, memoOptions = {}) {\n const memoMethod = this.#memoMethod;\n if (!memoMethod) {\n throw new Error('no memoMethod provided to constructor');\n }\n const { context, forceRefresh, ...options } = memoOptions;\n const v = this.get(k, options);\n if (!forceRefresh && v !== undefined)\n return v;\n const vv = memoMethod(k, v, {\n options,\n context,\n });\n this.set(k, vv, options);\n return vv;\n }\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k, getOptions = {}) {\n const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const value = this.#valList[index];\n const fetching = this.#isBackgroundFetch(value);\n if (status)\n this.#statusTTL(status, index);\n if (this.#isStale(index)) {\n if (status)\n status.get = 'stale';\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.#delete(k, 'expire');\n }\n if (status && allowStale)\n status.returnedStale = true;\n return allowStale ? value : undefined;\n }\n else {\n if (status &&\n allowStale &&\n value.__staleWhileFetching !== undefined) {\n status.returnedStale = true;\n }\n return allowStale ? value.__staleWhileFetching : undefined;\n }\n }\n else {\n if (status)\n status.get = 'hit';\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching;\n }\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n return value;\n }\n }\n else if (status) {\n status.get = 'miss';\n }\n }\n #connect(p, n) {\n this.#prev[n] = p;\n this.#next[p] = n;\n }\n #moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#connect(this.#prev[index], this.#next[index]);\n }\n this.#connect(this.#tail, index);\n this.#tail = index;\n }\n }\n /**\n * Deletes a key out of the cache.\n *\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k) {\n return this.#delete(k, 'delete');\n }\n #delete(k, reason) {\n let deleted = false;\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n deleted = true;\n if (this.#size === 1) {\n this.#clear(reason);\n }\n else {\n this.#removeItemSize(index);\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n this.#keyMap.delete(k);\n this.#keyList[index] = undefined;\n this.#valList[index] = undefined;\n if (index === this.#tail) {\n this.#tail = this.#prev[index];\n }\n else if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n const pi = this.#prev[index];\n this.#next[pi] = this.#next[index];\n const ni = this.#next[index];\n this.#prev[ni] = this.#prev[index];\n }\n this.#size--;\n this.#free.push(index);\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return deleted;\n }\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n return this.#clear('delete');\n }\n #clear(reason) {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else {\n const k = this.#keyList[index];\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n }\n this.#keyMap.clear();\n this.#valList.fill(undefined);\n this.#keyList.fill(undefined);\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0);\n this.#starts.fill(0);\n }\n if (this.#sizes) {\n this.#sizes.fill(0);\n }\n this.#head = 0;\n this.#tail = 0;\n this.#free.length = 0;\n this.#calculatedSize = 0;\n this.#size = 0;\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","import { flatten } from 'lodash';\nimport { LRUCache } from 'lru-cache';\n\nimport { AbstractQuery, getDefaultTimeRange, KeyValue, LanguageProvider, ScopedVars, TimeRange } from '@grafana/data';\nimport { BackendSrvRequest, config } from '@grafana/runtime';\n\nimport { DEFAULT_MAX_LINES_SAMPLE, LokiDatasource } from './datasource';\nimport { abstractQueryToExpr, mapAbstractOperatorsToOp, processLabels } from './languageUtils';\nimport { getStreamSelectorsFromQuery } from './queryUtils';\nimport { buildVisualQueryFromString } from './querybuilder/parsing';\nimport {\n extractLabelKeysFromDataFrame,\n extractLogParserFromDataFrame,\n extractUnwrapLabelKeysFromDataFrame,\n} from './responseUtils';\nimport { DetectedFieldsResult, LabelType, LokiQuery, LokiQueryType, ParserAndLabelKeysResult } from './types';\n\nconst NS_IN_MS = 1000000;\nconst EMPTY_SELECTOR = '{}';\nconst HIDDEN_LABELS = ['__aggregated_metric__', '__tenant_id__', '__stream_shard__'];\n\nexport default class LokiLanguageProvider extends LanguageProvider {\n labelKeys: string[];\n started = false;\n startedTimeRange?: TimeRange;\n datasource: LokiDatasource;\n\n /**\n * Cache for labels of series. This is bit simplistic in the sense that it just counts responses each as a 1 and does\n * not account for different size of a response. If that is needed a `length` function can be added in the options.\n * 10 as a max size is totally arbitrary right now.\n */\n private seriesCache = new LRUCache<string, Record<string, string[]>>({ max: 10 });\n private labelsCache = new LRUCache<string, string[]>({ max: 10 });\n private detectedFieldValuesCache = new LRUCache<string, string[]>({ max: 10 });\n private labelsPromisesCache = new LRUCache<string, Promise<string[]>>({ max: 10 });\n private detectedLabelValuesPromisesCache = new LRUCache<string, Promise<string[]>>({ max: 10 });\n\n constructor(datasource: LokiDatasource) {\n super();\n\n this.datasource = datasource;\n this.labelKeys = [];\n }\n\n request = async (\n url: string,\n params?: Record<string, string | number>,\n throwError?: boolean,\n requestOptions?: Partial<BackendSrvRequest>\n ) => {\n try {\n return await this.datasource.metadataRequest(url, params, requestOptions);\n } catch (error) {\n if (throwError) {\n throw error;\n } else {\n console.error(error);\n }\n }\n\n return undefined;\n };\n\n /**\n * Initialize the language provider by fetching set of labels.\n */\n start = (timeRange?: TimeRange) => {\n const range = timeRange ?? this.getDefaultTimeRange();\n const newRangeParams = this.datasource.getTimeRangeParams(range);\n const prevRangeParams = this.startedTimeRange ? this.datasource.getTimeRangeParams(this.startedTimeRange) : null;\n // refetch labels if either there's not already a start task or the time range has changed\n if (\n !this.startTask ||\n !prevRangeParams ||\n newRangeParams.start !== prevRangeParams.start ||\n newRangeParams.end !== prevRangeParams.end\n ) {\n this.startedTimeRange = range;\n this.startTask = this.fetchLabels({ timeRange: range }).then(() => {\n this.started = true;\n return [];\n });\n }\n\n return this.startTask;\n };\n\n /**\n * Returns the label keys that have been fetched.\n * If labels have not been fetched yet, it will return an empty array.\n * For updated labels (which should not happen often), use fetchLabels.\n * @todo It is quite complicated to know when to use fetchLabels and when to use getLabelKeys.\n * We should consider simplifying this and use caching in the same way as with seriesCache and labelsCache\n * and just always use fetchLabels.\n * Caching should be thought out properly, so we are not fetching this often, as labelKeys should not be changing often.\n *\n * @returns {string[]} An array of label keys or an empty array if labels have not been fetched.\n */\n getLabelKeys(): string[] {\n return this.labelKeys;\n }\n\n importFromAbstractQuery(labelBasedQuery: AbstractQuery): LokiQuery {\n return {\n refId: labelBasedQuery.refId,\n expr: abstractQueryToExpr(labelBasedQuery),\n queryType: LokiQueryType.Range,\n };\n }\n\n exportToAbstractQuery(query: LokiQuery): AbstractQuery {\n if (!query.expr || query.expr.length === 0) {\n return { refId: query.refId, labelMatchers: [] };\n }\n const streamSelectors = getStreamSelectorsFromQuery(query.expr);\n\n const labelMatchers = streamSelectors.map((streamSelector) => {\n const visualQuery = buildVisualQueryFromString(streamSelector).query;\n const matchers = visualQuery.labels.map((label) => {\n return {\n name: label.label,\n value: label.value,\n operator: mapAbstractOperatorsToOp[label.op],\n };\n });\n return matchers;\n });\n\n return {\n refId: query.refId,\n labelMatchers: flatten(labelMatchers),\n };\n }\n\n /**\n * Fetch label keys using the best applicable endpoint.\n *\n * This asynchronous function returns all available label keys from the data source.\n * It returns a promise that resolves to an array of strings containing the label keys.\n *\n * @param options - (Optional) An object containing additional options.\n * @param options.streamSelector - (Optional) The stream selector to filter label keys. If not provided, all label keys are fetched.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label keys. If not provided, the default time range is used.\n * @returns A promise containing an array of label keys.\n * @throws An error if the fetch operation fails.\n */\n async fetchLabels(options?: { streamSelector?: string; timeRange?: TimeRange }): Promise<string[]> {\n // We'll default to use `/labels`. If the flag is disabled, and there's a streamSelector, we'll use the series endpoint.\n if (config.featureToggles.lokiLabelNamesQueryApi || !options?.streamSelector) {\n return this.fetchLabelsByLabelsEndpoint(options);\n } else {\n const data = await this.fetchSeriesLabels(options.streamSelector, { timeRange: options.timeRange });\n return Object.keys(data ?? {});\n }\n }\n\n /**\n * Fetch all label keys\n * This asynchronous function returns all available label keys from the data source.\n * It returns a promise that resolves to an array of strings containing the label keys.\n *\n * @param options - (Optional) An object containing additional options - currently only time range.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label keys. If not provided, the default time range is used.\n * @returns A promise containing an array of label keys.\n * @throws An error if the fetch operation fails.\n */\n private async fetchLabelsByLabelsEndpoint(options?: {\n streamSelector?: string;\n timeRange?: TimeRange;\n }): Promise<string[]> {\n const url = 'labels';\n const range = options?.timeRange ?? this.getDefaultTimeRange();\n const { start, end } = this.datasource.getTimeRangeParams(range);\n const params: Record<string, string | number> = { start, end };\n if (options?.streamSelector && options?.streamSelector !== EMPTY_SELECTOR) {\n params['query'] = options.streamSelector;\n }\n const res = await this.request(url, params);\n if (Array.isArray(res)) {\n const labels = Array.from(new Set(res))\n .slice()\n .sort()\n .filter((label: string) => HIDDEN_LABELS.includes(label) === false);\n this.labelKeys = labels;\n return this.labelKeys;\n }\n\n return [];\n }\n\n /**\n * Fetch series labels for a selector\n *\n * This method fetches labels for a given stream selector, such as `{job=\"grafana\"}`.\n * It returns a promise that resolves to a record mapping label names to their corresponding values.\n *\n * @param streamSelector - The stream selector for which you want to retrieve labels.\n * @param options - (Optional) An object containing additional options - currently only time range.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label keys. If not provided, the default time range is used.\n * @returns A promise containing a record of label names and their values.\n * @throws An error if the fetch operation fails.\n */\n fetchSeriesLabels = async (\n streamSelector: string,\n options?: { timeRange?: TimeRange }\n ): Promise<Record<string, string[]>> => {\n const interpolatedMatch = this.datasource.interpolateString(streamSelector);\n const url = 'series';\n const range = options?.timeRange ?? this.getDefaultTimeRange();\n const { start, end } = this.datasource.getTimeRangeParams(range);\n\n const cacheKey = this.generateCacheKey(url, start, end, interpolatedMatch);\n let value = this.seriesCache.get(cacheKey);\n if (!value) {\n const params = { 'match[]': interpolatedMatch, start, end };\n const data = await this.request(url, params);\n if (!Array.isArray(data)) {\n return {};\n }\n const { values } = processLabels(data);\n value = values;\n this.seriesCache.set(cacheKey, value);\n }\n return value;\n };\n\n /**\n * Fetch series for a selector. Use this for raw results. Use fetchSeriesLabels() to get labels.\n * @param match\n * @param streamSelector - The stream selector for which you want to retrieve labels.\n * @param options - (Optional) An object containing additional options.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label keys. If not provided, the default time range is used.\n * @returns A promise containing array with records of label names and their value.\n */\n fetchSeries = async (match: string, options?: { timeRange?: TimeRange }): Promise<Array<Record<string, string>>> => {\n const url = 'series';\n const range = options?.timeRange ?? this.getDefaultTimeRange();\n const { start, end } = this.datasource.getTimeRangeParams(range);\n const params = { 'match[]': match, start, end };\n return await this.request(url, params);\n };\n\n // Cache key is a bit different here. We round up to a minute the intervals.\n // The rounding may seem strange but makes relative intervals like now-1h less prone to need separate request every\n // millisecond while still actually getting all the keys for the correct interval. This still can create problems\n // when user does not the newest values for a minute if already cached.\n private generateCacheKey(url: string, start: number, end: number, param: string): string {\n return [url, this.roundTime(start), this.roundTime(end), param].join();\n }\n\n // Round nanoseconds epoch to nearest 5 minute interval\n private roundTime(nanoseconds: number): number {\n return nanoseconds ? Math.floor(nanoseconds / NS_IN_MS / 1000 / 60 / 5) : 0;\n }\n\n async fetchDetectedFields(\n queryOptions: {\n expr: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n },\n requestOptions?: Partial<BackendSrvRequest>\n ): Promise<DetectedFieldsResult | Error> {\n const interpolatedExpr =\n queryOptions.expr && queryOptions.expr !== EMPTY_SELECTOR\n ? this.datasource.interpolateString(queryOptions.expr, queryOptions.scopedVars)\n : undefined;\n\n if (!interpolatedExpr) {\n throw new Error('fetchDetectedFields requires query expression');\n }\n\n const url = `detected_fields`;\n const range = queryOptions?.timeRange ?? this.getDefaultTimeRange();\n const rangeParams = this.datasource.getTimeRangeParams(range);\n const { start, end } = rangeParams;\n const params: KeyValue<string | number> = { start, end, limit: queryOptions?.limit ?? 1000 };\n params.query = interpolatedExpr;\n\n return new Promise(async (resolve, reject) => {\n try {\n const data = await this.request(url, params, true, requestOptions);\n resolve(data);\n } catch (error) {\n console.error('error', error);\n reject(error);\n }\n });\n }\n\n async fetchDetectedFieldValues(\n labelName: string,\n queryOptions?: {\n expr?: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n throwError?: boolean;\n },\n requestOptions?: Partial<BackendSrvRequest>\n ): Promise<string[] | Error> {\n // This function was named poorly, it's not detected label values, it's detected field values! :facepalm\n return this.fetchDetectedLabelValues(labelName, queryOptions, requestOptions);\n }\n\n /**\n * @deprecated: use fetchDetectedFieldValues instead\n */\n async fetchDetectedLabelValues(\n labelName: string,\n queryOptions?: {\n expr?: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n throwError?: boolean;\n },\n requestOptions?: Partial<BackendSrvRequest>\n ): Promise<string[] | Error> {\n const label = encodeURIComponent(this.datasource.interpolateString(labelName));\n\n const interpolatedExpr =\n queryOptions?.expr && queryOptions.expr !== EMPTY_SELECTOR\n ? this.datasource.interpolateString(queryOptions.expr, queryOptions.scopedVars)\n : undefined;\n\n const url = `detected_field/${label}/values`;\n const range = queryOptions?.timeRange ?? this.getDefaultTimeRange();\n const rangeParams = this.datasource.getTimeRangeParams(range);\n const { start, end } = rangeParams;\n const params: KeyValue<string | number> = { start, end, limit: queryOptions?.limit ?? 1000 };\n let paramCacheKey = label;\n\n if (interpolatedExpr) {\n params.query = interpolatedExpr;\n paramCacheKey += interpolatedExpr;\n }\n\n const cacheKey = this.generateCacheKey(url, start, end, paramCacheKey);\n\n // Values in cache, return\n const labelValues = this.detectedFieldValuesCache.get(cacheKey);\n if (labelValues) {\n return labelValues;\n }\n\n // Promise in cache, return\n let labelValuesPromise = this.detectedLabelValuesPromisesCache.get(cacheKey);\n if (labelValuesPromise) {\n return labelValuesPromise;\n }\n\n labelValuesPromise = new Promise(async (resolve, reject) => {\n try {\n const data = await this.request(url, params, queryOptions?.throwError, requestOptions);\n if (Array.isArray(data)) {\n const labelValues = data.slice().sort();\n this.detectedFieldValuesCache.set(cacheKey, labelValues);\n this.detectedLabelValuesPromisesCache.delete(cacheKey);\n resolve(labelValues);\n }\n } catch (error) {\n if (queryOptions?.throwError) {\n reject(error);\n } else {\n console.error(error);\n resolve([]);\n }\n }\n });\n this.detectedLabelValuesPromisesCache.set(cacheKey, labelValuesPromise);\n\n return labelValuesPromise;\n }\n\n /**\n * Fetch label values\n *\n * This asynchronous function fetches values associated with a specified label name.\n * It returns a promise that resolves to an array of strings containing the label values.\n *\n * @param labelName - The name of the label for which you want to retrieve values.\n * @param options - (Optional) An object containing additional options.\n * @param options.streamSelector - (Optional) The stream selector to filter label values. If not provided, all label values are fetched.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label values. If not provided, the default time range is used.\n * @returns A promise containing an array of label values.\n * @throws An error if the fetch operation fails.\n */\n async fetchLabelValues(\n labelName: string,\n options?: { streamSelector?: string; timeRange?: TimeRange }\n ): Promise<string[]> {\n const label = encodeURIComponent(this.datasource.interpolateString(labelName));\n // Loki doesn't allow empty streamSelector {}, so we should not send it.\n const streamParam =\n options?.streamSelector && options.streamSelector !== EMPTY_SELECTOR\n ? this.datasource.interpolateString(options.streamSelector)\n : undefined;\n\n const url = `label/${label}/values`;\n const range = options?.timeRange ?? this.getDefaultTimeRange();\n const rangeParams = this.datasource.getTimeRangeParams(range);\n const { start, end } = rangeParams;\n const params: KeyValue<string | number> = { start, end };\n let paramCacheKey = label;\n\n if (streamParam) {\n params.query = streamParam;\n paramCacheKey += streamParam;\n }\n\n const cacheKey = this.generateCacheKey(url, start, end, paramCacheKey);\n\n // Values in cache, return\n const labelValues = this.labelsCache.get(cacheKey);\n if (labelValues) {\n return labelValues;\n }\n\n // Promise in cache, return\n let labelValuesPromise = this.labelsPromisesCache.get(cacheKey);\n if (labelValuesPromise) {\n return labelValuesPromise;\n }\n\n labelValuesPromise = new Promise(async (resolve) => {\n try {\n const data = await this.request(url, params);\n if (Array.isArray(data)) {\n const labelValues = data.slice().sort();\n this.labelsCache.set(cacheKey, labelValues);\n this.labelsPromisesCache.delete(cacheKey);\n resolve(labelValues);\n }\n } catch (error) {\n console.error(error);\n resolve([]);\n }\n });\n this.labelsPromisesCache.set(cacheKey, labelValuesPromise);\n return labelValuesPromise;\n }\n\n /**\n * Get parser and label keys for a selector\n *\n * This asynchronous function is used to fetch parsers and label keys for a selected log stream based on sampled lines.\n * It returns a promise that resolves to an object with the following properties:\n *\n * - `extractedLabelKeys`: An array of available label keys associated with the log stream.\n * - `hasJSON`: A boolean indicating whether JSON parsing is available for the stream.\n * - `hasLogfmt`: A boolean indicating whether Logfmt parsing is available for the stream.\n * - `hasPack`: A boolean indicating whether Pack parsing is available for the stream.\n * - `unwrapLabelKeys`: An array of label keys that can be used for unwrapping log data.\n *\n * @param streamSelector - The selector for the log stream you want to analyze.\n * @param options - (Optional) An object containing additional options.\n * @param options.maxLines - (Optional) The number of log lines requested when determining parsers and label keys.\n * @param options.timeRange - (Optional) The time range for which you want to retrieve label keys. If not provided, the default time range is used.\n * Smaller maxLines is recommended for improved query performance. The default count is 10.\n * @returns A promise containing an object with parser and label key information.\n * @throws An error if the fetch operation fails.\n */\n async getParserAndLabelKeys(\n streamSelector: string,\n options?: { maxLines?: number; timeRange?: TimeRange }\n ): Promise<ParserAndLabelKeysResult> {\n const empty = {\n extractedLabelKeys: [],\n structuredMetadataKeys: [],\n unwrapLabelKeys: [],\n hasJSON: false,\n hasLogfmt: false,\n hasPack: false,\n };\n\n const series = await this.datasource.getDataSamples(\n {\n expr: streamSelector,\n refId: 'data-samples',\n maxLines: options?.maxLines || DEFAULT_MAX_LINES_SAMPLE,\n },\n options?.timeRange ?? this.getDefaultTimeRange()\n );\n\n if (!series.length) {\n return empty;\n }\n\n const { hasLogfmt, hasJSON, hasPack } = extractLogParserFromDataFrame(series[0]);\n\n return {\n extractedLabelKeys: [\n ...extractLabelKeysFromDataFrame(series[0], LabelType.Indexed),\n ...extractLabelKeysFromDataFrame(series[0], LabelType.Parsed),\n ],\n structuredMetadataKeys: extractLabelKeysFromDataFrame(series[0], LabelType.StructuredMetadata),\n unwrapLabelKeys: extractUnwrapLabelKeysFromDataFrame(series[0]),\n hasJSON,\n hasPack,\n hasLogfmt,\n };\n }\n\n /**\n * Get the default time range\n *\n * @returns {TimeRange} The default time range\n */\n getDefaultTimeRange(): TimeRange {\n return getDefaultTimeRange();\n }\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","export var COMPLETE_NOTIFICATION = (function () { return createNotification('C', undefined, undefined); })();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind: kind,\n value: value,\n error: error,\n };\n}\n//# sourceMappingURL=NotificationFactories.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar ReplaySubject = (function (_super) {\n __extends(ReplaySubject, _super);\n function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n if (_bufferSize === void 0) { _bufferSize = Infinity; }\n if (_windowTime === void 0) { _windowTime = Infinity; }\n if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider; }\n var _this = _super.call(this) || this;\n _this._bufferSize = _bufferSize;\n _this._windowTime = _windowTime;\n _this._timestampProvider = _timestampProvider;\n _this._buffer = [];\n _this._infiniteTimeWindow = true;\n _this._infiniteTimeWindow = _windowTime === Infinity;\n _this._bufferSize = Math.max(1, _bufferSize);\n _this._windowTime = Math.max(1, _windowTime);\n return _this;\n }\n ReplaySubject.prototype.next = function (value) {\n var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n var subscription = this._innerSubscribe(subscriber);\n var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;\n var copy = _buffer.slice();\n for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n };\n ReplaySubject.prototype._trimBuffer = function () {\n var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;\n var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n var now = _timestampProvider.now();\n var last = 0;\n for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n };\n return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\n//# sourceMappingURL=ReplaySubject.js.map","import { __assign, __extends } from \"tslib\";\nimport { Subject, AnonymousSubject } from '../../Subject';\nimport { Subscriber } from '../../Subscriber';\nimport { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { ReplaySubject } from '../../ReplaySubject';\nvar DEFAULT_WEBSOCKET_CONFIG = {\n url: '',\n deserializer: function (e) { return JSON.parse(e.data); },\n serializer: function (value) { return JSON.stringify(value); },\n};\nvar WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';\nvar WebSocketSubject = (function (_super) {\n __extends(WebSocketSubject, _super);\n function WebSocketSubject(urlConfigOrSource, destination) {\n var _this = _super.call(this) || this;\n _this._socket = null;\n if (urlConfigOrSource instanceof Observable) {\n _this.destination = destination;\n _this.source = urlConfigOrSource;\n }\n else {\n var config = (_this._config = __assign({}, DEFAULT_WEBSOCKET_CONFIG));\n _this._output = new Subject();\n if (typeof urlConfigOrSource === 'string') {\n config.url = urlConfigOrSource;\n }\n else {\n for (var key in urlConfigOrSource) {\n if (urlConfigOrSource.hasOwnProperty(key)) {\n config[key] = urlConfigOrSource[key];\n }\n }\n }\n if (!config.WebSocketCtor && WebSocket) {\n config.WebSocketCtor = WebSocket;\n }\n else if (!config.WebSocketCtor) {\n throw new Error('no WebSocket constructor can be found');\n }\n _this.destination = new ReplaySubject();\n }\n return _this;\n }\n WebSocketSubject.prototype.lift = function (operator) {\n var sock = new WebSocketSubject(this._config, this.destination);\n sock.operator = operator;\n sock.source = this;\n return sock;\n };\n WebSocketSubject.prototype._resetState = function () {\n this._socket = null;\n if (!this.source) {\n this.destination = new ReplaySubject();\n }\n this._output = new Subject();\n };\n WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {\n var self = this;\n return new Observable(function (observer) {\n try {\n self.next(subMsg());\n }\n catch (err) {\n observer.error(err);\n }\n var subscription = self.subscribe({\n next: function (x) {\n try {\n if (messageFilter(x)) {\n observer.next(x);\n }\n }\n catch (err) {\n observer.error(err);\n }\n },\n error: function (err) { return observer.error(err); },\n complete: function () { return observer.complete(); },\n });\n return function () {\n try {\n self.next(unsubMsg());\n }\n catch (err) {\n observer.error(err);\n }\n subscription.unsubscribe();\n };\n });\n };\n WebSocketSubject.prototype._connectSocket = function () {\n var _this = this;\n var _a = this._config, WebSocketCtor = _a.WebSocketCtor, protocol = _a.protocol, url = _a.url, binaryType = _a.binaryType;\n var observer = this._output;\n var socket = null;\n try {\n socket = protocol ? new WebSocketCtor(url, protocol) : new WebSocketCtor(url);\n this._socket = socket;\n if (binaryType) {\n this._socket.binaryType = binaryType;\n }\n }\n catch (e) {\n observer.error(e);\n return;\n }\n var subscription = new Subscription(function () {\n _this._socket = null;\n if (socket && socket.readyState === 1) {\n socket.close();\n }\n });\n socket.onopen = function (evt) {\n var _socket = _this._socket;\n if (!_socket) {\n socket.close();\n _this._resetState();\n return;\n }\n var openObserver = _this._config.openObserver;\n if (openObserver) {\n openObserver.next(evt);\n }\n var queue = _this.destination;\n _this.destination = Subscriber.create(function (x) {\n if (socket.readyState === 1) {\n try {\n var serializer = _this._config.serializer;\n socket.send(serializer(x));\n }\n catch (e) {\n _this.destination.error(e);\n }\n }\n }, function (err) {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n if (err && err.code) {\n socket.close(err.code, err.reason);\n }\n else {\n observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));\n }\n _this._resetState();\n }, function () {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n socket.close();\n _this._resetState();\n });\n if (queue && queue instanceof ReplaySubject) {\n subscription.add(queue.subscribe(_this.destination));\n }\n };\n socket.onerror = function (e) {\n _this._resetState();\n observer.error(e);\n };\n socket.onclose = function (e) {\n if (socket === _this._socket) {\n _this._resetState();\n }\n var closeObserver = _this._config.closeObserver;\n if (closeObserver) {\n closeObserver.next(e);\n }\n if (e.wasClean) {\n observer.complete();\n }\n else {\n observer.error(e);\n }\n };\n socket.onmessage = function (e) {\n try {\n var deserializer = _this._config.deserializer;\n observer.next(deserializer(e));\n }\n catch (err) {\n observer.error(err);\n }\n };\n };\n WebSocketSubject.prototype._subscribe = function (subscriber) {\n var _this = this;\n var source = this.source;\n if (source) {\n return source.subscribe(subscriber);\n }\n if (!this._socket) {\n this._connectSocket();\n }\n this._output.subscribe(subscriber);\n subscriber.add(function () {\n var _socket = _this._socket;\n if (_this._output.observers.length === 0) {\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n _this._resetState();\n }\n });\n return subscriber;\n };\n WebSocketSubject.prototype.unsubscribe = function () {\n var _socket = this._socket;\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n this._resetState();\n _super.prototype.unsubscribe.call(this);\n };\n return WebSocketSubject;\n}(AnonymousSubject));\nexport { WebSocketSubject };\n//# sourceMappingURL=WebSocketSubject.js.map","function f(s, x, y, z) {\n switch (s) {\n case 0:\n return (x & y) ^ (~x & z);\n case 1:\n return x ^ y ^ z;\n case 2:\n return (x & y) ^ (x & z) ^ (y & z);\n case 3:\n return x ^ y ^ z;\n }\n}\nfunction ROTL(x, n) {\n return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n const newBytes = new Uint8Array(bytes.length + 1);\n newBytes.set(bytes);\n newBytes[bytes.length] = 0x80;\n bytes = newBytes;\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n for (let j = 0; j < 16; ++j) {\n arr[j] =\n (bytes[i * 64 + j * 4] << 24) |\n (bytes[i * 64 + j * 4 + 1] << 16) |\n (bytes[i * 64 + j * 4 + 2] << 8) |\n bytes[i * 64 + j * 4 + 3];\n }\n M[i] = arr;\n }\n M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);\n}\nexport default sha1;\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import REGEX from './regex.js';\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;\n","import validate from './validate.js';\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n let v;\n return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexport default parse;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport function stringToBytes(str) {\n str = unescape(encodeURIComponent(str));\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(version, hash, value, namespace, buf, offset) {\n const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n const namespaceBytes = typeof namespace === 'string' ? parse(namespace) : namespace;\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n if (namespace?.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n }\n let bytes = new Uint8Array(16 + valueBytes.length);\n bytes.set(namespaceBytes);\n bytes.set(valueBytes, namespaceBytes.length);\n bytes = hash(bytes);\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n return buf;\n }\n return unsafeStringify(bytes);\n}\n","import sha1 from './sha1.js';\nimport v35, { DNS, URL } from './v35.js';\nexport { DNS, URL } from './v35.js';\nfunction v5(value, namespace, buf, offset) {\n return v35(0x50, sha1, value, namespace, buf, offset);\n}\nv5.DNS = DNS;\nv5.URL = URL;\nexport default v5;\n","import { v5 as uuidv5 } from 'uuid';\n\nimport { MutableDataFrame } from '@grafana/data';\n\nimport { LokiStreamResult, LokiTailResponse } from './types';\n\nconst UUID_NAMESPACE = '6ec946da-0f49-47a8-983a-1d76d17e7c92';\n\n/**\n * Transform LokiResponse data and appends it to MutableDataFrame. Used for streaming where the dataFrame can be\n * a CircularDataFrame creating a fixed size rolling buffer.\n * TODO: Probably could be unified with the logStreamToDataFrame function.\n * @param response\n * @param data Needs to have ts, line, labels, id as fields\n */\nexport function appendResponseToBufferedData(response: LokiTailResponse, data: MutableDataFrame) {\n // Should we do anything with: response.dropped_entries?\n\n const streams: LokiStreamResult[] = response.streams;\n if (!streams || !streams.length) {\n return;\n }\n\n const tsField = data.fields[0];\n const lineField = data.fields[1];\n const idField = data.fields[2];\n\n // We are comparing used ids only within the received stream. This could be a problem if the same line + labels + nanosecond timestamp came in 2 separate batches.\n // As this is very unlikely, and the result would only affect live-tailing css animation we have decided to not compare all received uids from data param as this would slow down processing.\n const usedUids: Record<string, number> = {};\n\n for (const stream of streams) {\n // Find unique labels\n const allLabelsString = Object.entries(stream.stream)\n .map(([key, val]) => `${key}=\"${val}\"`)\n .sort()\n .join('');\n\n // Add each line\n for (const [ts, line] of stream.values) {\n tsField.values.push(new Date(parseInt(ts.slice(0, -6), 10)).toISOString());\n lineField.values.push(line);\n idField.values.push(createUid(ts, allLabelsString, line, usedUids, data.refId));\n }\n }\n}\n\nfunction createUid(\n ts: string,\n labelsString: string,\n line: string,\n usedUids: Record<string, number>,\n refId?: string\n): string {\n // Generate id as hashed nanosecond timestamp, labels and line (this does not have to be unique)\n let id = uuidv5(`${ts}_${labelsString}_${line}`, UUID_NAMESPACE);\n\n // Check if generated id is unique\n // If not and we've already used it, append its count after it\n if (id in usedUids) {\n // Increase the count\n const newCount = usedUids[id] + 1;\n usedUids[id] = newCount;\n // Append count to generated id to make it unique\n id = `${id}_${newCount}`;\n } else {\n // If id is unique and wasn't used, add it to usedUids and start count at 0\n usedUids[id] = 0;\n }\n // Return unique id\n if (refId) {\n return `${refId}_${id}`;\n }\n return id;\n}\n","import { Observable, throwError, timer } from 'rxjs';\nimport { finalize, map, retryWhen, mergeMap } from 'rxjs/operators';\nimport { webSocket } from 'rxjs/webSocket';\n\nimport { DataFrame, FieldType, KeyValue, CircularDataFrame } from '@grafana/data';\n\nimport { appendResponseToBufferedData } from './liveStreamsResultTransformer';\nimport { LokiTailResponse } from './types';\n\n/**\n * Maps directly to a query in the UI (refId is key)\n */\nexport interface LokiLiveTarget {\n query: string;\n url: string;\n refId: string;\n size: number;\n}\n\n/**\n * Cache of websocket streams that can be returned as observable. In case there already is a stream for particular\n * target it is returned and on subscription returns the latest dataFrame.\n */\nexport class LiveStreams {\n private streams: KeyValue<Observable<DataFrame[]>> = {};\n\n getStream(target: LokiLiveTarget, retryInterval = 5000): Observable<DataFrame[]> {\n let stream = this.streams[target.url];\n\n if (stream) {\n return stream;\n }\n\n const data = new CircularDataFrame({ capacity: target.size });\n data.addField({ name: 'Time', type: FieldType.time, config: {} });\n data.addField({ name: 'Line', type: FieldType.string });\n data.addField({ name: 'id', type: FieldType.string });\n data.meta = { ...data.meta, preferredVisualisationType: 'logs' };\n data.refId = target.refId;\n\n stream = webSocket<LokiTailResponse>(target.url).pipe(\n map((response: LokiTailResponse) => {\n appendResponseToBufferedData(response, data);\n return [data];\n }),\n retryWhen((attempts) =>\n attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n // Code 1006 is used to indicate that a connection was closed abnormally.\n // Added hard limit of 30 on number of retries.\n // If connection was closed abnormally, and we wish to retry, otherwise throw error.\n if (error.code === 1006 && retryAttempt < 30) {\n if (retryAttempt > 10) {\n // If more than 10 times retried, consol.warn, but keep reconnecting\n console.warn(\n `Websocket connection is being disrupted. We keep reconnecting but consider starting new live tailing again. Error: ${error.reason}`\n );\n }\n // Retry every 5s\n return timer(retryInterval);\n }\n return throwError(error);\n })\n )\n ),\n finalize(() => {\n delete this.streams[target.url];\n })\n );\n this.streams[target.url] = stream;\n\n return stream;\n }\n}\n","import { WebSocketSubject } from './WebSocketSubject';\nexport function webSocket(urlConfigOrSource) {\n return new WebSocketSubject(urlConfigOrSource);\n}\n//# sourceMappingURL=webSocket.js.map","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import { css } from '@emotion/css';\nimport { useRef, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { dateTime, GrafanaTheme2, LogRowModel, renderMarkdown, SelectableValue } from '@grafana/data';\nimport { RawQuery } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport {\n Alert,\n Button,\n Collapse,\n Icon,\n InlineField,\n InlineFieldRow,\n InlineSwitch,\n Label,\n MultiSelect,\n RenderUserContentAsHTML,\n Spinner,\n Tooltip,\n useStyles2,\n} from '@grafana/ui';\n\nimport {\n LogContextProvider,\n LOKI_LOG_CONTEXT_PRESERVED_LABELS,\n PreservedLabels,\n SHOULD_INCLUDE_PIPELINE_OPERATIONS,\n} from '../LogContextProvider';\nimport { escapeLabelValueInSelector } from '../languageUtils';\nimport { lokiGrammar } from '../syntax';\nimport { ContextFilter, LokiQuery } from '../types';\n\nexport interface LokiContextUiProps {\n logContextProvider: LogContextProvider;\n row: LogRowModel;\n updateFilter: (value: ContextFilter[]) => void;\n onClose: () => void;\n origQuery?: LokiQuery;\n runContextQuery?: () => void;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n labels: css({\n display: 'flex',\n gap: theme.spacing(0.5),\n }),\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: theme.spacing(0.5),\n position: 'relative',\n }),\n textWrapper: css({\n display: 'flex',\n alignItems: 'center',\n }),\n hidden: css({\n visibility: 'hidden',\n }),\n label: css({\n maxWidth: '100%',\n '&:first-of-type': {\n marginBottom: theme.spacing(2),\n },\n '&:not(:first-of-type)': {\n margin: theme.spacing(2, 0),\n },\n }),\n rawQueryContainer: css({\n textAlign: 'start',\n lineBreak: 'anywhere',\n marginTop: theme.spacing(-0.25),\n marginRight: theme.spacing(6),\n minHeight: theme.spacing(4),\n }),\n ui: css({\n backgroundColor: theme.colors.background.secondary,\n padding: theme.spacing(2),\n }),\n notification: css({\n position: 'absolute',\n zIndex: theme.zIndex.portal,\n top: 0,\n right: 0,\n }),\n rawQuery: css({\n display: 'inline',\n }),\n queryDescription: css({\n marginLeft: theme.spacing(0.5),\n }),\n iconButton: css({\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n zIndex: theme.zIndex.navbarFixed,\n }),\n operationsToggle: css({\n margin: theme.spacing(1, 0, -1, 0),\n '& > div': {\n margin: 0,\n '& > label': {\n padding: 0,\n },\n },\n }),\n };\n}\n\nexport const IS_LOKI_LOG_CONTEXT_UI_OPEN = 'isLogContextQueryUiOpen';\n\nexport function LokiContextUi(props: LokiContextUiProps) {\n const { row, logContextProvider, updateFilter, onClose, origQuery, runContextQuery } = props;\n const styles = useStyles2(getStyles);\n\n const [contextFilters, setContextFilters] = useState<ContextFilter[]>([]);\n const [showPreservedFiltersAppliedNotification, setShowPreservedFiltersAppliedNotification] = useState(false);\n\n const [initialized, setInitialized] = useState(false);\n const [loading, setLoading] = useState(false);\n const [isOpen, setIsOpen] = useState(window.localStorage.getItem(IS_LOKI_LOG_CONTEXT_UI_OPEN) === 'true');\n const [includePipelineOperations, setIncludePipelineOperations] = useState(\n window.localStorage.getItem(SHOULD_INCLUDE_PIPELINE_OPERATIONS) === 'true'\n );\n\n const timerHandle = useRef<number>();\n const previousInitialized = useRef<boolean>(false);\n const previousContextFilters = useRef<ContextFilter[]>([]);\n\n const isInitialState = useMemo(() => {\n // Initial query has all regular labels enabled and all parsed labels disabled\n if (initialized && contextFilters.some((filter) => filter.nonIndexed === filter.enabled)) {\n return false;\n }\n\n // if we include pipeline operations, we also want to enable the revert button\n if (includePipelineOperations && logContextProvider.queryContainsValidPipelineStages(origQuery)) {\n return false;\n }\n\n return true;\n }, [contextFilters, includePipelineOperations, initialized, logContextProvider, origQuery]);\n\n useEffect(() => {\n if (!initialized) {\n return;\n }\n\n // don't trigger if we initialized, this will be the same query anyways.\n if (!previousInitialized.current) {\n previousInitialized.current = initialized;\n return;\n }\n\n if (contextFilters.filter(({ enabled, nonIndexed }) => enabled && !nonIndexed).length === 0) {\n setContextFilters(previousContextFilters.current);\n return;\n }\n\n previousContextFilters.current = structuredClone(contextFilters);\n\n if (timerHandle.current) {\n clearTimeout(timerHandle.current);\n }\n setLoading(true);\n timerHandle.current = window.setTimeout(() => {\n updateFilter(contextFilters.filter(({ enabled }) => enabled));\n // We are storing the removed labels and selected extracted labels in local storage so we can\n // preselect the labels in the UI in the next log context view.\n const preservedLabels: PreservedLabels = {\n removedLabels: [],\n selectedExtractedLabels: [],\n };\n\n contextFilters.forEach(({ enabled, nonIndexed, label }) => {\n // We only want to store real labels that were removed from the initial query\n if (!enabled && !nonIndexed) {\n preservedLabels.removedLabels.push(label);\n }\n // Or extracted labels that were added to the initial query\n if (enabled && nonIndexed) {\n preservedLabels.selectedExtractedLabels.push(label);\n }\n });\n\n window.localStorage.setItem(LOKI_LOG_CONTEXT_PRESERVED_LABELS, JSON.stringify(preservedLabels));\n setLoading(false);\n }, 1500);\n\n return () => {\n clearTimeout(timerHandle.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contextFilters, initialized]);\n\n useEffect(() => {\n return () => {\n clearTimeout(timerHandle.current);\n onClose();\n };\n }, [onClose]);\n\n useAsync(async () => {\n setLoading(true);\n const initContextFilters = await logContextProvider.getInitContextFilters(row, origQuery, {\n from: dateTime(row.timeEpochMs),\n to: dateTime(row.timeEpochMs),\n raw: { from: dateTime(row.timeEpochMs), to: dateTime(row.timeEpochMs) },\n });\n setContextFilters(initContextFilters.contextFilters);\n setShowPreservedFiltersAppliedNotification(initContextFilters.preservedFiltersApplied);\n setInitialized(true);\n setLoading(false);\n });\n\n // To hide previousContextFiltersApplied notification after 2 seconds\n useEffect(() => {\n if (showPreservedFiltersAppliedNotification) {\n setTimeout(() => {\n setShowPreservedFiltersAppliedNotification(false);\n }, 2000);\n }\n }, [showPreservedFiltersAppliedNotification]);\n\n useEffect(() => {\n reportInteraction('grafana_explore_logs_loki_log_context_loaded', {\n logRowUid: row.uid,\n type: 'load',\n });\n\n return () => {\n reportInteraction('grafana_explore_logs_loki_log_context_loaded', {\n logRowUid: row.uid,\n type: 'unload',\n });\n };\n }, [row.uid]);\n\n const realLabels = contextFilters.filter(({ nonIndexed }) => !nonIndexed);\n const realLabelsEnabled = realLabels.filter(({ enabled }) => enabled);\n\n const parsedLabels = contextFilters.filter(({ nonIndexed }) => nonIndexed);\n const parsedLabelsEnabled = parsedLabels.filter(({ enabled }) => enabled);\n\n const contextFilterToSelectFilter = useCallback((contextFilter: ContextFilter): SelectableValue<string> => {\n return {\n label: `${contextFilter.label}=\"${escapeLabelValueInSelector(contextFilter.value)}\"`,\n value: contextFilter.label,\n };\n }, []);\n\n // If there's any nonIndexed labels, that includes structured metadata and parsed labels, we show the nonIndexed labels input\n const showNonIndexedLabels = parsedLabels.length > 0;\n\n let queryExpr = logContextProvider.prepareExpression(\n contextFilters.filter(({ enabled }) => enabled),\n origQuery\n );\n return (\n <div className={styles.wrapper}>\n {showPreservedFiltersAppliedNotification && (\n <Alert\n className={styles.notification}\n title=\"Previously used filters have been applied.\"\n severity=\"info\"\n elevated={true}\n ></Alert>\n )}\n <div className={styles.iconButton}>\n <Button\n tooltip=\"Revert to initial log context query\"\n data-testid=\"revert-button\"\n icon=\"history-alt\"\n variant=\"secondary\"\n disabled={isInitialState}\n onClick={(e) => {\n reportInteraction('grafana_explore_logs_loki_log_context_reverted', {\n logRowUid: row.uid,\n });\n setContextFilters((contextFilters) => {\n return contextFilters.map((contextFilter) => ({\n ...contextFilter,\n // For revert to initial query we need to enable all labels and disable all parsed labels\n enabled: !contextFilter.nonIndexed,\n }));\n });\n // We are removing the preserved labels from local storage so we can preselect the labels in the UI\n window.localStorage.removeItem(LOKI_LOG_CONTEXT_PRESERVED_LABELS);\n window.localStorage.removeItem(SHOULD_INCLUDE_PIPELINE_OPERATIONS);\n setIncludePipelineOperations(false);\n }}\n />\n </div>\n\n <Collapse\n isOpen={isOpen}\n onToggle={() => {\n window.localStorage.setItem(IS_LOKI_LOG_CONTEXT_UI_OPEN, (!isOpen).toString());\n setIsOpen((isOpen) => !isOpen);\n reportInteraction('grafana_explore_logs_loki_log_context_toggled', {\n logRowUid: row.uid,\n action: !isOpen ? 'open' : 'close',\n });\n }}\n label={\n <div className={styles.rawQueryContainer}>\n {initialized ? (\n <>\n <RawQuery\n language={{ grammar: lokiGrammar, name: 'loki' }}\n query={queryExpr}\n className={styles.rawQuery}\n />\n <Tooltip content=\"The initial log context query is created from all labels defining the stream for the selected log line. Use the editor below to customize the log context query.\">\n <Icon name=\"info-circle\" size=\"sm\" className={styles.queryDescription} />\n </Tooltip>\n </>\n ) : (\n <Spinner />\n )}\n </div>\n }\n >\n <div className={styles.ui}>\n <Label\n className={styles.label}\n description=\"The initial log context query is created from all labels defining the stream for the selected log line. You can broaden your search by removing one or more of the label filters.\"\n >\n Widen the search\n </Label>\n <MultiSelect\n isLoading={loading}\n options={realLabels.map(contextFilterToSelectFilter)}\n value={realLabelsEnabled.map(contextFilterToSelectFilter)}\n closeMenuOnSelect={true}\n maxMenuHeight={200}\n noOptionsMessage=\"No further labels available\"\n onChange={(keys, actionMeta) => {\n if (actionMeta.action === 'select-option') {\n reportInteraction('grafana_explore_logs_loki_log_context_filtered', {\n logRowUid: row.uid,\n type: 'label',\n action: 'select',\n });\n }\n if (actionMeta.action === 'remove-value') {\n reportInteraction('grafana_explore_logs_loki_log_context_filtered', {\n logRowUid: row.uid,\n type: 'label',\n action: 'remove',\n });\n }\n return setContextFilters(\n contextFilters.map((filter) => {\n if (filter.nonIndexed) {\n return filter;\n }\n filter.enabled = keys.some((key) => key.value === filter.label);\n return filter;\n })\n );\n }}\n />\n {showNonIndexedLabels && (\n <>\n <Label\n className={styles.label}\n description={`By using a parser in your original query, you can use filters for extracted labels. Refine your search by applying extracted labels created from the selected log line.`}\n >\n Refine the search\n </Label>\n <MultiSelect\n isLoading={loading}\n options={parsedLabels.map(contextFilterToSelectFilter)}\n value={parsedLabelsEnabled.map(contextFilterToSelectFilter)}\n closeMenuOnSelect={true}\n maxMenuHeight={200}\n noOptionsMessage=\"No further labels available\"\n isClearable={true}\n onChange={(keys, actionMeta) => {\n if (actionMeta.action === 'select-option') {\n reportInteraction('grafana_explore_logs_loki_log_context_filtered', {\n logRowUid: row.uid,\n type: 'parsed_label',\n action: 'select',\n });\n }\n if (actionMeta.action === 'remove-value') {\n reportInteraction('grafana_explore_logs_loki_log_context_filtered', {\n logRowUid: row.uid,\n type: 'parsed_label',\n action: 'remove',\n });\n }\n setContextFilters(\n contextFilters.map((filter) => {\n if (!filter.nonIndexed) {\n return filter;\n }\n filter.enabled = keys.some((key) => key.value === filter.label);\n return filter;\n })\n );\n }}\n />\n </>\n )}\n {logContextProvider.queryContainsValidPipelineStages(origQuery) && (\n <InlineFieldRow className={styles.operationsToggle}>\n <InlineField\n label=\"Include LogQL pipeline operations\"\n tooltip={\n <RenderUserContentAsHTML\n content={renderMarkdown(\n \"This will include LogQL operations such as `line_format` or `label_format`. It won't include line or label filter operations.\"\n )}\n />\n }\n >\n <InlineSwitch\n value={includePipelineOperations}\n showLabel={true}\n transparent={true}\n onChange={(e) => {\n reportInteraction('grafana_explore_logs_loki_log_context_pipeline_toggled', {\n logRowUid: row.uid,\n action: e.currentTarget.checked ? 'enable' : 'disable',\n });\n window.localStorage.setItem(SHOULD_INCLUDE_PIPELINE_OPERATIONS, e.currentTarget.checked.toString());\n setIncludePipelineOperations(e.currentTarget.checked);\n if (runContextQuery) {\n runContextQuery();\n }\n }}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n </div>\n </Collapse>\n </div>\n );\n}\n","import { DataFrame, Field, FieldType } from '@grafana/data';\n\nexport enum SortDirection {\n Ascending,\n Descending,\n}\n\n// creates the `index` for the sorting.\n// this is needed by the `SortedVector`.\n// the index is an array of numbers, and it defines an order.\n// at every slot in the index the values is the position of\n// the sorted item.\n// for example, an index of [3,1,2] means that\n// in the dataframe, that has 3 rows, after sorting:\n// - the third row will become the first\n// - the first row will become the second\n// - the second row will become the third\nfunction makeIndex(field: Field<number>, dir: SortDirection): number[] {\n const fieldValues: number[] = field.values;\n const { nanos } = field;\n\n // we first build an array which is [0,1,2,3....]\n const index = Array(fieldValues.length);\n for (let i = 0; i < index.length; i++) {\n index[i] = i;\n }\n\n const isAsc = dir === SortDirection.Ascending;\n\n index.sort((a: number, b: number): number => {\n // we need to answer this question:\n // in the field-used-for-sorting, how would we compare value-at-index-a to value-at-index-b?\n const valA = fieldValues[a];\n const valB = fieldValues[b];\n if (valA < valB) {\n return isAsc ? -1 : 1;\n }\n\n if (valA > valB) {\n return isAsc ? 1 : -1;\n }\n\n // the millisecond timestamps are equal,\n // compare the nanosecond part, if available\n\n if (nanos === undefined) {\n return 0;\n }\n\n const nanoA = nanos[a];\n const nanoB = nanos[b];\n\n if (nanoA < nanoB) {\n return isAsc ? -1 : 1;\n }\n\n if (nanoA > nanoB) {\n return isAsc ? 1 : -1;\n }\n\n return 0;\n });\n\n return index;\n}\n\n// sort a dataframe that is in the Loki dataframe format ascending or desceding based on time,\n// with nanosecond precision.\nexport function sortDataFrameByTime(frame: DataFrame, dir: SortDirection): DataFrame {\n const { fields, ...rest } = frame;\n\n // we use the approach used in @grafana/data/sortDataframe.\n // we cannot use it directly, because it does not take `.nanos` into account\n // (see https://github.com/grafana/grafana/issues/72351).\n // we can switch to to @grafana/data/sortDataframe when the issue is fixed.\n\n const timeField = fields.find((field) => field.type === FieldType.time);\n if (timeField === undefined) {\n throw new Error('missing timestamp field. should never happen');\n }\n\n const index = makeIndex(timeField, dir);\n\n return {\n ...rest,\n fields: fields.map((field) => ({\n ...field,\n values: sorted(field.values, index),\n nanos: field.nanos === undefined ? undefined : sorted(field.nanos, index),\n })),\n };\n}\n\nfunction sorted<T>(vals: T[], index: number[]): T[] {\n return vals.map((_, idx) => vals[index[idx]]);\n}\n","import { isEmpty } from 'lodash';\nimport { catchError, lastValueFrom, of, switchMap } from 'rxjs';\n\nimport {\n CoreApp,\n DataFrame,\n DataQueryError,\n DataQueryResponse,\n FieldCache,\n FieldType,\n LogRowModel,\n TimeRange,\n toUtc,\n LogRowContextQueryDirection,\n LogRowContextOptions,\n dateTime,\n ScopedVars,\n} from '@grafana/data';\nimport { LabelParser, LabelFilter, LineFilters, PipelineStage, Logfmt, Json } from '@grafana/lezer-logql';\n\nimport { LokiContextUi } from './components/LokiContextUi';\nimport { LokiDatasource, makeRequest, REF_ID_STARTER_LOG_ROW_CONTEXT } from './datasource';\nimport { escapeLabelValueInExactSelector, getLabelTypeFromFrame } from './languageUtils';\nimport { addLabelToQuery, addParserToQuery } from './modifyQuery';\nimport {\n getNodePositionsFromQuery,\n getParserFromQuery,\n getStreamSelectorsFromQuery,\n isQueryWithParser,\n} from './queryUtils';\nimport { sortDataFrameByTime, SortDirection } from './sortDataFrame';\nimport { ContextFilter, LabelType, LokiQuery, LokiQueryDirection, LokiQueryType } from './types';\n\nexport const LOKI_LOG_CONTEXT_PRESERVED_LABELS = 'lokiLogContextPreservedLabels';\nexport const SHOULD_INCLUDE_PIPELINE_OPERATIONS = 'lokiLogContextShouldIncludePipelineOperations';\n\nexport type PreservedLabels = {\n removedLabels: string[];\n selectedExtractedLabels: string[];\n};\n\nexport class LogContextProvider {\n datasource: LokiDatasource;\n cachedContextFilters: ContextFilter[];\n onContextClose: (() => void) | undefined;\n\n constructor(datasource: LokiDatasource) {\n this.datasource = datasource;\n this.cachedContextFilters = [];\n }\n\n private async getQueryAndRange(\n row: LogRowModel,\n options?: LogRowContextOptions,\n origQuery?: LokiQuery,\n cacheFilters = true\n ) {\n const direction = (options && options.direction) || LogRowContextQueryDirection.Backward;\n const limit = (options && options.limit) || this.datasource.maxLines;\n // If the user doesn't have any filters applied already, or if we don't want\n // to use the cached filters, we need to reinitialize them.\n if (this.cachedContextFilters.length === 0 || !cacheFilters) {\n const filters = (\n await this.getInitContextFilters(row, origQuery, {\n from: dateTime(row.timeEpochMs),\n to: dateTime(row.timeEpochMs),\n raw: { from: dateTime(row.timeEpochMs), to: dateTime(row.timeEpochMs) },\n })\n ).contextFilters.filter((filter) => filter.enabled);\n\n this.cachedContextFilters = filters;\n }\n\n return await this.prepareLogRowContextQueryTarget(row, limit, direction, origQuery, options?.timeWindowMs);\n }\n\n getLogRowContextQuery = async (\n row: LogRowModel,\n options?: LogRowContextOptions,\n origQuery?: LokiQuery,\n cacheFilters = true\n ): Promise<LokiQuery> => {\n if (origQuery && options?.scopedVars) {\n origQuery = this.datasource.applyTemplateVariables(origQuery, options?.scopedVars);\n }\n const { query } = await this.getQueryAndRange(row, options, origQuery, cacheFilters);\n\n if (!cacheFilters) {\n // If the caller doesn't want to cache the filters, we need to reset them.\n this.cachedContextFilters = [];\n }\n\n return query;\n };\n\n getLogRowContext = async (\n row: LogRowModel,\n options?: LogRowContextOptions,\n origQuery?: LokiQuery\n ): Promise<{ data: DataFrame[] }> => {\n if (origQuery && options?.scopedVars) {\n origQuery = this.datasource.applyTemplateVariables(origQuery, options?.scopedVars);\n }\n const direction = (options && options.direction) || LogRowContextQueryDirection.Backward;\n const { query, range } = await this.getQueryAndRange(row, options, origQuery);\n\n const processResults = (result: DataQueryResponse): DataQueryResponse => {\n const frames: DataFrame[] = result.data;\n const processedFrames = frames.map((frame) => sortDataFrameByTime(frame, SortDirection.Descending));\n\n return {\n ...result,\n data: processedFrames,\n };\n };\n\n // this can only be called from explore currently\n const app = CoreApp.Explore;\n\n return lastValueFrom(\n this.datasource.query(makeRequest(query, range, app, `${REF_ID_STARTER_LOG_ROW_CONTEXT}${direction}`)).pipe(\n catchError((err) => {\n const error: DataQueryError = {\n message: 'Error during context query. Please check JS console logs.',\n status: err.status,\n statusText: err.statusText,\n };\n throw error;\n }),\n switchMap((res) => of(processResults(res)))\n )\n );\n };\n\n async prepareLogRowContextQueryTarget(\n row: LogRowModel,\n limit: number,\n direction: LogRowContextQueryDirection,\n origQuery?: LokiQuery,\n timeWindowMs = 2 * 60 * 60 * 1000\n ): Promise<{ query: LokiQuery; range: TimeRange }> {\n const expr = this.prepareExpression(this.cachedContextFilters, origQuery);\n\n const queryDirection =\n direction === LogRowContextQueryDirection.Forward ? LokiQueryDirection.Forward : LokiQueryDirection.Backward;\n\n const query: LokiQuery = {\n expr,\n queryType: LokiQueryType.Range,\n // refId has to be:\n // - always different (temporarily, will be fixed later)\n // - not increase in size\n // because it may be called many times from logs-context\n refId: `${REF_ID_STARTER_LOG_ROW_CONTEXT}_${Math.random().toString()}`,\n maxLines: limit,\n direction: queryDirection,\n datasource: { uid: this.datasource.uid, type: this.datasource.type },\n };\n\n const fieldCache = new FieldCache(row.dataFrame);\n const tsField = fieldCache.getFirstFieldOfType(FieldType.time);\n if (tsField === undefined) {\n throw new Error('loki: data frame missing time-field, should never happen');\n }\n const tsValue = tsField.values[row.rowIndex];\n const timestamp = toUtc(tsValue);\n\n const range =\n queryDirection === LokiQueryDirection.Forward\n ? {\n // start param in Loki API is inclusive so we'll have to filter out the row that this request is based from\n // and any other that were logged in the same ns but before the row. Right now these rows will be lost\n // because the are before but came it he response that should return only rows after.\n from: timestamp,\n // convert to ns, we lose some precision here but it is not that important at the far points of the context\n to: toUtc(row.timeEpochMs + timeWindowMs),\n }\n : {\n // convert to ns, we lose some precision here but it is not that important at the far points of the context\n from: toUtc(row.timeEpochMs - timeWindowMs),\n to: timestamp,\n };\n\n return {\n query,\n range: {\n from: range.from,\n to: range.to,\n raw: range,\n },\n };\n }\n\n getLogRowContextUi(\n row: LogRowModel,\n runContextQuery?: () => void,\n origQuery?: LokiQuery,\n scopedVars?: ScopedVars\n ): React.ReactNode {\n if (origQuery && scopedVars) {\n origQuery = this.datasource.applyTemplateVariables(origQuery, scopedVars);\n }\n const updateFilter = (contextFilters: ContextFilter[]) => {\n this.cachedContextFilters = contextFilters;\n\n if (runContextQuery) {\n runContextQuery();\n }\n };\n\n // we need to cache this function so that it doesn't get recreated on every render\n this.onContextClose =\n this.onContextClose ??\n (() => {\n this.cachedContextFilters = [];\n });\n\n return LokiContextUi({\n row,\n origQuery,\n updateFilter,\n onClose: this.onContextClose,\n logContextProvider: this,\n runContextQuery,\n });\n }\n\n prepareExpression(contextFilters: ContextFilter[], query: LokiQuery | undefined): string {\n let preparedExpression = this.processContextFiltersToExpr(contextFilters, query);\n if (window.localStorage.getItem(SHOULD_INCLUDE_PIPELINE_OPERATIONS) === 'true') {\n preparedExpression = this.processPipelineStagesToExpr(preparedExpression, query);\n }\n return preparedExpression;\n }\n\n processContextFiltersToExpr = (contextFilters: ContextFilter[], query: LokiQuery | undefined): string => {\n const labelFilters = contextFilters\n .map((filter) => {\n if (!filter.nonIndexed && filter.enabled) {\n // escape backslashes in label as users can't escape them by themselves\n return `${filter.label}=\"${escapeLabelValueInExactSelector(filter.value)}\"`;\n }\n return '';\n })\n // Filter empty strings\n .filter((label) => !!label)\n .join(',');\n\n let expr = `{${labelFilters}}`;\n\n // We need to have original query to get parser and include parsed labels\n // We only add parser and parsed labels if there is only one parser in query\n if (query) {\n let hasParser = false;\n if (isQueryWithParser(query.expr).parserCount === 1) {\n hasParser = true;\n const parser = getParserFromQuery(query.expr);\n if (parser) {\n expr = addParserToQuery(expr, parser);\n }\n }\n\n const nonIndexedLabels = contextFilters.filter((filter) => filter.nonIndexed && filter.enabled);\n for (const parsedLabel of nonIndexedLabels) {\n if (parsedLabel.enabled) {\n expr = addLabelToQuery(\n expr,\n parsedLabel.label,\n '=',\n parsedLabel.value,\n hasParser ? LabelType.Parsed : LabelType.StructuredMetadata\n );\n }\n }\n }\n\n return expr;\n };\n\n processPipelineStagesToExpr = (currentExpr: string, query: LokiQuery | undefined): string => {\n let newExpr = currentExpr;\n const origExpr = query?.expr ?? '';\n\n if (isQueryWithParser(origExpr).parserCount > 1) {\n return newExpr;\n }\n\n const allNodePositions = getNodePositionsFromQuery(origExpr, [\n PipelineStage,\n LabelParser,\n Logfmt,\n Json,\n LineFilters,\n LabelFilter,\n ]);\n const pipelineStagePositions = allNodePositions.filter((position) => position.type?.id === PipelineStage);\n const otherNodePositions = allNodePositions.filter((position) => position.type?.id !== PipelineStage);\n\n for (const pipelineStagePosition of pipelineStagePositions) {\n // we don't process pipeline stages that contain label parsers, line filters or label filters\n if (otherNodePositions.some((position) => pipelineStagePosition.contains(position))) {\n continue;\n }\n\n newExpr += ` ${pipelineStagePosition.getExpression(origExpr)}`;\n }\n\n return newExpr;\n };\n\n queryContainsValidPipelineStages = (query: LokiQuery | undefined): boolean => {\n const origExpr = query?.expr ?? '';\n const allNodePositions = getNodePositionsFromQuery(origExpr, [\n PipelineStage,\n LabelParser,\n LineFilters,\n LabelFilter,\n ]);\n const pipelineStagePositions = allNodePositions.filter((position) => position.type?.id === PipelineStage);\n const otherNodePositions = allNodePositions.filter((position) => position.type?.id !== PipelineStage);\n\n return pipelineStagePositions.some((pipelineStagePosition) =>\n otherNodePositions.every((position) => pipelineStagePosition.contains(position) === false)\n );\n };\n\n getInitContextFilters = async (\n row: LogRowModel,\n query?: LokiQuery,\n timeRange?: TimeRange\n ): Promise<{ contextFilters: ContextFilter[]; preservedFiltersApplied: boolean }> => {\n let preservedFiltersApplied = false;\n if (!query || isEmpty(row.labels)) {\n return { contextFilters: [], preservedFiltersApplied };\n }\n const rowLabels = row.labels;\n\n // 1. First we need to get all labels from the log row's label\n // and correctly set parsed and not parsed labels\n let allLabels: string[] = [];\n if (!isQueryWithParser(query.expr).queryWithParser) {\n // If there is no parser, we use getLabelKeys because it has better caching\n // and all labels should already be fetched\n await this.datasource.languageProvider.start(timeRange);\n allLabels = this.datasource.languageProvider.getLabelKeys();\n } else {\n // If we have parser, we use fetchLabels to fetch actual labels for selected stream\n const stream = getStreamSelectorsFromQuery(query.expr);\n // We are using stream[0] as log query can always have just 1 stream selector\n allLabels = await this.datasource.languageProvider.fetchLabels({ streamSelector: stream[0], timeRange });\n }\n\n const contextFilters: ContextFilter[] = [];\n Object.entries(rowLabels).forEach(([label, value]) => {\n const labelType = getLabelTypeFromFrame(label, row.dataFrame, row.rowIndex);\n const filter: ContextFilter = {\n label,\n value: value,\n enabled: allLabels.includes(label),\n nonIndexed: labelType !== null && labelType !== LabelType.Indexed,\n };\n\n contextFilters.push(filter);\n });\n\n // Secondly we check for preserved labels and update enabled state of filters based on that\n let preservedLabels: undefined | PreservedLabels = undefined;\n const preservedLabelsString = window.localStorage.getItem(LOKI_LOG_CONTEXT_PRESERVED_LABELS);\n if (preservedLabelsString) {\n try {\n preservedLabels = JSON.parse(preservedLabelsString);\n // Do nothing when error occurs\n } catch (e) {}\n }\n\n if (!preservedLabels) {\n // If we don't have preservedLabels, we return contextFilters as they are\n return { contextFilters, preservedFiltersApplied };\n } else {\n // Otherwise, we need to update filters based on preserved labels\n let arePreservedLabelsUsed = false;\n const newContextFilters = contextFilters.map((contextFilter) => {\n // We checked for undefined above\n if (preservedLabels!.removedLabels.includes(contextFilter.label)) {\n arePreservedLabelsUsed = true;\n return { ...contextFilter, enabled: false };\n }\n // We checked for undefined above\n if (preservedLabels!.selectedExtractedLabels.includes(contextFilter.label)) {\n arePreservedLabelsUsed = true;\n return { ...contextFilter, enabled: true };\n }\n return { ...contextFilter };\n });\n\n const isAtLeastOneRealLabelEnabled = newContextFilters.some(({ enabled, nonIndexed }) => enabled && !nonIndexed);\n if (!isAtLeastOneRealLabelEnabled) {\n // If we end up with no real labels enabled, we need to reset the init filters\n return { contextFilters, preservedFiltersApplied };\n } else {\n if (arePreservedLabelsUsed) {\n preservedFiltersApplied = true;\n }\n return { contextFilters: newContextFilters, preservedFiltersApplied };\n }\n }\n };\n}\n","import { LokiVariableQuery, LokiVariableQueryType } from '../types';\n\nexport const labelNamesRegex = /^label_names\\(\\)\\s*$/;\nexport const labelValuesRegex = /^label_values\\((?:(.+),\\s*)?([a-zA-Z_$][a-zA-Z0-9_]*)\\)\\s*$/;\n\nexport function migrateVariableQuery(rawQuery: string | LokiVariableQuery): LokiVariableQuery {\n // If not string, we assume LokiVariableQuery\n if (typeof rawQuery !== 'string') {\n return rawQuery;\n }\n\n const queryBase = {\n refId: 'LokiVariableQueryEditor-VariableQuery',\n type: LokiVariableQueryType.LabelNames,\n };\n\n const labelNames = rawQuery.match(labelNamesRegex);\n if (labelNames) {\n return {\n ...queryBase,\n type: LokiVariableQueryType.LabelNames,\n };\n }\n\n const labelValues = rawQuery.match(labelValuesRegex);\n if (labelValues) {\n return {\n ...queryBase,\n type: LokiVariableQueryType.LabelValues,\n label: labelValues[2] ? labelValues[2] : labelValues[1],\n stream: labelValues[2] ? labelValues[1] : undefined,\n };\n }\n\n return queryBase;\n}\n","import { FormEvent, useState, useEffect } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { QueryEditorProps, SelectableValue } from '@grafana/data';\nimport { InlineField, InlineFieldRow, Input, Select } from '@grafana/ui';\n\nimport { LokiDatasource } from '../datasource';\nimport { migrateVariableQuery } from '../migrations/variableQueryMigrations';\nimport { LokiOptions, LokiQuery, LokiVariableQuery, LokiVariableQueryType as QueryType } from '../types';\n\nconst variableOptions = [\n { label: 'Label names', value: QueryType.LabelNames },\n { label: 'Label values', value: QueryType.LabelValues },\n];\n\nexport type Props = QueryEditorProps<LokiDatasource, LokiQuery, LokiOptions, LokiVariableQuery>;\n\nconst refId = 'LokiVariableQueryEditor-VariableQuery';\n\nexport const LokiVariableQueryEditor = ({ onChange, query, datasource, range }: Props) => {\n const [type, setType] = useState<number | undefined>(undefined);\n const [label, setLabel] = useState('');\n const [labelOptions, setLabelOptions] = useState<Array<SelectableValue<string>>>([]);\n const [stream, setStream] = useState('');\n const previousType = usePrevious(type);\n\n useEffect(() => {\n if (!query) {\n return;\n }\n\n const variableQuery = typeof query === 'string' ? migrateVariableQuery(query) : query;\n setType(variableQuery.type);\n setLabel(variableQuery.label || '');\n setStream(variableQuery.stream || '');\n }, [query]);\n\n useEffect(() => {\n // Fetch label names when the query type is LabelValues, and the previous type was not the same\n if (type !== QueryType.LabelValues || previousType === type) {\n return;\n }\n\n datasource.languageProvider.fetchLabels({ timeRange: range }).then((labelNames) => {\n setLabelOptions(labelNames.map((labelName) => ({ label: labelName, value: labelName })));\n });\n }, [datasource, type, range, previousType]);\n\n const onQueryTypeChange = (newType: SelectableValue<QueryType>) => {\n setType(newType.value);\n if (newType.value !== undefined) {\n onChange({\n type: newType.value,\n label,\n stream,\n refId,\n });\n }\n };\n\n const onLabelChange = (newLabel: SelectableValue<string>) => {\n setLabel(newLabel.value || '');\n };\n\n const onStreamChange = (e: FormEvent<HTMLInputElement>) => {\n setStream(e.currentTarget.value);\n };\n\n const handleBlur = () => {\n if (type !== undefined) {\n onChange({ type, label, stream, refId: 'LokiVariableQueryEditor-VariableQuery' });\n }\n };\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label=\"Query type\" labelWidth={20}>\n <Select\n aria-label=\"Query type\"\n onChange={onQueryTypeChange}\n onBlur={handleBlur}\n value={type}\n options={variableOptions}\n width={16}\n />\n </InlineField>\n {type === QueryType.LabelValues && (\n <>\n <InlineField label=\"Label\" labelWidth={20}>\n <Select\n aria-label=\"Label\"\n onChange={onLabelChange}\n onBlur={handleBlur}\n value={{ label: label, value: label }}\n options={labelOptions}\n width={16}\n allowCustomValue\n />\n </InlineField>\n </>\n )}\n </InlineFieldRow>\n {type === QueryType.LabelValues && (\n <InlineFieldRow>\n <InlineField\n label=\"Stream selector\"\n labelWidth={20}\n grow={true}\n tooltip={\n <div>\n {\n 'Optional. If defined, a list of values for the specified log stream selector is returned. For example: {label=\"value\"} or {label=\"$variable\"}'\n }\n </div>\n }\n >\n <Input\n type=\"text\"\n aria-label=\"Stream selector\"\n placeholder=\"Optional stream selector\"\n value={stream}\n onChange={onStreamChange}\n onBlur={handleBlur}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n </>\n );\n};\n","import { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CustomVariableSupport, DataQueryRequest, MetricFindValue, ScopedVars, TimeRange } from '@grafana/data';\n\nimport { LokiVariableQueryEditor } from './components/VariableQueryEditor';\nimport { LokiDatasource } from './datasource';\nimport { LokiVariableQuery } from './types';\n\nexport class LokiVariableSupport extends CustomVariableSupport<LokiDatasource, LokiVariableQuery> {\n editor = LokiVariableQueryEditor;\n\n constructor(private datasource: LokiDatasource) {\n super();\n }\n\n async execute(query: LokiVariableQuery, scopedVars: ScopedVars, range: TimeRange) {\n return this.datasource.metricFindQuery(query, { scopedVars, range });\n }\n\n query(request: DataQueryRequest<LokiVariableQuery>): Observable<{ data: MetricFindValue[] }> {\n const result = this.execute(request.targets[0], request.scopedVars, request.range);\n\n return from(result).pipe(map((data) => ({ data })));\n }\n}\n","import { groupBy } from 'lodash';\n\nimport { FieldType, DataFrame, DataLink, Field } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { DerivedFieldConfig } from './types';\n\nexport function getDerivedFields(dataFrame: DataFrame, derivedFieldConfigs: DerivedFieldConfig[]): Field[] {\n if (!derivedFieldConfigs.length) {\n return [];\n }\n const derivedFieldsGrouped = groupBy(derivedFieldConfigs, 'name');\n\n const newFields = Object.values(derivedFieldsGrouped).map(fieldFromDerivedFieldConfig);\n\n // line-field is the first string-field\n // NOTE: we should create some common log-frame-extra-string-field code somewhere\n const lineField = dataFrame.fields.find((f) => f.type === FieldType.string);\n\n if (lineField === undefined) {\n // if this is happening, something went wrong, let's raise an error\n throw new Error('invalid logs-dataframe, string-field missing');\n }\n\n const labelFields = dataFrame.fields.find((f) => f.type === FieldType.other && f.name === 'labels');\n\n for (let i = 0; i < lineField.values.length; i++) {\n for (const field of newFields) {\n // `matcherRegex` can be either a RegExp that is used to extract the value from the log line, or it can be a label key to derive the field from the labels\n if (derivedFieldsGrouped[field.name][0].matcherType === 'label' && labelFields) {\n const label = labelFields.values[i];\n if (label) {\n // Find the key that matches the regex pattern in `matcherRegex`\n const intersectingKey = Object.keys(label).find((key) => {\n const regex = new RegExp(derivedFieldsGrouped[field.name][0].matcherRegex);\n return regex.test(key);\n });\n\n if (intersectingKey) {\n field.values.push(label[intersectingKey]);\n continue;\n }\n }\n field.values.push(null);\n } else if (\n derivedFieldsGrouped[field.name][0].matcherType === 'regex' ||\n derivedFieldsGrouped[field.name][0].matcherType === undefined\n ) {\n // `matcherRegex` will actually be used as a RegExp here\n const line = lineField.values[i];\n const logMatch = line.match(derivedFieldsGrouped[field.name][0].matcherRegex);\n\n if (logMatch && logMatch[1]) {\n field.values.push(logMatch[1]);\n continue;\n }\n\n field.values.push(null);\n } else {\n field.values.push(null);\n }\n }\n }\n\n return newFields;\n}\n\n/**\n * Transform derivedField config into dataframe field with config that contains link.\n */\nfunction fieldFromDerivedFieldConfig(derivedFieldConfigs: DerivedFieldConfig[]): Field {\n const dataSourceSrv = getDataSourceSrv();\n\n const dataLinks = derivedFieldConfigs.reduce<DataLink[]>((acc, derivedFieldConfig) => {\n // Having field.datasourceUid means it is an internal link.\n if (derivedFieldConfig.datasourceUid) {\n const dsSettings = dataSourceSrv.getInstanceSettings(derivedFieldConfig.datasourceUid);\n const queryType = (type: string | undefined): string | undefined => {\n switch (type) {\n case 'tempo':\n return 'traceql';\n case 'grafana-x-ray-datasource':\n return 'getTrace';\n default:\n return undefined;\n }\n };\n\n acc.push({\n // Will be filled out later\n title: derivedFieldConfig.urlDisplayLabel || '',\n url: '',\n // This is hardcoded for Jaeger or Zipkin not way right now to specify datasource specific query object\n internal: {\n query: { query: derivedFieldConfig.url, queryType: queryType(dsSettings?.type) },\n datasourceUid: derivedFieldConfig.datasourceUid,\n datasourceName: dsSettings?.name ?? 'Data source not found',\n },\n targetBlank: derivedFieldConfig.targetBlank,\n });\n } else if (derivedFieldConfig.url) {\n acc.push({\n // We do not know what title to give here so we count on presentation layer to create a title from metadata.\n title: derivedFieldConfig.urlDisplayLabel || '',\n // This is hardcoded for Jaeger or Zipkin not way right now to specify datasource specific query object\n url: derivedFieldConfig.url,\n targetBlank: derivedFieldConfig.targetBlank,\n });\n }\n return acc;\n }, []);\n\n return {\n name: derivedFieldConfigs[0].name,\n type: FieldType.string,\n config: {\n links: dataLinks,\n },\n // We are adding values later on\n values: [],\n };\n}\n","import { groupBy } from 'lodash';\n\nimport { DataFrame, Field, FieldType } from '@grafana/data';\n\nexport function makeTableFrames(instantMetricFrames: DataFrame[]): DataFrame[] {\n // first we remove frames that have no refId\n // (we will group them by refId, so we need it to be set)\n const framesWithRefId = instantMetricFrames.filter((f) => f.refId !== undefined);\n\n const framesByRefId = groupBy(framesWithRefId, (frame) => frame.refId);\n\n return Object.entries(framesByRefId).map(([refId, frames]) => makeTableFrame(frames, refId));\n}\n\ntype NumberField = Field<number>;\ntype StringField = Field<string>;\n\nfunction makeTableFrame(instantMetricFrames: DataFrame[], refId: string): DataFrame {\n const tableTimeField: NumberField = { name: 'Time', config: {}, values: [], type: FieldType.time };\n const tableValueField: NumberField = {\n name: `Value #${refId}`,\n config: {},\n values: [],\n type: FieldType.number,\n };\n\n // Sort metric labels, create columns for them and record their index\n const allLabelNames = new Set(\n instantMetricFrames.map((frame) => frame.fields.map((field) => Object.keys(field.labels ?? {})).flat()).flat()\n );\n\n const sortedLabelNames = Array.from(allLabelNames).sort();\n\n const labelFields: StringField[] = sortedLabelNames.map((labelName) => ({\n name: labelName,\n config: { filterable: true },\n values: [],\n type: FieldType.string,\n }));\n\n instantMetricFrames.forEach((frame) => {\n const timeField = frame.fields.find((field) => field.type === FieldType.time);\n const valueField = frame.fields.find((field) => field.type === FieldType.number);\n if (timeField == null || valueField == null) {\n return;\n }\n\n const timeArray = timeField.values;\n const valueArray = valueField.values;\n\n for (let x of timeArray) {\n tableTimeField.values.push(x);\n }\n\n for (let x of valueArray) {\n tableValueField.values.push(x);\n }\n\n const labels = valueField.labels ?? {};\n\n for (let f of labelFields) {\n const text = labels[f.name] ?? '';\n // we insert the labels as many times as we have values\n for (let i = 0; i < valueArray.length; i++) {\n f.values.push(text);\n }\n }\n });\n\n return {\n fields: [tableTimeField, ...labelFields, tableValueField],\n refId,\n meta: { preferredVisualisationType: 'table' },\n length: tableTimeField.values.length,\n };\n}\n","import { DataQueryResponse, DataFrame, isDataFrame, FieldType, QueryResultMeta, DataQueryError } from '@grafana/data';\n\nimport { getDerivedFields } from './getDerivedFields';\nimport { makeTableFrames } from './makeTableFrames';\nimport { getExpressionFromExecutedQuery, getHighlighterExpressionsFromQuery } from './queryUtils';\nimport { dataFrameHasLokiError } from './responseUtils';\nimport { DerivedFieldConfig, LokiQuery, LokiQueryType } from './types';\n\nfunction isMetricFrame(frame: DataFrame): boolean {\n return frame.fields.every((field) => field.type === FieldType.time || field.type === FieldType.number);\n}\n\n// returns a new frame, with meta shallow merged with its original meta\nfunction setFrameMeta(frame: DataFrame, meta: QueryResultMeta): DataFrame {\n const { meta: oldMeta, ...rest } = frame;\n // meta maybe be undefined, we need to handle that\n const newMeta = { ...oldMeta, ...meta };\n return {\n ...rest,\n meta: newMeta,\n };\n}\n\nfunction processStreamFrame(\n frame: DataFrame,\n query: LokiQuery | undefined,\n derivedFieldConfigs: DerivedFieldConfig[]\n): DataFrame {\n const custom: Record<string, string> = {\n ...frame.meta?.custom, // keep the original meta.custom\n // used by logsModel\n lokiQueryStatKey: 'Summary: total bytes processed',\n };\n\n if (dataFrameHasLokiError(frame)) {\n custom.error = 'Error when parsing some of the logs';\n }\n\n const meta: QueryResultMeta = {\n preferredVisualisationType: 'logs',\n limit: query?.maxLines,\n searchWords: query ? getHighlighterExpressionsFromQuery(query.expr) : undefined,\n custom,\n };\n\n const newFrame = setFrameMeta(frame, meta);\n const derivedFields = getDerivedFields(newFrame, derivedFieldConfigs);\n return {\n ...newFrame,\n fields: [...newFrame.fields, ...derivedFields],\n };\n}\n\nfunction processStreamsFrames(\n frames: DataFrame[],\n queryMap: Map<string, LokiQuery>,\n derivedFieldConfigs: DerivedFieldConfig[]\n): DataFrame[] {\n return frames.map((frame) => {\n const query = frame.refId !== undefined ? queryMap.get(frame.refId) : undefined;\n return processStreamFrame(frame, query, derivedFieldConfigs);\n });\n}\n\nfunction processMetricInstantFrames(frames: DataFrame[]): DataFrame[] {\n return frames.length > 0 ? makeTableFrames(frames) : [];\n}\n\nfunction processMetricRangeFrames(frames: DataFrame[]): DataFrame[] {\n const meta: QueryResultMeta = { preferredVisualisationType: 'graph' };\n return frames.map((frame) => setFrameMeta(frame, meta));\n}\n\n// we split the frames into 3 groups, because we will handle\n// each group slightly differently\nfunction groupFrames(\n frames: DataFrame[],\n queryMap: Map<string, LokiQuery>\n): {\n streamsFrames: DataFrame[];\n metricInstantFrames: DataFrame[];\n metricRangeFrames: DataFrame[];\n} {\n const streamsFrames: DataFrame[] = [];\n const metricInstantFrames: DataFrame[] = [];\n const metricRangeFrames: DataFrame[] = [];\n\n frames.forEach((frame) => {\n if (!isMetricFrame(frame)) {\n streamsFrames.push(frame);\n } else {\n const isInstantFrame = frame.refId != null && queryMap.get(frame.refId)?.queryType === LokiQueryType.Instant;\n if (isInstantFrame) {\n metricInstantFrames.push(frame);\n } else {\n metricRangeFrames.push(frame);\n }\n }\n });\n\n return { streamsFrames, metricInstantFrames, metricRangeFrames };\n}\n\nfunction improveError(error: DataQueryError | undefined, queryMap: Map<string, LokiQuery>): DataQueryError | undefined {\n // many things are optional in an error-object, we need an error-message to exist,\n // and we need to find the loki-query, based on the refId in the error-object.\n if (error === undefined) {\n return error;\n }\n\n const { refId, message } = error;\n if (refId === undefined || message === undefined) {\n return error;\n }\n\n const query = queryMap.get(refId);\n if (query === undefined) {\n return error;\n }\n\n if (message.includes('escape') && query.expr.includes('\\\\')) {\n return {\n ...error,\n message: `${message}. Make sure that all special characters are escaped with \\\\. For more information on escaping of special characters visit LogQL documentation at https://grafana.com/docs/loki/latest/logql/.`,\n };\n }\n\n return error;\n}\n\nexport function transformBackendResult(\n response: DataQueryResponse,\n queries: LokiQuery[],\n derivedFieldConfigs: DerivedFieldConfig[]\n): DataQueryResponse {\n const { data, error, ...rest } = response;\n\n // in the typescript type, data is an array of basically anything.\n // we do know that they have to be dataframes, so we make a quick check,\n // this way we can be sure, and also typescript is happy.\n const dataFrames = data.map((d) => {\n if (!isDataFrame(d)) {\n throw new Error('transformation only supports dataframe responses');\n }\n return d;\n });\n\n const queryMap = new Map(\n queries.map((query) => {\n const executedExpr = response.data.find((data) => data.refId === query.refId)?.meta.executedQueryString;\n const executedQuery = {\n ...query,\n expr: executedExpr ? getExpressionFromExecutedQuery(executedExpr) : query.expr,\n };\n\n return [query.refId, executedQuery];\n })\n );\n\n const { streamsFrames, metricInstantFrames, metricRangeFrames } = groupFrames(dataFrames, queryMap);\n\n return {\n ...rest,\n error: improveError(error, queryMap),\n data: [\n ...processMetricRangeFrames(metricRangeFrames),\n ...processMetricInstantFrames(metricInstantFrames),\n ...processStreamsFrames(streamsFrames, queryMap, derivedFieldConfigs),\n ],\n };\n}\n","import { memo } from 'react';\n\nimport { AnnotationQuery } from '@grafana/data';\nimport { EditorField, EditorRow } from '@grafana/plugin-ui';\nimport { Input, Stack } from '@grafana/ui';\n\nimport { LokiQuery } from '../types';\n\nimport { LokiOptionFields } from './LokiOptionFields';\nimport { LokiQueryField } from './LokiQueryField';\nimport { LokiQueryEditorProps } from './types';\n\ntype Props = LokiQueryEditorProps & {\n annotation?: AnnotationQuery<LokiQuery>;\n onAnnotationChange?: (annotation: AnnotationQuery<LokiQuery>) => void;\n};\n\nexport const LokiAnnotationsQueryEditor = memo(function LokiAnnotationQueryEditor(props: Props) {\n const { annotation, onAnnotationChange, history } = props;\n\n // this should never happen, but we want to keep typescript happy\n if (annotation === undefined || onAnnotationChange === undefined) {\n return null;\n }\n\n const onChangeQuery = (query: LokiQuery) => {\n onAnnotationChange({\n ...annotation,\n expr: query.expr,\n maxLines: query.maxLines,\n queryType: 'range',\n });\n };\n\n const queryWithRefId: LokiQuery = {\n refId: '',\n expr: annotation.expr,\n maxLines: annotation.maxLines,\n instant: annotation.instant,\n queryType: annotation.queryType,\n };\n return (\n <Stack gap={5} direction=\"column\">\n <Stack gap={0} direction=\"column\">\n <LokiQueryField\n datasource={props.datasource}\n query={queryWithRefId}\n onChange={onChangeQuery}\n onRunQuery={() => {}}\n history={history}\n ExtraFieldElement={\n <LokiOptionFields\n lineLimitValue={queryWithRefId?.maxLines?.toString() || ''}\n query={queryWithRefId}\n onRunQuery={() => {}}\n onChange={onChangeQuery}\n />\n }\n />\n </Stack>\n <EditorRow>\n <EditorField\n label=\"Title\"\n tooltip={\n 'Use either the name or a pattern. For example, {{instance}} is replaced with label value for the label instance.'\n }\n >\n <Input\n type=\"text\"\n placeholder=\"alertname\"\n value={annotation.titleFormat}\n onChange={(event) => {\n onAnnotationChange({\n ...annotation,\n titleFormat: event.currentTarget.value,\n });\n }}\n />\n </EditorField>\n <EditorField label=\"Tags\">\n <Input\n type=\"text\"\n placeholder=\"label1,label2\"\n value={annotation.tagKeys}\n onChange={(event) => {\n onAnnotationChange({\n ...annotation,\n tagKeys: event.currentTarget.value,\n });\n }}\n />\n </EditorField>\n <EditorField\n label=\"Text\"\n tooltip={\n 'Use either the name or a pattern. For example, {{instance}} is replaced with label value for the label instance.'\n }\n >\n <Input\n type=\"text\"\n placeholder=\"instance\"\n value={annotation.textFormat}\n onChange={(event) => {\n onAnnotationChange({\n ...annotation,\n textFormat: event.currentTarget.value,\n });\n }}\n />\n </EditorField>\n </EditorRow>\n </Stack>\n );\n});\n","import {\n closestIdx,\n DataFrame,\n DataFrameType,\n DataQueryResponse,\n DataQueryResponseData,\n Field,\n FieldType,\n LoadingState,\n QueryResultMetaNotice,\n QueryResultMetaStat,\n shallowCompare,\n} from '@grafana/data';\n\nimport { LOADING_FRAME_NAME } from './querySplitting';\n\nfunction getFrameKey(frame: DataFrame): string | undefined {\n // Metric range query data\n if (frame.meta?.type === DataFrameType.TimeSeriesMulti) {\n const field = frame.fields.find((f) => f.type === FieldType.number);\n if (!field) {\n throw new Error(`Unable to find number field on sharded dataframe!`);\n }\n let key = '';\n if (frame.refId) {\n key += frame.refId;\n }\n if (frame.name) {\n key += frame.name;\n }\n if (field.labels) {\n key += JSON.stringify(field.labels);\n }\n return key !== '' ? key : undefined;\n }\n return frame.refId ?? frame.name;\n}\n\nexport function combineResponses(currentResponse: DataQueryResponse | null, newResponse: DataQueryResponse) {\n if (!currentResponse) {\n return cloneQueryResponse(newResponse);\n }\n\n const currentResponseLabelsMap = new Map<string, DataFrame>();\n currentResponse.data.forEach((frame: DataFrame) => {\n const key = getFrameKey(frame);\n // It is expected that all frames contain a refId or a name, but since the type allows for it\n // we need to account for possibly undefined cases.\n if (key) {\n currentResponseLabelsMap.set(key, frame);\n }\n });\n\n newResponse.data.forEach((newFrame: DataFrame) => {\n let currentFrame: DataFrame | undefined = undefined;\n const key = getFrameKey(newFrame);\n if (key !== undefined && currentResponseLabelsMap.has(key)) {\n currentFrame = currentResponseLabelsMap.get(key);\n mergeFrames(currentFrame!, newFrame);\n } else {\n currentResponse.data.push(cloneDataFrame(newFrame));\n }\n });\n\n const mergedErrors = [...(currentResponse.errors ?? []), ...(newResponse.errors ?? [])];\n if (mergedErrors.length > 0) {\n currentResponse.errors = mergedErrors;\n }\n\n // the `.error` attribute is obsolete now,\n // but we have to maintain it, otherwise\n // some grafana parts do not behave well.\n // we just choose the old error, if it exists,\n // otherwise the new error, if it exists.\n const mergedError = currentResponse.error ?? newResponse.error;\n if (mergedError != null) {\n currentResponse.error = mergedError;\n }\n\n const mergedTraceIds = [...(currentResponse.traceIds ?? []), ...(newResponse.traceIds ?? [])];\n if (mergedTraceIds.length > 0) {\n currentResponse.traceIds = mergedTraceIds;\n }\n\n return currentResponse;\n}\n\n/**\n * Given an existing DataQueryResponse, replace any data frame present in newResponse with those in newResponse\n */\nexport function replaceResponses(currentResponse: DataQueryResponse | null, newResponse: DataQueryResponse) {\n if (!currentResponse) {\n return cloneQueryResponse(newResponse);\n }\n\n newResponse.data.forEach((newFrame) => {\n const currentFrameIndex = currentResponse.data.findIndex((frame) => shouldCombine(frame, newFrame));\n if (currentFrameIndex < 0) {\n currentResponse.data.push(cloneDataFrame(newFrame));\n return;\n }\n currentResponse.data[currentFrameIndex] = newFrame;\n });\n\n // Clean up loading frame when newResponse contains the final response\n if (newResponse.state === LoadingState.Done) {\n currentResponse.data = currentResponse.data.filter((frame) => frame.name !== LOADING_FRAME_NAME);\n }\n\n const mergedErrors = [...(currentResponse.errors ?? []), ...(newResponse.errors ?? [])];\n if (mergedErrors.length > 0) {\n currentResponse.errors = mergedErrors;\n }\n\n const mergedError = currentResponse.error ?? newResponse.error;\n if (mergedError != null) {\n currentResponse.error = mergedError;\n }\n\n const mergedTraceIds = [...(currentResponse.traceIds ?? []), ...(newResponse.traceIds ?? [])];\n if (mergedTraceIds.length > 0) {\n currentResponse.traceIds = mergedTraceIds;\n }\n\n return currentResponse;\n}\n\n/**\n * Given two data frames, merge their values. Overlapping values will be added together.\n */\nexport function mergeFrames(dest: DataFrame, source: DataFrame) {\n const destTimeField = dest.fields.find((field) => field.type === FieldType.time);\n const destIdField = dest.fields.find((field) => field.type === FieldType.string && field.name === 'id');\n const sourceTimeField = source.fields.find((field) => field.type === FieldType.time);\n const sourceIdField = source.fields.find((field) => field.type === FieldType.string && field.name === 'id');\n\n if (!destTimeField || !sourceTimeField) {\n console.error(new Error(`Time fields not found in the data frames`));\n return;\n }\n\n const sourceTimeValues = sourceTimeField?.values.slice(0) ?? [];\n const totalFields = Math.max(dest.fields.length, source.fields.length);\n\n for (let i = 0; i < sourceTimeValues.length; i++) {\n const destIdx = resolveIdx(destTimeField, sourceTimeField, i);\n\n const entryExistsInDest = compareEntries(destTimeField, destIdField, destIdx, sourceTimeField, sourceIdField, i);\n\n for (let f = 0; f < totalFields; f++) {\n // For now, skip undefined fields that exist in the new frame\n if (!dest.fields[f]) {\n continue;\n }\n // Index is not reliable when frames have disordered fields, or an extra/missing field, so we find them by name.\n // If the field has no name, we fallback to the old index version.\n const sourceField = findSourceField(dest.fields[f], source.fields, f);\n if (!sourceField) {\n continue;\n }\n // Same value, accumulate\n if (entryExistsInDest) {\n if (dest.fields[f].type === FieldType.time) {\n // Time already exists, skip\n continue;\n } else if (dest.fields[f].type === FieldType.number) {\n // Number, add\n dest.fields[f].values[destIdx] = (dest.fields[f].values[destIdx] ?? 0) + sourceField.values[i];\n } else if (dest.fields[f].type === FieldType.other) {\n // Possibly labels, combine\n if (typeof sourceField.values[i] === 'object') {\n dest.fields[f].values[destIdx] = {\n ...dest.fields[f].values[destIdx],\n ...sourceField.values[i],\n };\n } else if (sourceField.values[i]) {\n dest.fields[f].values[destIdx] = sourceField.values[i];\n }\n } else {\n // Replace value\n dest.fields[f].values[destIdx] = sourceField.values[i];\n }\n } else if (sourceField.values[i] !== undefined) {\n // Insert in the `destIdx` position\n dest.fields[f].values.splice(destIdx, 0, sourceField.values[i]);\n if (sourceField.nanos) {\n dest.fields[f].nanos = dest.fields[f].nanos ?? new Array(dest.fields[f].values.length - 1).fill(0);\n dest.fields[f].nanos?.splice(destIdx, 0, sourceField.nanos[i]);\n } else if (dest.fields[f].nanos) {\n dest.fields[f].nanos?.splice(destIdx, 0, 0);\n }\n }\n }\n }\n\n dest.length = dest.fields[0].values.length;\n\n dest.meta = {\n ...dest.meta,\n stats: getCombinedMetadataStats(dest.meta?.stats ?? [], source.meta?.stats ?? []),\n notices: getCombinedNotices(dest.meta?.notices ?? [], source.meta?.notices ?? []),\n };\n}\n\nfunction resolveIdx(destField: Field, sourceField: Field, index: number) {\n const idx = closestIdx(sourceField.values[index], destField.values);\n if (idx < 0) {\n return 0;\n }\n if (sourceField.values[index] === destField.values[idx] && sourceField.nanos && destField.nanos) {\n return sourceField.nanos[index] > destField.nanos[idx] ? idx + 1 : idx;\n }\n if (sourceField.values[index] > destField.values[idx]) {\n return idx + 1;\n }\n return idx;\n}\n\nfunction compareEntries(\n destTimeField: Field,\n destIdField: Field | undefined,\n destIndex: number,\n sourceTimeField: Field,\n sourceIdField: Field | undefined,\n sourceIndex: number\n) {\n const sameTimestamp = compareNsTimestamps(destTimeField, destIndex, sourceTimeField, sourceIndex);\n if (!sameTimestamp) {\n return false;\n }\n if (!destIdField || !sourceIdField) {\n return true;\n }\n // Log frames, check indexes\n return (\n destIdField.values[destIndex] !== undefined && destIdField.values[destIndex] === sourceIdField.values[sourceIndex]\n );\n}\n\nfunction compareNsTimestamps(destField: Field, destIndex: number, sourceField: Field, sourceIndex: number) {\n if (destField.nanos && sourceField.nanos) {\n return (\n destField.values[destIndex] !== undefined &&\n destField.values[destIndex] === sourceField.values[sourceIndex] &&\n destField.nanos[destIndex] !== undefined &&\n destField.nanos[destIndex] === sourceField.nanos[sourceIndex]\n );\n }\n return destField.values[destIndex] !== undefined && destField.values[destIndex] === sourceField.values[sourceIndex];\n}\n\nfunction findSourceField(referenceField: Field, sourceFields: Field[], index: number) {\n const candidates = sourceFields.filter((f) => f.name === referenceField.name);\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n if (referenceField.labels) {\n return candidates.find((candidate) => shallowCompare(referenceField.labels ?? {}, candidate.labels ?? {}));\n }\n\n return sourceFields[index];\n}\n\nconst TOTAL_BYTES_STAT = 'Summary: total bytes processed';\nconst EXEC_TIME_STAT = 'Summary: exec time';\n// This is specific for Loki\nfunction getCombinedMetadataStats(\n destStats: QueryResultMetaStat[],\n sourceStats: QueryResultMetaStat[]\n): QueryResultMetaStat[] {\n // in the current approach, we only handle a single stat\n const stats: QueryResultMetaStat[] = [];\n for (const stat of [TOTAL_BYTES_STAT, EXEC_TIME_STAT]) {\n const destStat = destStats.find((s) => s.displayName === stat);\n const sourceStat = sourceStats.find((s) => s.displayName === stat);\n\n if (sourceStat != null && destStat != null) {\n stats.push({ value: sourceStat.value + destStat.value, displayName: stat, unit: destStat.unit });\n continue;\n }\n\n // maybe one of them exist\n const eitherStat = sourceStat ?? destStat;\n if (eitherStat != null) {\n stats.push(eitherStat);\n }\n }\n return stats;\n}\n\nfunction getCombinedNotices(\n destNotices: QueryResultMetaNotice[],\n sourceNotices: QueryResultMetaNotice[]\n): QueryResultMetaNotice[] {\n // Combine notices from both frames and filter out null/undefined values\n const allNotices = [...destNotices, ...sourceNotices].filter(\n (notice): notice is QueryResultMetaNotice => notice != null\n );\n\n // Deduplicate notices based on text to avoid showing the same warning twice\n const uniqueNotices = allNotices.reduce((acc: QueryResultMetaNotice[], notice) => {\n const exists = acc.some((n) => n.severity === notice.severity && n.text === notice.text);\n if (!exists) {\n acc.push(notice);\n }\n return acc;\n }, []);\n\n return uniqueNotices;\n}\n\n/**\n * Deep clones a DataQueryResponse\n */\nexport function cloneQueryResponse(response: DataQueryResponse): DataQueryResponse {\n const newResponse = {\n ...response,\n data: response.data.map(cloneDataFrame),\n };\n return newResponse;\n}\n\nfunction cloneDataFrame(frame: DataQueryResponseData): DataQueryResponseData {\n return {\n ...frame,\n fields: frame.fields.map((field: Field) => ({\n ...field,\n values: field.values,\n })),\n };\n}\n\nfunction shouldCombine(frame1: DataFrame, frame2: DataFrame): boolean {\n if (frame1.refId !== frame2.refId || frame1.name !== frame2.name) {\n return false;\n }\n\n const frameType1 = frame1.meta?.type;\n const frameType2 = frame2.meta?.type;\n\n if (frameType1 !== frameType2) {\n // we do not join things that have a different type\n return false;\n }\n\n // metric range query data\n if (frameType1 === DataFrameType.TimeSeriesMulti) {\n const field1 = frame1.fields.find((f) => f.type === FieldType.number);\n const field2 = frame2.fields.find((f) => f.type === FieldType.number);\n if (field1 === undefined || field2 === undefined) {\n // should never happen\n return false;\n }\n\n return shallowCompare(field1.labels ?? {}, field2.labels ?? {});\n }\n\n // logs query data\n // logs use a special attribute in the dataframe's \"custom\" section\n // because we do not have a good \"frametype\" value for them yet.\n const customType1 = frame1.meta?.custom?.frameType;\n const customType2 = frame2.meta?.custom?.frameType;\n // Legacy frames have this custom type\n if (customType1 === 'LabeledTimeValues' && customType2 === 'LabeledTimeValues') {\n return true;\n } else if (customType1 === customType2) {\n // Data plane frames don't\n return true;\n }\n\n // should never reach here\n return false;\n}\n","import { CoreApp, DashboardLoadedEvent, DataQueryRequest, DataQueryResponse } from '@grafana/data';\nimport { QueryEditorMode } from '@grafana/plugin-ui';\nimport { reportInteraction, config } from '@grafana/runtime';\n\nimport {\n REF_ID_STARTER_ANNOTATION,\n REF_ID_DATA_SAMPLES,\n REF_ID_STARTER_LOG_ROW_CONTEXT,\n REF_ID_STARTER_LOG_VOLUME,\n REF_ID_STARTER_LOG_SAMPLE,\n} from './datasource';\nimport pluginJson from './plugin.json';\nimport { getNormalizedLokiQuery, isLogsQuery, obfuscate } from './queryUtils';\nimport { variableRegex } from './querybuilder/parsingUtils';\nimport { LokiGroupedRequest, LokiQuery, LokiQueryType } from './types';\n\ntype LokiOnDashboardLoadedTrackingEvent = {\n grafana_version?: string;\n dashboard_id?: string;\n org_id?: number;\n\n /* The number of Loki queries present in the dashboard*/\n queries_count: number;\n\n /* The number of Loki logs queries present in the dashboard*/\n logs_queries_count: number;\n\n /* The number of Loki metric queries present in the dashboard*/\n metric_queries_count: number;\n\n /* The number of Loki instant queries present in the dashboard*/\n instant_queries_count: number;\n\n /* The number of Loki range queries present in the dashboard*/\n range_queries_count: number;\n\n /* The number of Loki queries created in builder mode present in the dashboard*/\n builder_mode_queries_count: number;\n\n /* The number of Loki queries created in code mode present in the dashboard*/\n code_mode_queries_count: number;\n\n /* The number of Loki queries with used template variables present in the dashboard*/\n queries_with_template_variables_count: number;\n\n /* The number of Loki queries with changed resolution present in the dashboard*/\n queries_with_changed_resolution_count: number;\n\n /* The number of Loki queries with changed line limit present in the dashboard*/\n queries_with_changed_line_limit_count: number;\n\n /* The number of Loki queries with changed legend present in the dashboard*/\n queries_with_changed_legend_count: number;\n};\n\nexport const onDashboardLoadedHandler = ({\n payload: { dashboardId, orgId, grafanaVersion, queries },\n}: DashboardLoadedEvent<LokiQuery>) => {\n try {\n // We only want to track visible Loki queries\n const lokiQueries = queries[pluginJson.id]\n ?.filter((query) => !query.hide)\n ?.map((query) => getNormalizedLokiQuery(query));\n\n if (!lokiQueries?.length) {\n return;\n }\n\n const logsQueries = lokiQueries.filter((query) => isLogsQuery(query.expr));\n const metricQueries = lokiQueries.filter((query) => !isLogsQuery(query.expr));\n const instantQueries = lokiQueries.filter((query) => query.queryType === LokiQueryType.Instant);\n const rangeQueries = lokiQueries.filter((query) => query.queryType === LokiQueryType.Range);\n const builderModeQueries = lokiQueries.filter((query) => query.editorMode === QueryEditorMode.Builder);\n const codeModeQueries = lokiQueries.filter((query) => query.editorMode === QueryEditorMode.Code);\n const queriesWithTemplateVariables = lokiQueries.filter(isQueryWithTemplateVariables);\n const queriesWithChangedResolution = lokiQueries.filter(isQueryWithChangedResolution);\n const queriesWithChangedLineLimit = lokiQueries.filter(isQueryWithChangedLineLimit);\n const queriesWithChangedLegend = lokiQueries.filter(isQueryWithChangedLegend);\n\n const event: LokiOnDashboardLoadedTrackingEvent = {\n grafana_version: grafanaVersion,\n dashboard_id: dashboardId,\n org_id: orgId,\n queries_count: lokiQueries.length,\n logs_queries_count: logsQueries.length,\n metric_queries_count: metricQueries.length,\n instant_queries_count: instantQueries.length,\n range_queries_count: rangeQueries.length,\n builder_mode_queries_count: builderModeQueries.length,\n code_mode_queries_count: codeModeQueries.length,\n queries_with_template_variables_count: queriesWithTemplateVariables.length,\n queries_with_changed_resolution_count: queriesWithChangedResolution.length,\n queries_with_changed_line_limit_count: queriesWithChangedLineLimit.length,\n queries_with_changed_legend_count: queriesWithChangedLegend.length,\n };\n\n reportInteraction('grafana_loki_dashboard_loaded', event);\n } catch (error) {\n console.error('error in loki tracking handler', error);\n }\n};\n\nconst isQueryWithTemplateVariables = (query: LokiQuery): boolean => {\n return variableRegex.test(query.expr);\n};\n\nconst isQueryWithChangedResolution = (query: LokiQuery): boolean => {\n if (!query.resolution) {\n return false;\n }\n // 1 is the default resolution\n return query.resolution !== 1;\n};\n\nconst isQueryWithChangedLineLimit = (query: LokiQuery): boolean => {\n return query.maxLines !== null && query.maxLines !== undefined;\n};\n\nconst isQueryWithChangedLegend = (query: LokiQuery): boolean => {\n if (!query.legendFormat) {\n return false;\n }\n return query.legendFormat !== '';\n};\n\nconst shouldNotReportBasedOnRefId = (refId: string): boolean => {\n const starters = [\n REF_ID_STARTER_ANNOTATION,\n REF_ID_STARTER_LOG_ROW_CONTEXT,\n REF_ID_STARTER_LOG_VOLUME,\n REF_ID_STARTER_LOG_SAMPLE,\n REF_ID_DATA_SAMPLES,\n ];\n\n if (starters.some((starter) => refId.startsWith(starter))) {\n return true;\n }\n return false;\n};\n\nconst calculateTotalBytes = (response: DataQueryResponse): number => {\n let totalBytes = 0;\n for (const frame of response.data) {\n const byteKey = frame.meta?.custom?.lokiQueryStatKey;\n if (byteKey) {\n totalBytes +=\n frame.meta?.stats?.find((stat: { displayName: string }) => stat.displayName === byteKey)?.value ?? 0;\n }\n }\n return totalBytes;\n};\n\nexport function trackQuery(\n response: DataQueryResponse,\n request: DataQueryRequest<LokiQuery>,\n startTime: Date,\n extraPayload: Record<string, unknown> = {}\n): void {\n // We only want to track usage for these specific apps\n const { app, targets: queries } = request;\n\n if (app !== CoreApp.Explore) {\n return;\n }\n\n let totalBytes = calculateTotalBytes(response);\n\n for (const query of queries) {\n if (shouldNotReportBasedOnRefId(query.refId)) {\n return;\n }\n\n reportInteraction('grafana_explore_loki_query_executed', {\n grafana_version: config.buildInfo.version,\n editor_mode: query.editorMode,\n has_data: response.data.some((frame) => frame.length > 0),\n has_error: response.error !== undefined,\n legend: query.legendFormat,\n line_limit: query.maxLines,\n obfuscated_query: obfuscate(query.expr),\n query_type: isLogsQuery(query.expr) ? 'logs' : 'metric',\n query_vector_type: query.queryType,\n resolution: query.resolution,\n simultaneously_executed_query_count: queries.filter((query) => !query.hide).length,\n simultaneously_hidden_query_count: queries.filter((query) => query.hide).length,\n time_range_from: request?.range?.from?.toISOString(),\n time_range_to: request?.range?.to?.toISOString(),\n time_taken: Date.now() - startTime.getTime(),\n bytes_processed: totalBytes,\n is_split: false,\n ...extraPayload,\n });\n }\n}\n\nexport function trackGroupedQueries(\n response: DataQueryResponse,\n groupedRequests: LokiGroupedRequest[],\n originalRequest: DataQueryRequest<LokiQuery>,\n startTime: Date\n): void {\n const splittingPayload = {\n split_query_group_count: groupedRequests.length,\n split_query_largest_partition_size: Math.max(...groupedRequests.map(({ partition }) => partition.length)),\n split_query_total_request_count: groupedRequests.reduce((total, { partition }) => total + partition.length, 0),\n is_split: true,\n simultaneously_executed_query_count: originalRequest.targets.filter((query) => !query.hide).length,\n simultaneously_hidden_query_count: originalRequest.targets.filter((query) => query.hide).length,\n };\n\n for (const group of groupedRequests) {\n const split_query_partition_size = group.partition.length;\n trackQuery(response, group.request, startTime, {\n ...splittingPayload,\n split_query_partition_size,\n });\n }\n}\n","import { groupBy, partition } from 'lodash';\nimport { Observable, Subscriber, Subscription, tap } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n arrayToDataFrame,\n DataQueryRequest,\n DataQueryResponse,\n DataTopic,\n dateTime,\n rangeUtil,\n TimeRange,\n LoadingState,\n} from '@grafana/data';\n\nimport { LokiDatasource } from './datasource';\nimport { splitTimeRange as splitLogsTimeRange } from './logsTimeSplitting';\nimport { combineResponses } from './mergeResponses';\nimport { splitTimeRange as splitMetricTimeRange } from './metricTimeSplitting';\nimport { isLogsQuery, isQueryWithRangeVariable } from './queryUtils';\nimport { isRetriableError } from './responseUtils';\nimport { trackGroupedQueries } from './tracking';\nimport { LokiGroupedRequest, LokiQuery, LokiQueryDirection, LokiQueryType } from './types';\n\nexport function partitionTimeRange(\n isLogsQuery: boolean,\n originalTimeRange: TimeRange,\n stepMs: number,\n duration: number\n): TimeRange[] {\n const start = originalTimeRange.from.toDate().getTime();\n const end = originalTimeRange.to.toDate().getTime();\n\n const ranges = isLogsQuery\n ? splitLogsTimeRange(start, end, duration)\n : splitMetricTimeRange(start, end, stepMs, duration);\n\n return ranges.map(([start, end]) => {\n const from = dateTime(start);\n const to = dateTime(end);\n return {\n from,\n to,\n raw: { from, to },\n };\n });\n}\n\ninterface QuerySplittingOptions {\n /**\n * Tells the query splitting code to not emit partial updates. Only emit on error or when it finishes querying.\n */\n skipPartialUpdates?: boolean;\n /**\n * Do not retry failed queries.\n */\n disableRetry?: boolean;\n}\n\n/**\n * Based in the state of the current response, if any, adjust target parameters such as `maxLines`.\n * For `maxLines`, we will update it as `maxLines - current amount of lines`.\n * At the end, we will filter the targets that don't need to be executed in the next request batch,\n * becasue, for example, the `maxLines` have been reached.\n */\nexport function adjustTargetsFromResponseState(targets: LokiQuery[], response: DataQueryResponse | null): LokiQuery[] {\n if (!response) {\n return targets;\n }\n\n return targets\n .map((target) => {\n if (!target.maxLines || !isLogsQuery(target.expr)) {\n return target;\n }\n const targetFrame = response.data.find((frame) => frame.refId === target.refId);\n if (!targetFrame) {\n return target;\n }\n const updatedMaxLines = target.maxLines - targetFrame.length;\n return {\n ...target,\n maxLines: updatedMaxLines < 0 ? 0 : updatedMaxLines,\n };\n })\n .filter((target) => target.maxLines === undefined || target.maxLines > 0);\n}\nexport function runSplitGroupedQueries(\n datasource: LokiDatasource,\n requests: LokiGroupedRequest[],\n options: QuerySplittingOptions = {}\n) {\n const responseKey = requests.length ? requests[0].request.queryGroupId : uuidv4();\n let mergedResponse: DataQueryResponse = { data: [], state: LoadingState.Streaming, key: responseKey };\n const totalRequests = Math.max(...requests.map(({ partition }) => partition.length));\n const longestPartition = requests.filter(({ partition }) => partition.length === totalRequests)[0].partition;\n\n let shouldStop = false;\n let subquerySubscription: Subscription | null = null;\n let retriesMap = new Map<string, number>();\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const runNextRequest = (subscriber: Subscriber<DataQueryResponse>, requestN: number, requestGroup: number) => {\n let retrying = false;\n\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n\n if (shouldStop) {\n subscriber.complete();\n return;\n }\n\n const done = () => {\n mergedResponse.state = LoadingState.Done;\n subscriber.next(mergedResponse);\n subscriber.complete();\n };\n\n const nextRequest = () => {\n const { nextRequestN, nextRequestGroup } = getNextRequestPointers(requests, requestGroup, requestN);\n if (nextRequestN > 0 && nextRequestGroup >= 0) {\n runNextRequest(subscriber, nextRequestN, nextRequestGroup);\n return;\n }\n done();\n };\n\n const retry = (errorResponse?: DataQueryResponse) => {\n if (options.disableRetry) {\n return false;\n }\n try {\n if (errorResponse && !isRetriableError(errorResponse)) {\n return false;\n }\n } catch (e) {\n console.error(e);\n shouldStop = true;\n return false;\n }\n\n const key = `${requestN}-${requestGroup}`;\n const retries = retriesMap.get(key) ?? 0;\n if (retries > 0) {\n return false;\n }\n\n retriesMap.set(key, retries + 1);\n\n retryTimer = setTimeout(\n () => {\n runNextRequest(subscriber, requestN, requestGroup);\n },\n 1500 * Math.pow(2, retries)\n ); // Exponential backoff\n\n retrying = true;\n\n return true;\n };\n\n const group = requests[requestGroup];\n const range = group.partition[requestN - 1];\n const targets = adjustTargetsFromResponseState(group.request.targets, mergedResponse);\n\n if (!targets.length) {\n nextRequest();\n return;\n }\n\n const subRequest = { ...requests[requestGroup].request, range, targets };\n // request may not have a request id\n if (group.request.requestId) {\n subRequest.requestId = `${group.request.requestId}_${requestN}`;\n }\n\n subquerySubscription = datasource.runQuery(subRequest).subscribe({\n next: (partialResponse) => {\n if ((partialResponse.errors ?? []).length > 0 || partialResponse.error != null) {\n if (retry(partialResponse)) {\n return;\n }\n shouldStop = true;\n }\n mergedResponse = combineResponses(mergedResponse, partialResponse);\n if (!options.skipPartialUpdates) {\n mergedResponse = updateLoadingFrame(mergedResponse, subRequest, longestPartition, requestN);\n }\n },\n complete: () => {\n if (retrying) {\n return;\n }\n if (!options.skipPartialUpdates) {\n subscriber.next(mergedResponse);\n }\n nextRequest();\n },\n error: (error) => {\n subscriber.error(error);\n if (retry()) {\n return;\n }\n },\n });\n };\n\n const response = new Observable<DataQueryResponse>((subscriber) => {\n runNextRequest(subscriber, totalRequests, 0);\n return () => {\n shouldStop = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n };\n });\n\n return response;\n}\n\nexport const LOADING_FRAME_NAME = 'loki-splitting-progress';\n\nfunction updateLoadingFrame(\n response: DataQueryResponse,\n request: DataQueryRequest<LokiQuery>,\n partition: TimeRange[],\n requestN: number\n): DataQueryResponse {\n if (isLogsQuery(request.targets[0].expr)) {\n return response;\n }\n response.data = response.data.filter((frame) => frame.name !== LOADING_FRAME_NAME);\n\n if (requestN <= 1) {\n return response;\n }\n\n const loadingFrame = arrayToDataFrame([\n {\n time: partition[0].from.valueOf(),\n timeEnd: partition[requestN - 2].to.valueOf(),\n isRegion: true,\n color: 'rgba(120, 120, 120, 0.1)',\n },\n ]);\n loadingFrame.name = LOADING_FRAME_NAME;\n loadingFrame.meta = {\n dataTopic: DataTopic.Annotations,\n };\n\n response.data.push(loadingFrame);\n\n return response;\n}\n\nfunction getNextRequestPointers(requests: LokiGroupedRequest[], requestGroup: number, requestN: number) {\n // There's a pending request from the next group:\n for (let i = requestGroup + 1; i < requests.length; i++) {\n const group = requests[i];\n if (group.partition[requestN - 1]) {\n return {\n nextRequestGroup: i,\n nextRequestN: requestN,\n };\n }\n }\n return {\n // Find the first group where `[requestN - 1]` is defined\n nextRequestGroup: requests.findIndex((group) => group?.partition[requestN - 1] !== undefined),\n nextRequestN: requestN - 1,\n };\n}\n\nfunction querySupportsSplitting(query: LokiQuery) {\n return (\n query.queryType !== LokiQueryType.Instant &&\n // Queries with $__range variable should not be split because then the interpolated $__range variable is incorrect\n // because it is interpolated on the backend with the split timeRange\n !isQueryWithRangeVariable(query.expr)\n );\n}\n\nexport function runSplitQuery(\n datasource: LokiDatasource,\n request: DataQueryRequest<LokiQuery>,\n options: QuerySplittingOptions = {}\n) {\n const queries = request.targets\n .filter((query) => !query.hide)\n .filter((query) => query.expr)\n .map((query) => datasource.applyTemplateVariables(query, request.scopedVars, request.filters));\n const [nonSplittingQueries, normalQueries] = partition(queries, (query) => !querySupportsSplitting(query));\n const [logQueries, metricQueries] = partition(normalQueries, (query) => isLogsQuery(query.expr));\n\n request.queryGroupId = uuidv4();\n const oneDayMs = 24 * 60 * 60 * 1000;\n const directionPartitionedLogQueries = groupBy(logQueries, (query) =>\n query.direction === LokiQueryDirection.Forward ? LokiQueryDirection.Forward : LokiQueryDirection.Backward\n );\n const requests: LokiGroupedRequest[] = [];\n\n for (const direction in directionPartitionedLogQueries) {\n const queries = directionPartitionedLogQueries[direction];\n const resolutionPartition = groupBy(queries, (query) => query.resolution || 1);\n for (const resolution in resolutionPartition) {\n const groupedRequest = {\n request: { ...request, targets: resolutionPartition[resolution] },\n partition: partitionTimeRange(true, request.range, request.intervalMs, oneDayMs),\n };\n\n if (direction === LokiQueryDirection.Forward) {\n groupedRequest.partition.reverse();\n }\n\n requests.push(groupedRequest);\n }\n }\n\n const stepMsPartition = groupBy(metricQueries, (query) =>\n calculateStep(request.intervalMs, request.range, query.resolution || 1, query.step)\n );\n\n for (const stepMs in stepMsPartition) {\n const targets = stepMsPartition[stepMs].map((q) => {\n const { maxLines, ...query } = q;\n return query;\n });\n requests.push({\n request: { ...request, targets },\n partition: partitionTimeRange(false, request.range, Number(stepMs), oneDayMs),\n });\n }\n\n if (nonSplittingQueries.length) {\n requests.push({\n request: { ...request, targets: nonSplittingQueries },\n partition: [request.range],\n });\n }\n\n const startTime = new Date();\n return runSplitGroupedQueries(datasource, requests, options).pipe(\n tap((response) => {\n if (response.state === LoadingState.Done) {\n trackGroupedQueries(response, requests, request, startTime);\n }\n })\n );\n}\n\n// Replicate from backend for split queries for now, until we can move query splitting to the backend\n// https://github.com/grafana/grafana/blob/main/pkg/tsdb/loki/step.go#L23\nfunction calculateStep(intervalMs: number, range: TimeRange, resolution: number, step: string | undefined) {\n // If we can parse step,the we use it\n // Otherwise we will calculate step based on interval\n const interval_regex = /(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])/;\n if (step?.match(interval_regex)) {\n return rangeUtil.intervalToMs(step) * resolution;\n }\n\n const newStep = intervalMs * resolution;\n const safeStep = Math.round((range.to.valueOf() - range.from.valueOf()) / 11000);\n return Math.max(newStep, safeStep);\n}\n","// every timestamp in this file is a number which contains an unix-timestamp-in-millisecond format,\n// like returned by `new Date().getTime()`. this is needed because the \"math\"\n// has to be done on integer numbers.\n\n// the way loki handles logs-range-queries is that if you specify start & end,\n// one of those will be included, but the other will not. this allows us to\n// make it easy to split ranges.\n// for example, if the time-range is 100<>150,\n// we can split it into:\n// - 100<>120\n// - 120<>140\n// - 140<>150\n// and no log-line will be skipped or duplicated\n// (NOTE: we do these calculations in milliseconds. at the end, Loki receives\n// nanoseconds, but it will be OK, because it's simply a matter to adding `000000`,\n// to the end, so if we do it right in milliseconds, it should be OK in\n// nanoseconds too\n\nexport function splitTimeRange(\n startTime: number,\n endTime: number,\n idealRangeDuration: number\n): Array<[number, number]> {\n if (endTime - startTime <= idealRangeDuration) {\n return [[startTime, endTime]];\n }\n\n const result: Array<[number, number]> = [];\n\n // we walk backward, because we need want the potentially smaller \"last\" chunk\n // to be at the oldest timestamp.\n for (let chunkEndTime = endTime; chunkEndTime > startTime; chunkEndTime -= idealRangeDuration) {\n // when we get close to the start of the time range, we need to be sure not\n // to cross over the startTime\n const chunkStartTime = Math.max(chunkEndTime - idealRangeDuration, startTime);\n result.push([chunkStartTime, chunkEndTime]);\n }\n\n // because we walked backwards, we need to reverse the array\n result.reverse();\n\n return result;\n}\n","// every timestamp in this file is a number which contains an unix-timestamp-in-millisecond format,\n// like returned by `new Date().getTime()`. this is needed because the \"math\"\n// has to be done on integer numbers.\n\n// we are trying to be compatible with\n// https://github.com/grafana/loki/blob/089ec1b05f5ec15a8851d0e8230153e0eeb4dcec/pkg/querier/queryrange/split_by_interval.go#L327-L336\n\nexport function splitTimeRange(\n startTime: number,\n endTime: number,\n step: number,\n idealRangeDuration: number\n): Array<[number, number]> {\n if (idealRangeDuration < step) {\n // we cannot create chunks smaller than `step`\n return [[startTime, endTime]];\n }\n\n // we make the duration a multiple of `step`, lowering it if necessary\n const alignedDuration = Math.trunc(idealRangeDuration / step) * step;\n\n const alignedStartTime = startTime - (startTime % step);\n\n const result: Array<[number, number]> = [];\n\n // in a previous version we started iterating from the end, to the start.\n // However this is not easily possible as end timestamps are always inclusive\n // for Loki. So a `2022-02-08T00:00:00Z` end time with a 1day step would mean\n // to include the 08.02.2022, which we don't want. So we have to start from\n // the start, always ending at the last step before the actual end, or the total end.\n for (let chunkStartTime = alignedStartTime; chunkStartTime < endTime; chunkStartTime += alignedDuration) {\n const chunkEndTime = Math.min(chunkStartTime + alignedDuration - step, endTime);\n result.push([chunkStartTime, chunkEndTime]);\n }\n\n return result;\n}\n","import { groupBy, partition } from 'lodash';\nimport { Observable, Subscriber, Subscription } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { DataQueryRequest, LoadingState, DataQueryResponse, QueryResultMetaStat } from '@grafana/data';\n\nimport { LokiDatasource } from './datasource';\nimport { combineResponses, replaceResponses } from './mergeResponses';\nimport { adjustTargetsFromResponseState, runSplitQuery } from './querySplitting';\nimport { getSelectorForShardValues, interpolateShardingSelector, requestSupportsSharding } from './queryUtils';\nimport { isRetriableError } from './responseUtils';\nimport { LokiQuery } from './types';\n\n/**\n * Query splitting by stream shards.\n * Query splitting was introduced in Loki to optimize querying for long intervals and high volume of data,\n * dividing a big request into smaller sub-requests, combining and displaying the results as they arrive.\n *\n * This approach, inspired by the time-based query splitting, takes advantage of the __stream_shard__\n * internal label, representing how data is spread into different sources that can be queried individually.\n *\n * The main entry point of this module is runShardSplitQuery(), which prepares the query for execution and\n * passes it to splitQueriesByStreamShard() to begin the querying loop.\n *\n * splitQueriesByStreamShard() has the following structure:\n * - Creates and returns an Observable to which the UI will subscribe\n * - Requests the __stream_shard__ values of the selected service:\n * . If there are no shard values, it falls back to the standard querying approach of the data source in runNonSplitRequest()\n * . If there are shards:\n * - It sorts them by value, descending. Higher shard numbers correspond with the least volume.\n * - It defines an initial group size, roughly Math.sqrt(amountOfShards).\n * - It begins the querying loop with runNextRequest().\n * - runNextRequest() will create a group of groupSize shards from the nth shard (cycle), and has the following internal structure:\n * . groupShardRequests() returns an array of shards from cycle to cycle + groupSize.\n * . interpolateShardingSelector() will update the stream selector with the shard numbers in the current group.\n * . After query execution:\n * - If the response is successful:\n * . It will add new data to the response with combineResponses()\n * . Using the data and meta data of the response, updateGroupSizeFromResponse() will increase or decrease the group size.\n * . nextRequest() will use the current cycle and group size to determine the next request or complete execution with done().\n * - If the response is unsuccessful:\n * . If the response is not a query error, and the group size bigger than 1, it will decrease the group size.\n * . If the group size is already 1, it will retry the request up to 2 times.\n * . If there are retry attempts, it will retry the current cycle, or else stop querying.\n * - Once all request groups have been executed, it will be done().\n */\n\nexport function runShardSplitQuery(datasource: LokiDatasource, request: DataQueryRequest<LokiQuery>) {\n const queries = request.targets\n .filter((query) => query.expr)\n .filter((query) => !query.hide)\n .map((query) => datasource.applyTemplateVariables(query, request.scopedVars, request.filters));\n\n return splitQueriesByStreamShard(datasource, request, queries);\n}\n\nfunction splitQueriesByStreamShard(\n datasource: LokiDatasource,\n request: DataQueryRequest<LokiQuery>,\n splittingTargets: LokiQuery[]\n) {\n let shouldStop = false;\n let mergedResponse: DataQueryResponse = { data: [], state: LoadingState.Streaming, key: uuidv4() };\n let subquerySubscription: Subscription | null = null;\n let retriesMap = new Map<string, number>();\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const runNextRequest = (subscriber: Subscriber<DataQueryResponse>, group: number, groups: ShardedQueryGroup[]) => {\n let nextGroupSize = groups[group].groupSize;\n const { shards, groupSize, cycle } = groups[group];\n let retrying = false;\n\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n\n const done = () => {\n mergedResponse.state = shouldStop ? LoadingState.Error : LoadingState.Done;\n subscriber.next(mergedResponse);\n subscriber.complete();\n };\n\n if (shouldStop) {\n done();\n return;\n }\n\n const nextRequest = () => {\n // Find the next group to execute, which can be queries with pending shards to execute, or the next query with no shards.\n const nextGroup =\n groups[group + 1] && (groups[group + 1].shards === undefined || groupHasPendingRequests(groups[group + 1]))\n ? groups[group + 1]\n : groups.find((shardGroup) => groupHasPendingRequests(shardGroup));\n\n if (nextGroup === undefined) {\n done();\n return;\n }\n groups[group].groupSize = nextGroupSize;\n runNextRequest(subscriber, groups.indexOf(nextGroup), groups);\n };\n\n const retry = (errorResponse?: DataQueryResponse) => {\n try {\n if (errorResponse && !isRetriableError(errorResponse)) {\n return false;\n }\n } catch (e) {\n console.error(e);\n shouldStop = true;\n return false;\n }\n\n if (groupSize !== undefined && groupSize > 1) {\n groups[group].groupSize = Math.floor(Math.sqrt(groupSize));\n debug(`Possible time out, new group size ${groups[group].groupSize}`);\n retrying = true;\n runNextRequest(subscriber, group, groups);\n return true;\n }\n\n const key = `${group}_${cycle}`;\n const retries = retriesMap.get(key) ?? 0;\n\n if (retries > 1) {\n shouldStop = true;\n return false;\n }\n\n retriesMap.set(key, retries + 1);\n\n retryTimer = setTimeout(\n () => {\n console.warn(`Retrying ${group} ${cycle} (${retries + 1})`);\n runNextRequest(subscriber, group, groups);\n retryTimer = null;\n },\n 1500 * Math.pow(2, retries)\n ); // Exponential backoff\n\n retrying = true;\n\n return true;\n };\n\n const targets = adjustTargetsFromResponseState(groups[group].targets, mergedResponse);\n if (!targets.length) {\n nextRequest();\n return;\n }\n\n const shardsToQuery =\n shards && cycle !== undefined && groupSize ? groupShardRequests(shards, cycle, groupSize) : [];\n const subRequest = { ...request, targets: interpolateShardingSelector(targets, shardsToQuery) };\n // Request may not have a request id\n if (request.requestId) {\n subRequest.requestId =\n shardsToQuery.length > 0 ? `${request.requestId}_shard_${group}_${cycle}_${groupSize}` : request.requestId;\n }\n\n debug(shardsToQuery.length ? `Querying ${shardsToQuery.join(', ')}` : 'Running regular query');\n\n subquerySubscription = runSplitQuery(datasource, subRequest, {\n skipPartialUpdates: true,\n disableRetry: true,\n }).subscribe({\n next: (partialResponse: DataQueryResponse) => {\n if ((partialResponse.errors ?? []).length > 0 || partialResponse.error != null) {\n if (retry(partialResponse)) {\n return;\n }\n }\n if (groupSize && cycle !== undefined && shards !== undefined) {\n nextGroupSize = constrainGroupSize(\n cycle + groupSize,\n updateGroupSizeFromResponse(partialResponse, groups[group]),\n shards.length\n );\n if (nextGroupSize !== groupSize) {\n debug(`New group size ${nextGroupSize}`);\n }\n }\n mergedResponse =\n shardsToQuery.length > 0\n ? combineResponses(mergedResponse, partialResponse)\n : replaceResponses(mergedResponse, partialResponse);\n\n // When we delegate query running to runSplitQuery(), we will receive partial updates here, and complete\n // will be called when all the sub-requests were completed, so we need to show partial progress here.\n if (shardsToQuery.length === 0) {\n subscriber.next(mergedResponse);\n }\n },\n complete: () => {\n if (retrying) {\n return;\n }\n subscriber.next(mergedResponse);\n nextRequest();\n },\n error: (error: unknown) => {\n console.error(error, { msg: 'failed to shard' });\n subscriber.next(mergedResponse);\n if (retry()) {\n return;\n }\n nextRequest();\n },\n });\n };\n\n const response = new Observable<DataQueryResponse>((subscriber) => {\n groupTargetsByQueryType(splittingTargets, datasource, request).then((groupedRequests) => {\n runNextRequest(subscriber, 0, groupedRequests);\n });\n return () => {\n shouldStop = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n }\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n };\n });\n\n return response;\n}\n\ninterface ShardedQueryGroup {\n targets: LokiQuery[];\n shards?: number[];\n groupSize?: number;\n cycle?: number;\n}\n\nasync function groupTargetsByQueryType(\n targets: LokiQuery[],\n datasource: LokiDatasource,\n request: DataQueryRequest<LokiQuery>\n) {\n const [shardedQueries, otherQueries] = partition(targets, (query) => requestSupportsSharding([query]));\n const groups: ShardedQueryGroup[] = [];\n\n if (otherQueries.length) {\n groups.push({\n targets: otherQueries,\n });\n }\n\n const selectorPartition = groupBy(shardedQueries, (query) => getSelectorForShardValues(query.expr));\n for (const selector in selectorPartition) {\n try {\n const values = await datasource.languageProvider.fetchLabelValues('__stream_shard__', {\n timeRange: request.range,\n streamSelector: selector,\n });\n const shards = values.map((value) => parseInt(value, 10));\n if (shards) {\n shards.sort((a, b) => b - a);\n debug(`Querying ${selector} with shards ${shards.join(', ')}`);\n }\n groups.push({\n targets: selectorPartition[selector],\n shards: shards.length ? shards : undefined,\n groupSize: shards.length ? getInitialGroupSize(shards) : undefined,\n cycle: 0,\n });\n } catch (error) {\n console.error(error, { msg: 'failed to fetch label values for __stream_shard__' });\n groups.push({\n targets: selectorPartition[selector],\n });\n }\n }\n\n return groups;\n}\n\nfunction groupHasPendingRequests(group: ShardedQueryGroup) {\n if (group.cycle === undefined || !group.groupSize || !group.shards) {\n return false;\n }\n const { cycle, groupSize, shards } = group;\n const nextCycle = Math.min(cycle + groupSize, shards.length);\n group.cycle = nextCycle;\n return cycle < shards.length && nextCycle <= shards.length;\n}\n\nfunction updateGroupSizeFromResponse(response: DataQueryResponse, group: ShardedQueryGroup) {\n const { groupSize: currentSize } = group;\n if (!currentSize) {\n return 1;\n }\n if (!response.data.length) {\n // Empty response, increase group size\n return currentSize + 1;\n }\n\n const metaExecutionTime: QueryResultMetaStat | undefined = response.data[0].meta?.stats?.find(\n (stat: QueryResultMetaStat) => stat.displayName === 'Summary: exec time'\n );\n\n if (metaExecutionTime) {\n const executionTime = Math.round(metaExecutionTime.value);\n debug(`${metaExecutionTime.value}`);\n // Positive scenarios\n if (executionTime <= 1) {\n return Math.floor(currentSize * 1.5);\n } else if (executionTime < 6) {\n return Math.ceil(currentSize * 1.1);\n }\n\n // Negative scenarios\n if (currentSize === 1) {\n return currentSize;\n } else if (executionTime < 20) {\n return Math.ceil(currentSize * 0.9);\n } else {\n return Math.floor(currentSize / 2);\n }\n }\n\n return currentSize;\n}\n\n/**\n * Prevents the group size for ever being more than maxFactor% of the pending shards.\n */\nfunction constrainGroupSize(cycle: number, groupSize: number, shards: number) {\n const maxFactor = 0.7;\n return Math.min(groupSize, Math.max(Math.floor((shards - cycle) * maxFactor), 1));\n}\n\nfunction groupShardRequests(shards: number[], start: number, groupSize: number) {\n if (start === shards.length) {\n return [-1];\n }\n return shards.slice(start, start + groupSize);\n}\n\nfunction getInitialGroupSize(shards: number[]) {\n return Math.floor(Math.sqrt(shards.length));\n}\n\n// Enable to output debugging logs\nconst DEBUG_ENABLED = Boolean(localStorage.getItem(`loki.sharding_debug_enabled`));\nfunction debug(message: string) {\n if (!DEBUG_ENABLED) {\n return;\n }\n console.log(message);\n}\n","import { map, Observable, defer, mergeMap } from 'rxjs';\n\nimport {\n DataFrameJSON,\n DataQueryRequest,\n DataQueryResponse,\n LiveChannelEvent,\n LiveChannelScope,\n LoadingState,\n StreamingDataFrame,\n} from '@grafana/data';\nimport { getGrafanaLiveSrv, config } from '@grafana/runtime';\n\nimport { LokiDatasource } from './datasource';\nimport { LokiQuery } from './types';\n\n/**\n * Calculate a unique key for the query. The key is used to pick a channel and should\n * be unique for each distinct query execution plan. This key is not secure and is only picked to avoid\n * possible collisions\n */\nexport async function getLiveStreamKey(query: LokiQuery): Promise<string> {\n const str = JSON.stringify({ expr: query.expr });\n\n const msgUint8 = new TextEncoder().encode(str); // encode as (utf-8) Uint8Array\n const hashBuffer = await crypto.subtle.digest('SHA-1', msgUint8); // hash the message\n const hashArray = Array.from(new Uint8Array(hashBuffer.slice(0, 8))); // first 8 bytes\n return `${query.datasource?.uid}/${hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')}/${config.bootData.user.orgId}`;\n}\n\n// This will get both v1 and v2 result formats\nexport function doLokiChannelStream(\n query: LokiQuery,\n ds: LokiDatasource,\n options: DataQueryRequest<LokiQuery>\n): Observable<DataQueryResponse> {\n // maximum time to keep values\n const range = options.range;\n const maxDelta = range.to.valueOf() - range.from.valueOf() + 1000;\n let maxLength = options.maxDataPoints ?? 1000;\n if (maxLength > 100) {\n // for small buffers, keep them small\n maxLength *= 2;\n }\n\n let frame: StreamingDataFrame | undefined = undefined;\n const updateFrame = (msg: LiveChannelEvent<unknown>) => {\n if ('message' in msg && msg.message) {\n const p: DataFrameJSON = msg.message;\n if (!frame) {\n frame = StreamingDataFrame.fromDataFrameJSON(p, {\n maxLength,\n maxDelta,\n displayNameFormat: query.legendFormat,\n });\n } else {\n frame.push(p);\n }\n }\n return frame;\n };\n\n return defer(() => getLiveStreamKey(query)).pipe(\n mergeMap((key) => {\n return getGrafanaLiveSrv()\n .getStream({\n scope: LiveChannelScope.DataSource,\n namespace: ds.uid,\n path: `tail/${key}`,\n data: {\n ...query,\n timeRange: {\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n },\n },\n })\n .pipe(\n map((evt) => {\n const frame = updateFrame(evt);\n return {\n data: frame ? [frame] : [],\n state: LoadingState.Streaming,\n };\n })\n );\n })\n );\n}\n\nexport const convertToWebSocketUrl = (url: string) => {\n const protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n let backend = `${protocol}${window.location.host}${config.appSubUrl}`;\n if (backend.endsWith('/')) {\n backend = backend.slice(0, -1);\n }\n return `${backend}${url}`;\n};\n","import { cloneDeep, map as lodashMap } from 'lodash';\nimport { lastValueFrom, merge, Observable, of, throwError } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\n\nimport {\n AbstractQuery,\n AnnotationEvent,\n AnnotationQueryRequest,\n CoreApp,\n DataFrame,\n DataFrameView,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceWithLogsContextSupport,\n DataSourceWithSupplementaryQueriesSupport,\n SupplementaryQueryType,\n DataSourceWithQueryExportSupport,\n DataSourceWithQueryImportSupport,\n Labels,\n LoadingState,\n LogRowModel,\n QueryFixAction,\n QueryHint,\n rangeUtil,\n ScopedVars,\n SupplementaryQueryOptions,\n TimeRange,\n LogRowContextOptions,\n DataSourceWithToggleableQueryFiltersSupport,\n ToggleFilterAction,\n QueryFilterOptions,\n renderLegendFormat,\n LegacyMetricFindQueryOptions,\n AdHocVariableFilter,\n urlUtil,\n MetricFindValue,\n DataSourceGetTagValuesOptions,\n DataSourceGetTagKeysOptions,\n DataSourceWithQueryModificationSupport,\n LogsVolumeOption,\n LogsSampleOptions,\n QueryVariableModel,\n CustomVariableModel,\n} from '@grafana/data';\nimport { Duration } from '@grafana/lezer-logql';\nimport { BackendSrvRequest, config, DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\n\nimport LanguageProvider from './LanguageProvider';\nimport { LiveStreams, LokiLiveTarget } from './LiveStreams';\nimport { LogContextProvider } from './LogContextProvider';\nimport { LokiVariableSupport } from './LokiVariableSupport';\nimport { transformBackendResult } from './backendResultTransformer';\nimport { LokiAnnotationsQueryEditor } from './components/AnnotationsQueryEditor';\nimport { placeHolderScopedVars } from './components/monaco-query-field/monaco-completion-provider/validation';\nimport { escapeLabelValueInSelector, isRegexSelector, getLabelTypeFromFrame } from './languageUtils';\nimport { labelNamesRegex, labelValuesRegex } from './migrations/variableQueryMigrations';\nimport {\n addLabelFormatToQuery,\n addLabelToQuery,\n addNoPipelineErrorToQuery,\n addParserToQuery,\n removeCommentsFromQuery,\n addFilterAsLabelFilter,\n getParserPositions,\n toLabelFilter,\n addLineFilter,\n findLastPosition,\n getLabelFilterPositions,\n queryHasFilter,\n removeLabelFromQuery,\n} from './modifyQuery';\nimport { getQueryHints } from './queryHints';\nimport { runSplitQuery } from './querySplitting';\nimport {\n getLogQueryFromMetricsQuery,\n getLokiQueryFromDataQuery,\n getNodesFromQuery,\n getNormalizedLokiQuery,\n getStreamSelectorsFromQuery,\n isLogsQuery,\n isQueryWithError,\n requestSupportsSharding,\n requestSupportsSplitting,\n} from './queryUtils';\nimport { replaceVariables, returnVariables } from './querybuilder/parsingUtils';\nimport { runShardSplitQuery } from './shardQuerySplitting';\nimport { convertToWebSocketUrl, doLokiChannelStream } from './streaming';\nimport { trackQuery } from './tracking';\nimport {\n LokiOptions,\n LokiQuery,\n LokiQueryType,\n LokiVariableQuery,\n LokiVariableQueryType,\n QueryStats,\n SupportingQueryType,\n} from './types';\n\nexport type RangeQueryOptions = DataQueryRequest<LokiQuery> | AnnotationQueryRequest<LokiQuery>;\nexport const DEFAULT_MAX_LINES = 1000;\nexport const DEFAULT_MAX_LINES_SAMPLE = 10;\nexport const LOKI_ENDPOINT = '/loki/api/v1';\nexport const REF_ID_DATA_SAMPLES = 'loki-data-samples';\nexport const REF_ID_STARTER_ANNOTATION = 'annotation-';\nexport const REF_ID_STARTER_LOG_ROW_CONTEXT = 'log-row-context-query-';\nexport const REF_ID_STARTER_LOG_VOLUME = 'log-volume-';\nexport const REF_ID_STARTER_LOG_SAMPLE = 'log-sample-';\nexport const REF_ID_STARTER_STATS = 'log-stats-';\n\nconst NS_IN_MS = 1000000;\n\nexport function makeRequest(\n query: LokiQuery,\n range: TimeRange,\n app: CoreApp,\n requestId: string,\n hideFromInspector?: boolean\n): DataQueryRequest<LokiQuery> {\n const intervalInfo = rangeUtil.calculateInterval(range, 1);\n return {\n targets: [query],\n requestId,\n interval: intervalInfo.interval,\n intervalMs: intervalInfo.intervalMs,\n range: range,\n scopedVars: {},\n timezone: 'UTC',\n app,\n startTime: Date.now(),\n hideFromInspector,\n };\n}\n\nexport class LokiDatasource\n extends DataSourceWithBackend<LokiQuery, LokiOptions>\n implements\n DataSourceWithLogsContextSupport,\n DataSourceWithSupplementaryQueriesSupport<LokiQuery>,\n DataSourceWithQueryImportSupport<LokiQuery>,\n DataSourceWithQueryExportSupport<LokiQuery>,\n DataSourceWithToggleableQueryFiltersSupport<LokiQuery>,\n DataSourceWithQueryModificationSupport<LokiQuery>\n{\n private streams = new LiveStreams();\n private logContextProvider: LogContextProvider;\n languageProvider: LanguageProvider;\n maxLines: number;\n\n constructor(\n private instanceSettings: DataSourceInstanceSettings<LokiOptions>,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n\n this.languageProvider = new LanguageProvider(this);\n const settingsData = instanceSettings.jsonData || {};\n this.maxLines = parseInt(settingsData.maxLines ?? '0', 10) || DEFAULT_MAX_LINES;\n this.annotations = {\n QueryEditor: LokiAnnotationsQueryEditor,\n };\n this.variables = new LokiVariableSupport(this);\n this.logContextProvider = new LogContextProvider(this);\n this.supportsAdjustableWindow = true;\n }\n\n // Flag marking datasource as supporting adjusting the time range window in the logs context window: https://github.com/grafana/grafana/pull/109901\n public supportsAdjustableWindow;\n\n /**\n * Implemented for DataSourceWithSupplementaryQueriesSupport.\n * It generates a DataQueryRequest for a specific supplementary query type.\n * @returns A DataQueryRequest for the supplementary queries or undefined if not supported.\n */\n getSupplementaryRequest(\n type: SupplementaryQueryType,\n request: DataQueryRequest<LokiQuery>,\n options?: SupplementaryQueryOptions\n ): DataQueryRequest<LokiQuery> | undefined {\n switch (type) {\n case SupplementaryQueryType.LogsVolume:\n const logsVolumeOption: LogsVolumeOption =\n options?.type === SupplementaryQueryType.LogsVolume ? options : { type };\n return this.getLogsVolumeDataProvider(request, logsVolumeOption);\n case SupplementaryQueryType.LogsSample:\n const logsSampleOption: LogsSampleOptions =\n options?.type === SupplementaryQueryType.LogsSample ? options : { type };\n return this.getLogsSampleDataProvider(request, logsSampleOption);\n default:\n return undefined;\n }\n }\n\n /**\n * Implemented for DataSourceWithSupplementaryQueriesSupport.\n * It returns the supplementary types that the data source supports.\n * @returns An array of supported supplementary query types.\n */\n getSupportedSupplementaryQueryTypes(): SupplementaryQueryType[] {\n return [SupplementaryQueryType.LogsVolume, SupplementaryQueryType.LogsSample];\n }\n\n /**\n * Implemented for DataSourceWithSupplementaryQueriesSupport.\n * It retrieves supplementary queries based on the provided options and Loki query.\n * @returns A supplemented Loki query or undefined if unsupported.\n */\n getSupplementaryQuery(options: SupplementaryQueryOptions, query: LokiQuery): LokiQuery | undefined {\n if (query.hide) {\n return undefined;\n }\n\n const normalizedQuery = getNormalizedLokiQuery(query);\n let expr = removeCommentsFromQuery(normalizedQuery.expr);\n let isQuerySuitable = false;\n\n switch (options.type) {\n case SupplementaryQueryType.LogsVolume:\n // it has to be a logs-producing range-query\n isQuerySuitable = !!(expr && isLogsQuery(expr) && normalizedQuery.queryType === LokiQueryType.Range);\n if (!isQuerySuitable) {\n return undefined;\n }\n\n const dropErrorExpression = `${expr} | drop __error__`;\n const field = options.field || 'level, detected_level';\n if (isQueryWithError(this.interpolateString(dropErrorExpression, placeHolderScopedVars)) === false) {\n expr = dropErrorExpression;\n }\n\n return {\n ...normalizedQuery,\n refId: `${REF_ID_STARTER_LOG_VOLUME}${normalizedQuery.refId}`,\n queryType: LokiQueryType.Range,\n supportingQueryType: SupportingQueryType.LogsVolume,\n expr: `sum by (${field}) (count_over_time(${expr}[$__auto]))`,\n };\n\n case SupplementaryQueryType.LogsSample:\n // it has to be a metric query\n isQuerySuitable = !!(expr && !isLogsQuery(expr));\n if (!isQuerySuitable) {\n return undefined;\n }\n return {\n ...normalizedQuery,\n queryType: LokiQueryType.Range,\n refId: `${REF_ID_STARTER_LOG_SAMPLE}${normalizedQuery.refId}`,\n expr: getLogQueryFromMetricsQuery(expr),\n maxLines: Number.isNaN(Number(options.limit)) ? this.maxLines : Number(options.limit),\n supportingQueryType: SupportingQueryType.LogsSample,\n };\n\n default:\n return undefined;\n }\n }\n\n /**\n * Private method used in the `getDataProvider` for DataSourceWithSupplementaryQueriesSupport, specifically for Logs volume queries.\n * @returns A DataQueryRequest or undefined if no suitable queries are found.\n */\n private getLogsVolumeDataProvider(\n request: DataQueryRequest<LokiQuery>,\n options: LogsVolumeOption\n ): DataQueryRequest<LokiQuery> | undefined {\n const logsVolumeRequest = cloneDeep(request);\n const targets = logsVolumeRequest.targets\n .map((query) => this.getSupplementaryQuery(options, query))\n .filter((query): query is LokiQuery => !!query);\n\n if (!targets.length) {\n return undefined;\n }\n\n return { ...logsVolumeRequest, targets };\n }\n\n /**\n * Private method used in the `getDataProvider` for DataSourceWithSupplementaryQueriesSupport, specifically for Logs sample queries.\n * @returns A DataQueryRequest or undefined if no suitable queries are found.\n */\n private getLogsSampleDataProvider(\n request: DataQueryRequest<LokiQuery>,\n options?: LogsSampleOptions\n ): DataQueryRequest<LokiQuery> | undefined {\n const logsSampleRequest = cloneDeep(request);\n const targets = logsSampleRequest.targets\n .map((query) => this.getSupplementaryQuery({ type: SupplementaryQueryType.LogsSample, limit: 100 }, query))\n .filter((query): query is LokiQuery => !!query);\n\n if (!targets.length) {\n return undefined;\n }\n return { ...logsSampleRequest, targets };\n }\n\n /**\n * Required by DataSourceApi. It executes queries based on the provided DataQueryRequest.\n * @returns An Observable of DataQueryResponse containing the query results.\n */\n query(request: DataQueryRequest<LokiQuery>): Observable<DataQueryResponse> {\n const queries = request.targets\n .map(getNormalizedLokiQuery) // used to \"fix\" the deprecated `.queryType` prop\n .map((q) => ({\n ...q,\n maxLines: q.maxLines ?? this.maxLines,\n scopes:\n config.featureToggles.scopeFilters && config.featureToggles.logQLScope\n ? request.scopes?.flatMap((scope) => scope.spec.filters)\n : undefined,\n }));\n\n const fixedRequest: DataQueryRequest<LokiQuery> = {\n ...request,\n targets: queries,\n };\n\n const streamQueries = fixedRequest.targets.filter((q) => q.queryType === LokiQueryType.Stream);\n if (\n config.featureToggles.lokiExperimentalStreaming &&\n streamQueries.length > 0 &&\n fixedRequest.rangeRaw?.to === 'now'\n ) {\n // this is still an in-development feature,\n // we do not support mixing stream-queries with normal-queries for now.\n const streamRequest = {\n ...fixedRequest,\n targets: streamQueries,\n };\n return merge(\n ...streamQueries.map((q) =>\n doLokiChannelStream(\n this.applyTemplateVariables(q, request.scopedVars, request.filters),\n this, // the datasource\n streamRequest\n )\n )\n );\n }\n\n if (fixedRequest.liveStreaming) {\n return this.runLiveQueryThroughBackend(fixedRequest);\n }\n\n if (config.featureToggles.lokiShardSplitting && requestSupportsSharding(fixedRequest.targets)) {\n return runShardSplitQuery(this, fixedRequest);\n } else if (config.featureToggles.lokiQuerySplitting && requestSupportsSplitting(fixedRequest.targets)) {\n return runSplitQuery(this, fixedRequest);\n }\n\n const startTime = new Date();\n return this.runQuery(fixedRequest).pipe(tap((response) => trackQuery(response, fixedRequest, startTime)));\n }\n\n /**\n * Executes requests through the backend using the `super.query()`, as part of the `query` method in DataSourceWithBackend.\n * @returns An Observable of transformed DataQueryResponse results from the backend.\n */\n runQuery(fixedRequest: DataQueryRequest<LokiQuery>) {\n return super\n .query(fixedRequest)\n .pipe(\n map((response) =>\n transformBackendResult(response, fixedRequest.targets, this.instanceSettings.jsonData.derivedFields ?? [])\n )\n );\n }\n\n /**\n * Used within the `query` to execute live queries.\n * It is intended for logs-queries, not metric queries.\n * @returns An Observable of DataQueryResponse with live query results or an empty response if no suitable queries are found.\n * @todo: The name says \"backend\" but it's actually running the query through the frontend. We should fix this.\n */\n private runLiveQueryThroughBackend(request: DataQueryRequest<LokiQuery>): Observable<DataQueryResponse> {\n // and only for logs-queries, not metric queries\n const logsQueries = request.targets.filter((query) => query.expr !== '' && isLogsQuery(query.expr));\n if (logsQueries.length === 0) {\n return of({\n data: [],\n state: LoadingState.Done,\n });\n }\n\n const subQueries = logsQueries.map((query) => {\n const interpolatedQuery = this.applyTemplateVariables(query, request.scopedVars, request.filters);\n const maxDataPoints = interpolatedQuery.maxLines || this.maxLines;\n // FIXME: currently we are running it through the frontend still.\n return this.runLiveQuery(interpolatedQuery, maxDataPoints);\n });\n\n return merge(...subQueries);\n }\n\n /**\n * Used within the `runLiveQuery` to create a live target for a Loki query.\n * @returns A LokiLiveTarget object containing the necessary information for a live query.\n */\n private createLiveTarget(target: LokiQuery, maxDataPoints: number): LokiLiveTarget {\n const query = target.expr;\n const baseUrl = this.instanceSettings.url;\n const params = urlUtil.serializeParams({ query });\n\n return {\n query,\n url: convertToWebSocketUrl(`${baseUrl}/loki/api/v1/tail?${params}`),\n refId: target.refId,\n size: maxDataPoints,\n };\n }\n\n /**\n * Runs live queries, which involves creating a WebSocket connection to listen for new logs.\n * It returns a slightly different DataQueryResponse compared to runQueries. It provides a single DataFrame\n * even if there are multiple Loki streams. Common labels are set on dataFrame.labels, and unique labels per row are\n * available in dataFrame.fields.labels.\n * @returns An Observable of DataQueryResponse with streaming data or an error message if live tailing encounters an issue.\n */\n private runLiveQuery = (target: LokiQuery, maxDataPoints: number): Observable<DataQueryResponse> => {\n const liveTarget = this.createLiveTarget(target, maxDataPoints);\n\n return this.streams.getStream(liveTarget).pipe(\n map((data) => ({\n data: data || [],\n key: `loki-${liveTarget.refId}`,\n state: LoadingState.Streaming,\n })),\n catchError((err) => {\n return throwError(() => `Live tailing was stopped due to following error: ${err.reason}`);\n })\n );\n };\n\n /**\n * Implemented as a part of DataSourceApi. Interpolates variables and adds ad hoc filters to a list of Loki queries.\n * @returns An array of expanded Loki queries with interpolated variables and ad hoc filters.\n */\n interpolateVariablesInQueries(\n queries: LokiQuery[],\n scopedVars: ScopedVars,\n adhocFilters?: AdHocVariableFilter[]\n ): LokiQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length) {\n expandedQueries = queries.map((query) => ({\n ...query,\n datasource: this.getRef(),\n expr: this.addAdHocFilters(\n this.templateSrv.replace(query.expr, scopedVars, this.interpolateQueryExpr),\n adhocFilters\n ),\n }));\n }\n\n return expandedQueries;\n }\n\n /**\n * Implemented as part of DataSourceApi. Converts a Loki query to a simple text string.\n * Used, for example, in Query history.\n * @returns A text representation of the query.\n */\n getQueryDisplayText(query: LokiQuery) {\n return query.expr;\n }\n\n /**\n * Given a time range, returns it as Loki parameters.\n * @returns An object containing the start and end times in nanoseconds since the Unix epoch.\n */\n getTimeRangeParams(timeRange: TimeRange) {\n return { start: timeRange.from.valueOf() * NS_IN_MS, end: timeRange.to.valueOf() * NS_IN_MS };\n }\n\n /**\n * Implemented as part of DataSourceWithQueryImportSupport.\n * Imports queries from AbstractQuery objects when switching between different data source types.\n * @returns A Promise that resolves to an array of Loki queries.\n */\n async importFromAbstractQueries(abstractQueries: AbstractQuery[]): Promise<LokiQuery[]> {\n await this.languageProvider.start();\n const existingKeys = this.languageProvider.labelKeys;\n\n if (existingKeys && existingKeys.length) {\n abstractQueries = abstractQueries.map((abstractQuery) => {\n abstractQuery.labelMatchers = abstractQuery.labelMatchers.filter((labelMatcher) => {\n return existingKeys.includes(labelMatcher.name);\n });\n return abstractQuery;\n });\n }\n\n return abstractQueries.map((abstractQuery) => this.languageProvider.importFromAbstractQuery(abstractQuery));\n }\n\n /**\n * Implemented as part of DataSourceWithQueryImportSupport.\n * Exports Loki queries to AbstractQuery objects when switching between different data source types.\n * @returns A Promise that resolves to an array of AbstractQuery objects.\n */\n async exportToAbstractQueries(queries: LokiQuery[]): Promise<AbstractQuery[]> {\n return queries.map((query) => this.languageProvider.exportToAbstractQuery(query));\n }\n\n /**\n * A method that wraps `getResource` from DataSourceWithBackend to perform metadata requests, with an additional check for valid URL values.\n * @returns A Promise that resolves to the data retrieved from the metadata request, or an empty array if no data is available.\n */\n async metadataRequest(url: string, params?: Record<string, string | number>, options?: Partial<BackendSrvRequest>) {\n // url must not start with a `/`, otherwise the AJAX-request\n // going from the browser will contain `//`, which can cause problems.\n if (url.startsWith('/')) {\n throw new Error(`invalid metadata request url: ${url}`);\n }\n\n const res = await this.getResource(url, params, options);\n\n // detected_field/${label}/values has different structure then other metadata responses\n if (!res.data && res.values) {\n return res.values ?? [];\n }\n\n // detected_fields has a different return structure then other metadata responses\n if (!res.data && res.fields) {\n return res.fields ?? [];\n }\n return res.data ?? [];\n }\n\n /**\n * Used in `getQueryStats`. It wraps `getResource` from DataSourceWithBackend to perform a stats request\n * Specifically designed for the stats endpoint, which does not return data but includes stats directly in the response object.\n * @returns A Promise that resolves to a QueryStats object containing the statistics retrieved from the stats request.\n */\n async statsMetadataRequest(\n url: string,\n params?: Record<string, string | number>,\n options?: Partial<BackendSrvRequest>\n ): Promise<QueryStats> {\n if (url.startsWith('/')) {\n throw new Error(`invalid metadata request url: ${url}`);\n }\n\n return await this.getResource(url, params, options);\n }\n\n /**\n * Used in `getStats`. Retrieves statistics for a Loki query and processes them into a QueryStats object.\n * @returns A Promise that resolves to a QueryStats object containing the query statistics or undefined if the query is invalid.\n */\n async getQueryStats(query: LokiQuery, timeRange: TimeRange): Promise<QueryStats | undefined> {\n // if query is invalid, clear stats, and don't request\n if (isQueryWithError(this.interpolateString(query.expr, placeHolderScopedVars))) {\n return undefined;\n }\n\n const labelMatchers = getStreamSelectorsFromQuery(query.expr);\n let statsForAll: QueryStats = { streams: 0, chunks: 0, bytes: 0, entries: 0 };\n\n for (const idx in labelMatchers) {\n const { start, end } = this.getStatsTimeRange(query, Number(idx), timeRange);\n\n if (start === undefined || end === undefined) {\n return { streams: 0, chunks: 0, bytes: 0, entries: 0, message: 'Query size estimate not available.' };\n }\n\n try {\n const data = await this.statsMetadataRequest(\n 'index/stats',\n {\n query: labelMatchers[idx],\n start: start,\n end: end,\n },\n { showErrorAlert: false, requestId: `${REF_ID_STARTER_STATS}${query.refId}` }\n );\n\n statsForAll = {\n streams: statsForAll.streams + data.streams,\n chunks: statsForAll.chunks + data.chunks,\n bytes: statsForAll.bytes + data.bytes,\n entries: statsForAll.entries + data.entries,\n };\n } catch (e) {\n break;\n }\n }\n\n return statsForAll;\n }\n\n /**\n * Used within the `getQueryStats`. Retrieves the time range for a Loki stats query, adjusting it to cover the requested period.\n * In metric queries, this means extending it over the range interval.\n * @returns An object containing the start and end time in nanoseconds (NS_IN_MS) or undefined if the time range cannot be estimated.\n */\n\n getStatsTimeRange(\n query: LokiQuery,\n idx: number,\n timeRange: TimeRange\n ): { start: number | undefined; end: number | undefined } {\n let start: number, end: number;\n const NS_IN_MS = 1000000;\n const durationNodes = getNodesFromQuery(query.expr, [Duration]);\n const durations = durationNodes.map((d) => query.expr.substring(d.from, d.to));\n\n if (isLogsQuery(query.expr)) {\n // logs query with instant type can not be estimated\n if (query.queryType === LokiQueryType.Instant) {\n return { start: undefined, end: undefined };\n }\n // logs query with range type\n return this.getTimeRangeParams(timeRange);\n }\n\n if (query.queryType === LokiQueryType.Instant) {\n // metric query with instant type\n\n if (!!durations[idx]) {\n // if query has a duration e.g. [1m]\n end = this.getTimeRangeParams(timeRange).end;\n start = end - rangeUtil.intervalToMs(durations[idx]) * NS_IN_MS;\n return { start, end };\n } else {\n // if query has no duration e.g. [$__interval]\n\n if (/(\\$__auto|\\$__range)/.test(query.expr)) {\n // if $__auto or $__range is used, we can estimate the time range using the selected range\n return this.getTimeRangeParams(timeRange);\n }\n\n // otherwise we cant estimate the time range\n return { start: undefined, end: undefined };\n }\n }\n\n // metric query with range type\n return this.getTimeRangeParams(timeRange);\n }\n\n /**\n * Retrieves statistics for a Loki query and returns the QueryStats object.\n * @returns A Promise that resolves to a QueryStats object or null if the query is invalid or has no statistics.\n */\n async getStats(query: LokiQuery, timeRange: TimeRange): Promise<QueryStats | null> {\n if (!query.expr) {\n return null;\n }\n\n const response = await this.getQueryStats(query, timeRange);\n\n if (!response) {\n return null;\n }\n\n return Object.values(response).every((v) => v === 0) ? null : response;\n }\n\n /**\n * Implemented as part of DataSourceAPI and used for template variable queries.\n * @returns A Promise that resolves to an array of results from the metric find query.\n */\n async metricFindQuery(\n query: LokiVariableQuery | string,\n options?: LegacyMetricFindQueryOptions\n ): Promise<MetricFindValue[]> {\n if (!query) {\n return Promise.resolve([]);\n }\n\n let interpolatedVariableQuery: LokiVariableQuery | undefined;\n\n if (typeof query === 'string') {\n interpolatedVariableQuery = this.parseStringToVariableQuery(this.interpolateString(query, options?.scopedVars));\n } else {\n interpolatedVariableQuery = {\n ...query,\n label: this.interpolateString(query.label || '', options?.scopedVars),\n stream: this.interpolateString(query.stream || '', options?.scopedVars),\n };\n }\n\n if (interpolatedVariableQuery) {\n return await this.processMetricFindQuery(interpolatedVariableQuery, options?.range);\n }\n\n return Promise.resolve([]);\n }\n\n /**\n * Used within the `metricFindQuery`. Retrieves the correct variable results based on the provided LokiVariableQuery.\n * @returns A Promise that resolves to an array of variable results based on the query type and parameters.\n */\n\n private async processMetricFindQuery(query: LokiVariableQuery, timeRange?: TimeRange): Promise<MetricFindValue[]> {\n if (query.type === LokiVariableQueryType.LabelNames) {\n const result = await this.languageProvider.fetchLabels({ timeRange });\n return result.map((value: string) => ({ text: value }));\n }\n\n if (!query.label) {\n return [];\n }\n\n const result = await this.languageProvider.fetchLabelValues(query.label, {\n streamSelector: query.stream,\n timeRange,\n });\n return result.map((value: string) => ({ text: value }));\n }\n\n /**\n * Used in `metricFindQuery` to process legacy query strings (label_name() and label_values()) to variable query objects.\n * @returns LokiVariableQuery object based on the provided query string, or undefined if string can't be parsed.\n */\n private parseStringToVariableQuery(query: string): LokiVariableQuery | undefined {\n const refId = 'LokiVariableQueryEditor-VariableQuery';\n const labelNames = query.match(labelNamesRegex);\n if (labelNames) {\n return {\n type: LokiVariableQueryType.LabelNames,\n refId,\n };\n }\n\n const labelValues = query.match(labelValuesRegex);\n if (labelValues) {\n return {\n type: LokiVariableQueryType.LabelValues,\n label: labelValues[2],\n stream: labelValues[1],\n refId,\n };\n }\n return undefined;\n }\n\n /**\n * Used to fetch data samples, typically for autocompletion and query building to recommend parsers, labels, and values based on sampled data.\n * Currently, it works for logs data only.\n * @returns A Promise that resolves to an array of DataFrames containing data samples.\n */\n async getDataSamples(\n query: LokiQuery,\n timeRange: TimeRange,\n options?: { convertMetricQueryToLogQuery?: boolean }\n ): Promise<DataFrame[]> {\n let queryExpr = query.expr;\n if (isQueryWithError(this.interpolateString(queryExpr, placeHolderScopedVars))) {\n return [];\n }\n\n if (!isLogsQuery(queryExpr)) {\n // If it is not a logs query, we need to check if we need to convert it to a logs query\n if (options?.convertMetricQueryToLogQuery) {\n queryExpr = getLogQueryFromMetricsQuery(queryExpr);\n } else {\n // Otherwise, we return an empty array, as data samples are only supported for logs queries\n return [];\n }\n }\n\n const lokiLogsQuery: LokiQuery = {\n expr: queryExpr,\n queryType: LokiQueryType.Range,\n refId: REF_ID_DATA_SAMPLES,\n maxLines: query.maxLines || DEFAULT_MAX_LINES_SAMPLE,\n supportingQueryType: SupportingQueryType.DataSample,\n };\n\n const request = makeRequest(lokiLogsQuery, timeRange, CoreApp.Unknown, REF_ID_DATA_SAMPLES, true);\n return await lastValueFrom(this.query(request).pipe(switchMap((res) => of(res.data))));\n }\n\n /**\n * Implemented as part of the DataSourceAPI. Retrieves tag keys that can be used for ad-hoc filtering.\n * @returns A Promise that resolves to an array of label names represented as MetricFindValue objects.\n */\n async getTagKeys(options?: DataSourceGetTagKeysOptions<LokiQuery>): Promise<MetricFindValue[]> {\n let streamSelector = '{}';\n for (const filter of options?.filters ?? []) {\n streamSelector = addLabelToQuery(streamSelector, filter.key, filter.operator, filter.value);\n }\n const result = await this.languageProvider.fetchLabels({ timeRange: options?.timeRange, streamSelector });\n return result.map((value: string) => ({ text: value }));\n }\n\n /**\n * Implemented as part of the DataSourceAPI. Retrieves tag values that can be used for ad-hoc filtering.\n * @returns A Promise that resolves to an array of label values represented as MetricFindValue objects\n */\n async getTagValues(options: DataSourceGetTagValuesOptions<LokiQuery>): Promise<MetricFindValue[]> {\n let streamSelector = '{}';\n for (const filter of options?.filters ?? []) {\n streamSelector = addLabelToQuery(streamSelector, filter.key, filter.operator, filter.value);\n }\n const result = await this.languageProvider.fetchLabelValues(options.key, {\n timeRange: options.timeRange,\n streamSelector,\n });\n return result.map((value: string) => ({ text: value }));\n }\n\n /**\n * Used for interpolation logic in `interpolateVariablesInQueries` and `applyTemplateVariables`.\n * Handles escaping of special characters based on variable type and value.\n * @returns The interpolated value with appropriate character escaping.\n */\n interpolateQueryExpr(value: any, variable: QueryVariableModel | CustomVariableModel) {\n // if no multi or include all do not regexEscape\n if (!variable.multi && !variable.includeAll) {\n return value;\n }\n\n if (typeof value === 'string') {\n return lokiSpecialRegexEscape(value);\n }\n\n const escapedValues = lodashMap(value, lokiSpecialRegexEscape);\n return escapedValues.join('|');\n }\n\n /**\n * Implemented for `DataSourceWithToggleableQueryFiltersSupport`. Toggles a filter on or off based on the provided filter action.\n * It is used for example in Explore to toggle fields on and off trough log details.\n * @returns A new LokiQuery with the filter toggled as specified.\n */\n toggleQueryFilter(query: LokiQuery, filter: ToggleFilterAction): LokiQuery {\n let expression = query.expr ?? '';\n const labelType = getLabelTypeFromFrame(filter.options.key, filter.frame, 0);\n switch (filter.type) {\n case 'FILTER_FOR': {\n if (filter.options?.key && filter.options?.value) {\n const value = escapeLabelValueInSelector(filter.options.value);\n\n // This gives the user the ability to toggle a filter on and off.\n expression = queryHasFilter(expression, filter.options.key, '=', value)\n ? removeLabelFromQuery(expression, filter.options.key, '=', value)\n : addLabelToQuery(expression, filter.options.key, '=', value, labelType);\n }\n break;\n }\n case 'FILTER_OUT': {\n if (filter.options?.key && filter.options?.value) {\n const value = escapeLabelValueInSelector(filter.options.value);\n\n /**\n * If there is a filter with the same key and value, remove it.\n * This prevents the user from seeing no changes in the query when they apply\n * this filter.\n */\n if (queryHasFilter(expression, filter.options.key, '=', value)) {\n expression = removeLabelFromQuery(expression, filter.options.key, '=', value);\n }\n\n expression = addLabelToQuery(expression, filter.options.key, '!=', value, labelType);\n }\n break;\n }\n default:\n break;\n }\n return { ...query, expr: expression };\n }\n\n /**\n * Implemented for `DataSourceWithToggleableQueryFiltersSupport`. Checks if a query expression contains a filter based on the provided filter options.\n * @returns A boolean value indicating whether the filter exists in the query expression.\n */\n queryHasFilter(query: LokiQuery, filter: QueryFilterOptions): boolean {\n let expression = query.expr ?? '';\n return queryHasFilter(expression, filter.key, '=', filter.value);\n }\n\n /**\n * Implemented as part of `DataSourceWithQueryModificationSupport`. Used to modify a query based on the provided action.\n * It is used, for example, in the Query Builder to apply hints such as parsers, operations, etc.\n * @returns A new LokiQuery with the specified modification applied.\n */\n modifyQuery(query: LokiQuery, action: QueryFixAction): LokiQuery {\n let expression = query.expr ?? '';\n // NB: Usually the labelKeys should be fetched and cached in the datasource,\n // but there might be some edge cases where this wouldn't be the case.\n // However the changed would make this method `async`.\n switch (action.type) {\n case 'ADD_FILTER': {\n if (action.options?.key && action.options?.value) {\n const labelType = getLabelTypeFromFrame(action.options.key, action.frame, 0);\n const value = escapeLabelValueInSelector(action.options.value);\n expression = addLabelToQuery(expression, action.options.key, '=', value, labelType);\n }\n break;\n }\n case 'ADD_FILTER_OUT': {\n if (action.options?.key && action.options?.value) {\n const labelType = getLabelTypeFromFrame(action.options.key, action.frame, 0);\n const value = escapeLabelValueInSelector(action.options.value);\n expression = addLabelToQuery(expression, action.options.key, '!=', value, labelType);\n }\n break;\n }\n case 'ADD_LOGFMT_PARSER': {\n expression = addParserToQuery(expression, 'logfmt');\n break;\n }\n case 'ADD_JSON_PARSER': {\n expression = addParserToQuery(expression, 'json');\n break;\n }\n case 'ADD_UNPACK_PARSER': {\n expression = addParserToQuery(expression, 'unpack');\n break;\n }\n case 'ADD_NO_PIPELINE_ERROR': {\n expression = addNoPipelineErrorToQuery(expression);\n break;\n }\n case 'ADD_LEVEL_LABEL_FORMAT': {\n if (action.options?.originalLabel && action.options?.renameTo) {\n expression = addLabelFormatToQuery(expression, {\n renameTo: action.options.renameTo,\n originalLabel: action.options.originalLabel,\n });\n }\n break;\n }\n case 'ADD_LABEL_FILTER': {\n const parserPositions = getParserPositions(query.expr);\n const labelFilterPositions = getLabelFilterPositions(query.expr);\n const lastPosition = findLastPosition([...parserPositions, ...labelFilterPositions]);\n const filter = toLabelFilter('', '', '=');\n expression = addFilterAsLabelFilter(expression, [lastPosition], filter);\n break;\n }\n case 'ADD_STRING_FILTER':\n case 'ADD_LINE_FILTER': {\n expression = addLineFilter(expression, action.options?.value);\n break;\n }\n case 'ADD_STRING_FILTER_OUT':\n case 'ADD_LINE_FILTER_OUT': {\n expression = addLineFilter(expression, action.options?.value, '!=');\n break;\n }\n default:\n break;\n }\n return { ...query, expr: expression };\n }\n\n /**\n * Implemented as part of `DataSourceWithQueryModificationSupport`. Returns a list of operation\n * types that are supported by `modifyQuery()`.\n */\n getSupportedQueryModifications() {\n return [\n 'ADD_FILTER',\n 'ADD_FILTER_OUT',\n 'ADD_LOGFMT_PARSER',\n 'ADD_JSON_PARSER',\n 'ADD_UNPACK_PARSER',\n 'ADD_NO_PIPELINE_ERROR',\n 'ADD_LEVEL_LABEL_FORMAT',\n 'ADD_LABEL_FILTER',\n 'ADD_STRING_FILTER',\n 'ADD_STRING_FILTER_OUT',\n ];\n }\n\n /**\n * Part of `DataSourceWithLogsContextSupport`, used to retrieve log context for a log row.\n * @returns A promise that resolves to an object containing the log context data as DataFrames.\n */\n getLogRowContext = async (\n row: LogRowModel,\n options?: LogRowContextOptions,\n origQuery?: DataQuery\n ): Promise<{ data: DataFrame[] }> => {\n return await this.logContextProvider.getLogRowContext(row, options, getLokiQueryFromDataQuery(origQuery));\n };\n /**\n * Part of `DataSourceWithLogsContextSupport`, used to retrieve the log context query for the provided log row and original query.\n * @returns A promise that resolves to a DataQuery representing the log context query.\n */\n getLogRowContextQuery = async (\n row: LogRowModel,\n options?: LogRowContextOptions,\n origQuery?: DataQuery,\n cacheFilters?: boolean\n ): Promise<DataQuery> => {\n return await this.logContextProvider.getLogRowContextQuery(\n row,\n options,\n getLokiQueryFromDataQuery(origQuery),\n cacheFilters\n );\n };\n\n /**\n * Part of `DataSourceWithLogsContextSupport`, used to retrieve the log context UI for the provided log row and original query.\n * @returns A React component or element representing the log context UI for the log row.\n */\n getLogRowContextUi(\n row: LogRowModel,\n runContextQuery: () => void,\n origQuery: DataQuery,\n scopedVars?: ScopedVars\n ): React.ReactNode {\n return this.logContextProvider.getLogRowContextUi(\n row,\n runContextQuery,\n getLokiQueryFromDataQuery(origQuery),\n scopedVars\n );\n }\n\n /**\n * Implemented as part of the DataSourceAPI. It allows the datasource to serve as a source of annotations for a dashboard.\n * @returns A promise that resolves to an array of AnnotationEvent objects representing the annotations for the dashboard.\n * @todo This is deprecated and it is recommended to use the `AnnotationSupport` feature for annotations.\n */\n async annotationQuery(options: any): Promise<AnnotationEvent[]> {\n const { expr, maxLines, instant, tagKeys = '', titleFormat = '', textFormat = '' } = options.annotation;\n\n if (!expr) {\n return [];\n }\n\n const id = `${REF_ID_STARTER_ANNOTATION}${options.annotation.name}`;\n\n const query: LokiQuery = {\n refId: id,\n expr,\n maxLines,\n instant,\n queryType: instant ? LokiQueryType.Instant : LokiQueryType.Range,\n };\n\n const request = makeRequest(query, options.range, CoreApp.Dashboard, id);\n\n const { data } = await lastValueFrom(this.query(request));\n\n const annotations: AnnotationEvent[] = [];\n const splitKeys: string[] = tagKeys.split(',').filter((v: string) => v !== '');\n\n const isDataplaneLog = config.featureToggles.lokiLogsDataplane;\n\n for (const frame of data) {\n const view = new DataFrameView<{ timestamp: string; Time: string; body: string; Line: string; labels: Labels }>(\n frame\n );\n\n view.forEach((row) => {\n const { labels } = row;\n\n const maybeDuplicatedTags = Object.entries(labels)\n .map(([key, val]) => [key, val.trim()]) // trim all label-values\n .filter(([key, val]) => {\n if (val === '') {\n // remove empty\n return false;\n }\n\n // if tags are specified, remove label if does not match tags\n if (splitKeys.length && !splitKeys.includes(key)) {\n return false;\n }\n\n return true;\n })\n .map(([_, val]) => val); // keep only the label-value\n\n // remove duplicates\n const tags = Array.from(new Set(maybeDuplicatedTags));\n\n const logLine = isDataplaneLog ? row.body : row.Line;\n\n annotations.push({\n time: isDataplaneLog ? new Date(row.timestamp).valueOf() : new Date(row.Time).valueOf(),\n title: renderLegendFormat(titleFormat, labels),\n text: renderLegendFormat(textFormat, labels) || logLine,\n tags,\n });\n });\n }\n\n return annotations;\n }\n\n /**\n * Adds ad hoc filters to a query expression, handling proper escaping of filter values.\n * @returns The query expression with ad hoc filters and correctly escaped values.\n * @todo this.templateSrv.getAdhocFilters() is deprecated\n */\n addAdHocFilters(queryExpr: string, adhocFilters?: AdHocVariableFilter[]) {\n if (!adhocFilters?.length) {\n return queryExpr;\n }\n\n let expr = replaceVariables(queryExpr);\n\n expr = adhocFilters.reduce((acc: string, filter: { key: string; operator: string; value: string }) => {\n const { key, operator } = filter;\n let { value } = filter;\n if (!isRegexSelector(operator)) {\n // We want to escape special characters in value for non-regex selectors to match the same char in the log line as the user types in the input\n value = escapeLabelValueInSelector(value, operator);\n }\n return addLabelToQuery(acc, key, operator, value);\n }, expr);\n\n return returnVariables(expr);\n }\n\n /**\n * Filters out queries that are empty or hidden. Used when running queries through backend.\n * It is called from DatasourceWithBackend.\n * @returns `true` if the query is not hidden and its expression is not empty; `false` otherwise.\n */\n filterQuery(query: LokiQuery): boolean {\n if (query.hide || query.expr === '') {\n return false;\n }\n return true;\n }\n\n /**\n * Applies template variables and add hoc filters to a query. Used when running queries through backend.\n * It is called from DatasourceWithBackend.\n * @returns A modified Loki query with template variables and ad hoc filters applied.\n */\n applyTemplateVariables(target: LokiQuery, scopedVars: ScopedVars, adhocFilters?: AdHocVariableFilter[]): LokiQuery {\n // We want to interpolate these variables on backend because we support using them in\n // alerting/ML queries and we want to have consistent interpolation for all queries\n const { __auto, __interval, __interval_ms, __range, __range_s, __range_ms, ...rest } = scopedVars || {};\n\n const variables = {\n ...rest,\n\n // pass through for backend interpolation. Need to be in scopedVars for Scenes though\n __interval: {\n value: '$__interval',\n },\n __interval_ms: {\n value: '$__interval_ms',\n },\n };\n\n const exprWithAdHoc = this.addAdHocFilters(\n this.templateSrv.replace(target.expr, variables, this.interpolateQueryExpr),\n adhocFilters\n );\n\n const step = this.templateSrv.replace(target.step, variables);\n const legendFormat = this.templateSrv.replace(target.legendFormat, variables);\n\n return {\n ...target,\n expr: exprWithAdHoc,\n step,\n legendFormat,\n };\n }\n\n /**\n * Interpolates template variables in a given string. Template variables are passed trough scopedVars.\n * @returns The string with template variables replaced by their values.\n */\n interpolateString(string: string, scopedVars?: ScopedVars) {\n return this.templateSrv.replace(string, scopedVars, this.interpolateQueryExpr);\n }\n\n /**\n * Retrieves and returns a list of variable names used in the template service.\n * Used for example in the Query Builder to populate the variable dropdown with template variables.\n * @returns An array of variable names, each prefixed with '$'.\n */\n getVariables(): string[] {\n return this.templateSrv.getVariables().map((v) => `$${v.name}`);\n }\n /**\n * Retrieves query hints for query improvements based on a Loki query and its result data.\n * Used in Query builder to provide hints for query improvements, such as adding a parser, etc.\n * @returns An array of query hints for potential query improvements.\n */\n getQueryHints(query: LokiQuery, result: DataFrame[]): QueryHint[] {\n return getQueryHints(query.expr, result);\n }\n\n /**\n * Get a default LokiQuery based on the specified app. Currently used in UnifiedAlerting.\n * @returns A default LokiQuery object with appropriate settings for the given application.\n */\n getDefaultQuery(app: CoreApp): LokiQuery {\n const defaults = { refId: 'A', expr: '' };\n\n if (app === CoreApp.UnifiedAlerting) {\n return {\n ...defaults,\n queryType: LokiQueryType.Instant,\n };\n }\n\n return {\n ...defaults,\n queryType: LokiQueryType.Range,\n };\n }\n}\nexport function lokiSpecialRegexEscape<T>(value: T) {\n if (typeof value === 'string') {\n return value.replace(/\\\\/g, '\\\\\\\\\\\\\\\\').replace(/[$^*{}\\[\\]+?.()|]/g, '\\\\\\\\$&');\n }\n return value;\n}\n","import { DataFrame, QueryHint } from '@grafana/data';\n\nimport {\n isQueryWithLabelFilter,\n isQueryPipelineErrorFiltering,\n isQueryWithLabelFormat,\n isQueryWithParser,\n isQueryWithLineFilter,\n} from './queryUtils';\nimport {\n dataFrameHasLevelLabel,\n extractHasErrorLabelFromDataFrame,\n extractLevelLikeLabelFromDataFrame,\n extractLogParserFromDataFrame,\n} from './responseUtils';\n\nexport function getQueryHints(query: string, series: DataFrame[]): QueryHint[] {\n if (series.length === 0) {\n return [];\n }\n\n const hints: QueryHint[] = [];\n const { queryWithParser, parserCount } = isQueryWithParser(query);\n\n if (!queryWithParser) {\n const { hasLogfmt, hasJSON, hasPack } = extractLogParserFromDataFrame(series[0]);\n if (hasJSON) {\n if (hasPack) {\n hints.push({\n type: 'ADD_UNPACK_PARSER',\n label: 'Selected log stream selector has packed logs.',\n fix: {\n title: 'add unpack parser',\n label: 'Consider using unpack parser.',\n action: {\n type: 'ADD_UNPACK_PARSER',\n query,\n },\n },\n });\n } else {\n hints.push({\n type: 'ADD_JSON_PARSER',\n label: 'Selected log stream selector has JSON formatted logs.',\n fix: {\n title: 'add json parser',\n label: 'Consider using JSON parser.',\n action: {\n type: 'ADD_JSON_PARSER',\n query,\n },\n },\n });\n }\n }\n\n if (hasLogfmt) {\n hints.push({\n type: 'ADD_LOGFMT_PARSER',\n label: 'Selected log stream selector has logfmt formatted logs.',\n fix: {\n title: 'add logfmt parser',\n label: 'Consider using logfmt parser to turn key-value pairs in your log lines to labels.',\n action: {\n type: 'ADD_LOGFMT_PARSER',\n query,\n },\n },\n });\n }\n }\n\n if (queryWithParser) {\n // To keep this simple, we consider pipeline error filtering hint only is query has up to 1 parser\n if (parserCount === 1) {\n const hasPipelineErrorFiltering = isQueryPipelineErrorFiltering(query);\n const hasError = extractHasErrorLabelFromDataFrame(series[0]);\n if (hasError && !hasPipelineErrorFiltering) {\n hints.push({\n type: 'ADD_NO_PIPELINE_ERROR',\n label: 'Some logs in your selected log streams have parsing error.',\n fix: {\n title: 'remove pipeline errors',\n label: 'Consider filtering out logs with parsing errors.',\n action: {\n type: 'ADD_NO_PIPELINE_ERROR',\n query,\n },\n },\n });\n }\n }\n\n const hasLabelFilter = isQueryWithLabelFilter(query);\n\n if (!hasLabelFilter) {\n hints.push({\n type: 'ADD_LABEL_FILTER',\n label: 'Consider filtering logs by their label and value.',\n fix: {\n title: 'add label filter',\n label: '',\n action: {\n type: 'ADD_LABEL_FILTER',\n query,\n },\n },\n });\n }\n }\n\n const queryWithLabelFormat = isQueryWithLabelFormat(query);\n if (!queryWithLabelFormat) {\n const hasLevel = dataFrameHasLevelLabel(series[0]);\n const levelLikeLabel = extractLevelLikeLabelFromDataFrame(series[0]);\n\n // Add hint only if we don't have \"level\" label and have level-like label\n if (!hasLevel && levelLikeLabel) {\n hints.push({\n type: 'ADD_LEVEL_LABEL_FORMAT',\n label: `Some logs in your selected log stream have \"${levelLikeLabel}\" label.`,\n fix: {\n title: 'add label level format',\n label: `If ${levelLikeLabel} label has level values, consider using label_format to rename it to \"level\". Level label can be then visualized in log volumes.`,\n action: {\n type: 'ADD_LEVEL_LABEL_FORMAT',\n query,\n options: {\n renameTo: 'level',\n originalLabel: levelLikeLabel,\n },\n },\n },\n });\n }\n }\n\n const hasLineFilter = isQueryWithLineFilter(query);\n\n if (!hasLineFilter) {\n hints.push({\n type: 'ADD_LINE_FILTER',\n label: 'Consider filtering logs for specific string.',\n fix: {\n title: 'add line filter',\n label: '',\n action: {\n type: 'ADD_LINE_FILTER',\n query,\n },\n },\n });\n }\n\n return hints;\n}\n","import { DashboardLoadedEvent, DataSourcePlugin } from '@grafana/data';\nimport { getAppEvents } from '@grafana/runtime';\n\nimport LokiCheatSheet from './components/LokiCheatSheet';\nimport LokiQueryEditorByApp from './components/LokiQueryEditorByApp';\nimport { ConfigEditor } from './configuration/ConfigEditor';\nimport { LokiDatasource } from './datasource';\nimport { onDashboardLoadedHandler } from './tracking';\nimport { LokiQuery } from './types';\n\nexport const plugin = new DataSourcePlugin(LokiDatasource)\n .setQueryEditor(LokiQueryEditorByApp)\n .setConfigEditor(ConfigEditor)\n .setQueryEditorHelp(LokiCheatSheet);\n\n// Subscribe to on dashboard loaded event so that we can track plugin adoption\ngetAppEvents().subscribe<DashboardLoadedEvent<LokiQuery>>(DashboardLoadedEvent, onDashboardLoadedHandler);\n"],"names":["inProgress","dataWebpackPrefix","outside","module","exports","version","range","options","constructor","this","max","map","Map","get","key","value","undefined","delete","set","size","firstKey","keys","next","Range","er","__WEBPACK_EXTERNAL_MODULE__200__","func","r1","r2","intersects","SemVer","parse","safeRe","re","t","String","match","rtl","coerceRtlRegex","includePrerelease","COERCERTLFULL","COERCERTL","exec","index","length","lastIndex","COERCEFULL","COERCE","major","minor","patch","prerelease","build","AGGREGATION_OPERATORS","label","insertText","documentation","RANGE_VEC_FUNCTIONS","detail","BUILT_IN_FUNCTIONS","FUNCTIONS","lokiGrammar","comment","pattern","lookbehind","inside","alias","punctuation","greedy","RegExp","move","f","join","function","quote","backticks","number","operator","internalRe","constants","identifiers","valid","clean","inc","diff","compare","rcompare","compareLoose","compareBuild","sort","rsort","gt","lt","eq","neq","gte","lte","cmp","coerce","Comparator","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","gtr","ltr","simplifyRange","subset","src","tokens","SEMVER_SPEC_VERSION","RELEASE_TYPES","compareIdentifiers","rcompareIdentifiers","Object","defineProperty","WHITESPACE","WORD","STRING","RESERVED","RESERVED_TOP_LEVEL","RESERVED_TOP_LEVEL_NO_INDENT","RESERVED_NEWLINE","OPERATOR","OPEN_PAREN","CLOSE_PAREN","LINE_COMMENT","BLOCK_COMMENT","NUMBER","PLACEHOLDER","default","a","loose","debug","process","env","NODE_DEBUG","test","args","console","error","toNumber","INFINITY","list","b","__WEBPACK_EXTERNAL_MODULE__1269__","reWhitespace","string","charAt","arrayMap","object","props","baseIndexOf","isArrayLike","isString","toInteger","values","nativeMax","Math","collection","fromIndex","guard","indexOf","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","token","toLowerCase","toUpperCase","substr","interpolate","str","replace","result","arguments","sanitizeWord","rules","hasOwnProperty","len","replaceWord","replaceMap","keepMap","checkWord","bool","pluralize","count","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","push","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","__WEBPACK_EXTERNAL_MODULE__1308__","numeric","anum","bnum","array","iteratee","Array","_Formatter","_interopRequireDefault","_Tokenizer","obj","__esModule","_defineProperties","target","i","descriptor","enumerable","configurable","writable","tokenizer","reservedWords","reservedTopLevelWords","reservedTopLevelWordsNoIndent","reservedNewlineWords","StandardSqlFormatter","cfg","instance","Constructor","TypeError","_classCallCheck","protoProps","staticProps","query","stringTypes","openParens","closeParens","indexedPlaceholderTypes","namedPlaceholderTypes","lineCommentTypes","format","prototype","nativeFloor","floor","n","baseValues","validateQuery","interpolatedQuery","queryLines","parser","interpolatedErrors","parseQuery","parseErrors","queryErrors","flatMap","interpolatedError","filter","queryError","text","parseError","isEmptyString","node","from","to","errorNode","parent","substring","startLineNumber","startColumn","endLineNumber","endColumn","startPos","endPos","line","findErrorBoundary","isErrorBoundary","iterate","enter","nodeRef","type","id","ErrorId","boundary","placeHolderScopedVars","__interval","__rate_interval","__auto","__interval_ms","__range_ms","__range_s","__range","baseGetTag","isObject","tag","QueryEditorMode","QueryEditorMode2","BINARY_OPERATIONS_KEY","freeGlobal","freeExports","nodeType","freeModule","freeProcess","nodeUtil","types","require","binding","e","__WEBPACK_EXTERNAL_MODULE__2007__","ANY","minimumVersionWithPreRelease","minimumVersion","simpleSubset","sub","dom","semver","eqSet","Set","gtltComp","higher","lower","hasDomLT","hasDomGT","c","higherGT","lowerLT","add","needDomLTPre","needDomGTPre","comp","sawNonNull","OUTER","simpleSub","simpleDom","isSub","getLeftMostChild","cur","firstChild","makeError","expr","getString","parentType","name","variableRegex","replaceVariables","var1","var2","fmt2","var3","fieldPath","fmt3","fmt","variable","varType","varTypeFunc","v","returnVariables","parseInt","makeBinOp","opDef","numberNode","hasBool","params","parseFloat","comparison","getAllByType","pos","child","childAfter","baseIsNative","getValue","MAX_SAFE_INTEGER","Number","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","versions","min","minSV","rangeObj","release","identifier","identifierBase","coreJsData","_repeat","_last","INDENT_TYPE_TOP_LEVEL","Indentation","indent","indentTypes","pop","Symbol","getNative","SPACE_CHARACTERS","parseOptions","raw","formatted","trim","split","r","parseRange","first","isNullSet","isAny","comps","k","toString","memoKey","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","COMPARATORLOOSE","rangeMap","comparators","has","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","testSet","remainingComparators","slice","testComparator","otherComparator","BUILD","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","_","M","m","p","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","allowed","objectProto","nativeObjectToString","symToStringTag","toStringTag","isOwn","call","unmasked","LabelParamEditor","onChange","operationId","datasource","queryModeller","state","setState","useState","Select","inputId","getOperationParamId","autoFocus","openMenuOnFocus","onOpenMenu","isLoading","labels","queryString","renderLabels","languageProvider","fetchLabels","streamSelector","x","loadGroupByLabels","allowCustomValue","noOptionsMessage","loadingMessage","toOption","createRangeOperation","isRangeOperationWithGrouping","description","defaultParams","paramChangedHandler","LokiOperationId","QuantileOverTime","restParam","optional","getOnLabelAddedHandler","getLokiOperationDisplayName","toggleable","alternativesKey","category","LokiVisualQueryOperationCategory","RangeFunctions","orderRank","LokiOperationOrder","RangeVectorFunction","renderer","operationWithRangeVectorRenderer","addOperationHandler","addLokiOperation","explainHandler","op","def","opDocs","find","createRangeOperationWithGrouping","rangeOperation","editor","getRangeAggregationWithGroupingRenderer","getLastLabelRemovedHandler","getAggregationExplainer","hideFromList","aggregation","grouping","model","innerExpr","restParamIndex","findIndex","param","restParams","rangeVector","quantile","labelFilterRenderer","includes","isConflictingFilter","operation","queryOperations","operationIsNegative","startsWith","queryOperation","LabelFilter","candidate","pipelineRenderer","Logfmt","strict","keepEmpty","Json","Drop","Keep","getIndexOfOrLast","operations","condition","getOperationDefinition","modeller","newOperation","existingRangeVectorFunction","isRangeVectorFunction","Aggregations","Functions","placeToInsert","splice","Rate","addNestedQueryHandler","binaryQueries","getLineFilterRenderer","caseInsensitive","hasBackticks","delimiter","escapeLabelValueInExactSelector","paramIndex","changeToOperationId","aggregationName","mode","labelWord","funcName","capitalize","defaultAddOperationHandler","createAggregationOperation","overrides","functionRendererLeft","getAggregationWithoutRenderer","renderParams","createAggregationOperationWithParam","paramsDef","unshift","getAggregationByRendererWithParameter","idx","__WEBPACK_EXTERNAL_MODULE__3059__","isObjectLike","baseToString","_isEmpty","_escapeRegExp","_tokenTypes","Tokenizer","WHITESPACE_REGEX","NUMBER_REGEX","OPERATOR_REGEX","BLOCK_COMMENT_REGEX","LINE_COMMENT_REGEX","createLineCommentRegex","RESERVED_TOP_LEVEL_REGEX","createReservedWordRegex","RESERVED_TOP_LEVEL_NO_INDENT_REGEX","RESERVED_NEWLINE_REGEX","RESERVED_PLAIN_REGEX","WORD_REGEX","createWordRegex","specialWordChars","STRING_REGEX","createStringRegex","OPEN_PAREN_REGEX","createParenRegex","CLOSE_PAREN_REGEX","INDEXED_PLACEHOLDER_REGEX","createPlaceholderRegex","IDENT_NAMED_PLACEHOLDER_REGEX","STRING_NAMED_PLACEHOLDER_REGEX","createStringPattern","concat","reservedWordsPattern","patterns","parens","_this","escapeParen","paren","typesRegex","input","getNextToken","previousToken","getWhitespaceToken","getCommentToken","getStringToken","getOpenParenToken","getCloseParenToken","getPlaceholderToken","getNumberToken","getReservedWordToken","getWordToken","getOperatorToken","getTokenOnFirstMatch","regex","getLineCommentToken","getBlockCommentToken","getIdentNamedPlaceholderToken","getStringNamedPlaceholderToken","getIndexedPlaceholderToken","getPlaceholderTokenWithKey","parseKey","_this2","getEscapedPlaceholderKey","quoteChar","_ref","_ref2","getTopLevelReservedToken","getNewlineReservedToken","getTopLevelReservedTokenNoIndent","getPlainReservedToken","_ref3","matches","__WEBPACK_EXTERNAL_MODULE__3241__","uid","maskSrcKey","IE_PROTO","NodePosition","fromNode","contains","position","getExpression","queryHasFilter","getMatchersWithFilter","removeLabelFromQuery","matchers","matcher","removeLabelFilter","removeSelector","pipelineStage","PipelineStage","selector","Selector","getChild","Identifier","labelName","prefix","suffix","matchVisQuery","buildVisualQueryFromString","renderQuery","tree","Matcher","labelNode","opNode","nextSibling","valueNode","labelValue","handleQuotes","unescapeLabelValue","addLabelToQuery","labelType","Error","streamSelectorPositions","getStreamSelectorPositions","parserPositions","getParserPositions","labelFilterPositions","getLabelFilterPositions","hasStreamSelectorMatchers","positions","getAllPositionsInNodeByType","getMatcherInStreamPositions","labelFormatPositions","getNodePositionsFromQuery","LabelFormatExpr","identifierSelectorMatchers","getIdentifierInStreamPositions","LabelType","Indexed","everyStreamSelectorHasMatcher","streamSelectorPosition","matcherPosition","toLabelFilter","Parsed","StructuredMetadata","lastPositionsPerExpression","getLastPositionPerExpression","addFilterAsLabelFilter","addFilterToStreamSelector","subExpressions","nodes","Expr","subPositions","subExpression","findLastPosition","addParserToQuery","lineFilterPositions","getLineFiltersPositions","appendToLogsQuery","addDropToQuery","labelsToDrop","queryPartPositions","statement","newQuery","prev","isLast","addNoPipelineErrorToQuery","addLabelFormatToQuery","labelFormat","logQueryPositions","LogExpr","LogRangeExpr","logPartsPositions","pipeline","PipelineExpr","unwrap","UnwrapExpr","sorted","sortBy","getLogQueryPositions","start","end","renameTo","originalLabel","addLabelFormat","removeCommentsFromQuery","lineCommentPositions","LineComment","getLineCommentPositions","lineCommentPosition","parserNodeTypes","LabelParser","JsonExpressionParser","LogfmtParser","LogfmtExpressionParser","LineFilters","vectorSelectorPositions","labelExists","positionsToAddAfter","labelFilter","isNaN","addLineFilter","streamSelectorEnd","reduce","current","predicate","fromRight","replacedExpr","topNode","context","errors","handleExpression","err","message","isEmptyQuery","visQuery","getLabel","LineFilter","Filter","filterExpr","ipLineFilter","FilterOp","Ip","LineFilterIpMatches","orFilter","OrFilter","LineContains","LineContainsNot","LineMatchesRegex","LineMatchesRegexNot","getLineFilter","createNotSupportedError","parserNode","getDefinitionById","checkParamsAreValid","getLabelParser","Or","And","IpLabelFilter","ipLabelFilter","valueString","LabelFilterIpMatches","UnitFilter","LabelFilterNoErrors","getLabelFilter","LabelExtractionExpression","getJsonExpressionParser","flags","offset","toTree","subNode","ParserFlag","getLogfmtParser","LineFormatExpr","LineFormat","getLineFormat","LabelFormatMatcher","LabelFormat","getLabelFormat","unwrapExprChild","labelFilterChild","unwrapChild","Unwrap","ConvOp","convOp","handleUnwrapExpr","Decolorize","RangeAggregationExpr","nameNode","RangeOp","NumberLezer","logExpr","rangeValue","Grouping","handleRangeAggregation","VectorAggregationExpr","VectorOp","By","Without","metricExpr","MetricExpr","BinOpExpr","handleVectorAggregation","left","binModifier","OnOrIgnoringModifier","boolMatcher","Bool","isBool","isMatcher","GroupingLabels","GroupingLabelList","matchType","On","getBinaryModifier","BinOpModifier","right","lastChild","operatorToOpName","leftNumber","getLastChildWithSelector","rightNumber","rightBinary","leftMostChild","binQuery","vectorMatchesType","vectorMatches","handleBinary","isIntervalVariableError","DropLabelsExpr","exploringNode","DropLabels","DropLabel","reverse","handleDropFilter","KeepLabelsExpr","KeepLabels","KeepLabel","handleKeepFilter","binaryScalarDefs","acc","sign","children","s","__defProp","__publicField","__defNormalProp","QueryModellerBase","operationDefinitions","innerQueryPlaceholder","operationsRegistry","Registry","setOperationCategories","categories","getOperationsForCategory","getAlternativeOperations","getCategories","getIfExists","hasBinaryOp","lokiQueryModeller","renderOperations","disabled","renderBinaryQueries","renderBinaryQuery","leftOperand","binaryQuery","nested","Boolean","getQueryPatterns","LokiQueryPatternType","Log","Metric","SumOverTime","Sum","CountOverTime","BytesOverTime","TopK","super","Formats","BinaryOps","LabelFilters","UnwrapParamEditor","timeRange","loadUnwrapOptions","getDefaultTimeRange","queryExpr","getDataSamples","samples","refId","convertMetricQueryToLogQuery","extractUnwrapLabelKeysFromDataFrame","Min","Max","Avg","Stddev","Stdvar","Count","opId","Last","BottomK","RateCounter","BytesRate","AbsentOverTime","AvgOverTime","MaxOverTime","MinOverTime","FirstOverTime","LastOverTime","StdvarOverTime","StddevOverTime","minWidth","placeholder","Parsers","Regexp","hideName","Pattern","Unpack","PipeOperations","runQueryOnEnter","LineContainsCaseInsensitive","LineContainsNotCaseInsensitive","lokiOperators","doesNotContain","equals","doesNotEqual","matchesRegex","doesNotMatchRegex","greaterThan","lessThan","greaterThanOrEqual","lessThanOrEqual","NoErrors","binaryScalarOperations","NestedQuery","explainOperator","definition","isIndex","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","funcToString","Function","arrayLikeKeys","baseKeys","throwErrors","root","stubFalse","Buffer","isBuffer","isFunction","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","Db2Formatter","LOGFMT_REGEXP","dataFrameHasLokiError","frame","fields","__error__","dataFrameHasLevelLabel","level","extractLogParserFromDataFrame","lineField","field","FieldType","hasJSON","hasLogfmt","hasPack","logLines","parsed","JSON","isLogLineJSON","isLogLinePacked","isLogLineLogfmt","extractLabelKeysFromDataFrame","labelsArray","labelTypeArray","labelKeys","processLabels","labelsSet","labelsType","allLabelKeys","isValidGoDuration","isBytesString","extractHasErrorLabelFromDataFrame","labelField","extractLevelLikeLabelFromDataFrame","levelLikeLabel","isRetriableError","errorResponse","data","LOOSE","FULL","num","compareMain","comparePre","PRERELEASELOOSE","PRERELEASE","base","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","ArrayBuffer","isView","equal","it","isArray","entries","done","source","$$typeof","warn","version1","version2","v1","v2","v1Higher","highVersion","lowVersion","highHasPre","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","baseIsArguments","propertyIsEnumerable","isArguments","DefaultBufferLength","nextPropID","NodeProp","config","perNode","deserialize","RangeError","NodeType","closedBy","openedBy","group","isolate","contextHash","lookAhead","mounted","MountedTree","overlay","noProps","create","define","spec","top","skipped","prop","isTop","isSkipped","isError","isAnonymous","is","direct","groups","found","none","NodeSet","extend","newTypes","newProps","assign","CachedNode","WeakMap","CachedInnerNode","IterMode","Tree","ch","stringify","cursor","TreeCursor","cursorAt","side","scope","moveTo","_tree","TreeNode","resolve","resolveNode","resolveInner","resolveStack","inner","layers","scan","mount","iterStack","stackIterator","leave","anon","IncludeAnonymous","entered","propValues","balance","balanceRange","makeTree","_a","buffer","nodeSet","maxBufferLength","reused","minRepeatType","FlatBufferCursor","takeNode","parentStart","minPos","inRepeat","depth","lookAheadAtStart","contextAtStart","findBufferSize","Uint16Array","skip","copyToBuffer","TreeBuffer","localChildren","localPositions","localInRepeat","lastGroup","lastEnd","makeRepeatLeaf","takeFlatNode","make","makeBalanced","nodeCount","stopAt","j","last","lookAheadProp","lastI","pair","maxSize","fork","minStart","nodeSize","localSkipped","nodeStart","bufferStart","startIndex","topID","buildTree","empty","childString","endIndex","findChild","dir","pick","checkSide","startI","endI","copy","overlays","IgnoreOverlays","BaseNode","before","after","getChildren","matchContext","matchNodeContext","enterUnfinishedNodesBefore","childBefore","prevSibling","_parent","nextChild","ExcludeBuffers","BufferNode","BufferContext","hasChild","IgnoreMounts","rPos","nextSignificantParent","val","externalSibling","heads","picked","newHeads","StackIterator","stack","bufferNode","yieldNode","yieldBuf","yield","enterChild","sibling","d","atLastNode","mustLeave","nodeSizeCache","balanceType","mkTop","mkTree","total","maxChild","ceil","divide","groupFrom","groupStart","groupSize","nextSize","only","Parser","startParse","fragments","ranges","StringInput","createParse","advance","chunk","lineChunks","read","Stack","reducePos","score","bufferBase","curContext","cx","StackContext","pushState","action","lookaheadRecord","setLookAhead","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","lastBigReductionStart","bigReductionCount","lastBigReductionSize","stateFlag","baseStateID","term","mustSink","mustMove","shift","shiftContext","maxNode","nextState","apply","nextStart","nextEnd","useNode","updateContext","tracker","reuse","stream","reset","off","recoverByDelete","isNode","canShift","sim","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","best","forceReduce","validAction","backup","findForcedReduction","seen","explore","allActions","rDepth","forceAll","deadEnd","restart","sameState","dialectEnabled","dialectID","dialect","emitContext","hash","emitLookAhead","newCx","close","goto","StackBufferCursor","maybeNext","decodeArray","Type","out","charCodeAt","stop","digit","CachedToken","extended","mask","nullToken","InputStream","chunkOff","chunk2","chunk2Pos","rangeIndex","chunkPos","readNext","resolveOffset","assoc","clipPos","peek","resolved","acceptToken","endOffset","acceptTokenTo","getChunk","nextChunk","setDone","TokenGroup","readToken","tokenPrecTable","contextual","fallback","precTable","precOffset","groupMask","accEnd","allows","low","high","mid","findOffset","tableData","tableOffset","iPrev","verbose","LOG","stackIDs","cutAt","fragment","safeFrom","safeTo","trees","nextFragment","fr","openStart","openEnd","nodeAt","TokenCache","mainToken","actions","tokenizers","getActions","actionIndex","main","updateCachedToken","addActions","eofTerm","getMainToken","specialized","specializers","putAction","Parse","recovering","nextStackID","minStackPos","stoppedAt","topTerm","stacks","bufferLength","parsedPos","stopped","stoppedTokens","newStacks","advanceStack","tok","finished","findFinished","stackToTree","SyntaxError","runRecovery","maxRemaining","outer","stackID","strictCx","cxHash","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","force","forceBase","insert","fromCodePoint","Dialect","LRParser","wrappers","nodeNames","repeatNodeCount","topTerms","topRules","nodeProps","setProp","nodeID","propSpec","skippedNodes","propSources","tokenArray","tokenData","specializerSpecs","getSpecializer","states","Uint32Array","stateData","maxTerm","dialects","dynamicPrecedences","tokenPrec","termNames","parseDialect","w","table","groupTag","terminal","slot","flag","deflt","configure","info","external","contextTracker","wrap","hasWrappers","getName","prec","part","Uint8Array","keywordTokens","json","logfmt","unpack","regexp","label_format","line_format","label_replace","vector","on","ignoring","group_left","group_right","decolorize","drop","keep","contextualKeywordTokens","by","without","and","or","unless","sum","avg","stddev","stdvar","bottomk","topk","sort_desc","spec_Identifier","__proto__","ip","count_over_time","rate","rate_counter","bytes_over_time","bytes_rate","avg_over_time","sum_over_time","min_over_time","max_over_time","stddev_over_time","stdvar_over_time","quantile_over_time","first_over_time","last_over_time","absent_over_time","bytes","duration","duration_seconds","specializeIdentifier","extendIdentifier","LogQL","Matchers","PipeExact","PipeMatch","LabelExtractionExpressionList","Duration","LiteralExpr","toFinite","remainder","Ctor","safeSrc","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","FULLPLAIN","MAINVERSIONLOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","LONETILDE","LONECARET","DataView","__WEBPACK_EXTERNAL_MODULE__5959__","Promise","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","__WEBPACK_EXTERNAL_MODULE__6089__","getHighlighterExpressionsFromQuery","results","filters","getNodesFromQuery","pipeExact","pipeMatch","strings","getStringsFromLineFilter","filterTerm","backtickedTerm","unwrappedFilterTerm","resultTerm","escapeRegExp","getExpressionFromExecutedQuery","executedQueryString","getNormalizedLokiQuery","queryType","getLokiQueryType","instant","rest","isLogsQuery","LokiQueryType","Instant","Stream","tagsToObscure","partsToKeep","obfuscate","obfuscatedQuery","queryPart","isQueryWithNode","nodeTypes","getNodeFromQuery","isQueryWithError","isQueryWithParser","parserCount","queryWithParser","getParserFromQuery","parsers","isQueryPipelineErrorFiltering","isQueryWithLabelFormat","getLogQueryFromMetricsQuery","selectorNode","pipelineExprNode","getLogQueryFromMetricsQueryAtPosition","metricQuery","isQueryWithLabelFilter","isQueryWithLineFilter","isQueryWithRangeVariable","rangeNodes","getStreamSelectorsFromQuery","labelMatcher","requestSupportsSplitting","allQueries","hide","requestSupportsSharding","direction","LokiQueryDirection","Scan","disallowed","vectorOps","supportedVectorOps","getNodeString","unsupportedVectorOps","supportedWrappingVectorOpps","supportedOp","unsupportedOp","rangeOps","supportedRangeOps","metricSupportsSharding","getLokiQueryFromDataQuery","isLokiQuery","interpolateShardingSelector","queries","shards","shardValue","addStreamShardLabelsToQuery","shardedQuery","getSelectorForShardValues","g","isPrototype","nativeKeys","reIsUint","baseTimes","inherited","isArr","isArg","isBuff","isType","skipIndexes","maxSV","isLength","trimmedEndIndex","reTrimStart","_Db2Formatter","_N1qlFormatter","_PlSqlFormatter","_StandardSqlFormatter","language","minver","setMin","comparator","compver","versionA","versionB","__WEBPACK_EXTERNAL_MODULE__7694__","hilo","gtfn","ltefn","ltfn","ecomp","__WEBPACK_EXTERNAL_MODULE__7781__","tokenOverride","previousReservedToken","PlSqlFormatter","roundMsToMin","milliseconds","seconds","shouldRefreshLabels","prevRange","sameMinuteFrom","sameMinuteTo","RE2_METACHARACTERS","escapeLabelValueInRegexSelector","escapeLabelValueInSelector","isRegexSelector","getLabelTypeFromFrame","labelKey","typeField","mapOpToAbstractOp","AbstractLabelOperator","Equal","NotEqual","EqualRegEx","NotEqualRegEx","mapAbstractOperatorsToOp","invert","abstractQueryToExpr","labelBasedQuery","labelMatchers","valueSet","valueArray","limitSuggestions","SUGGESTIONS_LIMIT","items","for","l","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","q","h","defaultProps","_owner","Fragment","jsx","jsxs","isMultiValue","__WEBPACK_EXTERNAL_MODULE__8146__","simplified","original","transform","arg","__WEBPACK_EXTERNAL_MODULE__8398__","byteToHex","unsafeStringify","arr","reRegExpChar","reHasRegExpChar","__WEBPACK_EXTERNAL_MODULE__8531__","Addition","Subtraction","MultiplyBy","DivideBy","Modulo","Exponent","EqualTo","NotEqualTo","GreaterThan","LessThan","GreaterOrEqual","LessOrEqual","getRawTag","objectToString","resolveSelectors","versionedSelectors","grafanaVersion","resolveSelectorGroup","isVersionedSelectorGroup","assertIsSemverValid","resolveSelector","versionedSelector","versionToUse","selectorName","MIN_GRAFANA_VERSION","versionedComponents","RadioButton","container","Breadcrumbs","breadcrumb","title","CanvasGridAddActions","addPanel","groupPanels","ungroup","ungroupRows","addRow","pasteRow","addTab","pasteTab","pastePanel","DashboardEditPaneSplitter","primaryBody","EditPaneHeader","deleteButton","copyDropdown","duplicate","backButton","TimePicker","openButton","overlayContent","fromField","toField","applyTimeRange","copyTimeRange","pasteTimeRange","calendar","closeButton","absoluteTimeRangeTitle","DataSourcePermissions","form","roleType","rolePicker","permissionLevel","DateTimePicker","DataSource","TestData","QueryTab","scenarioSelectContainer","scenarioSelect","noise","seriesCount","spread","startValue","DataSourceHttpSettings","urlInput","Jaeger","traceIDInput","Prometheus","configPage","connectionSettings","manageAlerts","allowAsRecordingRulesTarget","scrapeInterval","queryTimeout","defaultEditor","disableMetricLookup","prometheusType","prometheusVersion","cacheLevel","incrementalQuerying","queryOverlapWindow","disableRecordingRules","customQueryParameters","httpMethod","exemplarsAddButton","internalLinkSwitch","codeModeMetricNamesSuggestionLimit","seriesLimit","queryEditor","explain","editorToggle","legend","step","exemplars","builder","metricSelect","hints","metricsExplorer","queryAdvisor","code","queryField","metricsCountInfo","metricsBrowser","selectMetric","metricList","labelNamesFilter","labelValuesFilter","useQuery","useAsRateQuery","validateSelector","clear","exemplarMarker","variableQueryEditor","labelnames","metricRegex","labelValues","labelSelect","metricNames","varQueryResult","seriesQuery","classicQuery","annotations","minStep","tags","seriesValueAsTimestamp","Menu","MenuComponent","MenuGroup","MenuItem","SubMenu","icon","Panels","Panel","content","headerContainer","headerItems","item","menuItems","menu","containerByTitle","headerCornerInfo","status","loadingBar","HoverWidget","dragIcon","PanelDataErrorMessage","Visualization","Graph","VisualizationTab","legendSection","Legend","legendItemAlias","showLegendSwitch","xAxis","BarGauge","valueV2","PieChart","svgSlice","Text","Table","header","footer","body","TableNG","Filters","HeaderButton","Container","SelectAll","Tooltip","Wrapper","Caret","Footer","ReducerLabel","Value","VizLegend","seriesName","Drawer","General","expand","contract","rcContentWrapper","subtitle","DashboardSaveDrawer","saveButton","saveAsButton","saveAsTitleInput","PanelEditor","OptionsPane","select","fieldLabel","fieldInput","DataPane","applyButton","toggleVizPicker","toggleVizOptions","toggleTableView","showZoomField","showAttributionField","showScaleField","showMeasureField","showDebugField","measureButton","Outline","section","ElementEditPane","variableType","addVariableButton","variableNameInput","variableLabelInput","AutoGridLayout","minColumnWidth","customMinColumnWidth","clearCustomMinColumnWidth","maxColumns","rowHeight","customRowHeight","clearCustomRowHeight","fillScreen","TabsLayout","titleInput","PanelInspector","Data","Stats","Query","refreshButton","jsonObjectKeys","Tab","active","RefreshPicker","runButtonV2","intervalButtonV2","queryInspectorButton","queryHistoryButton","addQuery","addQueryFromLibrary","queryGroupTopSection","addExpression","QueryHistory","queryText","QueryEditorRows","rows","QueryEditorRow","actionButton","AlertTab","AlertRules","groupToggle","toggle","expandedContent","previewButton","ruleNameField","newFolderButton","newFolderNameField","newFolderNameCreateButton","newEvaluationGroupButton","newEvaluationGroupName","newEvaluationGroupInterval","newEvaluationGroupCreate","stepNo","stepAdvancedModeSwitch","Alert","alertV2","severity","TransformTab","newTransform","transformationEditor","transformationEditorDebugger","Transforms","card","disableTransformationButton","Reduce","modeLabel","calculationsLabel","SpatialOperations","actionLabel","locationLabel","location","autoOption","coords","option","latitudeFieldLabel","longitudeFieldLabel","geohash","geohashFieldLabel","lookup","lookupFieldLabel","gazetteerFieldLabel","searchInput","noTransformationsMessage","addTransformationButton","removeAllTransformationsButton","NavBar","Configuration","button","Toggle","Reporting","NavMenu","NavToolbar","commandPaletteTrigger","shareDashboard","markAsFavorite","editDashboard","editButton","exitButton","settingsButton","addRowButton","addLibraryPanelButton","addVisualizationButton","pastePanelButton","discardChangesButton","discardLibraryPanelButton","unlinkLibraryPanelButton","saveLibraryPanelButton","backToDashboardButton","PageToolbar","tooltip","itemButton","QueryEditorToolbarItem","BackButton","backArrow","OptionsGroup","PluginVisualization","toggleAllOptions","singleValue","FieldConfigEditor","OverridesConfigEditor","FolderPicker","containerV2","ReadonlyFolderPicker","DataSourcePicker","inputV2","dataSourceList","advancedModal","builtInDataSourceList","TimeZonePicker","changeTimeSettingsButton","WeekStartPicker","TraceViewer","spanBar","QueryField","QueryBuilder","queryPatterns","inputSelect","valueSelect","matchOperatorSelect","ValuePicker","Search","sectionV2","itemsV2","cards","collapseFolder","sectionId","expandFolder","dashboardItem","dashboardCard","folderHeader","folderName","folderContent","dashboardItems","DashboardLinks","dropDown","link","LoadingIndicator","CallToActionCard","buttonV2","DataLinksContextMenu","singleLink","DataLinksActionsTooltip","tooltipWrapper","CodeEditor","ReactMonacoEditor","editorLazy","DashboardImportPage","textarea","submit","ImportDashboardForm","PanelAlertTabContent","VisualizationPreview","ColorSwatch","DashboardRow","wrapper","UserProfile","profileSaveButton","preferencesSaveButton","orgsTable","sessionsTable","extensionPointTabs","extensionPointTab","tabId","FileUpload","inputField","fileNameSpan","DebugOverlay","OrgRolePicker","AnalyticsToolbarButton","Variables","variableOption","variableLinkWrapper","Annotations","annotationsTypeInput","annotationsChoosePanelInput","testButton","resultContainer","ReturnToPrevious","buttonGroup","dismissButton","SQLQueryEditor","selectColumn","selectColumnInput","selectFunctionParameter","selectAggregation","selectAggregationInput","selectAlias","selectAliasInput","selectInputParameter","filterConjunction","filterField","filterOperator","headerTableSelector","headerFilterSwitch","headerGroupSwitch","headerOrderSwitch","headerPreviewSwitch","EntityNotFound","Portal","ExportImage","formatOptions","png","jpg","rendererAlert","buttons","generate","download","cancel","preview","loading","image","selectors","pages","Alerting","AddAlertRule","url","EditAlertRule","alertRuleUid","Login","username","password","PasswordlessLogin","email","Home","readOnly","saveAndTest","alert","DataSources","dataSources","dataSourceName","EditDataSource","dataSourceUid","settings","AddDataSource","dataSourcePluginsV2","pluginName","ConfirmModal","SecretsManagement","SecretForm","AddDashboard","addNewPanel","itemButtonAddViz","addNewRow","addNewPanelLibrary","Settings","List","Edit","annotationIndex","editIndex","ImportDashboard","Dashboard","DashNav","nav","navV2","publicDashboardTag","shareButton","scrollContainer","newShareButton","shareLink","arrowMenu","shareInternally","shareExternally","shareSnapshot","NewExportButton","exportAsJson","exportAsImage","playlistControls","Controls","submenu","submenuItem","submenuItemLabels","submenuItemValueDropDownValueLinkTexts","submenuItemValueDropDownDropDown","submenuItemValueDropDownOptionTexts","annotationsWrapper","annotationLabel","annotationToggle","Actions","deleteDashBoard","sectionItems","saveDashBoard","saveAsDashBoard","urlParams","dashboardUid","addAnnotationCTAV2","NewAnnotation","panelFilterSelect","showInLabel","previewInDashboard","enable","addVariableCTAV2","newButton","tableRowNameFields","variableName","tableRowDefinitionFields","tableRowArrowUpButtons","tableRowArrowDownButtons","tableRowDuplicateButtons","tableRowRemoveButtons","headerLink","modeLabelNew","modeLabelEdit","generalNameInput","generalNameInputV2","generalTypeSelect","generalTypeSelectV2","generalLabelInput","generalLabelInputV2","generalHideSelect","generalHideSelectV2","selectionOptionsAllowCustomValueSwitch","selectionOptionsMultiSwitch","selectionOptionsIncludeAllSwitch","selectionOptionsCustomAllInput","previewOfValuesOption","submitButton","QueryVariable","queryOptionsDataSourceSelect","queryOptionsOpenButton","queryOptionsRefreshSelect","queryOptionsRefreshSelectV2","queryOptionsRegExInput","queryOptionsRegExInputV2","queryOptionsSortSelect","queryOptionsSortSelectV2","queryOptionsQueryInput","queryOptionsStaticOptionsToggle","queryOptionsStaticOptionsOrderDropdown","valueGroupsTagsEnabledSwitch","valueGroupsTagsTagsQueryInput","valueGroupsTagsTagsValuesQueryInput","ConstantVariable","constantOptionsQueryInput","constantOptionsQueryInputV2","DatasourceVariable","datasourceSelect","nameFilter","TextBoxVariable","textBoxOptionsQueryInput","textBoxOptionsQueryInputV2","CustomVariable","customValueInput","optionsOpenButton","IntervalVariable","intervalsValueInput","autoEnabledCheckbox","stepCountIntervalSelect","minIntervalInput","GroupByVariable","dataSourceSelect","infoText","modeToggle","AdHocFiltersVariable","SwitchVariable","valuePairTypeSelect","enabledValueInput","disabledValueInput","StaticOptionsEditor","addButton","labelInput","valueInput","moveButton","row","marker","Rows","Repeated","ConfigSection","warningMessage","Dashboards","dashboards","toggleView","SaveDashboardAsModal","newName","save","SaveDashboardModal","saveVariables","saveTimerange","saveRefresh","variablesWarningAlert","SharePanelModal","linkToRenderedImage","ShareDashboardModal","PublicDashboard","WillBePublicCheckbox","LimitedDSCheckbox","CostIncreaseCheckbox","PauseSwitch","EnableAnnotationsSwitch","CreateButton","DeleteButton","CopyUrlInput","CopyUrlButton","SettingsDropdown","TemplateVariablesWarningAlert","UnsupportedDataSourcesWarningAlert","NoUpsertPermissionsWarningAlert","EnableTimeRangeSwitch","EmailSharingConfiguration","ShareType","EmailSharingInput","EmailSharingInviteButton","EmailSharingList","DeleteEmail","ReshareLink","SnapshotScene","PublishSnapshot","ShareDashboardDrawer","ShareInternally","lockTimeRangeSwitch","shortenUrlSwitch","copyUrlButton","SharePanel","widthInput","heightInput","scaleFactorInput","generateImageButton","downloadImageButton","ShareExternally","publicAlert","emailSharingAlert","shareTypeSelect","Creation","PublicShare","createButton","cancelButton","EmailShare","willBePublicCheckbox","enableTimeRangeSwitch","enableAnnotationsSwitch","revokeAccessButton","toggleAccessButton","ShareSnapshot","publishSnapshot","ExportDashboardDrawer","ExportAsJson","codeEditor","exportExternallyToggle","saveToFileButton","copyToClipboardButton","page","NotAvailable","pausedDescription","PublicDashboardScene","loadingPage","controls","RequestViewAccess","recipientInput","PublicDashboardConfirmAccess","Explore","graph","scrollView","addFromQueryLibrary","SoloPanel","PluginsList","listItem","signatureErrorNotice","PluginPage","signatureInfo","disabledInfo","PlaylistForm","interval","itemDelete","BrowseDashboards","checkbox","NewFolderForm","nameInput","SearchDashboards","FolderView","PublicDashboards","ListItem","linkButton","configButton","trashcanButton","pauseSwitch","UserListPage","tabs","allUsers","orgUsers","anonUserDevices","publicDashboardsUsers","users","org","admin","publicDashboards","UserListAdminPage","UsersListPage","UserAnonListPage","UsersListPublicDashboardsPage","DashboardsListModal","ProfilePage","Plugin","pluginId","MigrateToCloud","components","SupportingQueryType","LokiVariableQueryType","InlineBlock","isInlineBlock","isForbiddenToken","COMMENT","_includes","_Indentation","_InlineBlock","_Params","trimSpacesEnd","Formatter","indentation","inlineBlock","previousReservedWord","tokenize","getFormattedQueryFromTokens","formattedQuery","formatLineComment","formatBlockComment","formatTopLevelReservedWord","formatTopLevelReservedWordNoIndent","formatNewlineReservedWord","formatWithSpaces","formatOpeningParentheses","formatClosingParentheses","formatPlaceholder","formatComma","formatWithSpaceAfter","formatWithoutSpaces","formatQuerySeparator","addNewline","indentComment","getIndent","decreaseTopLevel","equalizeWhitespace","formatReservedWord","increaseTopLevel","preserveWhitespaceFor","uppercase","beginIfPossible","isActive","increaseBlockLevel","decreaseBlockLevel","resetIndentation","repeat","linesBetweenQueries","endsWith","COMPARATOR","Params","N1qlFormatter","overArg","looseOption","freeze","emptyOpts","baseFindIndex","baseIsNaN","strictIndexOf","typedArrayTags","symbolProto","symbolToString","baseRepeat","isIterateeCall","freeSelf","self","randomUUID","crypto","bind","getRandomValues","rnds8","buf","rnds","random","rng","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","o","chunkId","all","promises","u","globalThis","window","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","head","appendChild","nmd","paths","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","lastIndexOf","DEFAULT_EXAMPLES","PREFERRED_LABELS","LOGQL_EXAMPLES","expression","UnthemedLokiCheatSheet","PureComponent","componentDidMount","scheduleUserLabelChecking","reportInteraction","componentWillUnmount","userLabelTimer","checkUserLabels","renderExpression","onClickExample","theme","styles","getStyles","className","cheatSheetExample","onClick","render","userExamples","hasUserExamples","div","h2","cheatSheetItem","cheatSheetItemTitle","example","TextLink","href","provider","started","getLabelKeys","preferredLabel","fetchLabelValues","shuffle","withTheme2","css","margin","spacing","fontSize","typography","h3","textAlign","border","background","display","usePrevious","useRef","useEffect","EditorHeader","useStyles2","flexWrap","alignItems","gap","minHeight","EditorStack","wrapItems","_b","windowObject","cancelFrame","requestFrame","clearTimeoutFn","setTimeoutFn","cancelAnimationFrameFn","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","requestAnimationFrameFn","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","callback","animationFrameID","timeoutID","Component","QueryHeaderSwitch","inputProps","dashedLabel","switchIdRef","uniqueId","htmlFor","switchLabel","Switch","color","colors","secondary","bodySmall","primary","FlexItem","grow","shrink","style","flexGrow","flexShrink","editorModes","Builder","Code","QueryEditorModeToggle","RadioButtonGroup","EditorRows","_extends","_assertThisInitialized","ReferenceError","_setPrototypeOf","setPrototypeOf","_inheritsLoose","safeIsNaN","areInputsEqual","newInputs","lastInputs","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","requestTimeout","delay","tick","getScrollbarSize","recalculate","width","height","overflow","offsetWidth","clientWidth","cachedRTLResult","getRTLOffsetType","outerDiv","outerStyle","innerDiv","innerStyle","scrollLeft","defaultItemKey$1","createListComponent","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_PureComponent","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","onItemsRendered","_callOnScroll","onScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","_getItemStyleCache","_offset","isHorizontal","isRtl","offsetHorizontal","__","___","_onScrollHorizontal","_event$currentTarget","currentTarget","scrollWidth","prevState","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","clientHeight","scrollHeight","scrollTop","_outerRefSetter","outerRef","_resetIsScrolling","getDerivedStateFromProps","nextProps","validateSharedProps$1","_proto","scrollTo","scrollToItem","align","_this$props2","itemCount","scrollbarSize","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","_this$props5","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","stopIndex","_index","estimatedTotalSize","WebkitOverflowScrolling","willChange","pointerEvents","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","FixedSizeList","_ref4","instanceProps","lastItemOffset","maxOffset","minOffset","middleOffset","round","_ref5","_ref6","numVisibleItems","_ref7","MAX_LABEL_COUNT","MAX_VALUE_COUNT","MAX_AUTO_SELECT","EMPTY_SELECTOR","collator","Intl","Collator","sensitivity","buildSelector","selectedLabels","selected","selectedValues","UnthemedLokiLabelBrowser","React","updateLabelState","updatedFields","cb","validationStatus","autoSelect","lastUsedLabels","then","rawLabels","fetchValues","doFacettingForLabel","storeLastUsedLabels","doFacetting","rawValues","fetchSeries","lastFacetted","possibleLabels","fetchSeriesLabels","possibleValues","existingValues","facets","hidden","facetLabels","streams","searchTerm","LoadingPlaceholder","backgroundColor","wrapperPadding","padding","marginTop","maxHeight","footerSectionStyles","bottom","fontFamily","fontFamilyMonospace","marginBottom","whiteSpace","textOverflow","transitions","handleMotion","transition","opacity","statusShowing","valueList","marginRight","resize","valueListWrapper","borderLeft","medium","valueListArea","valueTitle","marginLeft","maxContrast","searchResults","highlightParts","fuzzyMatchResult","fuzzyMatch","order","distance","Infinity","Label","LokiLabel","onClickLabel","Input","onChangeSearch","aria-label","role","onClickValue","pre","span","Button","onClickRunLogsQuery","variant","onClickRunMetricsQuery","onClickValidate","onClickClear","app","closeType","deleteLastUsedLabels","nextValue","LokiLabelBrowser","LabelBrowserModal","isOpen","onClose","labelsLoaded","setLabelsLoaded","hasLogLabels","setHasLogLabels","changeQuery","onRunQuery","nextQuery","Modal","onDismiss","modal","LocalStorageValueProvider","storageKey","defaultValue","onLastUsedLabelsSave","onLastUsedLabelsDelete","breakpoints","down","NOTHING","DRAFTABLE","DRAFT_STATE","die","getPrototypeOf","isDraftable","isMap","isSet","objectCtorString","proto","each","iter","getArchtype","Reflect","ownKeys","entry","thing","type_","propOrOldValue","latest","copy_","base_","shallowCopy","isPlain","descriptors","getOwnPropertyDescriptors","desc","deep","isFrozen","defineProperties","dontMutateFrozenCollections","currentScope","plugins","getPlugin","pluginKey","plugin","getCurrentScope","usePatchesInScope","patchListener","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","revokeDraft","parent_","enterScope","immer2","immer_","canAutoFreeze_","unfinalizedDrafts_","draft","revoke_","revoked_","processResult","baseDraft","modified_","finalize","maybeFreeze","generateReplacementPatches_","rootScope","path","childValue","finalizeProperty","scope_","finalized_","resultEach","isSet2","generatePatches_","parentState","targetObject","rootPath","targetIsSet","res","assigned_","autoFreeze_","objectTraps","getDescriptorFromProto","draft_","readPropFromProto","prepareCopy","createProxy","current2","currentState","y","markChanged","deleteProperty","getOwnPropertyDescriptor","owner","arrayTraps","useStrictShallowCopy_","proxyMap_","proxySet_","isManual_","traps","revoke","proxy","Proxy","revocable","createProxyProxy","currentImpl","immer","produce","recipe","defaultBase","base2","hasError","produceWithPatches","patches","inversePatches","autoFreeze","setAutoFreeze","useStrictShallowCopy","setUseStrictShallowCopy","createDraft","finishDraft","applyPatches","applyPatchesImpl","applyPatches_","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","createAction","prepareAction","actionCreator","prepared","formatProdErrorMessage","payload","meta","isAction","species","freezeDraftable","getOrInsertComputed","compute","executeReducerBuilderCallback","builderCallback","actionsMap","actionMatchers","defaultCaseReducer","addCase","typeOrActionCreator","reducer","addAsyncThunk","asyncThunk","reducers","pending","rejected","fulfilled","settled","addMatcher","addDefaultCase","asyncThunkSymbol","getType","actionKey","buildCreateSlice","creators","cAT","reducerPath","payloadCreator","_reducerDefinitionType","withTypes","caseReducer","preparedReducer","prepare","buildReducerCreators","reducerNames","sliceCaseReducersByName","sliceCaseReducersByType","actionCreators","sliceMatchers","contextMethods","reducer2","exposeAction","name2","exposeCaseReducer","buildReducer","extraReducers","finalCaseReducers","initialState","mapOrBuilderCallback","getInitialState","finalActionMatchers","finalDefaultCaseReducer","frozenInitialState","caseReducers","cr","previousState","createReducer","sM","reducerName","reducerDefinition","reducerDetails","createNotation","isAsyncThunkSliceReducerDefinition","maybeReducerWithPrepare","prepareCallback","isCaseReducerWithPrepareDefinition","handleNormalReducerDefinition","thunk","noop","handleThunkCaseReducerDefinition","selectSelf","injectedSelectorCache","injectedStateCache","_reducer","makeSelectorProps","reducerPath2","injected","selectSlice","sliceState","getSelectors","selectState","selectorCache","wrapSelector","injectInto","injectable","pathOpt","newReducerPath","inject","rootState","unwrapped","createSlice","EditorRow","borderRadius","shape","radius","EditorField","tooltipInteractive","fieldProps","childInputId","ReactUtils","getChildId","labelEl","placement","interactive","Icon","tabIndex","Space","Field","fontWeight","fontWeightMedium","fontStyle","EditorFieldGroup","EditorList","renderItem","newItem","itemIndex","newItems","onChangeItem","onDeleteItem","InputGroup","modifiedChildren","Children","isValidElement","invalid","cloneElement","invalidChild","borderPriority","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","zIndex","AccessoryButton","getButtonStyles","paddingLeft","paddingRight","LabelFilterItem","defaultOp","onDelete","onGetLabelNames","onGetLabelValues","invalidLabel","invalidValue","multiValueSeparator","labelNamesMenuOpen","setLabelNamesMenuOpen","labelValuesMenuOpen","setLabelValuesMenuOpen","isMultiSelect","_a2","operators","getSelectOptionsFromString","item2","isConflicting","newLabel","conflict","isConflictingLabelFilter","v4","InlineField","async","isLoadingLabelNames","labelNames","onCloseMenu","change","isLoadingLabelValues","isMulti","selectedOptions","uniqBy","getOptions","changes","change2","labelsFilters","labelFilterRequired","setItems","hasLabelFilter","newLabels","OperationExplainedBox","stepNumber","markdown","box","boxInner","dangerouslySetInnerHTML","__html","renderMarkdown","circle","justifyContent","paddingBottom","textDecoration","RawQuery","useTheme2","highlighted","grammar","editorField","textUtil","sanitize","OperationsEditorRow","useMemoOne","getResult","inputs","initial","isFirstRun","committed","useMemo","useCallback","getRect","center","expandBy","shrinkBy","noSpacing","createBox","borderBox","_ref2$margin","_ref2$border","_ref2$padding","marginBox","paddingBox","contentBox","invariant","shiftBy","shifted","withScroll","scroll","pageXOffset","pageYOffset","calculateBox","paddingTop","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","getBox","el","getBoundingClientRect","getComputedStyle","memoized","frameId","wrapperFn","_len","_key","log","noop$2","bindEvents","bindings","sharedOptions","unbindings","shared","fromBinding","addEventListener","eventName","removeEventListener","unbind","prefix$1","RbdInvariant","ErrorBoundary","callbacks","onWindowError","getCallbacks","isDragging","tryAbort","preventDefault","setCallbacks","componentDidCatch","withLocation","destination","isInHomeList","droppableId","startPosition","endPosition","withCombine","combine","draggableId","returnedToStart","preset","dragHandleUsageInstructions","onDragStart","onDragUpdate","update","onDragEnd","reason","origin","point1","point2","subtract","isEqual$1","negate","point","otherValue","sqrt","closest$1","points","offsetByPosition","getCorners","clip","shouldClipSubject","subject","executeClip","pageMarginBox","getSubject","withPlaceholder","axis","scrolled","displacement","scroll$1","increased","increasedBy","increase","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","toDroppableMap","droppables","previous","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","draggable","tryGetDestination","impact","at","tryGetCombine","removeDraggableFromList","remove","isHomeOf","noDisplacedBy","emptyGroups","invisible","visible","noImpact","displaced","displacedBy","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","crossAxisLine","crossAxisStart","crossAxisEnd","crossAxisSize","horizontal","isVisible$1","toBeDisplaced","viewport","withDroppableDisplacement","isVisibleThroughFrameFn","displacedTarget","getDroppableDisplaced","isVisibleInDroppable","isVisibleInViewport","isTotallyVisible","getDisplacementGroups","afterDragging","forceShouldAnimate","getTarget","shouldAnimate","getShouldAnimate","goAtEnd","insideDestination","inHomeList","newIndex","indexOfLastItem","getIndexOfLastItem","calculateReorderImpact","withoutDragging","sliceFrom","didStartAfterCritical","afterCritical","effected","moveToNextIndex","isMovingForward","previousImpact","wasAt","currentIndex","proposedIndex","firstIndex","fromReorder","isCombineEnabled","combineId","combineWithIndex","fromCombine","whenCombining","combineWith","displaceBy","isDisplaced","getCombinedItemDisplacement","distanceFromStartToBorderBoxCenter","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","distanceFromEndToBorderBoxCenter","whenReordering","draggablePage","moveInto","goIntoStart","closestAfter","closest","withDisplacement","getPageBorderBoxCenterFromImpact","withoutDisplacement","getResultWithoutDroppableDisplacement","scrollViewport","getDraggables$1","ids","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","withViewportDisplacement","client","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","onlyOnMainAxis","changeNeeded","isTotallyVisibleOnAxis","moveToNextPlace","previousPageBorderBoxCenter","previousClientSelection","isEnabled","getImpact","closestId","withoutDraggable","indexOfClosest","moveToNextCombine","clientSelection","scrollJumpRequest","cautious","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","withDroppableScroll","tryGetVisible","speculativelyIncrease","getKnownActive","rect","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getDisplacedBy","withMaxScroll","addPlaceholder","placeholderSize","requiredGrowth","availableSpace","needsToGrowBy","dimension","getRequiredGrowthForPlaceholder","added","oldFrameMaxScroll","maxScroll","newFrame","moveCrossAxis","isOver","isBetweenSourceClipped","candidates","activeOfTarget","isBetweenDestinationClipped","isWithinDroppable","getBestCrossAxisDroppable","distanceToA","distanceToB","getClosestDraggable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","moveToNewDroppable","whatIsDraggedOver","moveInDirection","isActuallyOver","getDroppableOver$1","dimensions","isMainAxisMovementAllowed","home","critical","isMovingOnMainAxis","borderBoxCenter","selection","isMovementAllowed","phase","isPositionInFrame","getDroppableOver","pageBorderBox","childCenter","isContained","isStartContained","isEndContained","startCenter","getFurthestAway","offsetRectByPosition","getIsDisplaced","getDragImpact","pageOffset","destinationId","pageBorderBoxWithDroppableScroll","area","targetRect","targetStart","targetEnd","childRect","threshold","didStartAfterCritical$1","getCombineImpact","atIndex","getReorderImpact","patchDroppableMap","updated","clearUnusedPlaceholder","lastDroppable","oldMaxScroll","removePlaceholder","forcedClientSelection","forcedDimensions","forcedViewport","forcedImpact","newImpact","withUpdatedPlaceholders","cleaned","patched","recomputePlaceholders","recompute","getDraggables","getClientBorderBoxCenter","refreshSnap","movementMode","needsVisibilityCheck","getLiftEffect","insideHome","rawIndex","inVirtualList","finish","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","getFrame","droppableScrollChange","moved","offset$1","initialWindowScroll","offsetDraggable","isSnapping","postDroppableChange","isEnabledChanging","patchDimensionMap","removeScrollJumpRequest","idle$2","completed","shouldFlush","isWindowScrollAllowed","isFixedOnPage","onLiftImpact","published","withScrollChange","modified","existing","updatedAdditions","removals","wasOverId","wasOver","draggingState","isWaiting","publishWhileDraggingInVirtual","dropDuration","newHomeClientOffset","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","moveUp","moveDown","moveRight","moveLeft","completeDrop","dropAnimationFinished","curves","combining","timings","outOfTheWay","minDropTime","maxDropTime","outOfTheWayTiming","fluid","snap","timing","transforms","isCombining","translate","dropTimeRange","dropMiddleware","getState","dispatch","dropPending","didDropInsideDroppable","lastImpact","getDropImpact","newClientCenter","getNewHomeClientOffset","distance$1","toFixed","getDropDuration","animateDrop","getScrollListener","onWindowScroll","scheduled","passive","capture","getWindowScrollBinding","scrollListener","store","listener","shouldStop$1","getAsyncMarshal","timerId","execute","flush","shallow","withTimings","getDragStart","responder","announce","getDefaultMessage","willExpire","wasCalled","isExpired","timeoutId","getExpiringAnnounce","responders","getResponders","publisher","asyncMarshal","dragging","beforeCapture","onBeforeCapture","beforeStart","onBeforeDragStart","lastCritical","lastLocation","lastCombine","hasCriticalChanged","isDraggableEqual","isDroppableEqual","isCriticalEqual","hasLocationChanged","hasGroupingChanged","isCombineEqual","abort","getPublisher","dropAnimationFinishMiddleware","dropAnimationFlushOnScrollMiddleware","once","autoScroll","autoScroller","shouldStop","pendingDrop","postActionState","composeEnhancers","compose","dimensionMarshal","focusMarshal","styleMarshal","createStore","applyMiddleware","marshal","dropping","resting","stopPublishing","dimensionMarshalStopper","scrollOptions","shouldPublishImmediately","startPublishing","lift","isWatching","tryRecordFocus","tryRestoreFocusRecorded","tryShiftRecord","getMaxScroll","getDocumentElement","doc","documentElement","getMaxWindowScroll","getInitialPublish","registry","getViewport","windowScroll","getDimensionAndWatchScroll","getDimension","shouldPublishUpdate","getById","createDimensionMarshal","staging","collect","getScrollWhileDragging","publish","createPublisher","subscriber","exists","unsubscribe","subscribe","dragStopped","canStartDrag","scrollWindow","scrollBy","getScrollableDroppables","getBestScrollableDroppable","maybe","getScrollableDroppableOver","defaultAutoScrollerOptions","startFromPercentage","maxScrollAtPercentage","maxPixelScroll","ease","percentage","durationDampening","stopDampeningAt","accelerateAt","getPercentage","startOfRange","endOfRange","distanceToEdge","thresholds","dragStartTime","shouldUseTimeDampening","getAutoScrollerOptions","autoScrollerOptions","startScrollingFrom","maxScrollValueAt","percentageFromStartScrollingFrom","getValueFromDistance","proposedScroll","runTime","betweenAccelerateAtAndStopAtPercentage","dampenValueByTime","getScrollOnAxis","distanceToEdges","getDistanceThresholds","getScroll$1","required","limited","isTooBigVertically","isTooBigHorizontally","adjustForSizeLimits","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","canScrollDroppable","getWindowScrollChange","getDroppableScrollChange","createJumpScroller","scrollDroppableAsMuchAsItCan","getDroppableOverlap","whatTheDroppableCanScroll","scrollWindowAsMuchAsItCan","getWindowOverlap","whatTheWindowCanScroll","droppableRemainder","windowRemainder","moveByOffset","createAutoScroller","fluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","wasScrollNeeded","fakeScrollCallback","createFluidScroller","jumpScroll","dragHandle","contextId","property","useIsomorphicLayoutEffect","useLayoutEffect","getHead","querySelector","createStyleEl","nonce","useStyleMarshal","getSelector","attribute","makeGetSelector","dragHandle$1","grabCursor","always","dropAnimating","userCancel","getStyles$1","alwaysRef","dynamicRef","setDynamicStyle","textContent","setAlwaysStyle","dynamic","querySelectorAll","getWindowFromEl","ownerDocument","defaultView","isHtmlElement","HTMLElement","findDragHandle","possible","handle","createRegistry","subscribers","notify","findDraggableById","findDroppableById","register","unregister","findById","StoreContext","getBodyElement","visuallyHidden","defaults","separator","useUniqueId","AppContext","useDev","useHook","useDevSetupWarning","useStartupValidation","tab","pageUp","pageDown","preventedKeys","preventStandardKeyEvents","keyCode","supportedEventName","idle$1","getCaptureBindings","getPhase","setPhase","clientX","clientY","abs","isSloppyClickThresholdExceeded","fluidLift","shouldBlockNextClick","shouldRespectForcePress","noop$1","scrollJumpKeys","getDraggingBindings","idle","interactiveTagNames","isAnInteractiveElement","tagName","parentElement","isEventInInteractiveElement","getBorderBoxCenterPosition","supportedMatchesName","closestPonyfill","findClosestDragHandleFromEvent","expected","isLockActive","shouldWarn","canStart","lockAPI","isClaimed","tryStart","forceSensorStop","sourceEvent","draggable$1","findDraggable","canDragInteractiveElements","lock","claim","getShouldRespectForcePress","tryDispatchWhenDragging","getAction","cleanup","lift$1","liftActionArgs","move$1","snapLift","defaultSensors","api","phaseRef","unbindEventsRef","startCaptureBinding","defaultPrevented","ctrlKey","metaKey","shiftKey","altKey","findClosestDraggableId","tryGetLock","startPendingDrag","preventForcePressBinding","findOptionsForDraggable","canGetLock","listenForCapture","bindCapturingEvents","preDrag","isCapturing","touch","touches","longPressTimerId","unbindTarget","hasMoved","shouldRespect","getHandleBindings","unbindWindow","getWindowBindings","startDragging","useSensorMarshal","customSensors","enableDefaultSensors","useSensors","abandon","newLock","tryAbandon","tryAbandonLock","forceStop","tryGetClosestDraggableIdFromEvent","tryReleaseLock","isLockClaimed","getStore","lazyRef","App","sensors","lazyStoreRef","lastPropsRef","flushSync","createResponders","createAutoScrollerOptions","getId","useAnnouncer","dragHandleUsageInstructionsId","getElementId","useHiddenTextElement","lazyDispatch","marshalCallbacks","bindActionCreators","useRegistry","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","focus","tryGiveFocus","tryGiveFocusTo","activeElement","redirectTo","record","focused","useFocusMarshal","tryResetStore","getCanLift","getIsMovementAllowed","appContext","canLift","Provider","DragDropContext","zIndexOptions","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isDropAnimating","getStyle$1","mapped","getShouldDraggingAnimate","boxSizing","getDraggingStyle","shouldAnimateDisplacement","useDraggablePublisher","getDraggableRef","computedStyles","getDimension$1","publishedRef","isFirstPublishRef","DroppableContext","useRequiredContext","Context","useContext","preventHtml5Dnd","isStrictEqual","whatIsDraggedOverFromResult","getSecondarySnapshot","combineTargetFor","isClone","dropAnimation","draggingOver","atRest","snapshot","mapDispatchToProps$1","ConnectedDraggable","connect","draggingSelector","memoizedOffset","getMemoizedSnapshot","getMemoizedProps","ownProps","getCombineWithFromResult","curve","scale","getDraggableSelector","secondarySelector","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","getSecondarySelector","areStatePropsEqual","setRef","getRef","dropAnimationFinishedAction","dragHandleProps","onMoveEnd","propertyName","provided","onTransitionEnd","draggableProps","rubric","PrivateDraggable","isUsingCloneFor","PublicDraggable","isDragDisabled","disableInteractiveElementBlocking","isScroll","isAuto","isEither","overflowX","overflowY","getClosestScrollable","isElementScrollable","getScroll","getIsFixed","isDropDisabled","closestScrollable","targetRef","getClient","frameClient","scrollSize","getDroppableDimension","immediate","delayed","getListenerOptions","getClosestScrollableFromDrag","useDroppablePublisher","whileDraggingRef","previousRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","updateScroll","scheduleScrollUpdate","onClosestScroll","getDroppableRef","getEnv","ignoreContainerClipping","removeAttribute","getStyle","isAnimatingOpenOnMount","animate","getSize","Placeholder$1","animateOpenTimerRef","tryClearAnimateOpenTimer","setIsAnimatingOpenOnMount","onSizeChangeEnd","AnimateInOut","isVisible","renderClone","getContainerForClone","attachDefaultPropsToOwnProps","defaultPropKey","mergedProps","isMatchingType","getDraggable","mapDispatchToProps","updateViewportMaxScroll","ConnectedDroppable","idleWithAnimation","shouldAnimatePlaceholder","isDraggingOver","draggingOverWith","draggingFromThisWith","isUsingPlaceholder","useClone","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","ownPropsWithDefaultProps","wasCombining","isHome","stateProps","dispatchProps","droppableRef","placeholderRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","droppableProps","droppableContext","draggableProvided","draggableSnapshot","getClone","ConnectedDroppable$1","useMountedState","mountedRef","getWindow","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","navigator","userAgentData","brands","brand","userAgent","isLayoutViewport","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetHeight","visualViewport","addVisualOffsets","offsetLeft","offsetTop","win","getNodeName","nodeName","getWindowScrollBarX","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","offsets","clientLeft","clientTop","getLayoutRect","getParentNode","assignedSlot","host","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","perspective","contain","getContainingBlock","auto","basePlacements","popper","variationPlacements","modifierPhases","modifiers","visited","modifier","requires","requiresIfExists","dep","depModifier","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","orderedModifiers","modifiersData","elements","attributes","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","merged","orderModifiers","enabled","_ref$options","effect","cleanupFn","noopFn","forceUpdate","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","initialStyles","arrow","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","matched","getOppositeVariationPlacement","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","within","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","_options$scroll","_options$resize","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","check","_loop","fittingPlacement","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","fromEntries","EMPTY_MODIFIERS","useGetLatest","generateBoundingClientRect","toJSON","virtualElement","defaultConfig","closeOnOutsideClick","closeOnTriggerHidden","defaultVisible","delayHide","delayShow","followCursor","mutationObserverOptions","childList","subtree","trigger","usePopperTooltip","popperOptions","_popperProps$state","_popperProps$state$mo","_popperProps$state$mo2","finalConfig","_extends2","finalPopperOptions","_React$useState","triggerRef","setTriggerRef","_React$useState2","tooltipRef","setTooltipRef","_useControlledState","_ref$onChange","getLatest","updater","updatedState","persist","isControlled","useControlledState","onVisibleChange","setVisible","timer","_usePopper","referenceElement","popperElement","prevOptions","optionsWithDefaults","updateStateModifier","newOptions","popperInstanceRef","popperInstance","createPopper","usePopper","popperProps","isTriggeredBy","hideTooltip","showTooltip","toggleTooltip","handleClickOutside","_event$composedPath","_getLatest","composedPath","Node","preventDefaultAndToggle","setMousePosition","observer","MutationObserver","observe","disconnect","getArrowProps","getTooltipProps","OperationInfoButton","show","setShow","fill","docBox","docBoxHeader","docBoxBody","displayName","strong","boxShadow","shadows","z3","maxWidth","h5","signature","dropdown","OperationHeader","onRemove","onToggle","onToggleSwitcher","alternatives","alt","operationHeaderButtons","selectWrapper","newDef","newParams","changedOp","changeTypeHandler","borderBottom","SimpleInputParamEditor","AutoSizeInput","paramDef","onCommitChange","evt","BoolInputParamEditor","Checkbox","checked","SelectInputParamEditor","selectOptions","valueOption","optionalParam","value2","OperationEditorBody","flash","highlight","shouldFlash","keepFlash","setKeepFlash","useFlash","onParamValueChanged","paramIdx","callParamChangedThenOnChange","onAddRestParam","lastParamDef","operationIndex","trimEnd","renderAddRestParamButton","cardHighlight","cardError","Editor","getOperationParamEditor","paramRow","paramName","infoIcon","paramValue","onRemoveRestParam","arrowLine","arrowArrow","cardWrapper","warning","verticalAlign","borderTop","OperationEditor","isConflictingOperation","isInvalid","OperationList","highlightedOp","opsToHighlight","isMounted","prevOperations","newOps","newOp","op1","op2","useOperationsHighlight","cascaderOpen","setCascaderOpen","onOperationChange","addOptions","isLeaf","operationList","Cascader","onSelect","operationDef","onBlur","alwaysOpen","hideActiveLevelLabel","heading","QueryBuilderHints","visualQuery","buildDataQueryFromQueryString","buildQueryStringFromDataQuery","dataQuery","hints2","getQueryHints","series","hint","fix","_c","_d","_b2","_c2","datasourceType","modifyQuery","newVisualQuery","OperationListExplained","onMouseEnter","onMouseLeave","EXPLAIN_LABEL_FILTER_CONTENT","LokiQueryBuilderExplained","memo","lang","nestedQuery","showExplain","vectorMatchWrapper","vectorMatchInput","IconButton","LokiQueryBuilder","flexDirection","NestedQueryList","nestedQueries","onNestedQueryUpdate","TIME_SPAN_TO_TRIGGER_SAMPLES","sampleData","setSampleData","setHighlightedOp","prevQuery","prevTimeRange","withTemplateVariableOptions","optionsPromise","getVariables","updateBasedOnChangedTimeRange","updateBasedOnChangedQuery","lokiQuery","LoadingState","Done","catch","logqlGrammar","data-testid","testIds","forLabel","labelsToConsider","hasEqualityOperation","possibleLabelNames","labelsNamesToConsider","otherOperations","QueryPreview","LokiQueryBuilderContainer","useReducer","stateSlice","exprChanged","visualQueryChange","parseResult","toggleReducer","initialValue","QueryOptionGroup","collapsedInfo","queryStats","toggleOpen","Collapse","collapse","collapsible","featureToggles","lokiQuerySplitting","stats","generateQueryStats","convertUnits","getValueFormat","queryTypeOptions","queryDirections","Backward","Forward","LokiOptionFields","lineLimitValue","runOnBlur","onChangeQueryLimit","maxLines","preprocessMaxLines","onKeyDown","lokiShardSplitting","lokiExperimentalStreaming","LokiQueryBuilderOptions","interpolatedQueries","CoreApp","getDefaultQueryDirection","isValidGrafanaDuration","onQueryDirectionChange","subscription","getAppEvents","LogSortOrderChangeEvent","sortEvent","newDirection","LogsSortOrder","Ascending","interpolateVariablesInQueries","isLogQuery","filteredQueryTypeOptions","isValidStep","getCollapsedInfo","legendFormat","newMaxLines","queryTypeLabel","queryDirection","getQueryDirectionLabel","Descending","lazy","MonacoQueryFieldLazy","Suspense","MonacoQueryFieldWrapper","lastRunValueRef","LokiQueryField","_isMounted","prevProps","ExtraFieldElement","history","onChangeQuery","override","LokiQueryCodeEditor","QueryPattern","onPatternSelect","hasNewQueryOption","hasPreviousQuery","selectedPatternName","setSelectedPatternName","Card","noMargin","Heading","rawQueryContainer","rawQuery","keepOperationCategories","excludeOperationIds","keepOperations","QueryPatternsModal","onAddQuery","openTabs","setOpenTabs","selectAsNewQuery","editorMode","selectedPattern","preSelectedOperationsCount","preSelectedLabelsCount","createNewQuery","patternOperations","patternOp","getNextRefId","patternType","queryEditorModeDefaultLocalStorageKey","getDefaultEditorMode","localStorage","getItem","compareTime","time1","time2","isDateTime","isSame","lokiQueryEditorExplainKey","LokiQueryEditor","useId","parseModalOpen","setParseModalOpen","queryPatternsModalOpen","setQueryPatternsModalOpen","dataIsStale","setDataIsStale","labelBrowserVisible","setLabelBrowserVisible","setQueryStats","setExplain","previousTimeRange","getQueryWithDefaults","previousQueryExpr","previousQueryType","onEditorModeChange","newEditorMode","newEditor","previousEditor","setItem","changeEditorMode","onChangeInternal","shouldUpdate","prevQueryType","shouldUpdateStats","getStats","makeAsyncRequest","confirmText","onConfirm","prevValue","Correlations","Loading","LokiQueryEditorForAlerting","LokiQueryEditorByApp","CloudAlerting","DataSourceDescription","docsLink","hasRequiredFields","rel","GenericConfigSection","isCollapsible","isInitiallyOpen","kind","setIsOpen","iconName","isSubSection","collapsibleButtonAriaLabel","fontWeightRegular","descriptionText","ConnectionSettings","urlPlaceholder","urlTooltip","urlLabel","isValidUrl","labelWidth","useCommonStyles","inlineFieldNoMarginRight","inlineFieldWithSecret","BasicAuth","user","passwordConfigured","userLabel","userTooltip","userPlaceholder","passwordLabel","passwordTooltip","passwordPlaceholder","onUserChange","onPasswordChange","onPasswordReset","lastInlineField","SecretInput","isConfigured","onReset","ConfigSubSection","AuthMethod","AuthMethod2","CrossSiteCredentials","OAuthForward","NoAuth","AuthMethodSettings","selectedMethod","mostCommonMethod","visibleMethods","visibleMethodsFromProps","defaultOptionsOverrides","customMethods","onAuthMethodSelect","basicAuth","authMethodChanged","setAuthMethodChanged","hasSelect","preparedOptions","customOptions","method","preparedDefaultOptions","allOptions","AuthFieldsComponent","component","authMethods","weak","selectedMethodFields","TLSSettingsSection","tooltipText","checkboxContainer","SelfSignedCertificate","certificateConfigured","onCertificateChange","onCertificateReset","tooltips","newEnabled","certificateLabel","SecretTextArea","TLSClientAuth","serverName","clientCertificateConfigured","clientKeyConfigured","onServerNameChange","onClientCertificateChange","onClientKeyChange","onClientCertificateReset","onClientKeyReset","serverNameLabel","keyLabel","SkipTLSVerification","TLSSettings","selfSignedCertificate","TLSClientAuth$1","skipTLSVerification","CustomHeader","headerNameField","headerValueField","removeHeaderBtn","InlineFieldRow","configured","tooltipPlacement","CustomHeaders","headers","headersFromProps","setHeaders","headers2","changed","newHeaders","addHeaderButton","header2","onHeaderChange","onHeaderDelete","Auth","TLS","customHeaders","headerNamePrefix","headerValuePrefix","convertLegacyAuthProps","getSelectedMethod","getOnAuthMethodSelectHandler","getBasicAuthProps","getTLSProps","getCustomHeaders","withCredentials","jsonData","oauthPassThru","basicAuthUser","secureJsonFields","basicAuthPassword","secureJsonData","tlsAuthWithCACert","tlsCACert","certificate","tlsAuth","tlsClientCert","tlsClientKey","clientCertificate","clientKey","tlsSkipVerify","newJsonData","newSecureJsonData","newSecureJsonFields","AdvancedHttpSettings","TagsInput","keepCookies","cookies","ConfigDescriptionLink","feature","AlertingSettings","onOptionsChange","InlineSwitch","DebugSection","derivedFields","debugText","setDebugText","debugFields","matcherRegex","testMatch","getTemplateSrv","__value","makeDebugFields","TextArea","DebugFields","thead","tr","th","tbody","td","nameField","flex","regexField","urlField","urlDisplayLabelField","internalLink","openNewTab","dataSource","nameMatcherField","DerivedField","suggestions","validateName","showInternalLink","setShowInternalLink","datasourceUid","openInNewTab","setOpenInNewTab","targetBlank","previousUid","fieldType","setFieldType","matcherType","handleChange","invalidName","TooltipLabel","DataLinkInput","newValue","urlDisplayLabel","tracing","ds","noDefault","DerivedFields","derivedField","debugSection","showDebug","setShowDebug","newField","newDerivedFields","DataLinkBuiltInVars","valueRaw","VariableOrigin","QuerySettings","onMaxLinedChange","spellCheck","makeJsonUpdater","setMaxLines","setDerivedFields","defaultPerf","warned","PROCESS","emitWarning","msg","AC","AbortController","AS","AbortSignal","onabort","_onabort","aborted","warnACPolyfill","signal","printACPolyfillWarning","LRU_CACHE_IGNORE_AC_WARNING","isPosInt","isFinite","getUintArray","pow","ZeroArray","heap","static","HeapCls","LRUCache","perf","ttl","ttlResolution","ttlAutopurge","updateAgeOnGet","updateAgeOnHas","allowStale","noDisposeOnSet","noUpdateTTL","maxEntrySize","sizeCalculation","noDeleteOnFetchRejection","noDeleteOnStaleGet","allowStaleOnFetchAbort","allowStaleOnFetchRejection","ignoreFetchAbort","unsafeExposeInternals","starts","ttls","sizes","keyMap","keyList","valList","tail","free","isBackgroundFetch","backgroundFetch","moveToTail","indexes","rindexes","isStale","calculatedSize","fetchMethod","memoMethod","dispose","onInsert","disposeAfter","UintArray","getRemainingTTL","unref","cachedNow","getNow","age","remainingTTL","entrySize","totalCalculatedSize","_s","_st","_k","_v","rentries","rkeys","rvalues","iterator","__staleWhileFetching","thisp","rforEach","purgeStale","deleted","remain","dump","load","maxEntrySizeExceeded","oldVal","__abortController","oldValue","dt","task","hasOptions","peekOptions","ac","fetchOpts","updateCache","ignoreAbort","fetchAborted","fetchError","fetchAbortIgnored","fetchResolved","fetchFail","bf","vl","fetchUpdated","allowStaleAborted","noDelete","returnedStale","__returned","fetchDispatched","rej","fmp","fetchRejected","fetch","fetchOptions","forceRefresh","stale","staleVal","forceFetch","memoOptions","vv","fetching","pi","ni","HIDDEN_LABELS","LokiLanguageProvider","LanguageProvider","importFromAbstractQuery","exportToAbstractQuery","flatten","lokiLabelNamesQueryApi","fetchLabelsByLabelsEndpoint","getTimeRangeParams","generateCacheKey","roundTime","nanoseconds","fetchDetectedFields","queryOptions","requestOptions","interpolatedExpr","interpolateString","scopedVars","rangeParams","limit","fetchDetectedFieldValues","fetchDetectedLabelValues","encodeURIComponent","paramCacheKey","cacheKey","detectedFieldValuesCache","labelValuesPromise","detectedLabelValuesPromisesCache","throwError","streamParam","labelsCache","labelsPromisesCache","extractedLabelKeys","structuredMetadataKeys","unwrapLabelKeys","DEFAULT_MAX_LINES_SAMPLE","startedTimeRange","seriesCache","metadataRequest","newRangeParams","prevRangeParams","startTask","interpolatedMatch","extendStatics","__extends","__assign","__values","__read","ar","__spreadArray","pack","SuppressedError","createErrorClass","createImpl","ctorFunc","UnsubscriptionError","_super","arrRemove","Subscription","initialTeardown","closed","_parentage","_finalizers","e_1","e_2","_parentage_1","_parentage_1_1","e_1_1","return","initialFinalizer","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","_hasParent","_addParent","_removeParent","EMPTY","EMPTY_SUBSCRIPTION","isSubscription","onUnhandledError","onStoppedNotification","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","timeoutProvider","handler","delegate","COMPLETE_NOTIFICATION","createNotification","errorContext","isRoot","errorThrown","Subscriber","isStopped","EMPTY_OBSERVER","complete","SafeSubscriber","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","_bind","thisArg","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","context_1","reportUnhandledError","notification","observable","identity","pipeFromArray","fns","Observable","_subscribe","isObserver","_trySubscribe","sink","promiseCtor","getPromiseCtor","pipe","toPromise","ObjectUnsubscribedError","Subject","currentObservers","observers","thrownError","AnonymousSubject","_throwIfClosed","_checkFinalizedStatuses","_innerSubscribe","asObservable","dateTimestampProvider","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","_trimBuffer","adjustedBufferSize","DEFAULT_WEBSOCKET_CONFIG","deserializer","serializer","WebSocketSubject","urlConfigOrSource","_socket","_config","_output","WebSocketCtor","WebSocket","sock","_resetState","multiplex","subMsg","unsubMsg","messageFilter","_connectSocket","protocol","binaryType","socket","readyState","onopen","openObserver","queue","send","closingObserver","onclose","closeObserver","wasClean","onmessage","ROTL","K","H","newBytes","N","W","T","of","uuid","v35","namespace","valueBytes","unescape","stringToBytes","namespaceBytes","v5","DNS","URL","createUid","ts","labelsString","usedUids","uuidv5","newCount","LiveStreams","getStream","retryInterval","CircularDataFrame","capacity","addField","time","preferredVisualisationType","response","tsField","idField","allLabelsString","toISOString","appendResponseToBufferedData","retryWhen","attempts","mergeMap","retryAttempt","useAsync","deps","lastCallId","callId","useAsyncFn","textWrapper","visibility","lineBreak","ui","portal","queryDescription","iconButton","navbarFixed","operationsToggle","IS_LOKI_LOG_CONTEXT_UI_OPEN","LokiContextUi","logContextProvider","updateFilter","origQuery","runContextQuery","contextFilters","setContextFilters","showPreservedFiltersAppliedNotification","setShowPreservedFiltersAppliedNotification","initialized","setInitialized","setLoading","includePipelineOperations","setIncludePipelineOperations","SHOULD_INCLUDE_PIPELINE_OPERATIONS","timerHandle","previousInitialized","previousContextFilters","isInitialState","nonIndexed","queryContainsValidPipelineStages","structuredClone","preservedLabels","removedLabels","selectedExtractedLabels","LOKI_LOG_CONTEXT_PRESERVED_LABELS","initContextFilters","getInitContextFilters","dateTime","timeEpochMs","preservedFiltersApplied","logRowUid","realLabels","realLabelsEnabled","parsedLabels","parsedLabelsEnabled","contextFilterToSelectFilter","contextFilter","showNonIndexedLabels","prepareExpression","elevated","removeItem","Spinner","MultiSelect","closeMenuOnSelect","maxMenuHeight","actionMeta","isClearable","RenderUserContentAsHTML","showLabel","transparent","SortDirection","sortDataFrameByTime","timeField","fieldValues","nanos","isAsc","valA","valB","nanoA","nanoB","makeIndex","vals","LogContextProvider","getQueryAndRange","cacheFilters","LogRowContextQueryDirection","cachedContextFilters","prepareLogRowContextQueryTarget","timeWindowMs","REF_ID_STARTER_LOG_ROW_CONTEXT","FieldCache","dataFrame","getFirstFieldOfType","tsValue","rowIndex","timestamp","toUtc","getLogRowContextUi","applyTemplateVariables","onContextClose","preparedExpression","processContextFiltersToExpr","processPipelineStagesToExpr","getLogRowContextQuery","getLogRowContext","lastValueFrom","makeRequest","catchError","statusText","switchMap","processedFrames","processResults","hasParser","nonIndexedLabels","parsedLabel","currentExpr","newExpr","origExpr","allNodePositions","pipelineStagePositions","otherNodePositions","pipelineStagePosition","isEmpty","rowLabels","allLabels","preservedLabelsString","arePreservedLabelsUsed","newContextFilters","labelNamesRegex","labelValuesRegex","variableOptions","QueryType","LabelNames","LabelValues","LokiVariableQueryEditor","setType","setLabel","labelOptions","setLabelOptions","setStream","previousType","variableQuery","queryBase","migrateVariableQuery","handleBlur","newType","LokiVariableSupport","CustomVariableSupport","metricFindQuery","targets","fieldFromDerivedFieldConfig","derivedFieldConfigs","dataSourceSrv","getDataSourceSrv","dataLinks","derivedFieldConfig","dsSettings","getInstanceSettings","internal","datasourceName","links","makeTableFrames","instantMetricFrames","framesWithRefId","framesByRefId","groupBy","frames","tableTimeField","tableValueField","allLabelNames","flat","labelFields","filterable","valueField","timeArray","makeTableFrame","setFrameMeta","oldMeta","newMeta","processStreamFrame","custom","lokiQueryStatKey","searchWords","derivedFieldsGrouped","newFields","intersectingKey","logMatch","getDerivedFields","processStreamsFrames","queryMap","processMetricRangeFrames","groupFrames","streamsFrames","metricInstantFrames","metricRangeFrames","isMetricFrame","improveError","LokiAnnotationsQueryEditor","queryWithRefId","annotation","onAnnotationChange","titleFormat","tagKeys","textFormat","getFrameKey","DataFrameType","TimeSeriesMulti","combineResponses","currentResponse","newResponse","cloneQueryResponse","currentResponseLabelsMap","currentFrame","dest","destTimeField","destIdField","sourceTimeField","sourceIdField","sourceTimeValues","totalFields","destIdx","resolveIdx","entryExistsInDest","compareEntries","sourceField","findSourceField","getCombinedMetadataStats","notices","getCombinedNotices","mergeFrames","cloneDataFrame","mergedErrors","mergedError","mergedTraceIds","traceIds","replaceResponses","currentFrameIndex","frame1","frame2","frameType1","frameType2","field1","field2","shallowCompare","customType1","frameType","customType2","shouldCombine","LOADING_FRAME_NAME","destField","closestIdx","destIndex","sourceIndex","sameTimestamp","compareNsTimestamps","referenceField","sourceFields","TOTAL_BYTES_STAT","EXEC_TIME_STAT","destStats","sourceStats","stat","destStat","sourceStat","unit","eitherStat","destNotices","sourceNotices","notice","isQueryWithTemplateVariables","isQueryWithChangedResolution","resolution","isQueryWithChangedLineLimit","isQueryWithChangedLegend","shouldNotReportBasedOnRefId","REF_ID_STARTER_ANNOTATION","REF_ID_STARTER_LOG_VOLUME","REF_ID_STARTER_LOG_SAMPLE","REF_ID_DATA_SAMPLES","starter","trackQuery","startTime","extraPayload","totalBytes","byteKey","calculateTotalBytes","grafana_version","buildInfo","editor_mode","has_data","has_error","line_limit","obfuscated_query","query_type","query_vector_type","simultaneously_executed_query_count","simultaneously_hidden_query_count","time_range_from","time_range_to","time_taken","getTime","bytes_processed","is_split","partitionTimeRange","originalTimeRange","stepMs","toDate","endTime","idealRangeDuration","chunkEndTime","chunkStartTime","splitLogsTimeRange","alignedDuration","trunc","splitMetricTimeRange","adjustTargetsFromResponseState","targetFrame","updatedMaxLines","runSplitGroupedQueries","requests","responseKey","queryGroupId","uuidv4","mergedResponse","Streaming","totalRequests","partition","longestPartition","subquerySubscription","retriesMap","retryTimer","runNextRequest","requestN","requestGroup","retrying","nextRequest","nextRequestN","nextRequestGroup","getNextRequestPointers","retry","disableRetry","retries","subRequest","requestId","runQuery","partialResponse","skipPartialUpdates","loadingFrame","arrayToDataFrame","timeEnd","isRegion","dataTopic","DataTopic","updateLoadingFrame","runSplitQuery","nonSplittingQueries","normalQueries","querySupportsSplitting","logQueries","metricQueries","oneDayMs","directionPartitionedLogQueries","resolutionPartition","groupedRequest","intervalMs","stepMsPartition","interval_regex","rangeUtil","intervalToMs","newStep","safeStep","calculateStep","tap","groupedRequests","originalRequest","splittingPayload","split_query_group_count","split_query_largest_partition_size","split_query_total_request_count","split_query_partition_size","trackGroupedQueries","runShardSplitQuery","splittingTargets","nextGroupSize","cycle","nextGroup","groupHasPendingRequests","shardGroup","shardsToQuery","groupShardRequests","maxFactor","constrainGroupSize","currentSize","metaExecutionTime","executionTime","updateGroupSizeFromResponse","shardedQueries","otherQueries","selectorPartition","getInitialGroupSize","groupTargetsByQueryType","splitQueriesByStreamShard","nextCycle","getLiveStreamKey","msgUint8","TextEncoder","encode","hashBuffer","subtle","digest","hashArray","padStart","bootData","orgId","convertToWebSocketUrl","backend","appSubUrl","NS_IN_MS","hideFromInspector","intervalInfo","calculateInterval","timezone","LokiDatasource","DataSourceWithBackend","getSupplementaryRequest","SupplementaryQueryType","LogsVolume","logsVolumeOption","getLogsVolumeDataProvider","LogsSample","logsSampleOption","getLogsSampleDataProvider","getSupportedSupplementaryQueryTypes","getSupplementaryQuery","normalizedQuery","isQuerySuitable","dropErrorExpression","supportingQueryType","logsVolumeRequest","cloneDeep","logsSampleRequest","fixedRequest","scopes","scopeFilters","logQLScope","streamQueries","rangeRaw","streamRequest","merge","maxDelta","maxLength","maxDataPoints","updateFrame","StreamingDataFrame","fromDataFrameJSON","displayNameFormat","defer","getGrafanaLiveSrv","LiveChannelScope","doLokiChannelStream","liveStreaming","runLiveQueryThroughBackend","dataFrames","isDataFrame","executedExpr","executedQuery","transformBackendResult","instanceSettings","logsQueries","subQueries","runLiveQuery","baseUrl","urlUtil","serializeParams","adhocFilters","expandedQueries","addAdHocFilters","templateSrv","interpolateQueryExpr","getQueryDisplayText","abstractQueries","existingKeys","abstractQuery","getResource","statsForAll","chunks","getStatsTimeRange","statsMetadataRequest","showErrorAlert","durations","getQueryStats","interpolatedVariableQuery","parseStringToVariableQuery","processMetricFindQuery","DataSample","Unknown","multi","includeAll","lokiSpecialRegexEscape","lodashMap","toggleQueryFilter","lastPosition","getSupportedQueryModifications","splitKeys","isDataplaneLog","lokiLogsDataplane","DataFrameView","maybeDuplicatedTags","logLine","Line","Time","renderLegendFormat","filterQuery","variables","exprWithAdHoc","hasPipelineErrorFiltering","hasLevel","getDefaultQuery","UnifiedAlerting","supportsAdjustableWindow","liveTarget","createLiveTarget","settingsData","QueryEditor","DataSourcePlugin","setQueryEditor","setConfigEditor","Divider","secureSocksDSProxyEnabled","SecureSocksProxySettings","setQueryEditorHelp","LokiCheatSheet","DashboardLoadedEvent","dashboardId","lokiQueries","pluginJson","instantQueries","rangeQueries","builderModeQueries","codeModeQueries","queriesWithTemplateVariables","queriesWithChangedResolution","queriesWithChangedLineLimit","queriesWithChangedLegend","dashboard_id","org_id","queries_count","logs_queries_count","metric_queries_count","instant_queries_count","range_queries_count","builder_mode_queries_count","code_mode_queries_count","queries_with_template_variables_count","queries_with_changed_resolution_count","queries_with_changed_line_limit_count","queries_with_changed_legend_count"],"sourceRoot":""}
.
Edit
..
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
img
Edit
loki-query-field.js
Edit
loki-query-field.js.map
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit